Jelajahi Sumber

client: fix relaying for clients. We should call FrameDeciderPeer_Analyze for the actual source peer, not the relay.

ambrop7 15 tahun lalu
induk
melakukan
7395b7818e
1 mengubah file dengan 9 tambahan dan 9 penghapusan
  1. 9 9
      client/client.c

+ 9 - 9
client/client.c

@@ -2129,7 +2129,7 @@ void peer_recv_handler_send (struct peer_data *peer, uint8_t *data, int data_len
     int orig_data_len = data_len;
     
     int dp_good = 0;
-    struct peer_data *relay_src;
+    struct peer_data *src_peer;
     struct peer_data *relay_dest = NULL;
     int local = 0;
     
@@ -2166,6 +2166,12 @@ void peer_recv_handler_send (struct peer_data *peer, uint8_t *data, int data_len
     
     dp_good = 1;
     
+    // find source peer
+    if (!(src_peer = find_peer_by_id(from_id))) {
+        peer_log(peer, BLOG_NOTICE, "receive: source peer %d not known", (int)from_id);
+        goto out;
+    }
+    
     if (num_ids == 0) {
         goto out;
     }
@@ -2176,18 +2182,12 @@ void peer_recv_handler_send (struct peer_data *peer, uint8_t *data, int data_len
         // frame is for us
         
         // let the frame decider analyze the frame
-        FrameDeciderPeer_Analyze(&peer->decider_peer, data, data_len);
+        FrameDeciderPeer_Analyze(&src_peer->decider_peer, data, data_len);
         
         local = 1;
     } else {
         // frame is for someone else
         
-        // find source peer
-        if (!(relay_src = find_peer_by_id(from_id))) {
-            peer_log(peer, BLOG_NOTICE, "receive: source peer %d not known", (int)from_id);
-            goto out;
-        }
-        
         // make sure the client is allowed to relay though us
         if (!(peer->flags & SCID_NEWCLIENT_FLAG_RELAY_CLIENT)) {
             peer_log(peer, BLOG_NOTICE, "relaying not allowed");
@@ -2218,7 +2218,7 @@ out:
     
     // relay frame
     if (relay_dest) {
-        peer_submit_relayed_frame(relay_dest, relay_src, data, data_len);
+        peer_submit_relayed_frame(relay_dest, src_peer, data, data_len);
     }
     
     // submit to device