Prefer early exit/break to large conditional blocks.
Some of these are large and contain smaller unrelated refactors.
This commit is contained in:
+53
-54
@@ -523,66 +523,65 @@ string Connection::recv_one( int sock_to_recv, bool nonblocking )
|
||||
|
||||
dos_assert( p.direction == (server ? TO_SERVER : TO_CLIENT) ); /* prevent malicious playback to sender */
|
||||
|
||||
if ( p.seq >= expected_receiver_seq ) { /* don't use out-of-order packets for timestamp or targeting */
|
||||
expected_receiver_seq = p.seq + 1; /* this is security-sensitive because a replay attack could otherwise
|
||||
screw up the timestamp and targeting */
|
||||
if ( p.seq < expected_receiver_seq ) { /* don't use (but do return) out-of-order packets for timestamp or targeting */
|
||||
return p.payload;
|
||||
}
|
||||
expected_receiver_seq = p.seq + 1; /* this is security-sensitive because a replay attack could otherwise
|
||||
screw up the timestamp and targeting */
|
||||
|
||||
if ( p.timestamp != uint16_t(-1) ) {
|
||||
saved_timestamp = p.timestamp;
|
||||
saved_timestamp_received_at = timestamp();
|
||||
if ( p.timestamp != uint16_t(-1) ) {
|
||||
saved_timestamp = p.timestamp;
|
||||
saved_timestamp_received_at = timestamp();
|
||||
|
||||
if ( congestion_experienced ) {
|
||||
/* signal counterparty to slow down */
|
||||
/* this will gradually slow the counterparty down to the minimum frame rate */
|
||||
saved_timestamp -= CONGESTION_TIMESTAMP_PENALTY;
|
||||
if ( server ) {
|
||||
fprintf( stderr, "Received explicit congestion notification.\n" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( p.timestamp_reply != uint16_t(-1) ) {
|
||||
uint16_t now = timestamp16();
|
||||
double R = timestamp_diff( now, p.timestamp_reply );
|
||||
|
||||
if ( R < 5000 ) { /* ignore large values, e.g. server was Ctrl-Zed */
|
||||
if ( !RTT_hit ) { /* first measurement */
|
||||
SRTT = R;
|
||||
RTTVAR = R / 2;
|
||||
RTT_hit = true;
|
||||
} else {
|
||||
const double alpha = 1.0 / 8.0;
|
||||
const double beta = 1.0 / 4.0;
|
||||
|
||||
RTTVAR = (1 - beta) * RTTVAR + ( beta * fabs( SRTT - R ) );
|
||||
SRTT = (1 - alpha) * SRTT + ( alpha * R );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* auto-adjust to remote host */
|
||||
has_remote_addr = true;
|
||||
last_heard = timestamp();
|
||||
|
||||
if ( server ) { /* only client can roam */
|
||||
if ( remote_addr_len != header.msg_namelen ||
|
||||
memcmp( &remote_addr, &packet_remote_addr, remote_addr_len ) != 0 ) {
|
||||
remote_addr = packet_remote_addr;
|
||||
remote_addr_len = header.msg_namelen;
|
||||
char host[ NI_MAXHOST ], serv[ NI_MAXSERV ];
|
||||
int errcode = getnameinfo( &remote_addr.sa, remote_addr_len,
|
||||
host, sizeof( host ), serv, sizeof( serv ),
|
||||
NI_DGRAM | NI_NUMERICHOST | NI_NUMERICSERV );
|
||||
if ( errcode != 0 ) {
|
||||
throw NetworkException( std::string( "recv_one: getnameinfo: " ) + gai_strerror( errcode ), 0 );
|
||||
}
|
||||
fprintf( stderr, "Server now attached to client at %s:%s\n",
|
||||
host, serv );
|
||||
if ( congestion_experienced ) {
|
||||
/* signal counterparty to slow down */
|
||||
/* this will gradually slow the counterparty down to the minimum frame rate */
|
||||
saved_timestamp -= CONGESTION_TIMESTAMP_PENALTY;
|
||||
if ( server ) {
|
||||
fprintf( stderr, "Received explicit congestion notification.\n" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return p.payload; /* we do return out-of-order or duplicated packets to caller */
|
||||
if ( p.timestamp_reply != uint16_t(-1) ) {
|
||||
uint16_t now = timestamp16();
|
||||
double R = timestamp_diff( now, p.timestamp_reply );
|
||||
|
||||
if ( R < 5000 ) { /* ignore large values, e.g. server was Ctrl-Zed */
|
||||
if ( !RTT_hit ) { /* first measurement */
|
||||
SRTT = R;
|
||||
RTTVAR = R / 2;
|
||||
RTT_hit = true;
|
||||
} else {
|
||||
const double alpha = 1.0 / 8.0;
|
||||
const double beta = 1.0 / 4.0;
|
||||
|
||||
RTTVAR = (1 - beta) * RTTVAR + ( beta * fabs( SRTT - R ) );
|
||||
SRTT = (1 - alpha) * SRTT + ( alpha * R );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* auto-adjust to remote host */
|
||||
has_remote_addr = true;
|
||||
last_heard = timestamp();
|
||||
|
||||
if ( server && /* only client can roam */
|
||||
( remote_addr_len != header.msg_namelen ||
|
||||
memcmp( &remote_addr, &packet_remote_addr, remote_addr_len ) != 0 ) ) {
|
||||
remote_addr = packet_remote_addr;
|
||||
remote_addr_len = header.msg_namelen;
|
||||
char host[ NI_MAXHOST ], serv[ NI_MAXSERV ];
|
||||
int errcode = getnameinfo( &remote_addr.sa, remote_addr_len,
|
||||
host, sizeof( host ), serv, sizeof( serv ),
|
||||
NI_DGRAM | NI_NUMERICHOST | NI_NUMERICSERV );
|
||||
if ( errcode != 0 ) {
|
||||
throw NetworkException( std::string( "recv_one: getnameinfo: " ) + gai_strerror( errcode ), 0 );
|
||||
}
|
||||
fprintf( stderr, "Server now attached to client at %s:%s\n",
|
||||
host, serv );
|
||||
}
|
||||
return p.payload;
|
||||
}
|
||||
|
||||
std::string Connection::port( void ) const
|
||||
|
||||
Reference in New Issue
Block a user