From c1f96b37a1936cc4a5d1582e9752e155ac69b3d2 Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Sat, 17 Aug 2013 05:31:06 -0400 Subject: [PATCH] Connection: Store the port number as a string Signed-off-by: Anders Kaseorg --- src/examples/ntester.cc | 6 +++--- src/frontend/mosh-client.cc | 5 +---- src/frontend/mosh-server.cc | 2 +- src/frontend/stmclient.cc | 8 ++++---- src/frontend/stmclient.h | 4 ++-- src/network/network.cc | 10 ++++++---- src/network/network.h | 4 ++-- src/network/networktransport.cc | 2 +- src/network/networktransport.h | 4 ++-- 9 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/examples/ntester.cc b/src/examples/ntester.cc index 49ee097..1ca23d3 100644 --- a/src/examples/ntester.cc +++ b/src/examples/ntester.cc @@ -46,7 +46,7 @@ int main( int argc, char *argv[] ) bool server = true; char *key; char *ip; - int port; + char *port; UserStream me, remote; @@ -59,7 +59,7 @@ int main( int argc, char *argv[] ) key = argv[ 1 ]; ip = argv[ 2 ]; - port = atoi( argv[ 3 ] ); + port = argv[ 3 ]; n = new Transport( me, remote, key, ip, port ); } else { @@ -70,7 +70,7 @@ int main( int argc, char *argv[] ) exit( 1 ); } - fprintf( stderr, "Port bound is %d, key is %s\n", n->port(), n->get_key().c_str() ); + fprintf( stderr, "Port bound is %s, key is %s\n", n->port().c_str(), n->get_key().c_str() ); if ( server ) { Select &sel = Select::get_instance(); diff --git a/src/frontend/mosh-client.cc b/src/frontend/mosh-client.cc index 58b94e4..e4f4b48 100644 --- a/src/frontend/mosh-client.cc +++ b/src/frontend/mosh-client.cc @@ -117,7 +117,6 @@ int main( int argc, char *argv[] ) } char *ip, *desired_port; - int port; if ( argc - optind != 2 ) { usage( argv[ 0 ] ); @@ -142,8 +141,6 @@ int main( int argc, char *argv[] ) exit( 1 ); } - port = myatoi( desired_port ); - /* Read key from environment */ char *env_key = getenv( "MOSH_KEY" ); if ( env_key == NULL ) { @@ -170,7 +167,7 @@ int main( int argc, char *argv[] ) set_native_locale(); try { - STMClient client( ip, port, key, predict_mode ); + STMClient client( ip, desired_port, key, predict_mode ); client.init(); try { diff --git a/src/frontend/mosh-server.cc b/src/frontend/mosh-server.cc index f686e60..ee27fea 100644 --- a/src/frontend/mosh-server.cc +++ b/src/frontend/mosh-server.cc @@ -354,7 +354,7 @@ int run_server( const char *desired_ip, const char *desired_port, network->set_verbose(); } - printf( "\nMOSH CONNECT %d %s\n", network->port(), network->get_key().c_str() ); + printf( "\nMOSH CONNECT %s %s\n", network->port().c_str(), network->get_key().c_str() ); fflush( stdout ); /* don't let signals kill us */ diff --git a/src/frontend/stmclient.cc b/src/frontend/stmclient.cc index c2ff2a5..1c12df4 100644 --- a/src/frontend/stmclient.cc +++ b/src/frontend/stmclient.cc @@ -188,7 +188,7 @@ void STMClient::init( void ) escape_key_help = L"Commands: Ctrl-Z suspends, \".\" quits, " + escape_pass_name + L" gives literal " + escape_key_name; } wchar_t tmp[ 128 ]; - swprintf( tmp, 128, L"Nothing received from server on UDP port %d.", port ); + swprintf( tmp, 128, L"Nothing received from server on UDP port %s.", port.c_str() ); connecting_notification = wstring( tmp ); } @@ -209,8 +209,8 @@ void STMClient::shutdown( void ) } if ( still_connecting() ) { - fprintf( stderr, "\nmosh did not make a successful connection to %s:%d.\n", ip.c_str(), port ); - fprintf( stderr, "Please verify that UDP port %d is not firewalled and can reach the server.\n\n", port ); + fprintf( stderr, "\nmosh did not make a successful connection to %s:%s.\n", ip.c_str(), port.c_str() ); + fprintf( stderr, "Please verify that UDP port %s is not firewalled and can reach the server.\n\n", port.c_str() ); fprintf( stderr, "(By default, mosh uses a UDP port between 60000 and 61000. The -p option\nselects a specific UDP port number.)\n" ); } else if ( network ) { if ( !clean_shutdown ) { @@ -247,7 +247,7 @@ void STMClient::main_init( void ) Network::UserStream blank; Terminal::Complete local_terminal( window_size.ws_col, window_size.ws_row ); network = new Network::Transport< Network::UserStream, Terminal::Complete >( blank, local_terminal, - key.c_str(), ip.c_str(), port ); + key.c_str(), ip.c_str(), port.c_str() ); network->set_send_delay( 1 ); /* minimal delay on outgoing keystrokes */ diff --git a/src/frontend/stmclient.h b/src/frontend/stmclient.h index e4bab9b..187b4f5 100644 --- a/src/frontend/stmclient.h +++ b/src/frontend/stmclient.h @@ -45,7 +45,7 @@ class STMClient { private: std::string ip; - int port; + std::string port; std::string key; int escape_key; @@ -83,7 +83,7 @@ private: void resume( void ); /* restore state after SIGCONT */ public: - STMClient( const char *s_ip, int s_port, const char *s_key, const char *predict_mode ) + STMClient( const char *s_ip, const char *s_port, const char *s_key, const char *predict_mode ) : ip( s_ip ), port( s_port ), key( s_key ), escape_key( 0x1E ), escape_pass_key( '^' ), escape_pass_key2( '^' ), escape_requires_lf( false ), escape_key_help( L"?" ), diff --git a/src/network/network.cc b/src/network/network.cc index 2f4e0bf..7c96d91 100644 --- a/src/network/network.cc +++ b/src/network/network.cc @@ -306,7 +306,7 @@ bool Connection::try_bind( int socket, uint32_t addr, int port_low, int port_hig return false; } -Connection::Connection( const char *key_str, const char *ip, int port ) /* client */ +Connection::Connection( const char *key_str, const char *ip, const char *port ) /* client */ : socks(), has_remote_addr( false ), remote_addr(), @@ -332,7 +332,7 @@ Connection::Connection( const char *key_str, const char *ip, int port ) /* clien /* associate socket with remote host and port */ remote_addr.sin_family = AF_INET; - remote_addr.sin_port = htons( port ); + remote_addr.sin_port = htons( myatoi( port ) ); if ( !inet_aton( ip, &remote_addr.sin_addr ) ) { int saved_errno = errno; char buffer[ 2048 ]; @@ -524,7 +524,7 @@ string Connection::recv_one( int sock_to_recv, bool nonblocking ) return p.payload; /* we do return out-of-order or duplicated packets to caller */ } -int Connection::port( void ) const +std::string Connection::port( void ) const { struct sockaddr_in local_addr; socklen_t addrlen = sizeof( local_addr ); @@ -533,7 +533,9 @@ int Connection::port( void ) const throw NetworkException( "getsockname", errno ); } - return ntohs( local_addr.sin_port ); + char buf[ 32 ]; + snprintf( buf, sizeof( buf ), "%d", ntohs( local_addr.sin_port ) ); + return std::string( buf ); } uint64_t Network::timestamp( void ) diff --git a/src/network/network.h b/src/network/network.h index 61efe50..37b1225 100644 --- a/src/network/network.h +++ b/src/network/network.h @@ -161,14 +161,14 @@ namespace Network { public: Connection( const char *desired_ip, const char *desired_port ); /* server */ - Connection( const char *key_str, const char *ip, int port ); /* client */ + Connection( const char *key_str, const char *ip, const char *port ); /* client */ void send( string s ); string recv( void ); const std::vector< int > fds( void ) const; int get_MTU( void ) const { return MTU; } - int port( void ) const; + std::string port( void ) const; string get_key( void ) const { return key.printable_key(); } bool get_has_remote_addr( void ) const { return has_remote_addr; } diff --git a/src/network/networktransport.cc b/src/network/networktransport.cc index 127e80c..0e0bcf2 100644 --- a/src/network/networktransport.cc +++ b/src/network/networktransport.cc @@ -55,7 +55,7 @@ Transport::Transport( MyState &initial_state, RemoteState template Transport::Transport( MyState &initial_state, RemoteState &initial_remote, - const char *key_str, const char *ip, int port ) + const char *key_str, const char *ip, const char *port ) : connection( key_str, ip, port ), sender( &connection, initial_state ), received_states( 1, TimestampedState( timestamp(), 0, initial_remote ) ), diff --git a/src/network/networktransport.h b/src/network/networktransport.h index c23d0bd..5cea434 100644 --- a/src/network/networktransport.h +++ b/src/network/networktransport.h @@ -69,7 +69,7 @@ namespace Network { Transport( MyState &initial_state, RemoteState &initial_remote, const char *desired_ip, const char *desired_port ); Transport( MyState &initial_state, RemoteState &initial_remote, - const char *key_str, const char *ip, int port ); + const char *key_str, const char *ip, const char *port ); /* Send data or an ack if necessary. */ void tick( void ) { sender.tick(); } @@ -94,7 +94,7 @@ namespace Network { /* Other side has requested shutdown and we have sent one ACK */ bool counterparty_shutdown_ack_sent( void ) const { return sender.get_counterparty_shutdown_acknowledged(); } - int port( void ) const { return connection.port(); } + std::string port( void ) const { return connection.port(); } string get_key( void ) const { return connection.get_key(); } MyState &get_current_state( void ) { return sender.get_current_state(); }