Browse Source

Minor changes

ambrop7 15 năm trước cách đây
mục cha
commit
97d2c48f5b

+ 4 - 1
client/FrameDecider.c

@@ -122,7 +122,7 @@ static uint32_t compute_sig_for_group (uint32_t group)
     return hton32(ntoh32(group)&0x7FFFFF);
 }
 
-static uint32_t compute_sig_for_mac (uint8_t *mac)
+static uint32_t compute_sig_for_mac (uint8_t mac[6])
 {
     uint32_t sig;
     memcpy(&sig, mac + 2, 4);
@@ -326,6 +326,8 @@ static void group_entry_timer_handler (struct _FrameDecider_group_entry *group_e
 
 static int check_ipv4_packet (uint8_t *data, int data_len, struct ipv4_header **out_header, uint8_t **out_payload, int *out_payload_len)
 {
+    ASSERT(data_len >= 0)
+    
     // check base header
     if (data_len < sizeof(struct ipv4_header)) {
         BLog(BLOG_DEBUG, "check ipv4: packet too short (base header)");
@@ -591,6 +593,7 @@ FrameDeciderPeer * FrameDecider_NextDestination (FrameDecider *o)
         
         default:
             ASSERT(0);
+            return NULL;
     }
 }
 

+ 25 - 48
client/client.c

@@ -177,9 +177,6 @@ LinkedList2 waiting_relay_peers;
 // server connection
 ServerConnection server;
 
-// whether server is ready
-int server_ready;
-
 // my ID, defined only after server_ready
 peerid_t my_id;
 
@@ -243,14 +240,14 @@ static void peer_disable_relay_provider (struct peer_data *peer);
 static void peer_dealloc_relay_provider (struct peer_data *peer);
 
 // install relaying for a peer
-static void peer_install_relay (struct peer_data *peer, struct peer_data *relay);
+static void peer_install_relaying (struct peer_data *peer, struct peer_data *relay);
 
 // uninstall relaying for a peer
-static void peer_uninstall_relay (struct peer_data *peer);
+static void peer_uninstall_relaying (struct peer_data *peer);
 
 // deallocates relaying for a peer. Used when the relay is beeing freed,
 // and when uninstalling relaying after having released the connection.
-static void peer_dealloc_relay (struct peer_data *peer);
+static void peer_dealloc_relaying (struct peer_data *peer);
 
 // handle a peer that needs a relay
 static void peer_need_relay (struct peer_data *peer);
@@ -305,7 +302,7 @@ static int 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 int peer_udp_send_seed (struct peer_data *peer);
+static int peer_generate_and_send_seed (struct peer_data *peer);
 
 static int peer_send_confirmseed (struct peer_data *peer, uint16_t seed_id);
 
@@ -328,9 +325,6 @@ static void device_error_handler (void *unused);
 // PacketPassInterfacre handler for packets from the device
 static void device_input_handler_send (void *unused, uint8_t *data, int data_len);
 
-// submits a local frame for sending to the peer. The frame is taken from the device frame buffer.
-static void submit_frame_to_peer (struct peer_data *peer, uint8_t *data, int data_len);
-
 // assign relays to clients waiting for them
 static void assign_relays (void);
 
@@ -546,9 +540,6 @@ int main (int argc, char *argv[])
         goto fail10;
     }
     
-    // set server not ready
-    server_ready = 0;
-    
     goto event_loop;
     
     // cleanup on error
@@ -1247,7 +1238,7 @@ void signal_handler (void *unused)
 
 int server_start_msg (void **data, peerid_t peer_id, int type, int len)
 {
-    ASSERT(server_ready)
+    ASSERT(ServerConnection_IsReady(&server))
     ASSERT(len >= 0)
     ASSERT(len <= MSG_MAX_PAYLOAD)
     ASSERT(!(len > 0) || data)
@@ -1274,14 +1265,14 @@ int server_start_msg (void **data, peerid_t peer_id, int type, int len)
 
 void server_end_msg (void)
 {
-    ASSERT(server_ready)
+    ASSERT(ServerConnection_IsReady(&server))
     
     ServerConnection_EndMessage(&server);
 }
 
 int peer_add (peerid_t id, int flags, const uint8_t *cert, int cert_len)
 {
-    ASSERT(server_ready)
+    ASSERT(ServerConnection_IsReady(&server))
     ASSERT(num_peers < MAX_PEERS)
     ASSERT(!find_peer_by_id(id))
     ASSERT(id != my_id)
@@ -1397,7 +1388,7 @@ void peer_remove (struct peer_data *peer)
     
     // uninstall relaying
     if (peer->have_relaying) {
-        peer_uninstall_relay(peer);
+        peer_uninstall_relaying(peer);
     }
     
     // disable relay provider
@@ -1610,7 +1601,7 @@ int peer_new_link (struct peer_data *peer)
         peer_free_link(peer);
     }
     else if (peer->have_relaying) {
-        peer_uninstall_relay(peer);
+        peer_uninstall_relaying(peer);
     }
     else if (peer->waiting_relay) {
         peer_unregister_need_relay(peer);
@@ -1659,7 +1650,7 @@ void peer_disable_relay_provider (struct peer_data *peer)
         ASSERT(relay_user->relaying_peer == peer)
         
         // disconnect relay user
-        peer_uninstall_relay(relay_user);
+        peer_uninstall_relaying(relay_user);
         
         // add it to need relay list
         peer_register_need_relay(relay_user);
@@ -1693,7 +1684,7 @@ void peer_dealloc_relay_provider (struct peer_data *peer)
         ASSERT(relay_user->relaying_peer == peer)
         
         // disconnect relay user
-        peer_dealloc_relay(relay_user);
+        peer_dealloc_relaying(relay_user);
         
         // add it to need relay list
         peer_register_need_relay(relay_user);
@@ -1705,7 +1696,7 @@ void peer_dealloc_relay_provider (struct peer_data *peer)
     peer->is_relay = 0;
 }
 
-void peer_install_relay (struct peer_data *peer, struct peer_data *relay)
+void peer_install_relaying (struct peer_data *peer, struct peer_data *relay)
 {
     ASSERT(!peer->have_relaying)
     ASSERT(!peer->have_link)
@@ -1729,7 +1720,7 @@ void peer_install_relay (struct peer_data *peer, struct peer_data *relay)
     peer->have_relaying = 1;
 }
 
-void peer_uninstall_relay (struct peer_data *peer)
+void peer_uninstall_relaying (struct peer_data *peer)
 {
     ASSERT(peer->have_relaying)
     
@@ -1746,10 +1737,10 @@ void peer_uninstall_relay (struct peer_data *peer)
     DataProtoLocalSource_Release(&peer->local_dpflow);
     
     // link out relay
-    peer_dealloc_relay(peer);
+    peer_dealloc_relaying(peer);
 }
 
-void peer_dealloc_relay (struct peer_data *peer)
+void peer_dealloc_relaying (struct peer_data *peer)
 {
     ASSERT(peer->have_relaying)
     
@@ -1778,7 +1769,7 @@ void peer_need_relay (struct peer_data *peer)
     }
     
     if (peer->have_relaying) {
-        peer_uninstall_relay(peer);
+        peer_uninstall_relaying(peer);
     }
     
     if (peer->waiting_relay) {
@@ -1840,7 +1831,6 @@ int peer_reset (struct peer_data *peer)
 
 void peer_msg (struct peer_data *peer, uint8_t *data, int data_len)
 {
-    ASSERT(server_ready)
     ASSERT(data_len >= 0)
     ASSERT(data_len <= SC_MAX_MSGLEN)
     
@@ -2134,7 +2124,7 @@ void peer_udp_pio_handler_seed_warning (struct peer_data *peer)
     
     // generate and send a new seed
     if (!peer->pio.udp.sendseed_sent) {
-        peer_udp_send_seed(peer);
+        peer_generate_and_send_seed(peer);
         return;
     }
 }
@@ -2426,7 +2416,7 @@ int peer_connect (struct peer_data *peer, BAddr addr, uint8_t *encryption_key, u
         
         // generate and send a send seed
         if (SPPROTO_HAVE_OTP(sp_params)) {
-            if (peer_udp_send_seed(peer) < 0) {
+            if (peer_generate_and_send_seed(peer) < 0) {
                 return -1;
             }
         }
@@ -2556,7 +2546,7 @@ int peer_send_conectinfo (struct peer_data *peer, int addr_index, int port_adjus
     return 0;
 }
 
-int peer_udp_send_seed (struct peer_data *peer)
+int peer_generate_and_send_seed (struct peer_data *peer)
 {
     ASSERT(options.transport_mode == TRANSPORT_MODE_UDP)
     ASSERT(SPPROTO_HAVE_OTP(sp_params))
@@ -2692,18 +2682,10 @@ void device_input_handler_send (void *unused, uint8_t *data, int data_len)
     FrameDeciderPeer *decider_peer;
     while (decider_peer = FrameDecider_NextDestination(&frame_decider)) {
         struct peer_data *peer = UPPER_OBJECT(decider_peer, struct peer_data, decider_peer);
-        submit_frame_to_peer(peer, data, data_len);
+        DataProtoLocalSource_SubmitFrame(&peer->local_dpflow, data, data_len);
     }
 }
 
-void submit_frame_to_peer (struct peer_data *peer, uint8_t *data, int data_len)
-{
-    ASSERT(data_len >= 0)
-    ASSERT(data_len <= device.mtu)
-    
-    DataProtoLocalSource_SubmitFrame(&peer->local_dpflow, data, data_len);
-}
-
 void assign_relays (void)
 {
     LinkedList2Node *list_node;
@@ -2727,7 +2709,7 @@ void assign_relays (void)
         peer_unregister_need_relay(peer);
         
         // install the relay
-        peer_install_relay(peer, relay);
+        peer_install_relaying(peer, relay);
     }
 }
 
@@ -2754,8 +2736,6 @@ void server_handler_error (void *user)
 
 void server_handler_ready (void *user, peerid_t param_my_id, uint32_t ext_ip)
 {
-    ASSERT(!server_ready)
-    
     // remember our ID
     my_id = param_my_id;
     
@@ -2778,15 +2758,12 @@ void server_handler_ready (void *user, peerid_t param_my_id, uint32_t ext_ip)
         }
     }
     
-    // set server ready
-    server_ready = 1;
-    
     BLog(BLOG_INFO, "server: ready, my ID is %d", (int)my_id);
 }
 
 void server_handler_newclient (void *user, peerid_t peer_id, int flags, const uint8_t *cert, int cert_len)
 {
-    ASSERT(server_ready)
+    ASSERT(ServerConnection_IsReady(&server))
     ASSERT(cert_len >= 0)
     ASSERT(cert_len <= SCID_NEWCLIENT_MAX_CERT_LEN)
     
@@ -2819,7 +2796,7 @@ void server_handler_newclient (void *user, peerid_t peer_id, int flags, const ui
 
 void server_handler_endclient (void *user, peerid_t peer_id)
 {
-    ASSERT(server_ready)
+    ASSERT(ServerConnection_IsReady(&server))
     
     // find peer
     struct peer_data *peer = find_peer_by_id(peer_id);
@@ -2834,7 +2811,7 @@ void server_handler_endclient (void *user, peerid_t peer_id)
 
 void server_handler_message (void *user, peerid_t peer_id, uint8_t *data, int data_len)
 {
-    ASSERT(server_ready)
+    ASSERT(ServerConnection_IsReady(&server))
     ASSERT(data_len >= 0)
     ASSERT(data_len <= SC_MAX_MSGLEN)
     
@@ -2857,6 +2834,6 @@ void peer_job_send_seed_after_binding (struct peer_data *peer)
     ASSERT(peer->have_link)
     ASSERT(!peer->pio.udp.sendseed_sent)
     
-    peer_udp_send_seed(peer);
+    peer_generate_and_send_seed(peer);
     return;
 }

+ 0 - 5
client/client.h

@@ -64,9 +64,6 @@
 // retry time
 #define PEER_RETRY_TIME 5000
 
-// number of MAC seeds to keep for checking received packets
-#define MACPOOL_NUM_RECV_SEEDS 2
-
 // for how long a peer can send no Membership Reports for a group
 // before the peer and group are disassociated
 #define IGMP_GROUP_MEMBERSHIP_INTERVAL 260000
@@ -95,8 +92,6 @@ struct device_data {
     PacketPassFairQueue output_queue;
 };
 
-struct peer_data;
-
 struct peer_data {
     // peer identifier
     peerid_t id;

+ 7 - 0
server_connection/ServerConnection.c

@@ -613,6 +613,13 @@ void ServerConnection_Free (ServerConnection *o)
     DEAD_KILL(o->dead);
 }
 
+int ServerConnection_IsReady (ServerConnection *o)
+{
+    DebugObject_Access(&o->d_obj);
+    
+    return (o->state == STATE_COMPLETE);
+}
+
 int ServerConnection_StartMessage (ServerConnection *o, void **data, peerid_t peer_id, int len)
 {
     ASSERT(!o->error)

+ 8 - 0
server_connection/ServerConnection.h

@@ -256,6 +256,14 @@ int ServerConnection_Init (
  */
 void ServerConnection_Free (ServerConnection *o);
 
+/**
+ * Determines if the object is in ready state.
+ *
+ * @param o the object
+ * @return 1 if ready, 0 of not
+ */
+int ServerConnection_IsReady (ServerConnection *o);
+
 /**
  * Provides a buffer for writing a message to be sent to a peer.
  * The object must be in ready and not writing state.