void UDPSocket::JoinMulticastGroup(const nsAString& aMulticastGroupAddress, ErrorResult& aRv) { if (mReadyState == SocketReadyState::Closed) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); return; } if (mReadyState == SocketReadyState::Opening) { MulticastCommand joinCommand(MulticastCommand::Join, aMulticastGroupAddress); mPendingMcastCommands.AppendElement(joinCommand); return; } MOZ_ASSERT(mSocket || mSocketChild); NS_ConvertUTF16toUTF8 address(aMulticastGroupAddress); if (mSocket) { MOZ_ASSERT(!mSocketChild); aRv = mSocket->JoinMulticast(address, EmptyCString()); NS_WARN_IF(aRv.Failed()); return; } MOZ_ASSERT(mSocketChild); aRv = mSocketChild->JoinMulticast(address, EmptyCString()); NS_WARN_IF(aRv.Failed()); }
/************************************************************************************************ handleComands() Arguments: myUser - struct with 'my' information saAddr - IP address of the SA saPortChar - port of SA Description: The messages typed by the user in the terminal are handled in this function. The commands permitted are join, leave, find, connect, message, disconnect, exit, lst. *************************************************************************************************/ int handleComands(user myUser, char * saAddr, char * saPortChar){ char command[256]; char * parseCommand; int retval, saPort, i=0; saPort = atoi(saPortChar); /*retrieves comand and stores to string command*/ memset(command, '\0', 256); fgets(command, 256, stdin); for(i = 0; i < 256; i++){ if(command[i] == '\n'){ parseCommand = (char *) malloc((i+2)*sizeof(char)); break; } if(command[i] == ' '){ parseCommand = (char *) malloc((i+2)*sizeof(char)); break; } } if(parseCommand == NULL){ printf("\n>Malloc on ParseCommand not succecefull\n"); fflush(stdout); free(parseCommand); exit(EXIT_FAILURE); } memset(parseCommand, '\0', (i+2)); retval = sscanf(command, "%s", parseCommand); if(retval != 1){ printf("\n>Error parsing command, please retry\n"); free(parseCommand); return 1; } /*Switch Commands*/ /*Join*/ if(strcmp("join", parseCommand) == 0){ if(joinCommand(myUser,saAddr, saPort) < 0){ fprintf(stderr, "Join Error"); free(parseCommand); exit(EXIT_FAILURE); } printf("\n>You have started a session\n"); inSession = 1; } /*Leave*/ else if(strcmp(parseCommand, "leave") == 0){ if(leaveCommand(myUser, saAddr, saPort) < 0){ fprintf(stderr, "\n>Leave Error>"); free(parseCommand); return 0; } terminateLeave(); inSession = 0; } else if(strcmp(parseCommand, "find") == 0){ if(findCommand(command, saAddr, saPort) < 0){ fprintf(stderr, "\n>Leave Error\n"); free(parseCommand); return 0; } } else if(strcmp(parseCommand, "connect") == 0){ if(connectCommand(command, saAddr, saPort) <= 0){ fprintf(stderr, "\n>connect Error\n"); free(parseCommand); return 0; } } else if(strcmp(parseCommand, "message") == 0){ if(chatCommand(command) <= 0){ fprintf(stderr, "\n>message Error\n"); free(parseCommand); return 0; } } else if(strcmp(parseCommand, "disconnect") == 0){ if(disconnectCommand() <= 0){ fprintf(stderr, "\n>disconnect Error\n"); free(parseCommand); return 0; } } /*Exit*/ else if(strcmp(parseCommand, "exit") == 0){ if(exitCommand() <= 0){ fprintf(stderr, "\n>Exit Error>"); free(parseCommand); return 0; } } else if(strcmp(parseCommand, "lst") == 0){ if(lst() < 0){ fprintf(stderr, "\n>lst Error>"); free(parseCommand); return 0; } } free(parseCommand); return 1; }