Explorar el Código

client: don't explicitly handle out of server send buffer errors; the program will stop anyway

ambrop7 hace 15 años
padre
commit
d19e0fe429
Se han modificado 1 ficheros con 42 adiciones y 76 borrados
  1. 42 76
      client/client.c

+ 42 - 76
client/client.c

@@ -217,7 +217,7 @@ static int server_start_msg (void **data, peerid_t peer_id, int type, int len);
 static void server_end_msg (void);
 static void server_end_msg (void);
 
 
 // adds a new peer
 // adds a new peer
-static int peer_add (peerid_t id, int flags, const uint8_t *cert, int cert_len);
+static void peer_add (peerid_t id, int flags, const uint8_t *cert, int cert_len);
 
 
 // removes a peer
 // removes a peer
 static void peer_remove (struct peer_data *peer);
 static void peer_remove (struct peer_data *peer);
@@ -259,7 +259,7 @@ static void peer_register_need_relay (struct peer_data *peer);
 static void peer_unregister_need_relay (struct peer_data *peer);
 static void peer_unregister_need_relay (struct peer_data *peer);
 
 
 // handle a link setup failure
 // handle a link setup failure
-static int peer_reset (struct peer_data *peer);
+static void peer_reset (struct peer_data *peer);
 
 
 // handle incoming peer messages
 // handle incoming peer messages
 static void peer_msg (struct peer_data *peer, uint8_t *data, int data_len);
 static void peer_msg (struct peer_data *peer, uint8_t *data, int data_len);
@@ -286,23 +286,23 @@ static void peer_tcp_pio_handler_error (struct peer_data *peer);
 static void peer_reset_timer_handler (struct peer_data *peer);
 static void peer_reset_timer_handler (struct peer_data *peer);
 
 
 // start binding, according to the protocol
 // start binding, according to the protocol
-static int peer_start_binding (struct peer_data *peer);
+static void peer_start_binding (struct peer_data *peer);
 
 
 // tries binding on one address, according to the protocol
 // tries binding on one address, according to the protocol
-static int peer_bind (struct peer_data *peer);
+static void peer_bind (struct peer_data *peer);
 
 
-static int peer_bind_one_address (struct peer_data *peer, int addr_index, int *cont);
+static void peer_bind_one_address (struct peer_data *peer, int addr_index, int *cont);
 
 
-static int peer_connect (struct peer_data *peer, BAddr addr, uint8_t *encryption_key, uint64_t password);
+static void peer_connect (struct peer_data *peer, BAddr addr, uint8_t *encryption_key, uint64_t password);
 
 
 // sends a message with no payload to the peer
 // sends a message with no payload to the peer
-static int peer_send_simple (struct peer_data *peer, int msgid);
+static void peer_send_simple (struct peer_data *peer, int msgid);
 
 
-static int peer_send_conectinfo (struct peer_data *peer, int addr_index, int port_adjust, uint8_t *enckey, uint64_t pass);
+static void peer_send_conectinfo (struct peer_data *peer, int addr_index, int port_adjust, uint8_t *enckey, uint64_t pass);
 
 
-static int peer_generate_and_send_seed (struct peer_data *peer);
+static void peer_generate_and_send_seed (struct peer_data *peer);
 
 
-static int peer_send_confirmseed (struct peer_data *peer, uint16_t seed_id);
+static void peer_send_confirmseed (struct peer_data *peer, uint16_t seed_id);
 
 
 // handler for peer DataProto up state changes
 // handler for peer DataProto up state changes
 static void peer_dataproto_handler (struct peer_data *peer, int up);
 static void peer_dataproto_handler (struct peer_data *peer, int up);
@@ -1246,7 +1246,7 @@ void server_end_msg (void)
     ServerConnection_EndMessage(&server);
     ServerConnection_EndMessage(&server);
 }
 }
 
 
-int peer_add (peerid_t id, int flags, const uint8_t *cert, int cert_len)
+void peer_add (peerid_t id, int flags, const uint8_t *cert, int cert_len)
 {
 {
     ASSERT(ServerConnection_IsReady(&server))
     ASSERT(ServerConnection_IsReady(&server))
     ASSERT(num_peers < MAX_PEERS)
     ASSERT(num_peers < MAX_PEERS)
@@ -1358,11 +1358,11 @@ int peer_add (peerid_t id, int flags, const uint8_t *cert, int cert_len)
     
     
     // start setup process
     // start setup process
     if (peer_am_master(peer)) {
     if (peer_am_master(peer)) {
-        return peer_start_binding(peer);
-    } else {
-        return 0;
+        peer_start_binding(peer);
     }
     }
     
     
+    return;
+    
 fail3:
 fail3:
     DataProtoFlow_Free(&peer->local_dpflow);
     DataProtoFlow_Free(&peer->local_dpflow);
 fail2:
 fail2:
@@ -1371,8 +1371,7 @@ fail2:
     }
     }
 fail1:
 fail1:
     free(peer);
     free(peer);
