@@ -21,16 +21,18 @@ func NewClientConn(ctx context.Context, n uint8, sendFunc sendBytesFunc,
21
21
math .MaxUint8 )
22
22
}
23
23
24
- conn := newGoBackNConn ( ctx , sendFunc , receiveFunc , false , n )
24
+ cfg := newConfig ( sendFunc , receiveFunc , n )
25
25
26
26
// Apply functional options
27
27
for _ , o := range opts {
28
- o (conn )
28
+ o (cfg )
29
29
}
30
30
31
+ conn := newGoBackNConn (ctx , cfg , "client" )
32
+
31
33
if err := conn .clientHandshake (); err != nil {
32
34
if err := conn .Close (); err != nil {
33
- log .Errorf ("error closing gbn ClientConn: %v" , err )
35
+ conn . log .Errorf ("error closing gbn ClientConn: %v" , err )
34
36
}
35
37
return nil , err
36
38
}
@@ -76,7 +78,7 @@ func (g *GoBackNConn) clientHandshake() error {
76
78
case <- recvNext :
77
79
}
78
80
79
- b , err := g .recvFromStream (g .ctx )
81
+ b , err := g .cfg . recvFromStream (g .ctx )
80
82
if err != nil {
81
83
errChan <- err
82
84
return
@@ -101,21 +103,22 @@ func (g *GoBackNConn) clientHandshake() error {
101
103
handshake:
102
104
for {
103
105
// start Handshake
104
- msg := & PacketSYN {N : g .n }
106
+ msg := & PacketSYN {N : g .cfg . n }
105
107
msgBytes , err := msg .Serialize ()
106
108
if err != nil {
107
109
return err
108
110
}
109
111
110
112
// Send SYN
111
- log .Debugf ("Client sending SYN" )
112
- if err := g .sendToStream (g .ctx , msgBytes ); err != nil {
113
+ g . log .Debugf ("Sending SYN" )
114
+ if err := g .cfg . sendToStream (g .ctx , msgBytes ); err != nil {
113
115
return err
114
116
}
115
117
116
118
for {
117
119
// Wait for SYN
118
- log .Debugf ("Client waiting for SYN" )
120
+ g .log .Debugf ("Waiting for SYN" )
121
+
119
122
select {
120
123
case recvNext <- 1 :
121
124
case <- g .quit :
@@ -127,8 +130,10 @@ handshake:
127
130
128
131
var b []byte
129
132
select {
130
- case <- time .After (g .handshakeTimeout ):
131
- log .Debugf ("SYN resendTimeout. Resending SYN." )
133
+ case <- time .After (g .cfg .handshakeTimeout ):
134
+ g .log .Debugf ("SYN resendTimeout. Resending " +
135
+ "SYN." )
136
+
132
137
continue handshake
133
138
case <- g .quit :
134
139
return nil
@@ -144,7 +149,8 @@ handshake:
144
149
return err
145
150
}
146
151
147
- log .Debugf ("Client got %T" , resp )
152
+ g .log .Debugf ("Got %T" , resp )
153
+
148
154
switch r := resp .(type ) {
149
155
case * PacketSYN :
150
156
respSYN = r
@@ -159,24 +165,24 @@ handshake:
159
165
}
160
166
}
161
167
162
- log .Debugf ("Client got SYN" )
168
+ g . log .Debugf ("Got SYN" )
163
169
164
- if respSYN .N != g .n {
170
+ if respSYN .N != g .cfg . n {
165
171
return io .EOF
166
172
}
167
173
168
174
// Send SYNACK
169
- log .Debugf ("Client sending SYNACK" )
175
+ g . log .Debugf ("Sending SYNACK" )
170
176
synack , err := new (PacketSYNACK ).Serialize ()
171
177
if err != nil {
172
178
return err
173
179
}
174
180
175
- if err := g .sendToStream (g .ctx , synack ); err != nil {
181
+ if err := g .cfg . sendToStream (g .ctx , synack ); err != nil {
176
182
return err
177
183
}
178
184
179
- log .Debugf ("Client Handshake complete" )
185
+ g . log .Debugf ("Handshake complete" )
180
186
181
187
return nil
182
188
}
0 commit comments