|
|
@@ -2208,8 +2208,12 @@ void peer_recv_handler_send (struct peer_data *peer, uint8_t *data, int data_len
|
|
|
}
|
|
|
|
|
|
out:
|
|
|
- // accept packet
|
|
|
- if (!local) {
|
|
|
+ // pass packet to device, or accept immediately
|
|
|
+ // NOTE: this must be done first, because DataProtoDest_SubmitRelayFrame needs the frame
|
|
|
+ // while it is evaluating!
|
|
|
+ if (local) {
|
|
|
+ PacketPassInterface_Sender_Send(peer->local_recv_if, data, data_len);
|
|
|
+ } else {
|
|
|
PacketPassInterface_Done(&peer->recv_ppi);
|
|
|
}
|
|
|
|
|
|
@@ -2218,11 +2222,6 @@ out:
|
|
|
DataProtoDest_SubmitRelayFrame(&relay_dest->send_dp, &src_peer->relay_source, data, data_len, options.send_buffer_relay_size);
|
|
|
}
|
|
|
|
|
|
- // submit to device
|
|
|
- if (local) {
|
|
|
- PacketPassInterface_Sender_Send(peer->local_recv_if, data, data_len);
|
|
|
- }
|
|
|
-
|
|
|
// inform DataProto of received packet
|
|
|
if (dp_good) {
|
|
|
DataProtoDest_Received(&peer->send_dp, !!(flags & DATAPROTO_FLAGS_RECEIVING_KEEPALIVES));
|