-fail0:
-    return 0;
+fail0:;
 }
 }
 
 
 void peer_remove (struct peer_data *peer)
 void peer_remove (struct peer_data *peer)
@@ -1725,7 +1724,7 @@ void peer_unregister_need_relay (struct peer_data *peer)
     peer->waiting_relay = 0;
     peer->waiting_relay = 0;
 }
 }
 
 
-int peer_reset (struct peer_data *peer)
+void peer_reset (struct peer_data *peer)
 {
 {
     peer_log(peer, BLOG_NOTICE, "resetting");
     peer_log(peer, BLOG_NOTICE, "resetting");
     
     
@@ -1742,12 +1741,8 @@ int peer_reset (struct peer_data *peer)
         BReactor_SetTimer(&ss, &peer->reset_timer);
         BReactor_SetTimer(&ss, &peer->reset_timer);
     } else {
     } else {
         // if we're the slave, report to master
         // if we're the slave, report to master
-        if (peer_send_simple(peer, MSGID_YOURETRY) < 0) {
-            return -1;
-        }
+        peer_send_simple(peer, MSGID_YOURETRY);
     }
     }
-    
-    return 0;
 }
 }
 
 
 void peer_msg (struct peer_data *peer, uint8_t *data, int data_len)
 void peer_msg (struct peer_data *peer, uint8_t *data, int data_len)
@@ -1879,7 +1874,6 @@ void peer_msg_youconnect (struct peer_data *peer, uint8_t *data, int data_len)
     peer_log(peer, BLOG_INFO, "connecting");
     peer_log(peer, BLOG_INFO, "connecting");
     
     
     peer_connect(peer, addr, key, password);
     peer_connect(peer, addr, key, password);
-    return;
 }
 }
 
 
 void peer_msg_cannotconnect (struct peer_data *peer, uint8_t *data, int data_len)
 void peer_msg_cannotconnect (struct peer_data *peer, uint8_t *data, int data_len)
@@ -1912,7 +1906,6 @@ void peer_msg_cannotbind (struct peer_data *peer, uint8_t *data, int data_len)
     
     
     if (!peer_am_master(peer)) {
     if (!peer_am_master(peer)) {
         peer_start_binding(peer);
         peer_start_binding(peer);
-        return;
     } else {
     } else {
         if (!peer->is_relay) {
         if (!peer->is_relay) {
             peer_need_relay(peer);
             peer_need_relay(peer);
@@ -2033,7 +2026,6 @@ void peer_msg_youretry (struct peer_data *peer, uint8_t *data, int data_len)
     peer_log(peer, BLOG_NOTICE, "requests reset");
     peer_log(peer, BLOG_NOTICE, "requests reset");
     
     
     peer_reset(peer);
     peer_reset(peer);
-    return;
 }
 }
 
 
 void peer_udp_pio_handler_seed_warning (struct peer_data *peer)
 void peer_udp_pio_handler_seed_warning (struct peer_data *peer)
@@ -2045,7 +2037,6 @@ void peer_udp_pio_handler_seed_warning (struct peer_data *peer)
     // generate and send a new seed
     // generate and send a new seed
     if (!peer->pio.udp.sendseed_sent) {
     if (!peer->pio.udp.sendseed_sent) {
         peer_generate_and_send_seed(peer);
         peer_generate_and_send_seed(peer);
-        return;
     }
     }
 }
 }
 
 
@@ -2057,7 +2048,6 @@ void peer_udp_pio_handler_seed_ready (struct peer_data *peer)
     
     
     // send confirmation
     // send confirmation
     peer_send_confirmseed(peer, peer->pio.udp.pending_recvseed_id);
     peer_send_confirmseed(peer, peer->pio.udp.pending_recvseed_id);
-    return;
 }
 }
 
 
 void peer_tcp_pio_handler_error (struct peer_data *peer)
 void peer_tcp_pio_handler_error (struct peer_data *peer)
@@ -2079,18 +2069,17 @@ void peer_reset_timer_handler (struct peer_data *peer)
     
     
     // start setup process
     // start setup process
     peer_start_binding(peer);
     peer_start_binding(peer);
