Refactor: Create Netch.Interops namespace

This commit is contained in:
ChsBuffer
2021-03-28 00:54:04 +08:00
parent 090e487733
commit b553ddbb71
9 changed files with 53 additions and 47 deletions

View File

@@ -1,7 +1,6 @@
using System; using System;
using System.IO; using System.IO;
using System.Runtime.InteropServices; using static Netch.Interops.AioDNSInterops;
using System.Text;
namespace Netch.Controllers namespace Netch.Controllers
{ {
@@ -11,7 +10,7 @@ namespace Netch.Controllers
public void Stop() public void Stop()
{ {
aiodns_free(); Free();
} }
/// <summary> /// <summary>
@@ -20,36 +19,14 @@ namespace Netch.Controllers
/// <returns></returns> /// <returns></returns>
public void Start() public void Start()
{ {
aiodns_dial((int) NameList.TYPE_REST, null); Dial(NameList.TYPE_REST, "");
aiodns_dial((int) NameList.TYPE_ADDR, Encoding.UTF8.GetBytes($"{Global.Settings.LocalAddress}:{Global.Settings.AioDNS.ListenPort}")); Dial(NameList.TYPE_ADDR, $"{Global.Settings.LocalAddress}:{Global.Settings.AioDNS.ListenPort}");
aiodns_dial((int) NameList.TYPE_LIST, Encoding.UTF8.GetBytes(Path.GetFullPath(Global.Settings.AioDNS.RulePath))); Dial(NameList.TYPE_LIST, Path.GetFullPath(Global.Settings.AioDNS.RulePath));
aiodns_dial((int) NameList.TYPE_CDNS, Encoding.UTF8.GetBytes($"{Global.Settings.AioDNS.ChinaDNS}")); Dial(NameList.TYPE_CDNS, $"{Global.Settings.AioDNS.ChinaDNS}");
aiodns_dial((int) NameList.TYPE_ODNS, Encoding.UTF8.GetBytes($"{Global.Settings.AioDNS.OtherDNS}")); Dial(NameList.TYPE_ODNS, $"{Global.Settings.AioDNS.OtherDNS}");
if (!aiodns_init()) if (!Init())
throw new Exception("AioDNS start failed"); throw new Exception("AioDNS start failed");
} }
#region NativeMethods
[DllImport("aiodns.bin", CallingConvention = CallingConvention.Cdecl)]
public static extern bool aiodns_dial(int name, byte[]? value);
[DllImport("aiodns.bin", CallingConvention = CallingConvention.Cdecl)]
public static extern bool aiodns_init();
[DllImport("aiodns.bin", CallingConvention = CallingConvention.Cdecl)]
public static extern void aiodns_free();
public enum NameList
{
TYPE_REST,
TYPE_ADDR,
TYPE_LIST,
TYPE_CDNS,
TYPE_ODNS
}
#endregion
} }
} }

View File

@@ -8,7 +8,7 @@ using Netch.Servers.Shadowsocks;
using Netch.Servers.Socks5; using Netch.Servers.Socks5;
using Netch.Utils; using Netch.Utils;
using nfapinet; using nfapinet;
using static Netch.Controllers.RedirectorInterop; using static Netch.Interops.RedirectorInterop;
namespace Netch.Controllers namespace Netch.Controllers
{ {

View File

@@ -8,7 +8,7 @@ using System.Threading.Tasks;
using Netch.Models; using Netch.Models;
using Netch.Servers.Socks5; using Netch.Servers.Socks5;
using Netch.Utils; using Netch.Utils;
using static Netch.Controllers.TUNInterop; using static Netch.Interops.TUNInterop;
namespace Netch.Controllers namespace Netch.Controllers
{ {

View File

@@ -0,0 +1,33 @@
using System.Runtime.InteropServices;
using System.Text;
namespace Netch.Interops
{
public static class AioDNSInterops
{
private const string aiodns_bin = "aiodns.bin";
public static bool Dial(NameList name, string value)
{
return aiodns_dial(name, Encoding.UTF8.GetBytes(value));
}
[DllImport(aiodns_bin, CallingConvention = CallingConvention.Cdecl)]
private static extern bool aiodns_dial(NameList name, byte[] value);
[DllImport(aiodns_bin, EntryPoint = "aiodns_init", CallingConvention = CallingConvention.Cdecl)]
public static extern bool Init();
[DllImport(aiodns_bin, EntryPoint = "aiodns_free", CallingConvention = CallingConvention.Cdecl)]
public static extern void Free();
public enum NameList
{
TYPE_REST,
TYPE_ADDR,
TYPE_LIST,
TYPE_CDNS,
TYPE_ODNS
}
}
}

View File

@@ -1,7 +1,7 @@
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using Netch.Utils; using Netch.Utils;
namespace Netch.Controllers namespace Netch.Interops
{ {
public static class RedirectorInterop public static class RedirectorInterop
{ {

View File

@@ -2,9 +2,9 @@ using System.Runtime.InteropServices;
using System.Text; using System.Text;
using Netch.Utils; using Netch.Utils;
namespace Netch.Controllers namespace Netch.Interops
{ {
public class TUNInterop public static class TUNInterop
{ {
public enum NameList public enum NameList
{ {

View File

@@ -2,6 +2,8 @@
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.NetworkInformation; using System.Net.NetworkInformation;
using Netch.Controllers;
using Netch.Interops;
using Netch.Utils; using Netch.Utils;
namespace Netch.Models namespace Netch.Models

View File

@@ -43,11 +43,5 @@ namespace Netch
[DllImport("dnsapi", EntryPoint = "DnsFlushResolverCache")] [DllImport("dnsapi", EntryPoint = "DnsFlushResolverCache")]
public static extern uint FlushDNSResolverCache(); public static extern uint FlushDNSResolverCache();
[DllImport("kernel32.dll")]
public static extern bool AllocConsole();
[DllImport("kernel32.dll")]
public static extern bool AttachConsole(int dwProcessId);
} }
} }

View File

@@ -23,10 +23,10 @@ namespace Netch
public static void Main(string[] args) public static void Main(string[] args)
{ {
#if DEBUG #if DEBUG
AttachConsole(); AttachAllocConsole();
#else #else
if (args.Contains(Constants.Parameter.Console)) if (args.Contains(Constants.Parameter.Console))
AttachConsole(); AttachAllocConsole();
#endif #endif
if (args.Contains(Constants.Parameter.ForceUpdate)) if (args.Contains(Constants.Parameter.ForceUpdate))
@@ -93,10 +93,10 @@ namespace Netch
Application.Run(Global.MainForm); Application.Run(Global.MainForm);
} }
private static void AttachConsole() private static void AttachAllocConsole()
{ {
if (!NativeMethods.AttachConsole(-1)) if (!AttachConsole(ATTACH_PARENT_PROCESS))
NativeMethods.AllocConsole(); AllocConsole();
} }
public static void Application_OnException(object sender, ThreadExceptionEventArgs e) public static void Application_OnException(object sender, ThreadExceptionEventArgs e)