OSDN Git Service

Status-Lineが空のときに例外を出さない
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / HttpProxy.cs
index f73e01c..95d81af 100644 (file)
@@ -47,7 +47,7 @@ namespace KancolleSniffer
         {\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
@@ -103,27 +103,31 @@ namespace KancolleSniffer
                 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
                     ReceiveResponse();\r
+                    if (_session.Response.StatusCode == null)\r
+                        return;\r
                     SendResponse();\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:g}] " + e + "\r\n");\r
                 }\r
                 finally\r
                 {\r
@@ -134,6 +138,8 @@ namespace KancolleSniffer
             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
@@ -158,7 +164,10 @@ namespace KancolleSniffer
 \r
             private void ReceiveResponse()\r
             {\r
-                _session.Response.StatusLine = _serverStream.ReadLine();\r
+                var statusLine = _serverStream.ReadLine();\r
+                if (statusLine == "")\r
+                    return;\r
+                _session.Response.StatusLine = statusLine;\r
                 _session.Response.Headers = _serverStream.ReadHeaders();\r
                 if (HasBody)\r
                     _session.Response.ReadBody(_serverStream);\r
@@ -293,7 +302,7 @@ namespace KancolleSniffer
 \r
             public string Headers\r
             {\r
-                get { return _headers; }\r
+                get => _headers;\r
                 set\r
                 {\r
                     _headers = value;\r
@@ -331,8 +340,7 @@ namespace KancolleSniffer
                 var s = GetField("content-length");\r
                 if (s != null)\r
                 {\r
-                    int len;\r
-                    ContentLength = int.TryParse(s, out len) ? len : -1;\r
+                    ContentLength = int.TryParse(s, out var len) ? len : -1;\r
                 }\r
                 TransferEncoding = GetField("transfer-encoding")?.ToLower(CultureInfo.InvariantCulture);\r
                 ContentType = GetField("content-type");\r
@@ -415,7 +423,7 @@ namespace KancolleSniffer
 \r
             public string RequestLine\r
             {\r
-                get { return _requestLine; }\r
+                get => _requestLine;\r
                 set\r
                 {\r
                     _requestLine = value;\r
@@ -446,7 +454,7 @@ namespace KancolleSniffer
 \r
             public string StatusLine\r
             {\r
-                get { return _statusLine; }\r
+                get => _statusLine;\r
                 set\r
                 {\r
                     _statusLine = value;\r
@@ -531,14 +539,10 @@ namespace KancolleSniffer
                         break;\r
                     var ext = size.IndexOf(';');\r
                     size = ext == -1 ? size.Substring(0, size.Length - 2) : size.Substring(0, ext);\r
-                    int val;\r
-                    if (!int.TryParse(size, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out val))\r
+                    if (!int.TryParse(size, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var 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