mirror of
https://github.com/netchx/netch.git
synced 2026-03-14 17:43:18 +08:00
Refactor: Create Netch.Interops namespace
This commit is contained in:
@@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
33
Netch/Interops/AioDNSInterops.cs
Normal file
33
Netch/Interops/AioDNSInterops.cs
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
{
|
{
|
||||||
@@ -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
|
||||||
{
|
{
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user