OSDN Git Service

資材グラフの描画を高速化する
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / HttpProxy.cs
index 6e4cf4b..1b6dc66 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,11 +103,18 @@ 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
@@ -116,14 +123,9 @@ namespace KancolleSniffer
                     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
@@ -134,6 +136,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
@@ -535,10 +539,7 @@ namespace KancolleSniffer
                     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
@@ -571,52 +572,39 @@ namespace KancolleSniffer
 \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