Skip to content

Commit d2cc5f9

Browse files
committed
Removed flush and simplified
1 parent b9ceea0 commit d2cc5f9

File tree

1 file changed

+16
-22
lines changed

1 file changed

+16
-22
lines changed

src/MongoDB.Driver/Core/Connections/Socks5Helper.cs

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -95,21 +95,17 @@ public static void PerformSocks5Handshake(Stream stream, EndPoint endPoint, Sock
9595
{
9696
var useAuth = authenticationSettings is Socks5AuthenticationSettings.UsernamePasswordAuthenticationSettings;
9797

98-
CreateGreetingRequest(buffer, useAuth);
99-
100-
stream.Write(buffer, 0, useAuth ? 4 : 3);
101-
stream.Flush();
98+
var greetingRequestLength = CreateGreetingRequest(buffer, useAuth);
99+
stream.Write(buffer, 0, greetingRequestLength);
102100

103101
ReadGreetingResponse(stream, buffer, useAuth, authenticationSettings, cancellationToken);
104102

105103
var addressLength = CreateConnectRequest(buffer, targetHost, targetPort);
106104
stream.Write(buffer, 0, addressLength + 6);
107-
stream.Flush();
108105

109106
stream.ReadBytes(buffer, 0, 5, cancellationToken);
110-
var skip = ReadConnectResponse(buffer, cancellationToken);
107+
var skip = ReadConnectResponse(buffer);
111108
stream.ReadBytes(buffer, 0, skip, cancellationToken);
112-
113109
}
114110
finally
115111
{
@@ -125,18 +121,16 @@ public static async Task PerformSocks5HandshakeAsync(Stream stream, EndPoint end
125121
{
126122
var useAuth = authenticationSettings is Socks5AuthenticationSettings.UsernamePasswordAuthenticationSettings;
127123

128-
CreateGreetingRequest(buffer, useAuth);
129-
await stream.WriteAsync(buffer, 0, useAuth ? 4 : 3, cancellationToken).ConfigureAwait(false);
130-
await stream.FlushAsync(cancellationToken).ConfigureAwait(false);
124+
var greetingRequestLength = CreateGreetingRequest(buffer, useAuth);
125+
await stream.WriteAsync(buffer, 0, greetingRequestLength, cancellationToken).ConfigureAwait(false);
131126

132127
await ReadGreetingResponseAsync(stream, buffer, useAuth, authenticationSettings, cancellationToken).ConfigureAwait(false);
133128

134129
var addressLength = CreateConnectRequest(buffer, targetHost, targetPort);
135130
await stream.WriteAsync(buffer, 0, addressLength + 6, cancellationToken).ConfigureAwait(false);
136-
await stream.FlushAsync(cancellationToken).ConfigureAwait(false);
137131

138132
await stream.ReadBytesAsync(buffer, 0, 5, cancellationToken).ConfigureAwait(false);
139-
var skip = ReadConnectResponse(buffer, cancellationToken);
133+
var skip = ReadConnectResponse(buffer);
140134
await stream.ReadBytesAsync(buffer, 0, skip, cancellationToken).ConfigureAwait(true);
141135
}
142136
finally
@@ -145,21 +139,21 @@ public static async Task PerformSocks5HandshakeAsync(Stream stream, EndPoint end
145139
}
146140
}
147141

148-
private static void CreateGreetingRequest(byte[] buffer, bool useAuth)
142+
private static int CreateGreetingRequest(byte[] buffer, bool useAuth)
149143
{
150144
buffer[0] = ProtocolVersion5;
151145

152146
if (!useAuth)
153147
{
154148
buffer[1] = 1;
155149
buffer[2] = MethodNoAuth;
150+
return 3;
156151
}
157-
else
158-
{
159-
buffer[1] = 2;
160-
buffer[2] = MethodNoAuth;
161-
buffer[3] = MethodUsernamePassword;
162-
}
152+
153+
buffer[1] = 2;
154+
buffer[2] = MethodNoAuth;
155+
buffer[3] = MethodUsernamePassword;
156+
return 4;
163157
}
164158

165159
private static void ReadGreetingResponse(Stream stream, byte[] buffer, bool useAuth, Socks5AuthenticationSettings authenticationSettings, CancellationToken cancellationToken)
@@ -214,7 +208,6 @@ private static void PerformUsernamePasswordAuth(Stream stream, byte[] buffer, So
214208

215209
var authLength = 3 + usernameLength + passwordLength;
216210
stream.Write(buffer, 0, authLength);
217-
stream.Flush();
218211

219212
stream.ReadBytes(buffer, 0, 2, cancellationToken);
220213
if (buffer[0] != SubnegotiationVersion || buffer[1] != Socks5Success)
@@ -237,7 +230,7 @@ private static async Task PerformUsernamePasswordAuthAsync(Stream stream, byte[]
237230

238231
var authLength = 3 + usernameLength + passwordLength;
239232
await stream.WriteAsync(buffer, 0, authLength, cancellationToken).ConfigureAwait(false);
240-
await stream.FlushAsync(cancellationToken).ConfigureAwait(false);
233+
241234

242235
await stream.ReadBytesAsync(buffer, 0, 2, cancellationToken).ConfigureAwait(false);
243236
if (buffer[0] != SubnegotiationVersion || buffer[1] != Socks5Success)
@@ -284,7 +277,8 @@ private static int CreateConnectRequest(byte[] buffer, string targetHost, int ta
284277
return addressLength;
285278
}
286279

287-
private static int ReadConnectResponse(byte[] buffer, CancellationToken cancellationToken)
280+
// Reads the SOCKS5 connect response and returns the number of bytes to skip in the buffer.
281+
private static int ReadConnectResponse(byte[] buffer)
288282
{
289283
VerifyProtocolVersion(buffer[0]);
290284

0 commit comments

Comments
 (0)