Bladeren bron

move dns query to a class.

Hua-Au-Yeung 3 jaren geleden
bovenliggende
commit
23f56e7623
2 gewijzigde bestanden met toevoegingen van 29 en 23 verwijderingen
  1. 27 0
      src/lib/dnscache.ts
  2. 2 23
      src/lib/server.ts

+ 27 - 0
src/lib/dnscache.ts

@@ -0,0 +1,27 @@
+// @ts-ignore
+import dnsSync from 'dns-sync';
+// @ts-ignore
+import MemCache from 'mem-cache';
+
+export class DnsCache {
+    private static mcache: MemCache;
+
+    // query and cache dns lookup record for 60 * 10 seconds
+    public static dnsQuery(domain: string): string {
+        if (!DnsCache.mcache) {
+            DnsCache.mcache = new MemCache();
+        }
+        const key = `D:${domain}`;
+        let value = DnsCache.mcache.get(key);
+        if (!value) {
+            value = dnsSync.resolve(domain);
+        }
+
+        if (value == null) {
+            return '';
+        } else {
+            DnsCache.mcache.set(key, value, 60 * 10);
+            return value;
+        }
+    }
+}

+ 2 - 23
src/lib/server.ts

@@ -3,20 +3,15 @@ import {Command, CommandReply} from './command.js'
 import {EventEmitter} from 'events';
 import * as net from 'net';
 import {inspect} from "util";
-// @ts-ignore
-import dnsSync from 'dns-sync';
-// @ts-ignore
-import Memcache from 'mem-cache';
+import {DnsCache} from "./dnscache.js";
 
 export class Socks5Server extends EventEmitter{
     private tcpServer: net.Server;
     private acceptAuthMethod: AuthMethodType;
-    private mcache: Memcache;
 
     constructor(port: number, hostname: string) {
         super();
         this.acceptAuthMethod = AuthMethodType.NoAuth; // only NoAuth
-        this.mcache = new Memcache();
 
         this.tcpServer = net.createServer((clientSocket:net.Socket) => {
             let clientStats = ClientSocketState.connected;
@@ -115,7 +110,7 @@ export class Socks5Server extends EventEmitter{
 
         switch (cmd.addressType) {
             case AddressType.Domain:
-                const dnsResolveRecord = this.dnsQuery(cmd.host);
+                const dnsResolveRecord = DnsCache.dnsQuery(cmd.host);
                 // resole domain name & no record found
                 if (!dnsResolveRecord) {
                     commandReply = new CommandReply(
@@ -181,21 +176,5 @@ export class Socks5Server extends EventEmitter{
         }
         return isCommandSucceeded;
     }
-
-    // query and cache dns lookup record for 60 * 10 seconds
-    private dnsQuery(domain: string): string {
-        const key = `D:${domain}`;
-        let value = this.mcache.get(key);
-        if (!value) {
-            value = dnsSync.resolve(domain);
-        }
-
-        if (value == null) {
-            return '';
-        } else {
-            this.mcache.set(key, value, 60 * 10);
-            return value;
-        }
-    }
 }