//***************************************************************************** bool Kwave::MenuItem::specialCommand(const QString &command) { Kwave::Parser parser(command); if (command == _("#checkable")) { // checking/selecting of the item (non-exclusive) setCheckable(true); } else if (parser.command() == _("#exclusive")) { // join to a list of groups QString group = parser.firstParam(); while (group.length()) { if (!m_exclusive_group.length()) { m_exclusive_group = group; joinGroup(group, Kwave::MenuGroup::EXCLUSIVE); } else if (m_exclusive_group != group) { qWarning("menu item '%s' already member of " "exclusive group '%s'", DBG(name()), DBG(m_exclusive_group)); } group = parser.nextParam(); } // make the item checkable setCheckable(true); return true; } else if (command == _("#hidden")) { setVisible(false); } return (Kwave::MenuNode::specialCommand(command)); }
int SocketUDP::openAsReceiver(const string& ip, int port, bool blocking) { int r; _leaveGroup = false; r = _ip.setString(ip); if (r != E_OK) return r; r = open(_family, _type, _protocol); if (r != E_OK) return r; r = bind(port); if (r != E_OK) return r; if (_ip.getType() == IPv4::TYPE_MULTICAST) { r = joinGroup(_ip); if (r != E_OK) return r; _igmpSender.start(_ip); _leaveGroup = true; } r = setblocking(blocking); if (r != E_OK) return r; return E_OK; }
void clientMessageHandle(int client_sock,string message){ vector<string> choppedString; stringChopper(message,choppedString); if (choppedString[0].compare("LIN") == 0){ userLogin(client_sock,choppedString); } else if (choppedString[0].compare("LOU") == 0){ userLogout(client_sock,choppedString); } else if (choppedString[0].compare("REG") == 0){ userRegister(client_sock,choppedString); } else if (choppedString[0].compare("MSG") == 0){ sendMessage(client_sock,choppedString); } else if (choppedString[0].compare("CGR") == 0){ createGroup(client_sock,choppedString); } else if (choppedString[0].compare("JGR") == 0){ joinGroup(client_sock,choppedString); } else if (choppedString[0].compare("LGR") == 0){ leaveGroup(client_sock,choppedString); } else{ errorReply(client_sock,"000","Protocol error!"); } }
bool Discovery::initMulticast(int port) { const char *mcastaddr = "ff02::1"; // "FF01:0:0:0:0:0:0:1"; // all nodes // "FF01::1111"; //const char *mcastaddr = "FF01:0:0:0:0:0:0:1"; //const char *mcastaddr = "FF01::1111"; memset(&m_multicastAddrBind, 0, sizeof(m_multicastAddrBind)); memset(&m_multicastAddrSend, 0, sizeof(m_multicastAddrSend)); if (get_multicast_addrs(mcastaddr, std::to_string(port).c_str(), SOCK_DGRAM, &m_multicastAddrBind, &m_multicastAddrSend) <0) { LOG(logERROR) << "get_addr error:: could not find multicast " << "address=[" << mcastaddr << "] port=[" << port << " ]"; return false; } if (!isMulticast(&m_multicastAddrSend)) { LOG(logERROR) << "This address does not seem a multicast address " << m_multicastAddrSend; return false; } m_socMulticast = socket(m_multicastAddrBind.ss_family, SOCK_DGRAM, 0); if (!socketSetBlocking(m_socMulticast, false)) return false; /*if (bind(m_socMulticast, (struct sockaddr *)&m_multicastAddrBind, sizeof(m_multicastAddrBind)) < 0) { LOG(logERROR) << "bind error on port " << port; return false; } LOG(logDEBUG) << "bound multicast socket to " << m_multicastAddrBind; */ if (joinGroup(m_socMulticast, 0, 8, &m_multicastAddrSend) <0) { LOG(logERROR) << "failed to join multicast group!"; return false; } return true; }
MulticastServer::MulticastServer(char *multicastGroup, in_addr_t sourceMulticastIp, unsigned short port, HashTable *_keyHashtable, KeyHashtableTimeout *_keyHashtableTimeout) : Server(SOCK_DGRAM, IPPROTO_IP, port) { int returnCode; struct in_addr interfaceIp; char delimiter[2]; interfaceIp.s_addr = sourceMulticastIp; multicastServerInitialized = false; returnCode = joinGroup(multicastGroup, &interfaceIp); if (returnCode < 0) { systemLog->sysLog(ERROR, "cannot initialized MulticastServer correctly"); return; } returnCode = setTTL(255); if (returnCode < 0) { systemLog->sysLog(ERROR, "cannot initialized MulticastServer correctly"); return; } delimiter[0] = '\n'; delimiter[1] = '\0'; parser = new Parser(delimiter); if (! parser) { systemLog->sysLog(CRITICAL, "cannot create a Parser object: %s", strerror(errno)); return; } keyHashtable = _keyHashtable; keyHashtableTimeout = _keyHashtableTimeout; /* construct a multicast address structure */ struct sockaddr_in mc_addr; memset(&mc_addr, 0, sizeof(mc_addr)); mc_addr.sin_family = AF_INET; mc_addr.sin_addr.s_addr = inet_addr(multicastGroup); mc_addr.sin_port = htons(port); if (bind(sd, (struct sockaddr*) &mc_addr, sizeof(mc_addr)) == -1) { systemLog->sysLog(ERROR, "cannot bind multicast adress: %s\n", strerror(errno)); return; } multicastServerInitialized = true; return; }
void CreateUdpSocket() { sprintf(bufip,"%d.%d.%d.%d",x1,x2,x3,x4); Multicastip = bufip; udp_server.sin_family=AF_INET; udp_server.sin_addr.s_addr=inet_addr(Multicastip); udp_server.sin_port=htons(px); //getSharedMem(); udp_socket_fd= socket(AF_INET,SOCK_DGRAM,0); if (udp_socket_fd<0) { perror("opening datagram socket"); exit(-1); } reusePort(udp_socket_fd); if ( bind( udp_socket_fd, (SA *) &udp_server, sizeof(udp_server) ) < 0 ) { close(udp_socket_fd); perror("binding name to datagram socket"); exit(-1); } joinGroup(udp_socket_fd, Multicastip); }
int Multicast_send_socket (const char *hostname, const char *listenport, int family, unsigned int wmem_size, struct sockaddr_storage *addr, int *addrlen) { struct addrinfo hints, *res, *ressave; int error, sockfd; if ( !listenport || !hostname ) { fprintf(stderr, "hostname and listen port required!\n"); syslog(LOG_ERR, "hostname and listen port required!\n"); return -1; } memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_family = family; hints.ai_socktype = SOCK_DGRAM; error = getaddrinfo(hostname, listenport, &hints, &res); if ( error ) { fprintf(stderr, "getaddrinfo error:: [%s]\n", gai_strerror(error)); syslog(LOG_ERR, "getaddrinfo error:: [%s]\n", gai_strerror(error)); return -1; } /* Try open socket with each address getaddrinfo returned, until we get a valid listening socket. */ sockfd=-1; ressave = res; while (res) { sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); if ( sockfd < 0 ) { res=res->ai_next; continue; } // we found a valid socket and are done in this loop break; } if ( sockfd < 0 ) { // nothing found - bye bye fprintf(stderr, "Could not create a socket for [%s:%s]\n", hostname, listenport); syslog(LOG_ERR, "Could not create a socket for [%s:%s]\n", hostname, listenport); freeaddrinfo(ressave); return -1; } if ( isMulticast((struct sockaddr_storage *)res->ai_addr) < 0 ) { fprintf(stderr, "Not a multicast address [%s]\n", hostname); syslog(LOG_ERR, "Not a multicast address [%s]\n", hostname); freeaddrinfo(ressave); return -1; } close(sockfd); sockfd = socket(res->ai_family, SOCK_DGRAM, 0); *addrlen = res->ai_addrlen; memcpy(addr, res->ai_addr, res->ai_addrlen); /* ((struct sockaddr_in *)addr)->sin_family=AF_INET; addr.sin_addr.s_addr=inet_addr(HELLO_GROUP); addr.sin_port=htons(HELLO_PORT); */ if (joinGroup(sockfd, 1 , 1, (struct sockaddr_storage *)res->ai_addr) <0) { close(sockfd); freeaddrinfo(ressave); return -1; } freeaddrinfo(ressave); /* message = "hello world\n"; printf("Send %lu bytes, Message: %s\n", strlen(message)+1, message); while (1) { ret = sendto(sockfd,message,strlen(message)+1,0,(struct sockaddr *) addr, *addrlen); if ( ret != strlen(message)+1 ) { perror("sendto"); exit(1); } printf("sleep\n"); sleep(1); } exit(255); */ return sockfd; } /* End of Multicast_send_socket */
int Multicast_receive_socket (const char *hostname, const char *listenport, int family, int sockbuflen ) { struct addrinfo hints, *res, *ressave; socklen_t optlen; int p, error, sockfd; if ( !listenport ) { fprintf(stderr, "listen port required!\n"); syslog(LOG_ERR, "listen port required!\n"); return -1; } memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_family = family; hints.ai_socktype = SOCK_DGRAM; error = getaddrinfo(hostname, listenport, &hints, &res); if ( error ) { fprintf(stderr, "getaddrinfo error:: [%s]\n", gai_strerror(error)); syslog(LOG_ERR, "getaddrinfo error:: [%s]\n", gai_strerror(error)); return -1; } /* Try open socket with each address getaddrinfo returned, until we get a valid listening socket. */ sockfd = -1; ressave = res; while (res) { sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); if ( sockfd < 0 ) { res=res->ai_next; continue; } // we found a valid socket and are done in this loop break; } if ( sockfd < 0 ) { // nothing found - bye bye fprintf(stderr, "Could not create a socket for [%s:%s]\n", hostname, listenport); syslog(LOG_ERR, "Could not create a socket for [%s:%s]\n", hostname, listenport); freeaddrinfo(ressave); return -1; } if ( isMulticast((struct sockaddr_storage *)res->ai_addr) < 0 ) { fprintf(stderr, "Not a multicast address [%s]\n", hostname); syslog(LOG_ERR, "Not a multicast address [%s]\n", hostname); freeaddrinfo(ressave); return -1; } close(sockfd); sockfd = socket(res->ai_family, SOCK_DGRAM, 0); if (bind(sockfd, res->ai_addr, res->ai_addrlen) < 0) { fprintf(stderr, "bind: %s\n", strerror (errno)); syslog(LOG_ERR, "bind: %s\n", strerror (errno)); close(sockfd); freeaddrinfo(ressave); return -1; } if (joinGroup(sockfd, 1 , 1, (struct sockaddr_storage *)res->ai_addr) <0) { close(sockfd); freeaddrinfo(ressave); return -1; } if ( res->ai_family == AF_INET ) syslog(LOG_DEBUG, "Joined IPv4 multicast group: %s Port: %s", hostname, listenport); if ( res->ai_family == AF_INET6 ) syslog(LOG_DEBUG, "Joined IPv6 multicat group: %s Port: %s", hostname, listenport); freeaddrinfo(ressave); if ( sockbuflen ) { if ( sockbuflen < Min_SOCKBUFF_LEN ) { sockbuflen = Min_SOCKBUFF_LEN; syslog(LOG_INFO,"I want at least %i bytes as socket buffer", sockbuflen); } optlen = sizeof(p); getsockopt(sockfd,SOL_SOCKET,SO_RCVBUF,&p,&optlen); syslog(LOG_INFO,"Standard setsockopt, SO_RCVBUF is %i Requested length is %i bytes",p, sockbuflen); if ((setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &sockbuflen, sizeof(sockbuflen)) != 0) ) { fprintf (stderr, "setsockopt(SO_RCVBUF,%d): %s\n", sockbuflen, strerror (errno)); syslog (LOG_ERR, "setsockopt(SO_RCVBUF,%d): %s", sockbuflen, strerror (errno)); close(sockfd); return -1; } else { getsockopt(sockfd,SOL_SOCKET,SO_RCVBUF,&p,&optlen); syslog(LOG_INFO,"System set setsockopt, SO_RCVBUF to %d bytes", p); } } return sockfd; } /* End of Multicast_receive_socket */
void MulticastSocket::joinGroup(const IPAddress& groupAddress) { NetworkInterface intf; joinGroup(groupAddress, intf); }
main(int argc, char *argv[]) { //checking the arguments if (argc != 4 || argc == 2 ) { printf("Usage: ChatClient <shost> <sport> <u/m>\n"); printf("e.g.: ChatClient atria 10123 u \n"); exit(1); } if ( (hp = gethostbyname(argv[1])) == NULL ) { addr.sin_addr.s_addr = inet_addr(argv[1]); if ((hp = gethostbyaddr((char *) &addr.sin_addr.s_addr, sizeof(addr.sin_addr.s_addr),AF_INET)) == NULL) { fprintf(stderr, "Can't find host %s\n", argv[1]); exit(-1); } } printf("\n>> UMChatServer :\t %s\n", hp->h_name); bcopy ( hp->h_addr, &(server.sin_addr), hp->h_length); printf(">> UMChatServer IP:\t %s \n", inet_ntoa(server.sin_addr)); server.sin_family = AF_INET; server.sin_port = htons(atoi(argv[2])); sd = socket (AF_INET,SOCK_STREAM,0); if ( connect(sd, (SA *) &server, sizeof(server)) < 0 ) { close(sd); perror("connecting to server socket"); exit(0); } length = sizeof(client); if ( getsockname (sd, (SA *)&client,&length) ) { perror("getting socket name"); exit(0); } TCPPort = ntohs(client.sin_port); userName=getlogin(); if(strcmp(argv[3],"m" )== 0) { //send logic char octet='0'; sprintf(buf, "%c", octet); sprintf(userBuf, "%s", userName); if (send(sd,userBuf, sizeof(userBuf), 0) <0 ) perror("sending user name"); usleep(1000); if (send(sd,buf , sizeof(buf), 0) <0 ) perror("sending MIP message"); } if(strcmp(argv[3],"u" )== 0) { //send logic char octet='1'; sprintf(buf, "%c", octet); sprintf(userBuf, "%s", userName); if (send(sd,userBuf, sizeof(userBuf), 0) <0 ) perror("sending user name"); usleep(1000); if (send(sd,buf , sizeof(buf), 0) <0 ) perror("sending MIP message"); } printf(">> ChatClient TCP Port:\t %d\n", TCPPort); //multicast if(strcmp(argv[3],"m" )== 0) { if( (rc=recv(sd, MIP, sizeof(MIP), 0)) < 0){ perror("receiving MIP message"); exit(-1); } if (rc > 0){ MIP[rc]='\0'; printf(">> MCAST IP:\t %s", MIP); } if( (rc=recv(sd, MPort, sizeof(MPort), 0)) < 0){ perror("receiving MPort message"); exit(-1); } if (rc > 0){ MPort[rc]='\0'; printf(">> MCAST Port:\t %s\n", MPort); } if( (rc=recv(sd, listNumber, sizeof(listNumber), 0)) < 0){ perror("receiving list message"); exit(-1); } if (rc > 0){ listNumber[rc]='\0'; printf(">> LIST Code:\t %s\n", listNumber); } if( (rc=recv(sd, exitNumber, sizeof(exitNumber), 0)) < 0){ perror("receiving exit message"); exit(-1); } if (rc > 0){ exitNumber[rc]='\0'; printf(">> END Code:\t %s\n", exitNumber); } //multicast MulticastIPAddress = MIP; UDPPort = htons(atoi( MPort ) ); LocalHostR.sin_family = AF_INET; LocalHostR.sin_port = UDPPort; LocalHostR.sin_addr.s_addr = htonl(INADDR_ANY); if ((UDPsocketR = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("can't create UDP socket R: \n"); exit(-1); } reusePort(UDPsocketR); if (bind(UDPsocketR, (SA *) & LocalHostR, sizeof(LocalHostR)) < 0) { printf("error in bind R\n"); exit(-1); } LocalHostS.sin_family = AF_INET; LocalHostS.sin_port = htons(TCPPort); LocalHostS.sin_addr.s_addr = htonl(INADDR_ANY); if ((UDPsocketS = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("can't create UDP socket S: \n"); exit(-1); } if (bind(UDPsocketS, (SA *) & LocalHostS, sizeof(LocalHostS)) < 0) { printf("error in bind S\n"); exit(-1); } TimeToLive = 2; setTTLvalue(UDPsocketR, &TimeToLive); loop = 1; /* enable loopback */ setLoopback(UDPsocketR, loop); joinGroup(UDPsocketR, MIP); signal( SIGQUIT, QUIThandler ); if (fork() == 0) sendMessage(0, UDPsocketS); getMessage(UDPsocketR, 1); } //unicast if(strcmp(argv[3],"u" )== 0) { if( (rc=recv(sd, MPort, sizeof(MPort), 0)) < 0){ perror("receiving MPort message"); exit(-1); } if (rc > 0){ MPort[rc]='\0'; printf(">> MCAST Port:\t %s\n", MPort); } if( (rc=recv(sd, listNumber, sizeof(listNumber), 0)) < 0){ perror("receiving list message"); exit(-1); } if (rc > 0){ listNumber[rc]='\0'; printf(">> LIST Code:\t %s\n", listNumber); } if( (rc=recv(sd, exitNumber, sizeof(exitNumber), 0)) < 0){ perror("receiving exit message"); exit(-1); } if (rc > 0){ exitNumber[rc]='\0'; printf(">> END Code:\t %s\n", exitNumber); } //creates udp socket UDPPort = htons(atoi( MPort ) ); LocalHostS.sin_family = AF_INET; LocalHostS.sin_port =UDPPort; LocalHostS.sin_addr.s_addr = htonl(INADDR_ANY); if ((UDPsocketS = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("can't create UDP socket S: \n"); exit(-1); } if (bind(UDPsocketS, (SA *) & LocalHostS, sizeof(LocalHostS)) < 0) { printf("error in bind S\n"); exit(-1); } if (fork() == 0) sendMessage(0, UDPsocketS); getMessage(UDPsocketS, 1); } }
void GroupManager::inviteToGroup(CreatureObject* leader, CreatureObject* target) { // Pre: leader locked // Post: player invited to leader's group, leader locked Locker clocker(target, leader); if (target == leader) { leader->sendSystemMessage("@group:invite_no_target_self"); return; } if (leader->isGrouped()) { ManagedReference<GroupObject*> group = leader->getGroup(); if (playerIsInvitingOwnPet(leader, target)) { if (!target->isInRange(leader, 120)) { return; } } else if (group->getLeader() != leader) { leader->sendSystemMessage("@group:must_be_leader"); return; } // can't invite if the group is full if (group->getGroupSize() >= 20) { leader->sendSystemMessage("@group:full"); return; } } if (target->isGrouped()) { StringIdChatParameter stringId; stringId.setStringId("group", "already_grouped"); stringId.setTT(target); leader->sendSystemMessage(stringId); //leader->sendSystemMessage("group", "already_grouped", player->getObjectID()); return; } if (target->getGroupInviterID() == leader->getObjectID()) { StringIdChatParameter stringId; stringId.setStringId("group", "considering_your_group"); stringId.setTT(target); leader->sendSystemMessage(stringId); //leader->sendSystemMessage("group", "considering_your_group", player->getObjectID()); return; } else if (target->getGroupInviterID() != 0) { StringIdChatParameter stringId; stringId.setStringId("group", "considering_other_group"); // %TT is considering joining another group. stringId.setTT(target); leader->sendSystemMessage(stringId); return; } target->updateGroupInviterID(leader->getObjectID()); StringIdChatParameter stringId; stringId.setStringId("group", "invite_leader"); stringId.setTT(target->getDisplayedName()); leader->sendSystemMessage(stringId); if (target->isPlayerCreature()) { stringId.setStringId("group", "invite_target"); stringId.setTT(leader->getDisplayedName()); target->sendSystemMessage(stringId); } else if (target->isPet()) { unsigned long long ownerId = target->getCreatureLinkID(); ManagedReference<CreatureObject*> owner = target->getZoneServer()->getObject(ownerId).castTo<CreatureObject*>(); if (owner != NULL && owner != leader) owner->sendSystemMessage("@pet/pet_menu:pet_invited"); // Your pet has been invited to join your group. joinGroup(target); } }
main(int argc, char *argv[]) { FD_SET(0, &full_fd); if (argc != 4) { printf("Usage: ChatClient <host> <port> <m|u|s>\n"); printf("e.g.: ChatClient atria 10123 u \n"); exit(1); } if ((username = getlogin()) == NULL) perror("Who are you?\n"); if ( (hp = gethostbyname(argv[1])) == NULL ) { addr.sin_addr.s_addr = inet_addr(argv[1]); if ((hp = gethostbyaddr((char *) &addr.sin_addr.s_addr, sizeof(addr.sin_addr.s_addr),AF_INET)) == NULL) { fprintf(stderr, "Can't find host %s\n", argv[1]); exit(-1); } } printf("\n UMChatServer --> %s\n", hp->h_name); bcopy ( hp->h_addr, &(TCPserver.sin_addr), hp->h_length); bcopy ( hp->h_addr, &(UDPserver.sin_addr), hp->h_length); bcopy ( hp->h_addr, &(SCTP_Qserver.sin_addr), hp->h_length); printf(" UMChatServer IP: %s \n", inet_ntoa(TCPserver.sin_addr)); SCTP_Qserver.sin_family = AF_INET; TCPserver.sin_family = AF_INET; UDPserver.sin_family = AF_INET; TCPserver.sin_port = htons(atoi(argv[2])); if (strcmp(argv[3], "s") == 0) TYPE=S; if (strcmp(argv[3], "m") == 0) TYPE=M; if (strcmp(argv[3], "u") == 0) TYPE=U; if (TYPE == S) { SCTPsocket = socket (AF_INET,SOCK_STREAM,IPPROTO_SCTP); if ( connect(SCTPsocket, (SA *) &TCPserver, sizeof(TCPserver)) < 0 ) { close(SCTPsocket); perror("connecting to UMChatServer socket"); exit(0); } if ( send(SCTPsocket, username, strlen(username), 0) < 0) perror("send username message"); length = sizeof(client); if ( getsockname (SCTPsocket, (SA *)&client,&length) ) { perror("getting socket name"); exit(0); } SCTPPort = ntohs(client.sin_port); } else { TCP_socket = socket (AF_INET,SOCK_STREAM,0); if ( connect(TCP_socket, (SA *) &TCPserver, sizeof(TCPserver)) < 0 ) { close(TCP_socket); perror("connecting to UMChatServer socket....."); exit(0); } if ( send(TCP_socket, username, strlen(username), 0) < 0) perror("send username message"); length = sizeof(client); if ( getsockname (TCP_socket, (SA *)&client,&length) ) { perror("getting socket name"); exit(0); } TCPPort = ntohs(client.sin_port); } if (TYPE == M) { if ( send(TCP_socket, MChat, strlen(MChat), 0) < 0) perror("send MChat message"); if( (rc=recv(TCP_socket, MIP, sizeof(MIP), 0)) < 0) perror("receiving MIP message"); if (rc > 0) { MIP[rc]='\0'; printf("THE MCAST IP --> %s", MIP); } } if (TYPE == U) { if ( send(TCP_socket, UChat, strlen(UChat), 0) < 0) perror("send UChat message"); } if (TYPE == S) { if( (rc=recv(SCTPsocket, MPort, sizeof(MPort), 0)) < 0) perror("receiving MPort message 01"); if (rc > 0) { MPort[rc]='\0'; printf(" THE MCAST Port --> %s\n", MPort); } strcat(record,inet_ntoa(SCTP_Qserver.sin_addr)); strcat(record,":"); strcat(record,MPort); sprintf(ServerAddr, "[%s] ", record); UDPPort = htons(atoi( MPort ) ); SCTP_Qserver.sin_port = UDPPort; if( (rc=recv(SCTPsocket, RandomCODE1, sizeof(RandomCODE1), 0)) < 0) perror("receiving RandomCODE1 message"); if (rc > 0){ RandomCODE1[rc]='\0'; printf(" THE LIST Code --> %s\n", RandomCODE1); } if( (rc=recv(SCTPsocket, RandomCODE2, sizeof(RandomCODE2), 0)) < 0) perror("receiving RandomCODE2 message"); if (rc > 0){ RandomCODE2[rc]='\0'; printf("THE END Code --> %s\n\n", RandomCODE2); } } else { if( (rc=recv(TCP_socket, MPort, sizeof(MPort), 0)) < 0) perror("receiving MPort message"); if (rc > 0) { MPort[rc]='\0'; printf(" THE MCAST Port --> %s\n", MPort); } strcat(record,inet_ntoa(UDPserver.sin_addr)); strcat(record,":"); strcat(record,MPort); sprintf(ServerAddr, "[%s] ", record); UDPPort = htons(atoi( MPort ) ); UDPserver.sin_port = UDPPort; if( (rc=recv(TCP_socket, RandomCODE1, sizeof(RandomCODE1), 0)) < 0) perror("receiving RandomCODE1 message"); if (rc > 0){ RandomCODE1[rc]='\0'; printf(" THE LIST Code --> %s\n", RandomCODE1); } if( (rc=recv(TCP_socket, RandomCODE2, sizeof(RandomCODE2), 0)) < 0) perror("receiving RandomCODE2 message"); if (rc > 0){ RandomCODE2[rc]='\0'; printf(" THE END Code --> %s\n\n", RandomCODE2); } } LocalHostUS.sin_family = AF_INET; LocalHostUS.sin_port = htons(TCPPort); LocalHostUS.sin_addr.s_addr = htonl(INADDR_ANY); LocalHostSCTP_Q.sin_family = AF_INET; LocalHostSCTP_Q.sin_port = htons(client.sin_port)+1; LocalHostSCTP_Q.sin_addr.s_addr = htonl(INADDR_ANY); MulticastIPAddress = MIP; UDPPort = htons(atoi( MPort ) ); LocalHostUR.sin_family = AF_INET; LocalHostUR.sin_port = UDPPort; LocalHostUR.sin_addr.s_addr = htonl(INADDR_ANY); GroupAddress.sin_family = AF_INET; GroupAddress.sin_port = UDPPort; GroupAddress.sin_addr.s_addr = inet_addr(MulticastIPAddress); if ((UDPsocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) perror("can't create UDP socket S: \n"); if (bind(UDPsocket, (SA *) & LocalHostUS, sizeof(LocalHostUS)) < 0) printf("error in bind UDP S\n"); FD_SET(UDPsocket, &full_fd); if ((SCTP_Qsocket = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP)) < 0) perror("can't create SCTP-Q socket S: \n"); reusePort(SCTP_Qsocket); if (bind(SCTP_Qsocket, (SA *) & LocalHostSCTP_Q, sizeof(LocalHostSCTP_Q)) < 0) printf("error in bind SCTP_Q S\n"); FD_SET(SCTP_Qsocket, &full_fd); if (TYPE == M) { if ((MCASTsocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) perror("can't create UDP MCASTsocket R: \n"); reusePort(MCASTsocket); if (bind(MCASTsocket, (SA *) & LocalHostUR, sizeof(LocalHostUR)) < 0) perror("error in bind R\n"); joinGroup(MCASTsocket, MIP); FD_SET(MCASTsocket, &full_fd); } TimeToLive = 2; setTTLvalue(UDPsocket, &TimeToLive); loop = 1; setLoopback(UDPsocket, loop); signal( SIGQUIT, QUIThandler ); signal( SIGINT, INThandler); char recvBuf[MAXLINE]; int bytes = 0; if (TYPE == U) { if (sendto(UDPsocket,EchoTest,strlen(EchoTest),0,(SA *)&UDPserver,sizeof(UDPserver)) < 0) perror("error in sendto EchoTest UDPsocket \n"); } if (TYPE == S) { char EchoTest[100]; strcpy(EchoTest,"WELCOME, New SCTP: "); strcat(EchoTest,username); strcat(EchoTest,"\n"); if (sendto(SCTP_Qsocket,EchoTest,strlen(EchoTest),0,(SA *)&SCTP_Qserver,sizeof(SCTP_Qserver)) < 0) perror("error in send to EchoTest SCTP_Qsocket \n"); } if (TYPE == M) { if (sendto(UDPsocket,EchoTest,strlen(EchoTest),0,(SA *)&UDPserver,sizeof(UDPserver)) < 0) perror("error in send to EchoTest UDPsocket \n"); if (sendto(MCASTsocket,EchoTest,strlen(EchoTest),0,(SA *)&UDPserver,sizeof(UDPserver)) < 0) perror("error in send to EchoTest MCASTsocket \n"); if ( (bytes = recvfrom(UDPsocket, recvBuf, MAXLINE, 0, (SA *) &from, &fromlen) ) < 0) perror("error in rec from EchoTest UDPsocket \n"); } sleep(1); selectHandle(); }