-    return;
 }
 }
 
 
-int peer_start_binding (struct peer_data *peer)
+void peer_start_binding (struct peer_data *peer)
 {
 {
     peer->binding = 1;
     peer->binding = 1;
     peer->binding_addrpos = 0;
     peer->binding_addrpos = 0;
     
     
-    return peer_bind(peer);
+    peer_bind(peer);
 }
 }
 
 
-int peer_bind (struct peer_data *peer)
+void peer_bind (struct peer_data *peer)
 {
 {
     ASSERT(peer->binding)
     ASSERT(peer->binding)
     ASSERT(peer->binding_addrpos >= 0)
     ASSERT(peer->binding_addrpos >= 0)
@@ -2107,15 +2096,13 @@ int peer_bind (struct peer_data *peer)
         
         
         // try to bind
         // try to bind
         int cont;
         int cont;
-        if (peer_bind_one_address(peer, peer->binding_addrpos, &cont) < 0) {
-            return -1;
-        }
+        peer_bind_one_address(peer, peer->binding_addrpos, &cont);
         
         
         // increment address counter
         // increment address counter
         peer->binding_addrpos++;
         peer->binding_addrpos++;
         
         
         if (!cont) {
         if (!cont) {
-            return 0;
+            return;
         }
         }
     }
     }
     
     
@@ -2125,9 +2112,7 @@ int peer_bind (struct peer_data *peer)
     peer->binding = 0;
     peer->binding = 0;
     
     
     // tell the peer we failed to bind
     // tell the peer we failed to bind
-    if (peer_send_simple(peer, MSGID_CANNOTBIND) < 0) {
-        return -1;
-    }
+    peer_send_simple(peer, MSGID_CANNOTBIND);
     
     
     // if we are the slave, setup relaying
     // if we are the slave, setup relaying
     if (!peer_am_master(peer)) {
     if (!peer_am_master(peer)) {
@@ -2135,11 +2120,9 @@ int peer_bind (struct peer_data *peer)
             peer_need_relay(peer);
             peer_need_relay(peer);
         }
         }
     }
     }
-    
-    return 0;
 }
 }
 
 
-int peer_bind_one_address (struct peer_data *peer, int addr_index, int *cont)
+void peer_bind_one_address (struct peer_data *peer, int addr_index, int *cont)
 {
 {
     ASSERT(addr_index >= 0)
     ASSERT(addr_index >= 0)
     ASSERT(addr_index < num_bind_addrs)
     ASSERT(addr_index < num_bind_addrs)
@@ -2149,7 +2132,8 @@ int peer_bind_one_address (struct peer_data *peer, int addr_index, int *cont)
     if (!peer_new_link(peer)) {
     if (!peer_new_link(peer)) {
         peer_log(peer, BLOG_ERROR, "cannot get link");
         peer_log(peer, BLOG_ERROR, "cannot get link");
         *cont = 0;
         *cont = 0;
-        return peer_reset(peer);
+        peer_reset(peer);
+        return;
     }
     }
     
     
     if (options.transport_mode == TRANSPORT_MODE_UDP) {
     if (options.transport_mode == TRANSPORT_MODE_UDP) {
@@ -2168,7 +2152,7 @@ int peer_bind_one_address (struct peer_data *peer, int addr_index, int *cont)
         if (port_add == addr->num_ports) {
         if (port_add == addr->num_ports) {
             BLog(BLOG_NOTICE, "failed to bind to any port");
             BLog(BLOG_NOTICE, "failed to bind to any port");
             *cont = 1;
             *cont = 1;
-            return 0;
+            return;
         }
         }
         
         
         uint8_t key[SPPROTO_HAVE_ENCRYPTION(sp_params) ? BEncryption_cipher_key_size(sp_params.encryption_mode) : 0];
         uint8_t key[SPPROTO_HAVE_ENCRYPTION(sp_params) ? BEncryption_cipher_key_size(sp_params.encryption_mode) : 0];
@@ -2185,34 +2169,30 @@ int peer_bind_one_address (struct peer_data *peer, int addr_index, int *cont)
         }
         }
         
         
         // send connectinfo
         // send connectinfo
-        if (peer_send_conectinfo(peer, addr_index, port_add, key, 0) < 0) {
-            return -1;
-        }
+        peer_send_conectinfo(peer, addr_index, port_add, key, 0);
     } else {
     } else {
         // order StreamPeerIO to listen
         // order StreamPeerIO to listen
         uint64_t pass;
         uint64_t pass;
         StreamPeerIO_Listen(&peer->pio.tcp.pio, &listeners[addr_index], &pass);
         StreamPeerIO_Listen(&peer->pio.tcp.pio, &listeners[addr_index], &pass);
         
         
         // send connectinfo
         // send connectinfo
-        if (peer_send_conectinfo(peer, addr_index, 0, NULL, pass) < 0) {
-            return -1;
-        }
+        peer_send_conectinfo(peer, addr_index, 0, NULL, pass);
     }
     }
     
     
     peer_log(peer, BLOG_NOTICE, "bound to address number %d", addr_index);
     peer_log(peer, BLOG_NOTICE, "bound to address number %d", addr_index);
     
     
     *cont = 0;
     *cont = 0;
