Skip to content

Commit 7bb1be2

Browse files
authored
Make sure that closing one direction closes the other, too. (#159)
* Make sure that closing one direction closes the other, too. * Pacify linter.
1 parent 47cd451 commit 7bb1be2

File tree

4 files changed

+23
-57
lines changed

4 files changed

+23
-57
lines changed

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ require (
99
github.com/akamensky/argparse v1.4.0
1010
github.com/go-ini/ini v1.67.0
1111
github.com/landlock-lsm/go-landlock v0.0.0-20240216195629-efb66220540a
12-
github.com/sourcegraph/conc v0.3.0
1312
github.com/things-go/go-socks5 v0.0.5
1413
golang.org/x/net v0.23.0
1514
golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ github.com/landlock-lsm/go-landlock v0.0.0-20240216195629-efb66220540a h1:dz+a1M
1212
github.com/landlock-lsm/go-landlock v0.0.0-20240216195629-efb66220540a/go.mod h1:1NY/VPO8xm3hXw3f+M65z+PJDLUaZA5cu7OfanxoUzY=
1313
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1414
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
15-
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
16-
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
1715
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
1816
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
1917
github.com/things-go/go-socks5 v0.0.5 h1:qvKaGcBkfDrUL33SchHN93srAmYGzb4CxSM2DPYufe8=

http.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import (
1010
"net"
1111
"net/http"
1212
"strings"
13-
14-
"github.com/sourcegraph/conc"
1513
)
1614

1715
const proxyAuthHeaderKey = "Proxy-Authorization"
@@ -32,7 +30,7 @@ func (s *HTTPServer) authenticate(req *http.Request) (int, error) {
3230

3331
auth := req.Header.Get(proxyAuthHeaderKey)
3432
if auth == "" {
35-
return http.StatusProxyAuthRequired, fmt.Errorf(http.StatusText(http.StatusProxyAuthRequired))
33+
return http.StatusProxyAuthRequired, fmt.Errorf("%s", http.StatusText(http.StatusProxyAuthRequired))
3634
}
3735

3836
enc := strings.TrimPrefix(auth, "Basic ")
@@ -131,17 +129,19 @@ func (s *HTTPServer) serve(conn net.Conn) {
131129
log.Println("dial proxy failed: peer nil")
132130
return
133131
}
132+
134133
go func() {
135-
wg := conc.NewWaitGroup()
136-
wg.Go(func() {
137-
_, err = io.Copy(conn, peer)
138-
_ = conn.Close()
139-
})
140-
wg.Go(func() {
141-
_, err = io.Copy(peer, conn)
142-
_ = peer.Close()
143-
})
144-
wg.Wait()
134+
defer conn.Close()
135+
defer peer.Close()
136+
137+
_, _ = io.Copy(conn, peer)
138+
}()
139+
140+
go func() {
141+
defer conn.Close()
142+
defer peer.Close()
143+
144+
_, _ = io.Copy(peer, conn)
145145
}()
146146
}
147147

routine.go

Lines changed: 10 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424
"sync"
2525
"time"
2626

27-
"github.com/sourcegraph/conc"
2827
"github.com/things-go/go-socks5"
2928
"github.com/things-go/go-socks5/bufferpool"
3029

@@ -190,6 +189,9 @@ func (c CredentialValidator) Valid(username, password string) bool {
190189

191190
// connForward copy data from `from` to `to`
192191
func connForward(from io.ReadWriteCloser, to io.ReadWriteCloser) {
192+
defer from.Close()
193+
defer to.Close()
194+
193195
_, err := io.Copy(to, from)
194196
if err != nil {
195197
errorLogger.Printf("Cannot forward traffic: %s\n", err.Error())
@@ -212,20 +214,8 @@ func tcpClientForward(vt *VirtualTun, raddr *addressPort, conn net.Conn) {
212214
return
213215
}
214216

215-
go func() {
216-
wg := conc.NewWaitGroup()
217-
wg.Go(func() {
218-
connForward(sconn, conn)
219-
})
220-
wg.Go(func() {
221-
connForward(conn, sconn)
222-
})
223-
wg.Wait()
224-
_ = sconn.Close()
225-
_ = conn.Close()
226-
sconn = nil
227-
conn = nil
228-
}()
217+
go connForward(sconn, conn)
218+
go connForward(conn, sconn)
229219
}
230220

231221
// STDIOTcpForward starts a new connection via wireguard and forward traffic from `conn`
@@ -250,18 +240,8 @@ func STDIOTcpForward(vt *VirtualTun, raddr *addressPort) {
250240
return
251241
}
252242

253-
go func() {
254-
wg := conc.NewWaitGroup()
255-
wg.Go(func() {
256-
connForward(os.Stdin, sconn)
257-
})
258-
wg.Go(func() {
259-
connForward(sconn, stdout)
260-
})
261-
wg.Wait()
262-
_ = sconn.Close()
263-
sconn = nil
264-
}()
243+
go connForward(os.Stdin, sconn)
244+
go connForward(sconn, stdout)
265245
}
266246

267247
// SpawnRoutine spawns a local TCP server which acts as a proxy to the specified target
@@ -311,20 +291,9 @@ func tcpServerForward(vt *VirtualTun, raddr *addressPort, conn net.Conn) {
311291
return
312292
}
313293

314-
go func() {
315-
gr := conc.NewWaitGroup()
316-
gr.Go(func() {
317-
connForward(sconn, conn)
318-
})
319-
gr.Go(func() {
320-
connForward(conn, sconn)
321-
})
322-
gr.Wait()
323-
_ = sconn.Close()
324-
_ = conn.Close()
325-
sconn = nil
326-
conn = nil
327-
}()
294+
go connForward(sconn, conn)
295+
go connForward(conn, sconn)
296+
328297
}
329298

330299
// SpawnRoutine spawns a TCP server on wireguard which acts as a proxy to the specified target

0 commit comments

Comments
 (0)