@@ -16,7 +16,7 @@ use crate::traits::PrintFullError;
16
16
static SERVERS : OnceCell < RwLock < Vec < Server > > > = OnceCell :: const_new ( ) ;
17
17
18
18
struct Server {
19
- host : String ,
19
+ server : String ,
20
20
uplink_only : bool ,
21
21
gateway_id_prefixes : Vec < lrwn_filters:: EuiPrefix > ,
22
22
downlink_tx : UnboundedSender < ( GatewayId , Vec < u8 > ) > ,
@@ -43,21 +43,21 @@ impl Server {
43
43
// Check if we already have a socket for the given Gateway ID to the
44
44
// server and if not, we create it.
45
45
if let std:: collections:: hash_map:: Entry :: Vacant ( e) = self . sockets . entry ( gateway_id) {
46
- info ! ( gateway_id = %gateway_id, server = %self . host , "Initializing forwarder to server" ) ;
46
+ info ! ( gateway_id = %gateway_id, server = %self . server , "Initializing forwarder to server" ) ;
47
47
48
48
let socket = UdpSocket :: bind ( "0.0.0.0:0" )
49
49
. await
50
50
. context ( "UDP socket bind" ) ?;
51
51
socket
52
- . connect ( & self . host )
52
+ . connect ( & self . server )
53
53
. await
54
54
. context ( "UDP socket connect" ) ?;
55
55
56
56
let socket = Arc :: new ( socket) ;
57
57
let ( stop_tx, stop_rx) = oneshot:: channel :: < ( ) > ( ) ;
58
58
59
59
tokio:: spawn ( handle_downlink (
60
- self . host . clone ( ) ,
60
+ self . server . clone ( ) ,
61
61
stop_rx,
62
62
self . uplink_only ,
63
63
socket. clone ( ) ,
@@ -142,23 +142,29 @@ async fn handle_uplink_packet(gateway_id: GatewayId, data: &[u8]) -> Result<()>
142
142
let socket = server. get_server_socket ( gateway_id) . await ?;
143
143
socket. last_uplink = SystemTime :: now ( ) ;
144
144
145
+ let span = tracing:: info_span!( "" , addr = %socket. socket. peer_addr( ) . unwrap( ) ) ;
146
+ let _enter = span. enter ( ) ;
147
+
145
148
match packet_type {
146
149
PacketType :: PushData => {
150
+ info ! ( packet_type = %packet_type, "Sending UDP packet" ) ;
147
151
socket. push_data_token = Some ( random_token) ;
148
152
socket. socket . send ( data) . await . context ( "Send UDP packet" ) ?;
149
- inc_server_udp_sent_count ( & server. host , packet_type) . await ;
153
+ inc_server_udp_sent_count ( & server. server , packet_type) . await ;
150
154
}
151
155
PacketType :: PullData => {
156
+ info ! ( packet_type = %packet_type, "Sending UDP packet" ) ;
152
157
socket. pull_data_token = Some ( random_token) ;
153
158
socket. socket . send ( data) . await . context ( "Send UDP packet" ) ?;
154
- inc_server_udp_sent_count ( & server. host , packet_type) . await ;
159
+ inc_server_udp_sent_count ( & server. server , packet_type) . await ;
155
160
}
156
161
PacketType :: TxAck => {
157
162
if let Some ( pull_resp_token) = socket. pull_resp_token {
158
163
if pull_resp_token == random_token {
164
+ info ! ( packet_type = %packet_type, "Sending UDP packet" ) ;
159
165
socket. pull_resp_token = None ;
160
166
socket. socket . send ( data) . await . context ( "Send UDP packet" ) ?;
161
- inc_server_udp_sent_count ( & server. host , packet_type) . await ;
167
+ inc_server_udp_sent_count ( & server. server , packet_type) . await ;
162
168
}
163
169
}
164
170
}
@@ -243,12 +249,10 @@ async fn handle_downlink_packet(
243
249
}
244
250
}
245
251
PacketType :: PullAck => {
246
- let token = get_random_token ( data) ?;
247
- info ! ( token = token, "PULL_DATA acknowledged" ) ;
252
+ // TODO: keep ack stats
248
253
}
249
254
PacketType :: PushAck => {
250
- let token = get_random_token ( data) ?;
251
- info ! ( token = token, "PUSH_DATA acknowledged" ) ;
255
+ // TODO: keep ack stats
252
256
}
253
257
254
258
_ => { }
@@ -271,13 +275,13 @@ async fn handle_pull_resp(
271
275
}
272
276
273
277
async fn add_server (
274
- host : String ,
278
+ server : String ,
275
279
uplink_only : bool ,
276
280
gateway_id_prefixes : Vec < lrwn_filters:: EuiPrefix > ,
277
281
downlink_tx : UnboundedSender < ( GatewayId , Vec < u8 > ) > ,
278
282
) -> Result < ( ) > {
279
283
info ! (
280
- host = host ,
284
+ server = server ,
281
285
uplink_only = uplink_only,
282
286
gateway_id_prefixes = ?gateway_id_prefixes,
283
287
"Adding server"
@@ -289,7 +293,7 @@ async fn add_server(
289
293
290
294
let mut servers = servers. write ( ) . await ;
291
295
servers. push ( Server {
292
- host ,
296
+ server ,
293
297
uplink_only,
294
298
gateway_id_prefixes,
295
299
downlink_tx,
@@ -316,26 +320,26 @@ async fn cleanup_sockets() {
316
320
if duration < Duration :: from_secs ( 60 ) {
317
321
true
318
322
} else {
319
- warn ! ( server = server. host , gateway_id = %k, "Cleaning up inactive socket" ) ;
323
+ warn ! ( server = server. server , gateway_id = %k, "Cleaning up inactive socket" ) ;
320
324
false
321
325
}
322
326
} else {
323
- warn ! ( server = server. host , gateway_id = %k, "Cleaning up inactive socket" ) ;
327
+ warn ! ( server = server. server , gateway_id = %k, "Cleaning up inactive socket" ) ;
324
328
false
325
329
}
326
330
} ) ;
327
331
}
328
332
}
329
333
}
330
334
331
- async fn set_pull_resp_token ( host : & str , gateway_id : GatewayId , token : u16 ) -> Result < ( ) > {
335
+ async fn set_pull_resp_token ( srv : & str , gateway_id : GatewayId , token : u16 ) -> Result < ( ) > {
332
336
let servers = SERVERS
333
337
. get_or_init ( || async { RwLock :: new ( Vec :: new ( ) ) } )
334
338
. await ;
335
339
let mut servers = servers. write ( ) . await ;
336
340
337
341
for server in servers. iter_mut ( ) {
338
- if server. host . eq ( host ) {
342
+ if server. server . eq ( srv ) {
339
343
if let Some ( v) = server. sockets . get_mut ( & gateway_id) {
340
344
v. pull_resp_token = Some ( token) ;
341
345
}
0 commit comments