OSDN Git Service

proxy.pacをOSDNに依存するのをやめる
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 1 Sep 2016 14:35:16 +0000 (23:35 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 1 Sep 2016 14:35:16 +0000 (23:35 +0900)
KancolleSniffer/Config.cs
KancolleSniffer/ConfigDialog.cs
KancolleSniffer/LogServer.cs
KancolleSniffer/MainForm.cs

index 1a8f96b..d8abf32 100644 (file)
@@ -24,8 +24,6 @@ namespace KancolleSniffer
     public class ProxyConfig\r
     {\r
         public const int DefaultListenPort = 8080;\r
-        public const string AutoConfigUrl = "https://kancollesniffer.osdn.jp/proxy.pac";\r
-        public const string AutoConfigUrlWithPort = "https://kancollesniffer.osdn.jp/proxy.php?port=";\r
         public bool Auto { get; set; }\r
         public int Listen { get; set; }\r
         public bool UseUpstream { get; set; }\r
index 656bdd6..cde8e91 100644 (file)
@@ -129,6 +129,11 @@ namespace KancolleSniffer
             int listen, outbound, server;\r
             if (!ValidatePorts(out listen, out outbound, out server))\r
                 return;\r
+            if (radioButtonAutoConfigOn.Checked && radioButtonServerOff.Checked)\r
+            {\r
+                ShowToolTip("自動設定には閲覧サーバーが必要です。", radioButtonServerOff);\r
+                return;\r
+            }\r
             DialogResult = DialogResult.OK;\r
             if (!ApplyProxySettings(listen, outbound))\r
                 DialogResult = DialogResult.None;\r
index ca47335..252514c 100644 (file)
@@ -74,12 +74,13 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
-        private void Process(Object obj)\r
+        private void Process(object obj)\r
         {\r
             var client = (Socket)obj;\r
             var data = new byte[4096];\r
             var from = DateTime.MinValue;\r
             var to = DateTime.MaxValue;\r
+            var port = 8080;\r
             try\r
             {\r
                 if (client.Receive(data) == 0)\r
@@ -117,6 +118,10 @@ namespace KancolleSniffer
                         double.TryParse(query["to"], out tick);\r
                         to = new DateTime(1970, 1, 1).ToLocalTime().AddSeconds(tick / 1000);\r
                     }\r
+                    if (query["port"] != null)\r
+                    {\r
+                        port = int.Parse(query["port"]);\r
+                    }\r
                 }\r
 \r
                 path = path == "/" ? "index.html" : path.Substring(1);\r
@@ -142,6 +147,11 @@ namespace KancolleSniffer
                     SendFile(client, full, "application/javascript");\r
                     return;\r
                 }\r
+                if (path.EndsWith("proxy.pac"))\r
+                {\r
+                    SendProxyPac(client, port);\r
+                    return;\r
+                }\r
                 SendError(client, "404 Not Found");\r
             }\r
             catch (IOException)\r
@@ -239,6 +249,49 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
+        private void SendProxyPac(Socket client, int port)\r
+        {\r
+            var header = new StreamWriter(new MemoryStream(), Encoding.ASCII);\r
+            header.Write("HTTP/1.1 200 OK\r\n");\r
+            header.Write("Server: KancolleSniffer\r\n");\r
+            header.Write("Date: {0:R}\r\n", DateTime.Now);\r
+            header.Write("Content-Type: {0}\r\n", "application/x-ns-proxy-autoconfig");\r
+            header.Write("Connection: close\r\n\r\n");\r
+            header.Flush();\r
+            client.Send(((MemoryStream)header.BaseStream).ToArray());\r
+\r
+            var pacfile = @"\r
+function FindProxyForURL(url, host) {\r
+  if(isInNet(host, ""203.104.209.71"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.184.15"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.184.16"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.187.205"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.187.229"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.187.253"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.188.25"", ""255.255.255.255"") ||\r
+     isInNet(host, ""203.104.248.135"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.7"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.39"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.71"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.103"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.135"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.167"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.215"", ""255.255.255.255"") ||\r
+     isInNet(host, ""125.6.189.247"", ""255.255.255.255"") ||\r
+     isInNet(host, ""203.104.209.23"", ""255.255.255.255"") ||\r
+     isInNet(host, ""203.104.209.39"", ""255.255.255.255"") ||\r
+     isInNet(host, ""203.104.209.55"", ""255.255.255.255"") ||\r
+     isInNet(host, ""203.104.209.102"", ""255.255.255.255"") ||\r
+     isInNet(host, ""203.104.209.87"", ""255.255.255.255"")) {\r
+       return ""PROXY 127.0.0.1:8080"";\r
+    }\r
+  else {\r
+    return ""DIRECT"";\r
+  }\r
+}".Replace("8080", port.ToString());\r
+            client.Send(Encoding.ASCII.GetBytes(pacfile));\r
+        }\r
+\r
         public void Stop()\r
         {\r
             IsListening = false;\r
index 276ff4c..d732ccc 100644 (file)
@@ -305,9 +305,7 @@ namespace KancolleSniffer
             }\r
             if (_config.Proxy.Auto && result)\r
             {\r
-                _systemProxy.SetAutoProxyUrl(HttpProxy.LocalPort == 8080\r
-                    ? ProxyConfig.AutoConfigUrl\r
-                    : ProxyConfig.AutoConfigUrlWithPort + HttpProxy.LocalPort);\r
+                _systemProxy.SetAutoProxyUrl($"http://localhost:{_config.Log.Listen}/proxy.pac?port={_config.Proxy.Listen}");\r
             }\r
             _prevProxyPort = _config.Proxy.Listen;\r
             return result;\r
@@ -349,6 +347,8 @@ namespace KancolleSniffer
         public bool ApplyLogSetting()\r
         {\r
             var result = true;\r
+            if (_config.Proxy.Auto)\r
+                _config.Log.ServerOn = true;\r
             if (_config.Log.ServerOn)\r
             {\r
                 result = StartLogServer();\r