Browse Source

Removed flush and simplified

pull/1731/head
Ferdinando Papale 5 days ago
parent
commit
d2cc5f9225
  1. 38
      src/MongoDB.Driver/Core/Connections/Socks5Helper.cs

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

@ -95,21 +95,17 @@ namespace MongoDB.Driver.Core.Connections
{
var useAuth = authenticationSettings is Socks5AuthenticationSettings.UsernamePasswordAuthenticationSettings;
CreateGreetingRequest(buffer, useAuth);
stream.Write(buffer, 0, useAuth ? 4 : 3);
stream.Flush();
var greetingRequestLength = CreateGreetingRequest(buffer, useAuth);
stream.Write(buffer, 0, greetingRequestLength);
ReadGreetingResponse(stream, buffer, useAuth, authenticationSettings, cancellationToken);
var addressLength = CreateConnectRequest(buffer, targetHost, targetPort);
stream.Write(buffer, 0, addressLength + 6);
stream.Flush();
stream.ReadBytes(buffer, 0, 5, cancellationToken);
var skip = ReadConnectResponse(buffer, cancellationToken);
var skip = ReadConnectResponse(buffer);
stream.ReadBytes(buffer, 0, skip, cancellationToken);
}
finally
{
@ -125,18 +121,16 @@ namespace MongoDB.Driver.Core.Connections
{
var useAuth = authenticationSettings is Socks5AuthenticationSettings.UsernamePasswordAuthenticationSettings;
CreateGreetingRequest(buffer, useAuth);
await stream.WriteAsync(buffer, 0, useAuth ? 4 : 3, cancellationToken).ConfigureAwait(false);
await stream.FlushAsync(cancellationToken).ConfigureAwait(false);
var greetingRequestLength = CreateGreetingRequest(buffer, useAuth);
await stream.WriteAsync(buffer, 0, greetingRequestLength, cancellationToken).ConfigureAwait(false);
await ReadGreetingResponseAsync(stream, buffer, useAuth, authenticationSettings, cancellationToken).ConfigureAwait(false);
var addressLength = CreateConnectRequest(buffer, targetHost, targetPort);
await stream.WriteAsync(buffer, 0, addressLength + 6, cancellationToken).ConfigureAwait(false);
await stream.FlushAsync(cancellationToken).ConfigureAwait(false);
await stream.ReadBytesAsync(buffer, 0, 5, cancellationToken).ConfigureAwait(false);
var skip = ReadConnectResponse(buffer, cancellationToken);
var skip = ReadConnectResponse(buffer);
await stream.ReadBytesAsync(buffer, 0, skip, cancellationToken).ConfigureAwait(true);
}
finally
@ -145,7 +139,7 @@ namespace MongoDB.Driver.Core.Connections
}
}
private static void CreateGreetingRequest(byte[] buffer, bool useAuth)
private static int CreateGreetingRequest(byte[] buffer, bool useAuth)
{
buffer[0] = ProtocolVersion5;
@ -153,13 +147,13 @@ namespace MongoDB.Driver.Core.Connections
{
buffer[1] = 1;
buffer[2] = MethodNoAuth;
return 3;
}
else
{
buffer[1] = 2;
buffer[2] = MethodNoAuth;
buffer[3] = MethodUsernamePassword;
}
buffer[1] = 2;
buffer[2] = MethodNoAuth;
buffer[3] = MethodUsernamePassword;
return 4;
}
private static void ReadGreetingResponse(Stream stream, byte[] buffer, bool useAuth, Socks5AuthenticationSettings authenticationSettings, CancellationToken cancellationToken)
@ -214,7 +208,6 @@ namespace MongoDB.Driver.Core.Connections
var authLength = 3 + usernameLength + passwordLength;
stream.Write(buffer, 0, authLength);
stream.Flush();
stream.ReadBytes(buffer, 0, 2, cancellationToken);
if (buffer[0] != SubnegotiationVersion || buffer[1] != Socks5Success)
@ -237,7 +230,7 @@ namespace MongoDB.Driver.Core.Connections
var authLength = 3 + usernameLength + passwordLength;
await stream.WriteAsync(buffer, 0, authLength, cancellationToken).ConfigureAwait(false);
await stream.FlushAsync(cancellationToken).ConfigureAwait(false);
await stream.ReadBytesAsync(buffer, 0, 2, cancellationToken).ConfigureAwait(false);
if (buffer[0] != SubnegotiationVersion || buffer[1] != Socks5Success)
@ -284,7 +277,8 @@ namespace MongoDB.Driver.Core.Connections
return addressLength;
}
private static int ReadConnectResponse(byte[] buffer, CancellationToken cancellationToken)
// Reads the SOCKS5 connect response and returns the number of bytes to skip in the buffer.
private static int ReadConnectResponse(byte[] buffer)
{
VerifyProtocolVersion(buffer[0]);

Loading…
Cancel
Save