Browse Source

Reuse buffer from first pakcage

Remove some debug output
tags/3.4.0
noisyfox 7 years ago
parent
commit
f2b8e91f81
3 changed files with 31 additions and 21 deletions
  1. +4
    -6
      shadowsocks-csharp/Controller/Service/Http2Socks5.cs
  2. +1
    -1
      shadowsocks-csharp/ForwardProxy/HttpProxy.cs
  3. +26
    -14
      shadowsocks-csharp/Util/Sockets/LineReader.cs

+ 4
- 6
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(_localSocket, firstPacket, 0, length, OnLineRead, OnException, OnFinish,
Encoding.UTF8, HTTP_CRLF, 1024, null);
new LineReader(firstPacket, _localSocket, firstPacket, 0, length, OnLineRead, OnException, OnFinish,
Encoding.UTF8, HTTP_CRLF, null);
}

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

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

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

if (bytesRead > 0)
{
@@ -302,7 +301,6 @@ 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(_remote, OnLineRead, OnException, OnFinish, Encoding.UTF8, HTTP_CRLF, 1024, new FakeAsyncResult(ar, state));
new LineReader(1024, _remote, OnLineRead, OnException, OnFinish, Encoding.UTF8, HTTP_CRLF, new FakeAsyncResult(ar, state));
}
catch (Exception ex)
{


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

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

public LineReader(WrappedSocket socket, byte[] firstPackge, int index, int length,
public LineReader(byte[] buffer, 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, int maxLineBytes,
Encoding encoding, string delimiter,
object state)
{
if (buffer == null)
{
throw new ArgumentNullException(nameof(buffer));
}
if (socket == null)
{
throw new ArgumentNullException(nameof(socket));
@@ -43,9 +47,9 @@ namespace Shadowsocks.Util.Sockets
throw new ArgumentNullException(nameof(delimiter));
}

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

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

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

_delimiterSearch = new ByteSearch.SearchTarget(_delimiterBytes);

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

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

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

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)
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)
{
}



Loading…
Cancel
Save