-    return 0;
 }
 }
 
 
-int peer_connect (struct peer_data *peer, BAddr addr, uint8_t *encryption_key, uint64_t password)
+void peer_connect (struct peer_data *peer, BAddr addr, uint8_t* encryption_key, uint64_t password)
 {
 {
     ASSERT(!BAddr_IsInvalid(&addr))
     ASSERT(!BAddr_IsInvalid(&addr))
     
     
     // get a fresh link
     // get a fresh link
     if (!peer_new_link(peer)) {
     if (!peer_new_link(peer)) {
         peer_log(peer, BLOG_ERROR, "cannot get link");
         peer_log(peer, BLOG_ERROR, "cannot get link");
-        return peer_reset(peer);
+        peer_reset(peer);
+        return;
     }
     }
     
     
     if (options.transport_mode == TRANSPORT_MODE_UDP) {
     if (options.transport_mode == TRANSPORT_MODE_UDP) {
@@ -2229,9 +2209,7 @@ int peer_connect (struct peer_data *peer, BAddr addr, uint8_t *encryption_key, u
         
         
         // generate and send a send seed
         // generate and send a send seed
         if (SPPROTO_HAVE_OTP(sp_params)) {
         if (SPPROTO_HAVE_OTP(sp_params)) {
-            if (peer_generate_and_send_seed(peer) < 0) {
-                return -1;
-            }
+            peer_generate_and_send_seed(peer);
         }
         }
     } else {
     } else {
         // order StreamPeerIO to connect
         // order StreamPeerIO to connect
@@ -2244,21 +2222,17 @@ int peer_connect (struct peer_data *peer, BAddr addr, uint8_t *encryption_key, u
             return peer_reset(peer);
             return peer_reset(peer);
         }
         }
     }
     }
-    
-    return 0;
 }
 }
 
 
-int peer_send_simple (struct peer_data *peer, int msgid)
+void peer_send_simple (struct peer_data *peer, int msgid)
 {
 {
     if (server_start_msg(NULL, peer->id, msgid, 0) < 0) {
     if (server_start_msg(NULL, peer->id, msgid, 0) < 0) {
-        return -1;
+        return;
     }
     }
     server_end_msg();
     server_end_msg();
-    
-    return 0;
 }
 }
 
 
