| skipped 59 lines |
60 | 60 | | wg := sync.WaitGroup{} |
61 | 61 | | wg.Add(2) |
62 | 62 | | |
63 | | - | go func() { |
64 | | - | defer wg.Done() |
65 | | - | if err := copyPacketData(remote, origin, to, _udpSessionTimeout); err != nil { |
66 | | - | log.Debugf("[UDP] copy data for origin->remote: %v", err) |
67 | | - | } |
68 | | - | }() |
69 | | - | |
70 | | - | go func() { |
71 | | - | defer wg.Done() |
72 | | - | if err := copyPacketData(origin, remote, nil, _udpSessionTimeout); err != nil { |
73 | | - | log.Debugf("[UDP] copy data for remote->origin: %v", err) |
74 | | - | } |
75 | | - | }() |
| 63 | + | go unidirectionalPacketStream(remote, origin, to, "origin->remote", &wg) |
| 64 | + | go unidirectionalPacketStream(origin, remote, nil, "remote->origin", &wg) |
76 | 65 | | |
77 | 66 | | wg.Wait() |
| 67 | + | } |
| 68 | + | |
| 69 | + | func unidirectionalPacketStream(dst, src net.PacketConn, to net.Addr, dir string, wg *sync.WaitGroup) { |
| 70 | + | defer wg.Done() |
| 71 | + | if err := copyPacketData(dst, src, to, _udpSessionTimeout); err != nil { |
| 72 | + | log.Debugf("[UDP] copy data for %s: %v", dir, err) |
| 73 | + | } |
78 | 74 | | } |
79 | 75 | | |
80 | 76 | | func copyPacketData(dst, src net.PacketConn, to net.Addr, timeout time.Duration) error { |
| skipped 48 lines |