/// Write-only accessor to _destPort.
 /// @param newVal The TCP port between 0 and 65535.
 /// @throw InvalidPort If the port is out of range.
 virtual void setDestPort(const int& newVal) {
     if ( checkValidPort(newVal) ) _destPort = newVal;
     else throw InvalidPort("Bad port number given to devUdp4::setPort");
     _dest_addr.sin_port = htons(newVal);
 }
Example #2
0
int ParseArgument(int argc,char * argv[],std::string& local_addr,std::string& remote_addr,int& local_port,int& remote_port)
{
    int ret = 0;
    int err = 0;
    bool helpflag = false;
    const char* short_opts="hi:p:a:t:";
    const struct option long_opts[] = {
        {"help",no_argument,NULL,'h'},
        {"local_addr",required_argument,NULL,'i'},
        {"local_port",required_argument,NULL,'p'},
        {"remote_addr",required_argument,NULL,'a'},
        {"remote_port",required_argument,NULL,'t'},
        {0,0,0,0}
    };
    std::string temp_local_addr;
    std::string temp_local_port;
    std::string temp_remote_addr;
    std::string temp_remote_port;

    if ( argc < 2 ) {
        helpflag = true;
        err = ERR_LACK_ARGUMENT;
    }

    while ( -1 != ( ret=getopt_long(argc,argv,short_opts,long_opts,NULL))) {
        switch (ret) {
            case 'h':
                helpflag=true;
                break;
            case 'i':
                temp_local_addr = optarg;
                if ( InvalidIP(temp_local_addr) ) {
                    err = ERR_INVALID_IPADDR;
                    std::cerr<<"Invalid ip addr -"<<char(ret)<<" "<<temp_local_addr<<std::endl;
                }
                break;
            case 'p':
                temp_local_port = optarg;
                if ( InvalidPort(temp_local_port) ) {
                    err = ERR_INVALID_PORT;
                    std::cerr<<"Invalid port -"<<char(ret)<<" "<<temp_local_port<<std::endl;
                }
                break;
            case 'a':
                temp_remote_addr = optarg;
                if ( InvalidIP(temp_remote_addr) ) {
                    err = ERR_INVALID_IPADDR;
                    std::cerr<<"Invalid ip addr -"<<char(ret)<<" "<<temp_remote_addr<<std::endl;
                }
                break;
            case 't':
                temp_remote_port = optarg;
                if ( InvalidPort(temp_remote_port) ) {
                    err = ERR_INVALID_PORT;
                    std::cerr<<"Invalid ip addr -"<<char(ret)<<" "<<temp_remote_port<<std::endl;
                }
                break;
            case '?':
                helpflag = true;
                err = ERR_PARSE_ARGUMENT;
                break;
            default:
                helpflag = true;
                err = ERR_UNRECOGNIZED_ARGUMENT;
                break;
        }
    }

    if ( helpflag || 0 != err ) {
        Usage();
    } else {
        local_addr = temp_local_addr;
        remote_addr = temp_remote_addr;
        local_port = StringAsInt(temp_local_port);
        remote_port = StringAsInt(temp_remote_port);
    }

    return err;
}