-int peer_send_conectinfo (struct peer_data *peer, int addr_index, int port_adjust, uint8_t *enckey, uint64_t pass)
+void peer_send_conectinfo (struct peer_data *peer, int addr_index, int port_adjust, uint8_t *enckey, uint64_t pass)
 {
 {
     ASSERT(addr_index >= 0)
     ASSERT(addr_index >= 0)
     ASSERT(addr_index < num_bind_addrs)
     ASSERT(addr_index < num_bind_addrs)
@@ -2297,13 +2271,13 @@ int peer_send_conectinfo (struct peer_data *peer, int addr_index, int port_adjus
     // check if it's too big (because of the addresses)
     // check if it's too big (because of the addresses)
     if (msg_len > MSG_MAX_PAYLOAD) {
     if (msg_len > MSG_MAX_PAYLOAD) {
         BLog(BLOG_ERROR, "cannot send too big youconnect message");
         BLog(BLOG_ERROR, "cannot send too big youconnect message");
-        return 0;
+        return;
     }
     }
         
         
     // start message
     // start message
     uint8_t *msg;
     uint8_t *msg;
     if (server_start_msg((void **)&msg, peer->id, MSGID_YOUCONNECT, msg_len) < 0) {
     if (server_start_msg((void **)&msg, peer->id, MSGID_YOUCONNECT, msg_len) < 0) {
-        return -1;
+        return;
     }
     }
         
         
     // init writer
     // init writer
@@ -2355,11 +2329,9 @@ int peer_send_conectinfo (struct peer_data *peer, int addr_index, int port_adjus
     
     
     // end message
     // end message
     server_end_msg();
     server_end_msg();
-    
-    return 0;
 }
 }
 
 
-int peer_generate_and_send_seed (struct peer_data *peer)
+void peer_generate_and_send_seed (struct peer_data *peer)
 {
 {
     ASSERT(options.transport_mode == TRANSPORT_MODE_UDP)
     ASSERT(options.transport_mode == TRANSPORT_MODE_UDP)
     ASSERT(SPPROTO_HAVE_OTP(sp_params))
     ASSERT(SPPROTO_HAVE_OTP(sp_params))
@@ -2384,7 +2356,7 @@ int peer_generate_and_send_seed (struct peer_data *peer)
     int msg_len = msg_seed_SIZEseed_id + msg_seed_SIZEkey(key_len) + msg_seed_SIZEiv(iv_len);
     int msg_len = msg_seed_SIZEseed_id + msg_seed_SIZEkey(key_len) + msg_seed_SIZEiv(iv_len);
     uint8_t *msg;
     uint8_t *msg;
     if (server_start_msg((void **)&msg, peer->id, MSGID_SEED, msg_len) < 0) {
     if (server_start_msg((void **)&msg, peer->id, MSGID_SEED, msg_len) < 0) {
-        return -1;
+        return;
     }
     }
     msg_seedWriter writer;
     msg_seedWriter writer;
     msg_seedWriter_Init(&writer, msg);
     msg_seedWriter_Init(&writer, msg);
@@ -2395,11 +2367,9 @@ int peer_generate_and_send_seed (struct peer_data *peer)
     memcpy(iv_dst, peer->pio.udp.sendseed_sent_iv, iv_len);
     memcpy(iv_dst, peer->pio.udp.sendseed_sent_iv, iv_len);
     msg_seedWriter_Finish(&writer);
     msg_seedWriter_Finish(&writer);
     server_end_msg();
     server_end_msg();
-    
-    return 0;
 }
 }
 
 
-int peer_send_confirmseed (struct peer_data *peer, uint16_t seed_id)
+void peer_send_confirmseed (struct peer_data *peer, uint16_t seed_id)
 {
 {
     ASSERT(options.transport_mode == TRANSPORT_MODE_UDP)
     ASSERT(options.transport_mode == TRANSPORT_MODE_UDP)
     ASSERT(SPPROTO_HAVE_OTP(sp_params))
     ASSERT(SPPROTO_HAVE_OTP(sp_params))
@@ -2408,15 +2378,13 @@ int peer_send_confirmseed (struct peer_data *peer, uint16_t seed_id)
     int msg_len = msg_confirmseed_SIZEseed_id;
     int msg_len = msg_confirmseed_SIZEseed_id;
     uint8_t *msg;
     uint8_t *msg;
     if (server_start_msg((void **)&msg, peer->id, MSGID_CONFIRMSEED, msg_len) < 0) {
     if (server_start_msg((void **)&msg, peer->id, MSGID_CONFIRMSEED, msg_len) < 0) {
-        return -1;
+        return;
     }
     }
     msg_confirmseedWriter writer;
     msg_confirmseedWriter writer;
     msg_confirmseedWriter_Init(&writer, msg);
     msg_confirmseedWriter_Init(&writer, msg);
     msg_confirmseedWriter_Addseed_id(&writer, seed_id);
     msg_confirmseedWriter_Addseed_id(&writer, seed_id);
     msg_confirmseedWriter_Finish(&writer);
     msg_confirmseedWriter_Finish(&writer);
     server_end_msg();
     server_end_msg();
-    
-    return 0;
 }
 }
 
 
 void peer_dataproto_handler (struct peer_data *peer, int up)
 void peer_dataproto_handler (struct peer_data *peer, int up)
@@ -2587,7 +2555,6 @@ void server_handler_newclient (void *user, peerid_t peer_id, int flags, const ui
     }
     }
     
     
     peer_add(peer_id, flags, cert, cert_len);
     peer_add(peer_id, flags, cert, cert_len);
-    return;
 }
 }
 
 
 void server_handler_endclient (void *user, peerid_t peer_id)
 void server_handler_endclient (void *user, peerid_t peer_id)
@@ -2631,5 +2598,4 @@ void peer_job_send_seed_after_binding (struct peer_data *peer)
     ASSERT(!peer->pio.udp.sendseed_sent)
     ASSERT(!peer->pio.udp.sendseed_sent)
     
     
     peer_generate_and_send_seed(peer);
     peer_generate_and_send_seed(peer);
-    return;
 }
 }