From 3edccf1f2e4e58073fc21b82443dce6c9cf9bef6 Mon Sep 17 00:00:00 2001 From: Keith Winstein Date: Thu, 2 Feb 2012 16:48:35 -0500 Subject: [PATCH] Handle crypto exceptions in UI without dying --- network.cpp | 14 +++++++------- stm-server.cpp | 4 +++- stmclient.cpp | 6 +++++- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/network.cpp b/network.cpp index 7de931a..c49b3ff 100644 --- a/network.cpp +++ b/network.cpp @@ -29,7 +29,7 @@ Packet::Packet( string coded_packet, Session *session ) direction = (message.nonce.val() & DIRECTION_MASK) ? TO_CLIENT : TO_SERVER; seq = message.nonce.val() & SEQUENCE_MASK; - assert( message.text.size() >= 2 * sizeof( uint16_t ) ); + dos_assert( message.text.size() >= 2 * sizeof( uint16_t ) ); uint16_t *data = (uint16_t *)message.text.data(); timestamp = be16toh( data[ 0 ] ); @@ -220,13 +220,13 @@ string Connection::recv( void ) } } - /* server auto-adjusts to client */ - if ( server ) { - attached = true; + /* auto-adjust to remote host */ + attached = true; - if ( (remote_addr.sin_addr.s_addr != packet_remote_addr.sin_addr.s_addr) - || (remote_addr.sin_port != packet_remote_addr.sin_port) ) { - remote_addr = packet_remote_addr; + if ( (remote_addr.sin_addr.s_addr != packet_remote_addr.sin_addr.s_addr) + || (remote_addr.sin_port != packet_remote_addr.sin_port) ) { + remote_addr = packet_remote_addr; + if ( server ) { fprintf( stderr, "Server now attached to client at %s:%d\n", inet_ntoa( remote_addr.sin_addr ), ntohs( remote_addr.sin_port ) ); diff --git a/stm-server.cpp b/stm-server.cpp index 4768543..b68f3d3 100644 --- a/stm-server.cpp +++ b/stm-server.cpp @@ -294,8 +294,10 @@ void serve( int host_fd ) network.tick(); } catch ( Network::NetworkException e ) { - fprintf( stderr, "%s: %s\r\n", e.function.c_str(), strerror( e.the_errno ) ); + fprintf( stderr, "%s: %s\n", e.function.c_str(), strerror( e.the_errno ) ); sleep( 1 ); + } catch ( Crypto::CryptoException e ) { + fprintf( stderr, "Crypto exception: %s\n", e.text.c_str() ); } } } diff --git a/stmclient.cpp b/stmclient.cpp index 0d5ae61..4e2a7ef 100644 --- a/stmclient.cpp +++ b/stmclient.cpp @@ -364,7 +364,7 @@ void STMClient::main( void ) } catch ( Network::NetworkException e ) { if ( !network->shutdown_in_progress() ) { wchar_t tmp[ 128 ]; - swprintf( tmp, 128, L"%s: %s\r\n", e.function.c_str(), strerror( e.the_errno ) ); + swprintf( tmp, 128, L"%s: %s", e.function.c_str(), strerror( e.the_errno ) ); overlays.get_notification_engine().set_notification_string( wstring( tmp ) ); } @@ -372,6 +372,10 @@ void STMClient::main( void ) req.tv_sec = 0; req.tv_nsec = 200000000; /* 0.2 sec */ nanosleep( &req, NULL ); + } catch ( Crypto::CryptoException e ) { + wchar_t tmp[ 128 ]; + swprintf( tmp, 128, L"Crypto exception: %s", e.text.c_str() ); + overlays.get_notification_engine().set_notification_string( wstring( tmp ) ); } } }