22A 'universal' WHOIS proxy server.
33"""
44
5+ import asyncio
56import configparser
67import logging
78import logging .config
1011import socket
1112import sys
1213
13- from . import caching , net , utils
14+ from . import caching , client , server , utils
1415
1516USAGE = "Usage: %s <config>"
1617
@@ -90,7 +91,7 @@ def get_prefix(self, zone):
9091 """
9192 return self .prefixes [zone ] if zone in self .prefixes else ""
9293
93- def whois (self , query ) :
94+ async def whois (self , query : str ) -> str :
9495 """
9596 Query the appropriate WHOIS server.
9697 """
@@ -103,9 +104,8 @@ def whois(self, query):
103104
104105 # Query the registry's WHOIS server.
105106 server , port = self .get_whois_server (zone )
106- with net .WhoisClient (server , port ) as client :
107- logger .info ("Querying %s about %s" , server , query )
108- response = client .whois (self .get_prefix (zone ) + query )
107+ logger .info ("Querying %s about %s" , server , query )
108+ response = await client .query_whois (server , port , self .get_prefix (zone ) + query )
109109
110110 # Thin registry? Query the registrar's WHOIS server.
111111 if zone in self .recursion_patterns :
@@ -116,9 +116,8 @@ def whois(self, query):
116116 elif self .page_feed :
117117 # A form feed character so it's possible to find the split.
118118 response += "\f "
119- with net .WhoisClient (server , port ) as client :
120- logger .info ("Recursive query to %s about %s" , server , query )
121- response += client .whois (query )
119+ logger .info ("Recursive query to %s about %s" , server , query )
120+ response += await client .query_whois (server , port , query )
122121
123122 return response
124123
@@ -150,9 +149,12 @@ def main():
150149 logger .exception ("Could not parse config file" )
151150 return 1
152151 else :
153- net . start_service (iface , port , whois )
152+ asyncio . run ( server . start_service (iface , port , whois ) )
154153 return 0
155154
156155
157156if __name__ == "__main__" :
158- sys .exit (main ())
157+ try :
158+ sys .exit (main ())
159+ except KeyboardInterrupt :
160+ pass
0 commit comments