Exemplo n.º 1
0
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());
}
Exemplo n.º 2
0
/************************************************************************************************
    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;
}