@@ -133,13 +133,14 @@ impl NatManager {
133133 source : dgram_src. address ,
134134 destination : pkt. dst_addr . clone ( ) ,
135135 inbound_tag : inbound_tag. to_string ( ) ,
136+ process_name : dgram_src. process_name . clone ( ) ,
136137 ..Default :: default ( )
137138 } ) ;
138139 if sess. inbound_tag . is_empty ( ) {
139140 sess. inbound_tag = inbound_tag. to_string ( ) ;
140141 }
141142
142- self . add_session ( sess, * dgram_src, client_ch_tx. clone ( ) , & mut guard)
143+ self . add_session ( sess, dgram_src. clone ( ) , client_ch_tx. clone ( ) , & mut guard)
143144 . await ;
144145
145146 debug ! (
@@ -170,36 +171,38 @@ impl NatManager {
170171 mpsc:: channel ( * crate :: option:: UDP_UPLINK_CHANNEL_SIZE ) ;
171172 let ( downlink_abort_tx, downlink_abort_rx) = oneshot:: channel ( ) ;
172173
173- guard. insert ( raddr, ( target_ch_tx, downlink_abort_tx, Instant :: now ( ) ) ) ;
174+ guard. insert ( raddr. clone ( ) , ( target_ch_tx, downlink_abort_tx, Instant :: now ( ) ) ) ;
174175
175176 let dispatcher = self . dispatcher . clone ( ) ;
176177 let sessions = self . sessions . clone ( ) ;
177178
178179 // Spawns a new task for dispatching to avoid blocking the current task,
179180 // because we have stream type transports for UDP traffic, establishing a
180181 // TCP stream would block the task.
182+ let raddr_cloned = raddr. clone ( ) ;
181183 tokio:: spawn ( async move {
182184 // new socket to communicate with the target.
183185 let socket = match dispatcher. dispatch_datagram ( sess) . await {
184186 Ok ( s) => s,
185187 Err ( e) => {
186- debug ! ( "dispatch {} failed: {}" , & raddr , e) ;
187- sessions. lock ( ) . await . remove ( & raddr ) ;
188+ debug ! ( "dispatch {} failed: {}" , & raddr_cloned , e) ;
189+ sessions. lock ( ) . await . remove ( & raddr_cloned ) ;
188190 return ;
189191 }
190192 } ;
191193
192194 let ( mut target_sock_recv, mut target_sock_send) = socket. split ( ) ;
193195
194196 // downlink
197+ let raddr_downlink = raddr_cloned. clone ( ) ;
195198 let downlink_task = async move {
196199 let mut buf = vec ! [ 0u8 ; * crate :: option:: DATAGRAM_BUFFER_SIZE * 1024 ] ;
197200 loop {
198201 match target_sock_recv. recv_from ( & mut buf) . await {
199202 Err ( err) => {
200203 debug ! (
201204 "Failed to receive downlink packets on session {}: {}" ,
202- & raddr , err
205+ & raddr_downlink , err
203206 ) ;
204207 break ;
205208 }
@@ -208,20 +211,20 @@ impl NatManager {
208211 let pkt = UdpPacket :: new (
209212 buf[ ..n] . to_vec ( ) ,
210213 addr. clone ( ) ,
211- SocksAddr :: from ( raddr . address ) ,
214+ SocksAddr :: from ( raddr_downlink . address ) ,
212215 ) ;
213216 if let Err ( err) = client_ch_tx. send ( pkt) . await {
214217 debug ! (
215218 "Failed to send downlink packets on session {} to {}: {}" ,
216- & raddr , & addr, err
219+ & raddr_downlink , & addr, err
217220 ) ;
218221 break ;
219222 }
220223
221224 // activity update
222225 {
223226 let mut sessions = sessions. lock ( ) . await ;
224- if let Some ( sess) = sessions. get_mut ( & raddr ) {
227+ if let Some ( sess) = sessions. get_mut ( & raddr_downlink ) {
225228 if addr. port ( ) == 53 {
226229 // If the destination port is 53, we assume it's a
227230 // DNS query and set a negative timeout so it will
@@ -237,7 +240,7 @@ impl NatManager {
237240 }
238241 }
239242 }
240- sessions. lock ( ) . await . remove ( & raddr ) ;
243+ sessions. lock ( ) . await . remove ( & raddr_downlink ) ;
241244 } ;
242245
243246 let ( downlink_task, downlink_task_handle) = abortable ( downlink_task) ;
@@ -250,6 +253,7 @@ impl NatManager {
250253 } ) ;
251254
252255 // uplink
256+ let raddr_uplink = raddr_cloned. clone ( ) ;
253257 tokio:: spawn ( async move {
254258 while let Some ( pkt) = target_ch_rx. recv ( ) . await {
255259 trace ! (
@@ -260,13 +264,13 @@ impl NatManager {
260264 if let Err ( e) = target_sock_send. send_to ( & pkt. data , & pkt. dst_addr ) . await {
261265 debug ! (
262266 "Failed to send uplink packets on session {} to {}: {:?}" ,
263- & raddr , & pkt. dst_addr, e
267+ & raddr_uplink , & pkt. dst_addr, e
264268 ) ;
265269 break ;
266270 }
267271 }
268272 if let Err ( e) = target_sock_send. close ( ) . await {
269- debug ! ( "Failed to close outbound datagram {}: {}" , & raddr , e) ;
273+ debug ! ( "Failed to close outbound datagram {}: {}" , & raddr_uplink , e) ;
270274 }
271275 } ) ;
272276 } ) ;
0 commit comments