@@ -225,10 +225,11 @@ func (s *OutlineServer) runConfig(config Config) (func() error, error) {
225
225
ciphers := service .NewCipherList ()
226
226
ciphers .Update (cipherList )
227
227
228
- streamHandler , packetHandler := service .NewShadowsocksHandlers (
228
+ streamHandler , associationHandler := service .NewShadowsocksHandlers (
229
229
service .WithCiphers (ciphers ),
230
230
service .WithMetrics (s .serviceMetrics ),
231
231
service .WithReplayCache (& s .replayCache ),
232
+ service .WithPacketListener (service .MakeTargetUDPListener (s .natTimeout , 0 )),
232
233
service .WithLogger (slog .Default ()),
233
234
)
234
235
ln , err := lnSet .ListenStream (addr )
@@ -245,27 +246,22 @@ func (s *OutlineServer) runConfig(config Config) (func() error, error) {
245
246
return err
246
247
}
247
248
slog .Info ("UDP service started." , "address" , pc .LocalAddr ().String ())
248
- tgtListener := service .MakeTargetUDPListener (s .natTimeout , 0 )
249
- go service .PacketServe (pc , func (conn net.Conn ) (service.PacketAssociation , error ) {
250
- m := s .serviceMetrics .AddOpenUDPAssociation (conn )
251
- assoc , err := service .NewPacketAssociation (conn , tgtListener , m )
252
- if err != nil {
253
- return nil , fmt .Errorf ("failed to handle association: %v" , err )
254
- }
255
- return assoc , nil
256
- }, packetHandler .HandlePacket , s .serverMetrics )
249
+ go service .PacketServe (pc , func (ctx context.Context , conn net.Conn ) {
250
+ associationHandler .HandleAssociation (ctx , conn , s .serviceMetrics .AddOpenUDPAssociation (conn ))
251
+ }, s .serverMetrics )
257
252
}
258
253
259
254
for _ , serviceConfig := range config .Services {
260
255
ciphers , err := newCipherListFromConfig (serviceConfig )
261
256
if err != nil {
262
257
return fmt .Errorf ("failed to create cipher list from config: %v" , err )
263
258
}
264
- streamHandler , packetHandler := service .NewShadowsocksHandlers (
259
+ streamHandler , associationHandler := service .NewShadowsocksHandlers (
265
260
service .WithCiphers (ciphers ),
266
261
service .WithMetrics (s .serviceMetrics ),
267
262
service .WithReplayCache (& s .replayCache ),
268
263
service .WithStreamDialer (service .MakeValidatingTCPStreamDialer (onet .RequirePublicIP , serviceConfig .Dialer .Fwmark )),
264
+ service .WithPacketListener (service .MakeTargetUDPListener (s .natTimeout , serviceConfig .Dialer .Fwmark )),
269
265
service .WithLogger (slog .Default ()),
270
266
)
271
267
if err != nil {
@@ -298,15 +294,9 @@ func (s *OutlineServer) runConfig(config Config) (func() error, error) {
298
294
}
299
295
return serviceConfig .Dialer .Fwmark
300
296
}())
301
- tgtListener := service .MakeTargetUDPListener (s .natTimeout , serviceConfig .Dialer .Fwmark )
302
- go service .PacketServe (pc , func (conn net.Conn ) (service.PacketAssociation , error ) {
303
- m := s .serviceMetrics .AddOpenUDPAssociation (conn )
304
- assoc , err := service .NewPacketAssociation (conn , tgtListener , m )
305
- if err != nil {
306
- return nil , fmt .Errorf ("failed to handle association: %v" , err )
307
- }
308
- return assoc , nil
309
- }, packetHandler .HandlePacket , s .serverMetrics )
297
+ go service .PacketServe (pc , func (ctx context.Context , conn net.Conn ) {
298
+ associationHandler .HandleAssociation (ctx , conn , s .serviceMetrics .AddOpenUDPAssociation (conn ))
299
+ }, s .serverMetrics )
310
300
}
311
301
}
312
302
totalCipherCount += len (serviceConfig .Keys )
0 commit comments