@@ -32,23 +32,23 @@ type Options struct {
32
32
Logger slog.Logger
33
33
}
34
34
35
- type Dialer func (ctx context.Context , options * peer. ConnOptions ) (* peerbroker.Listener , error )
35
+ type Dialer func (ctx context.Context , logger slog. Logger ) (* peerbroker.Listener , error )
36
36
37
- func New (dialer Dialer , options * peer. ConnOptions ) io.Closer {
37
+ func New (dialer Dialer , logger slog. Logger ) io.Closer {
38
38
ctx , cancelFunc := context .WithCancel (context .Background ())
39
39
server := & agent {
40
- clientDialer : dialer ,
41
- options : options ,
42
- closeCancel : cancelFunc ,
43
- closed : make (chan struct {}),
40
+ dialer : dialer ,
41
+ logger : logger ,
42
+ closeCancel : cancelFunc ,
43
+ closed : make (chan struct {}),
44
44
}
45
45
server .init (ctx )
46
46
return server
47
47
}
48
48
49
49
type agent struct {
50
- clientDialer Dialer
51
- options * peer. ConnOptions
50
+ dialer Dialer
51
+ logger slog. Logger
52
52
53
53
connCloseWait sync.WaitGroup
54
54
closeCancel context.CancelFunc
@@ -64,18 +64,18 @@ func (a *agent) run(ctx context.Context) {
64
64
// An exponential back-off occurs when the connection is failing to dial.
65
65
// This is to prevent server spam in case of a coderd outage.
66
66
for retrier := retry .New (50 * time .Millisecond , 10 * time .Second ); retrier .Wait (ctx ); {
67
- peerListener , err = a .clientDialer (ctx , a .options )
67
+ peerListener , err = a .dialer (ctx , a .logger )
68
68
if err != nil {
69
69
if errors .Is (err , context .Canceled ) {
70
70
return
71
71
}
72
72
if a .isClosed () {
73
73
return
74
74
}
75
- a .options . Logger .Warn (context .Background (), "failed to dial" , slog .Error (err ))
75
+ a .logger .Warn (context .Background (), "failed to dial" , slog .Error (err ))
76
76
continue
77
77
}
78
- a .options . Logger .Info (context .Background (), "connected" )
78
+ a .logger .Info (context .Background (), "connected" )
79
79
break
80
80
}
81
81
select {
@@ -90,7 +90,7 @@ func (a *agent) run(ctx context.Context) {
90
90
if a .isClosed () {
91
91
return
92
92
}
93
- a .options . Logger .Debug (ctx , "peer listener accept exited; restarting connection" , slog .Error (err ))
93
+ a .logger .Debug (ctx , "peer listener accept exited; restarting connection" , slog .Error (err ))
94
94
a .run (ctx )
95
95
return
96
96
}
@@ -105,10 +105,9 @@ func (a *agent) handlePeerConn(ctx context.Context, conn *peer.Conn) {
105
105
go func () {
106
106
select {
107
107
case <- a .closed :
108
- _ = conn .Close ()
109
108
case <- conn .Closed ():
110
109
}
111
- <- conn .Closed ()
110
+ _ = conn .Close ()
112
111
a .connCloseWait .Done ()
113
112
}()
114
113
for {
@@ -117,15 +116,15 @@ func (a *agent) handlePeerConn(ctx context.Context, conn *peer.Conn) {
117
116
if errors .Is (err , peer .ErrClosed ) || a .isClosed () {
118
117
return
119
118
}
120
- a .options . Logger .Debug (ctx , "accept channel from peer connection" , slog .Error (err ))
119
+ a .logger .Debug (ctx , "accept channel from peer connection" , slog .Error (err ))
121
120
return
122
121
}
123
122
124
123
switch channel .Protocol () {
125
124
case "ssh" :
126
125
go a .sshServer .HandleConn (channel .NetConn ())
127
126
default :
128
- a .options . Logger .Warn (ctx , "unhandled protocol from channel" ,
127
+ a .logger .Warn (ctx , "unhandled protocol from channel" ,
129
128
slog .F ("protocol" , channel .Protocol ()),
130
129
slog .F ("label" , channel .Label ()),
131
130
)
@@ -145,7 +144,7 @@ func (a *agent) init(ctx context.Context) {
145
144
if err != nil {
146
145
panic (err )
147
146
}
148
- sshLogger := a .options . Logger .Named ("ssh-server" )
147
+ sshLogger := a .logger .Named ("ssh-server" )
149
148
forwardHandler := & ssh.ForwardedTCPHandler {}
150
149
a .sshServer = & ssh.Server {
151
150
ChannelHandlers : map [string ]ssh.ChannelHandler {
@@ -158,7 +157,7 @@ func (a *agent) init(ctx context.Context) {
158
157
Handler : func (session ssh.Session ) {
159
158
err := a .handleSSHSession (session )
160
159
if err != nil {
161
- a .options . Logger .Warn (ctx , "ssh session failed" , slog .Error (err ))
160
+ a .logger .Warn (ctx , "ssh session failed" , slog .Error (err ))
162
161
_ = session .Exit (1 )
163
162
return
164
163
}
@@ -194,15 +193,15 @@ func (a *agent) init(ctx context.Context) {
194
193
"sftp" : func (session ssh.Session ) {
195
194
server , err := sftp .NewServer (session )
196
195
if err != nil {
197
- a .options . Logger .Debug (session .Context (), "initialize sftp server" , slog .Error (err ))
196
+ a .logger .Debug (session .Context (), "initialize sftp server" , slog .Error (err ))
198
197
return
199
198
}
200
199
defer server .Close ()
201
200
err = server .Serve ()
202
201
if errors .Is (err , io .EOF ) {
203
202
return
204
203
}
205
- a .options . Logger .Debug (session .Context (), "sftp server exited with error" , slog .Error (err ))
204
+ a .logger .Debug (session .Context (), "sftp server exited with error" , slog .Error (err ))
206
205
},
207
206
},
208
207
}
@@ -250,7 +249,7 @@ func (a *agent) handleSSHSession(session ssh.Session) error {
250
249
for win := range windowSize {
251
250
err = ptty .Resize (uint16 (win .Width ), uint16 (win .Height ))
252
251
if err != nil {
253
- a .options . Logger .Warn (context .Background (), "failed to resize tty" , slog .Error (err ))
252
+ a .logger .Warn (context .Background (), "failed to resize tty" , slog .Error (err ))
254
253
}
255
254
}
256
255
}()
0 commit comments