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.IO;
using System.Runtime.InteropServices;
using System.Text;
using static Netch.Interops.AioDNSInterops;
namespace Netch.Controllers
{
@@ -11,7 +10,7 @@ namespace Netch.Controllers
public void Stop()
{
aiodns_free();
Free();
}
/// <summary>
@@ -20,36 +19,14 @@ namespace Netch.Controllers
/// <returns></returns>
public void Start()
{
aiodns_dial((int) NameList.TYPE_REST, null);
aiodns_dial((int) NameList.TYPE_ADDR, Encoding.UTF8.GetBytes($"{Global.Settings.LocalAddress}:{Global.Settings.AioDNS.ListenPort}"));
aiodns_dial((int) NameList.TYPE_LIST, Encoding.UTF8.GetBytes(Path.GetFullPath(Global.Settings.AioDNS.RulePath)));
aiodns_dial((int) NameList.TYPE_CDNS, Encoding.UTF8.GetBytes($"{Global.Settings.AioDNS.ChinaDNS}"));
aiodns_dial((int) NameList.TYPE_ODNS, Encoding.UTF8.GetBytes($"{Global.Settings.AioDNS.OtherDNS}"));
Dial(NameList.TYPE_REST, "");
Dial(NameList.TYPE_ADDR, $"{Global.Settings.LocalAddress}:{Global.Settings.AioDNS.ListenPort}");
Dial(NameList.TYPE_LIST, Path.GetFullPath(Global.Settings.AioDNS.RulePath));
Dial(NameList.TYPE_CDNS, $"{Global.Settings.AioDNS.ChinaDNS}");
Dial(NameList.TYPE_ODNS, $"{Global.Settings.AioDNS.OtherDNS}");
if (!aiodns_init())
if (!Init())
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.Utils;
using nfapinet;
using static Netch.Controllers.RedirectorInterop;
using static Netch.Interops.RedirectorInterop;
namespace Netch.Controllers
{

View File

@@ -8,7 +8,7 @@ using System.Threading.Tasks;
using Netch.Models;
using Netch.Servers.Socks5;
using Netch.Utils;
using static Netch.Controllers.TUNInterop;
using static Netch.Interops.TUNInterop;
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 Netch.Utils;
namespace Netch.Controllers
namespace Netch.Interops
{
public static class RedirectorInterop
{

View File

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

View File

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

View File

@@ -43,11 +43,5 @@ namespace Netch
[DllImport("dnsapi", EntryPoint = "DnsFlushResolverCache")]
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)
{
#if DEBUG
AttachConsole();
AttachAllocConsole();
#else
if (args.Contains(Constants.Parameter.Console))
AttachConsole();
AttachAllocConsole();
#endif
if (args.Contains(Constants.Parameter.ForceUpdate))
@@ -93,10 +93,10 @@ namespace Netch
Application.Run(Global.MainForm);
}
private static void AttachConsole()
private static void AttachAllocConsole()
{
if (!NativeMethods.AttachConsole(-1))
NativeMethods.AllocConsole();
if (!AttachConsole(ATTACH_PARENT_PROCESS))
AllocConsole();
}
public static void Application_OnException(object sender, ThreadExceptionEventArgs e)