From 1f5b492e10bdd80752bf17934f5b0b5096d03006 Mon Sep 17 00:00:00 2001 From: Alexandre Sicard Date: Tue, 26 Jun 2012 13:55:19 +0200 Subject: [PATCH 1/2] Support IPv6 brackets notation Parse square brackets-enclosed IPv6 for 'source_addr' and 'target_addr' parameters. --- websockify | 2 ++ 1 file changed, 2 insertions(+) diff --git a/websockify b/websockify index bebe885..f2af438 100755 --- a/websockify +++ b/websockify @@ -287,6 +287,7 @@ def websockify_init(): # Parse host:port and convert ports to numbers if args[0].count(':') > 0: opts.listen_host, opts.listen_port = args[0].rsplit(':', 1) + opts.listen_host = opts.listen_host.strip('[]') else: opts.listen_host, opts.listen_port = '', args[0] @@ -299,6 +300,7 @@ def websockify_init(): else: if args[1].count(':') > 0: opts.target_host, opts.target_port = args[1].rsplit(':', 1) + opts.target_host = opts.target_host.strip('[]') else: parser.error("Error parsing target") try: opts.target_port = int(opts.target_port) From 67d4c175167d86354f1c07c7406599a2f4ad613b Mon Sep 17 00:00:00 2001 From: Alexandre Sicard Date: Tue, 26 Jun 2012 13:57:50 +0200 Subject: [PATCH 2/2] Allow preference of IPv6 for source_addr Add the option "-6, --prefer-ipv6". When set, the 'prefer_ipv6' flag in websocket.py is used so that 'source_addr' is resolved to IPv6 if available. If 'source_addr' is not set, binds to [::]. --- websocket.py | 3 ++- websockify | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/websocket.py b/websocket.py index dcc5f3b..03bedff 100644 --- a/websocket.py +++ b/websocket.py @@ -110,6 +110,7 @@ Sec-WebSocket-Accept: %s\r self.verbose = verbose self.listen_host = listen_host self.listen_port = listen_port + self.prefer_ipv6 = source_is_ipv6 self.ssl_only = ssl_only self.daemon = daemon self.run_once = run_once @@ -814,7 +815,7 @@ Sec-WebSocket-Accept: %s\r is a WebSockets client then call new_client() method (which must be overridden) for each new client connection. """ - lsock = self.socket(self.listen_host, self.listen_port) + lsock = self.socket(self.listen_host, self.listen_port, False, self.prefer_ipv6) if self.daemon: self.daemonize(keepfd=lsock.fileno(), chdir=self.web) diff --git a/websockify b/websockify index f2af438..761fe90 100755 --- a/websockify +++ b/websockify @@ -266,6 +266,9 @@ def websockify_init(): choices=["exit", "ignore", "respawn"], help="action to take when the wrapped program exits " "or daemonizes: exit (default), ignore, respawn") + parser.add_option("--prefer-ipv6", "-6", + action="store_true", dest="source_is_ipv6", + help="prefer IPv6 when resolving source_addr") (opts, args) = parser.parse_args() # Sanity checks