Browse Source

Revert "Reuse buffer from first pakcage"

This reverts commit f2b8e91f81.
tags/3.4.2
noisyfox 8 years ago
parent
commit
511a658fd3
3 changed files with 21 additions and 31 deletions
  1. +6
    -4
      shadowsocks-csharp/Controller/Service/Http2Socks5.cs
  2. +1
    -1
      shadowsocks-csharp/ForwardProxy/HttpProxy.cs
  3. +14
    -26
      shadowsocks-csharp/Util/Sockets/LineReader.cs

+ 6
- 4
shadowsocks-csharp/Controller/Service/Http2Socks5.cs View File

@@ -70,8 +70,8 @@ namespace Shadowsocks.Controller.Service
_socks5Port = socks5Port;
_localSocket = new WrappedSocket(socket);
_localSocket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true);
new LineReader(firstPacket, _localSocket, firstPacket, 0, length, OnLineRead, OnException, OnFinish,
Encoding.UTF8, HTTP_CRLF, null);
new LineReader(_localSocket, firstPacket, 0, length, OnLineRead, OnException, OnFinish,
Encoding.UTF8, HTTP_CRLF, 1024, null);
}

private void CheckClose()
@@ -164,8 +164,8 @@ namespace Shadowsocks.Controller.Service

private void SendConnectResponse()
{
var len = Encoding.UTF8.GetBytes(HTTP_CONNECT_200, 0, HTTP_CONNECT_200.Length, _remoteRecvBuffer, 0);
_localSocket.BeginSend(_remoteRecvBuffer, 0, len, SocketFlags.None, Http200SendCallback, null);
var b = Encoding.UTF8.GetBytes(HTTP_CONNECT_200);
_localSocket.BeginSend(b, 0, b.Length, SocketFlags.None, Http200SendCallback, null);
}

private void Http200SendCallback(IAsyncResult ar)
@@ -273,6 +273,7 @@ namespace Shadowsocks.Controller.Service
try
{
int bytesRead = _socks5.EndReceive(ar);
Logging.Debug("Read from remote: " + bytesRead);

if (bytesRead > 0)
{
@@ -301,6 +302,7 @@ namespace Shadowsocks.Controller.Service
try
{
int bytesRead = _localSocket.EndReceive(ar);
Logging.Debug("Read from local: " + bytesRead);

if (bytesRead > 0)
{


+ 1
- 1
shadowsocks-csharp/ForwardProxy/HttpProxy.cs View File

@@ -134,7 +134,7 @@ namespace Shadowsocks.ForwardProxy
_remote.EndSend(ar);

// start line read
new LineReader(1024, _remote, OnLineRead, OnException, OnFinish, Encoding.UTF8, HTTP_CRLF, new FakeAsyncResult(ar, state));
new LineReader(_remote, OnLineRead, OnException, OnFinish, Encoding.UTF8, HTTP_CRLF, 1024, new FakeAsyncResult(ar, state));
}
catch (Exception ex)
{


+ 14
- 26
shadowsocks-csharp/Util/Sockets/LineReader.cs View File

@@ -20,16 +20,12 @@ namespace Shadowsocks.Util.Sockets
private int _bufferDataIndex;
private int _bufferDataLength;

public LineReader(byte[] buffer, WrappedSocket socket, byte[] firstPackge, int index, int length,
public LineReader(WrappedSocket socket, byte[] firstPackge, int index, int length,
Func<string, object, bool> onLineRead, Action<Exception, object> onException,
Action<byte[], int, int, object> onFinish,
Encoding encoding, string delimiter,
Encoding encoding, string delimiter, int maxLineBytes,
object state)
{
if (buffer == null)
{
throw new ArgumentNullException(nameof(buffer));
}
if (socket == null)
{
throw new ArgumentNullException(nameof(socket));
@@ -47,9 +43,9 @@ namespace Shadowsocks.Util.Sockets
throw new ArgumentNullException(nameof(delimiter));
}

if (buffer.Length < length)
if (maxLineBytes < length)
{
throw new ArgumentException("Line buffer length can't less than first package length!", nameof(buffer));
throw new ArgumentException("Line buffer length can't less than first package length!", nameof(maxLineBytes));
}

if (length > 0)
@@ -76,26 +72,19 @@ namespace Shadowsocks.Util.Sockets
throw new ArgumentException("Too short!", nameof(delimiter));
}

if (buffer.Length < _delimiterBytes.Length)
if (maxLineBytes < _delimiterBytes.Length)
{
throw new ArgumentException("Too small!", nameof(buffer));
throw new ArgumentException("Too small!", nameof(maxLineBytes));
}

_delimiterSearch = new ByteSearch.SearchTarget(_delimiterBytes);

_lineBuffer = buffer;
_lineBuffer = new byte[maxLineBytes];

if (length > 0)
{
// process first package
if (buffer == firstPackge)
{
_bufferDataIndex = index;
}
else
{
Array.Copy(firstPackge, index, _lineBuffer, 0, length);
}
Array.Copy(firstPackge, index, _lineBuffer, 0, length);
_bufferDataLength = length;

try
@@ -111,16 +100,15 @@ namespace Shadowsocks.Util.Sockets
else
{
// start reading
socket.BeginReceive(_lineBuffer, 0, _lineBuffer.Length, 0, ReceiveCallback, 0);
socket.BeginReceive(_lineBuffer, 0, maxLineBytes, 0, ReceiveCallback, 0);
}
}

public LineReader(int maxLineBytes, WrappedSocket socket, Func<string, object, bool> onLineRead,
Action<Exception, object> onException, Action<byte[], int, int, object> onFinish, Encoding encoding,
string delimiter, object state)
: this(
new byte[maxLineBytes], socket, null, 0, 0, onLineRead, onException, onFinish, encoding, delimiter,
state)
public LineReader(WrappedSocket socket, Func<string, object, bool> onLineRead,
Action<Exception, object> onException,
Action<byte[], int, int, object> onFinish, Encoding encoding, string delimiter, int maxLineBytes,
object state)
: this(socket, null, 0, 0, onLineRead, onException, onFinish, encoding, delimiter, maxLineBytes, state)
{
}



Loading…
Cancel
Save