From 18963fa14b30038b0616f6c0e82772764acdbf20 Mon Sep 17 00:00:00 2001 From: ChsBuffer <33744752+chsbuffer@users.noreply.github.com> Date: Sat, 29 Aug 2020 10:26:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9BNTT=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Netch/Controllers/MainController.cs | 9 ++++- Netch/Controllers/NTTController.cs | 61 +++++++++++------------------ Netch/Forms/MainForm.Status.cs | 5 +++ 3 files changed, 34 insertions(+), 41 deletions(-) diff --git a/Netch/Controllers/MainController.cs b/Netch/Controllers/MainController.cs index 607e5c52..9412f399 100644 --- a/Netch/Controllers/MainController.cs +++ b/Netch/Controllers/MainController.cs @@ -210,9 +210,14 @@ namespace Netch.Controllers Global.MainForm.NatTypeStatusText(i18N.Translate("Starting NatTester")); // Thread.Sleep(1000); var (nttResult, natType, localEnd, publicEnd) = pNTTController.Start(); - var country = Utils.Utils.GetCityCode(publicEnd); - if (nttResult) Global.MainForm.NatTypeStatusText(natType, country); + if (nttResult) + { + var country = Utils.Utils.GetCityCode(publicEnd); + Global.MainForm.NatTypeStatusText(natType, country); + } + else + Global.MainForm.NatTypeStatusText(natType); }); break; } diff --git a/Netch/Controllers/NTTController.cs b/Netch/Controllers/NTTController.cs index 95bad99e..429dda47 100644 --- a/Netch/Controllers/NTTController.cs +++ b/Netch/Controllers/NTTController.cs @@ -1,19 +1,17 @@ using System; using System.ComponentModel; using System.Diagnostics; +using System.Linq; using Netch.Utils; namespace Netch.Controllers { public class NTTController : Controller { - private string _Other_address; - private string _Binding_test; - private string _Local_address; - private string _Mapped_address; - private string _Nat_mapping_behavior; - private string _Nat_filtering_behavior; - private string _lastResult; + private string _localEnd; + private string _publicEnd; + private string _natType; + private bool _nttResult; public NTTController() { @@ -27,6 +25,9 @@ namespace Netch.Controllers /// public (bool, string, string, string) Start() { + _nttResult = false; + _natType = _localEnd = _publicEnd = null; + try { InitInstance($" {Global.Settings.STUN_Server} {Global.Settings.STUN_Server_Port}"); @@ -36,17 +37,7 @@ namespace Netch.Controllers Instance.BeginOutputReadLine(); Instance.BeginErrorReadLine(); Instance.WaitForExit(); - - /* var result = _lastResult.Split('\n'); - var natType = result[0]; - var localEnd = result[1]; - var publicEnd = result[2];*/ - - var natType = _lastResult; - var localEnd = _Local_address; - var publicEnd = _Mapped_address; - - return (true, natType, localEnd, publicEnd); + return (_nttResult, _natType, _localEnd, _publicEnd); } catch (Exception e) { @@ -67,40 +58,32 @@ namespace Netch.Controllers private new void OnOutputDataReceived(object sender, DataReceivedEventArgs e) { if (string.IsNullOrEmpty(e.Data)) return; - var str = e.Data.Split(':'); + Logging.Info($"[NTT] {e.Data}"); + + var str = e.Data.Split(':').Select(s => s.Trim()).ToArray(); if (str.Length < 2) return; var key = str[0]; - var value = str[1].Trim(); + var value = str[1]; switch (key) { case "Other address is": - _Other_address = value; - Logging.Info($"[NTT] Other address is {value}"); - break; case "Binding test": - _Binding_test = value; - Logging.Info($"[NTT] Binding test {value}"); + case "Nat mapping behavior": + case "Nat filtering behavior": break; case "Local address": - _Local_address = value; - Logging.Info($"[NTT] Local address {value}"); + _localEnd = value; break; case "Mapped address": - _Mapped_address = value; - Logging.Info($"[NTT] Mapped address {value}"); - break; - case "Nat mapping behavior": - _Nat_mapping_behavior = value; - Logging.Info($"[NTT] Nat mapping behavior {value}"); - break; - case "Nat filtering behavior": - _Nat_filtering_behavior = value; - Logging.Info($"[NTT] Nat filtering behavior {value}"); + _publicEnd = value; break; case "result": - _lastResult = value; - Logging.Info($"[NTT] result {value}"); + _natType = value; + _nttResult = true; + break; + default: + _natType = str.Last(); break; } } diff --git a/Netch/Forms/MainForm.Status.cs b/Netch/Forms/MainForm.Status.cs index d51807f9..c6744de2 100644 --- a/Netch/Forms/MainForm.Status.cs +++ b/Netch/Forms/MainForm.Status.cs @@ -126,6 +126,7 @@ namespace Netch.Forms { NatTypeStatusLabel.Text = String.Format("NAT{0}{1}", i18N.Translate(": "), text); } + if (int.TryParse(text, out int natType)) { if (natType > 0 && natType < 5) @@ -134,6 +135,10 @@ namespace Netch.Forms UpdateNatTypeLight(natType); } } + else + { + NatTypeStatusLightLabel.Visible = false; + } } else {