diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/IResourceTool.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/IResourceTool.cs
index f3cfd87..cbd71b7 100644
--- a/WelsonJS.Toolkit/WelsonJS.Launcher/IResourceTool.cs
+++ b/WelsonJS.Toolkit/WelsonJS.Launcher/IResourceTool.cs
@@ -3,9 +3,23 @@ using System.Threading.Tasks;
namespace WelsonJS.Launcher
{
+ ///
+ /// Defines a contract for resource tools that can handle specific HTTP requests.
+ ///
public interface IResourceTool
{
+ ///
+ /// Determines whether this tool can handle the specified path.
+ ///
+ /// The request path to check.
+ /// True if this tool can handle the request; otherwise, false.
bool CanHandle(string path);
+ ///
+ /// Asynchronously processes the HTTP request for the specified path.
+ ///
+ /// The HTTP listener context containing request and response objects.
+ /// The request path to handle.
+ /// A task representing the asynchronous operation.
Task HandleAsync(HttpListenerContext context, string path);
}
-}
+}
\ No newline at end of file
diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs
index a8e0177..c4557b5 100644
--- a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs
+++ b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs
@@ -60,6 +60,24 @@ namespace WelsonJS.Launcher.Properties {
}
}
+ ///
+ /// 과(와) 유사한 지역화된 문자열을 찾습니다.
+ ///
+ internal static string AzureAiServiceApiKey {
+ get {
+ return ResourceManager.GetString("AzureAiServiceApiKey", resourceCulture);
+ }
+ }
+
+ ///
+ /// https://ai-catswords656881030318.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview과(와) 유사한 지역화된 문자열을 찾습니다.
+ ///
+ internal static string AzureAiServiceUrl {
+ get {
+ return ResourceManager.GetString("AzureAiServiceUrl", resourceCulture);
+ }
+ }
+
///
/// https://copilot.microsoft.com/과(와) 유사한 지역화된 문자열을 찾습니다.
///
@@ -78,6 +96,15 @@ namespace WelsonJS.Launcher.Properties {
}
}
+ ///
+ /// 1.1.1.1과(와) 유사한 지역화된 문자열을 찾습니다.
+ ///
+ internal static string DnsServerAddress {
+ get {
+ return ResourceManager.GetString("DnsServerAddress", resourceCulture);
+ }
+ }
+
///
/// (아이콘)과(와) 유사한 System.Drawing.Icon 형식의 지역화된 리소스를 찾습니다.
///
@@ -195,5 +222,41 @@ namespace WelsonJS.Launcher.Properties {
return ResourceManager.GetString("ResourceServerPrefix", resourceCulture);
}
}
+
+ ///
+ /// 141.101.82.1과(와) 유사한 지역화된 문자열을 찾습니다.
+ ///
+ internal static string WhoisClientAddress {
+ get {
+ return ResourceManager.GetString("WhoisClientAddress", resourceCulture);
+ }
+ }
+
+ ///
+ /// https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/whois/whois.jsp과(와) 유사한 지역화된 문자열을 찾습니다.
+ ///
+ internal static string WhoisReferrerUrl {
+ get {
+ return ResourceManager.GetString("WhoisReferrerUrl", resourceCulture);
+ }
+ }
+
+ ///
+ /// https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/whois.jsc과(와) 유사한 지역화된 문자열을 찾습니다.
+ ///
+ internal static string WhoisServerUrl {
+ get {
+ return ResourceManager.GetString("WhoisServerUrl", resourceCulture);
+ }
+ }
+
+ ///
+ /// Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.3124.77과(와) 유사한 지역화된 문자열을 찾습니다.
+ ///
+ internal static string WhoisUserAgent {
+ get {
+ return ResourceManager.GetString("WhoisUserAgent", resourceCulture);
+ }
+ }
}
}
diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx
index ef27d66..6be5c75 100644
--- a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx
+++ b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx
@@ -160,4 +160,25 @@
http://localhost:9222/
+
+
+
+
+ https://ai-catswords656881030318.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview
+
+
+ 1.1.1.1
+
+
+ 141.101.82.1
+
+
+ https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/whois/whois.jsp
+
+
+ https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/whois.jsc
+
+
+ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.3124.77
+
\ No newline at end of file
diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs
index f87cf8b..8538054 100644
--- a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs
+++ b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs
@@ -34,6 +34,7 @@ namespace WelsonJS.Launcher
_resourceTools.Add(new ResourceTools.Completion(this));
_resourceTools.Add(new ResourceTools.Config(this));
_resourceTools.Add(new ResourceTools.DevTools(this));
+ _resourceTools.Add(new ResourceTools.DnsQuery(this));
_resourceTools.Add(new ResourceTools.Tfa(this));
_resourceTools.Add(new ResourceTools.Whois(this));
}
diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DevTools.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DevTools.cs
index 48e73cd..890e9fa 100644
--- a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DevTools.cs
+++ b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DevTools.cs
@@ -9,8 +9,10 @@ namespace WelsonJS.Launcher.ResourceTools
{
private ResourceServer Server;
private const string Prefix = "devtools/";
+ private const double Timeout = 5000;
- public DevTools(ResourceServer server) {
+ public DevTools(ResourceServer server)
+ {
Server = server;
}
@@ -27,6 +29,8 @@ namespace WelsonJS.Launcher.ResourceTools
{
using (HttpClient client = new HttpClient())
{
+ client.Timeout = TimeSpan.FromMilliseconds(Timeout);
+
string url = Program.GetAppConfig("DevToolsPrefix") + endpoint;
string data = await client.GetStringAsync(url);
diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DnsQuery.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DnsQuery.cs
index c975632..c911791 100644
--- a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DnsQuery.cs
+++ b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DnsQuery.cs
@@ -8,7 +8,7 @@ using System.Threading.Tasks;
namespace WelsonJS.Launcher.ResourceTools
{
- public class DnsQuery
+ public class DnsQuery : IResourceTool
{
private ResourceServer Server;
private const string Prefix = "dns-query/";
@@ -17,10 +17,10 @@ namespace WelsonJS.Launcher.ResourceTools
private const int Timeout = 5000;
private static readonly Random _random = new Random();
- public DnsQuery(ResourceServer server, string dnsServer = "8.8.8.8")
+ public DnsQuery(ResourceServer server)
{
Server = server;
- DnsServer = dnsServer;
+ DnsServer = Program.GetAppConfig("DnsServerAddress");
}
public bool CanHandle(string path)
@@ -115,17 +115,18 @@ namespace WelsonJS.Launcher.ResourceTools
try
{
- UdpClient udpClient = new UdpClient(DnsServer, DnsPort);
- udpClient.Client.ReceiveTimeout = Timeout;
+ using (UdpClient udpClient = new UdpClient(DnsServer, DnsPort))
+ {
+ udpClient.Client.ReceiveTimeout = Timeout;
- byte[] request = CreateDnsQuery(domain, type);
- udpClient.Send(request, request.Length);
+ byte[] request = CreateDnsQuery(domain, type);
+ udpClient.Send(request, request.Length);
- IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, DnsPort);
- byte[] response = udpClient.Receive(ref remoteEP);
+ IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, DnsPort);
+ byte[] response = udpClient.Receive(ref remoteEP);
- records.AddRange(ParseDnsResponse(response, type));
- udpClient.Close();
+ records.AddRange(ParseDnsResponse(response, type));
+ }
}
catch (Exception ex)
{
diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/Whois.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/Whois.cs
index f2f850c..b748c48 100644
--- a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/Whois.cs
+++ b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/Whois.cs
@@ -10,6 +10,7 @@ namespace WelsonJS.Launcher.ResourceTools
{
private ResourceServer Server;
private const string Prefix = "whois/";
+ private const int Timeout = 5000;
public Whois(ResourceServer server)
{
@@ -31,20 +32,20 @@ namespace WelsonJS.Launcher.ResourceTools
return;
}
- string whoisServerUrl = "https://xn--c79as89aj0e29b77z.xn--3e0b707e";
-
using (var client = new HttpClient())
{
- client.Timeout = TimeSpan.FromSeconds(10);
+ client.Timeout = TimeSpan.FromMilliseconds(Timeout);
- HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, $"{whoisServerUrl}/kor/whois.jsc")
+ string clientAddress = Program.GetAppConfig("WhoisClientAddress");
+
+ HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, Program.GetAppConfig("WhoisServerUrl"))
{
- Content = new StringContent($"query={Uri.EscapeDataString(query)}&ip=141.101.82.1", Encoding.UTF8, "application/x-www-form-urlencoded")
+ Content = new StringContent($"query={Uri.EscapeDataString(query)}&ip={clientAddress}", Encoding.UTF8, "application/x-www-form-urlencoded")
};
request.Headers.Add("Accept", "*/*");
- request.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.3124.77");
- client.DefaultRequestHeaders.Referrer = new Uri($"{whoisServerUrl}/kor/whois/whois.jsp");
+ request.Headers.Add("User-Agent", Program.GetAppConfig("WhoisUserAgent"));
+ client.DefaultRequestHeaders.Referrer = new Uri(Program.GetAppConfig("WhoisReferrerUrl"));
try
{
diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/app.config b/WelsonJS.Toolkit/WelsonJS.Launcher/app.config
index d070bb9..0a85782 100644
--- a/WelsonJS.Toolkit/WelsonJS.Launcher/app.config
+++ b/WelsonJS.Toolkit/WelsonJS.Launcher/app.config
@@ -7,6 +7,11 @@
+
+
+
+
+