{\r
_listener = new TcpListener(IPAddress.Loopback, LocalPort);\r
_listener.Start();\r
- LocalPort = ((IPEndPoint)(_listener.LocalEndpoint)).Port;\r
+ LocalPort = ((IPEndPoint)_listener.LocalEndpoint).Port;\r
IsInListening = true;\r
Task.Run(() => AcceptClient());\r
}\r
try\r
{\r
ReceiveRequest();\r
+ if (_session.Request.Method == null)\r
+ return;\r
if (_session.Request.Method == "CONNECT")\r
{\r
HandleConnect();\r
return;\r
}\r
+ if (_session.Request.Host.StartsWith("localhost"))\r
+ {\r
+ LogServer.Process(_client, _session.Request.RequestLine);\r
+ return;\r
+ }\r
SendRequest();\r
ReceiveRequestBody();\r
SendRequestBody();\r
Close();\r
AfterSessionComplete?.Invoke(_session);\r
}\r
- catch (SocketException)\r
- {\r
- }\r
- catch (IOException)\r
- {\r
- }\r
- catch (HttpProxyAbort)\r
+ catch (Exception e)\r
{\r
+ File.AppendAllText("debug.log", $"[{DateTime.Now.ToString("g")}] " + e + "\r\n");\r
}\r
finally\r
{\r
private void ReceiveRequest()\r
{\r
var requestLine = _clientStream.ReadLine();\r
+ if (requestLine == "")\r
+ return;\r
_session.Request.RequestLine = requestLine;\r
_session.Request.Headers = _clientStream.ReadHeaders();\r
}\r
if (!int.TryParse(size, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out val))\r
throw new HttpProxyAbort("Can't parse chunk size: " + size);\r
if (val == 0)\r
- {\r
- ReadLine();\r
break;\r
- }\r
var chunk = new byte[val];\r
Read(chunk, 0, chunk.Length);\r
buf.Write(chunk, 0, chunk.Length);\r
\r
public int Read(byte[] buf, int offset, int count)\r
{\r
- try\r
+ var total = 0;\r
+ do\r
{\r
- var total = 0;\r
- do\r
+ int n;\r
+ if (_position < _available)\r
{\r
- int n;\r
- if (_position < _available)\r
- {\r
- n = Math.Min(count, _available - _position);\r
- Buffer.BlockCopy(_buffer, _position, buf, 0, n);\r
- _position += n;\r
- }\r
- else\r
- {\r
- n = _socket.Receive(buf, offset, count, SocketFlags.None);\r
- if (n == 0)\r
- return total == 0 ? n : total;\r
- }\r
- count -= n;\r
- offset += n;\r
- total += n;\r
- } while (count > 0);\r
- return total;\r
- }\r
- catch (IOException)\r
- {\r
- return -1;\r
- }\r
+ n = Math.Min(count, _available - _position);\r
+ Buffer.BlockCopy(_buffer, _position, buf, 0, n);\r
+ _position += n;\r
+ }\r
+ else\r
+ {\r
+ n = _socket.Receive(buf, offset, count, SocketFlags.None);\r
+ if (n == 0)\r
+ return total == 0 ? n : total;\r
+ }\r
+ count -= n;\r
+ offset += n;\r
+ total += n;\r
+ } while (count > 0);\r
+ return total;\r
}\r
\r
public void Write(byte[] buf, int offset, int count)\r
{\r
- try\r
- {\r
- do\r
- {\r
- var n = _socket.Send(buf, offset, count, SocketFlags.None);\r
- if (n == 0)\r
- return;\r
- count -= n;\r
- offset += n;\r
- } while (count > 0);\r
- }\r
- catch (IOException)\r
+ do\r
{\r
- }\r
+ var n = _socket.Send(buf, offset, count, SocketFlags.None);\r
+ if (n == 0)\r
+ return;\r
+ count -= n;\r
+ offset += n;\r
+ } while (count > 0);\r
}\r
\r
public HttpStream Close()\r