summaryrefslogtreecommitdiffstats
path: root/ssnet.py
diff options
context:
space:
mode:
authorAvery Pennarun <apenwarr@gmail.com>2011-01-26 05:29:51 -0800
committerAvery Pennarun <apenwarr@gmail.com>2011-01-26 05:29:51 -0800
commit0bf0351d9becae3da9379c335b0e71094cde2760 (patch)
treeb2db817a660478842162fe435eadb51f4fac7c84 /ssnet.py
parente7a19890aa579e94dc99cbd662bd5ed598d642fd (diff)
parent9731680d2e51d8083012cd21838acaa34189812b (diff)
Merge branch 'dns'sshuttle-0.50
* dns: dns on MacOS: use divert sockets instead of 'fwd' rules. client.py: do DNS listener on the same port as the TCP listener. Move client._islocal() to helpers.islocal() in preparation for sharing. dns: add support for MacOS (but it doesn't work...) Oops, dns_done() crashed if the request had already been timed out. dns: trim DNS channel handlers after a response, or after a timeout. dns: extract 'nameserver' lines from /etc/resolv.conf Extremely basic, but functional, DNS proxying support (--dns option)
Diffstat (limited to 'ssnet.py')
-rw-r--r--ssnet.py10
1 files changed, 9 insertions, 1 deletions
diff --git a/ssnet.py b/ssnet.py
index 62fa378..554d870 100644
--- a/ssnet.py
+++ b/ssnet.py
@@ -21,6 +21,8 @@ CMD_DATA = 0x4206
CMD_ROUTES = 0x4207
CMD_HOST_REQ = 0x4208
CMD_HOST_LIST = 0x4209
+CMD_DNS_REQ = 0x420a
+CMD_DNS_RESPONSE = 0x420b
cmd_to_name = {
CMD_EXIT: 'EXIT',
@@ -33,6 +35,8 @@ cmd_to_name = {
CMD_ROUTES: 'ROUTES',
CMD_HOST_REQ: 'HOST_REQ',
CMD_HOST_LIST: 'HOST_LIST',
+ CMD_DNS_REQ: 'DNS_REQ',
+ CMD_DNS_RESPONSE: 'DNS_RESPONSE',
}
@@ -281,7 +285,7 @@ class Mux(Handler):
Handler.__init__(self, [rsock, wsock])
self.rsock = rsock
self.wsock = wsock
- self.new_channel = self.got_routes = None
+ self.new_channel = self.got_dns_req = self.got_routes = None
self.got_host_req = self.got_host_list = None
self.channels = {}
self.chani = 0
@@ -343,6 +347,10 @@ class Mux(Handler):
assert(not self.channels.get(channel))
if self.new_channel:
self.new_channel(channel, data)
+ elif cmd == CMD_DNS_REQ:
+ assert(not self.channels.get(channel))
+ if self.got_dns_req:
+ self.got_dns_req(channel, data)
elif cmd == CMD_ROUTES:
if self.got_routes:
self.got_routes(data)