parent
de4acf0752
commit
4aa05c7499
67
setup.py
67
setup.py
|
|
@ -5,41 +5,42 @@ name = 'websockify'
|
||||||
long_description = open("README.md").read() + "\n" + \
|
long_description = open("README.md").read() + "\n" + \
|
||||||
open("CHANGES.txt").read() + "\n"
|
open("CHANGES.txt").read() + "\n"
|
||||||
|
|
||||||
setup(name=name,
|
setup(
|
||||||
version=version,
|
name=name,
|
||||||
description="Websockify.",
|
version=version,
|
||||||
long_description=long_description,
|
description="Websockify.",
|
||||||
long_description_content_type="text/markdown",
|
long_description=long_description,
|
||||||
classifiers=[
|
long_description_content_type="text/markdown",
|
||||||
"Programming Language :: Python",
|
classifiers=[
|
||||||
"Programming Language :: Python :: 3",
|
"Programming Language :: Python",
|
||||||
"Programming Language :: Python :: 3 :: Only",
|
"Programming Language :: Python :: 3",
|
||||||
"Programming Language :: Python :: 3.6",
|
"Programming Language :: Python :: 3 :: Only",
|
||||||
"Programming Language :: Python :: 3.7",
|
"Programming Language :: Python :: 3.6",
|
||||||
"Programming Language :: Python :: 3.8",
|
"Programming Language :: Python :: 3.7",
|
||||||
"Programming Language :: Python :: 3.9",
|
"Programming Language :: Python :: 3.8",
|
||||||
"Programming Language :: Python :: 3.10",
|
"Programming Language :: Python :: 3.9",
|
||||||
"Programming Language :: Python :: 3.11",
|
"Programming Language :: Python :: 3.10",
|
||||||
"Programming Language :: Python :: 3.12",
|
"Programming Language :: Python :: 3.11",
|
||||||
],
|
"Programming Language :: Python :: 3.12",
|
||||||
python_requires='>=3.6',
|
],
|
||||||
keywords='noVNC websockify',
|
python_requires='>=3.6',
|
||||||
license='LGPLv3',
|
keywords='noVNC websockify',
|
||||||
url="https://github.com/novnc/websockify",
|
license='LGPLv3',
|
||||||
author="Joel Martin",
|
url="https://github.com/novnc/websockify",
|
||||||
author_email="github@martintribe.org",
|
author="Joel Martin",
|
||||||
|
author_email="github@martintribe.org",
|
||||||
packages=['websockify'],
|
packages=['websockify'],
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
install_requires=[
|
install_requires=[
|
||||||
'numpy', 'requests',
|
'numpy',
|
||||||
|
'requests',
|
||||||
'jwcrypto',
|
'jwcrypto',
|
||||||
'redis',
|
'redis',
|
||||||
],
|
],
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
entry_points={
|
entry_points={
|
||||||
'console_scripts': [
|
'console_scripts': [
|
||||||
'websockify = websockify.websocketproxy:websockify_init',
|
'websockify = websockify.websocketproxy:websockify_init',
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -57,13 +57,13 @@ class WebSocketEcho(WebSockifyRequestHandler):
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
parser = optparse.OptionParser(usage="%prog [options] listen_port")
|
parser = optparse.OptionParser(usage="%prog [options] listen_port")
|
||||||
parser.add_option("--verbose", "-v", action="store_true",
|
parser.add_option("--verbose", "-v", action="store_true",
|
||||||
help="verbose messages and per frame traffic")
|
help="verbose messages and per frame traffic")
|
||||||
parser.add_option("--cert", default="self.pem",
|
parser.add_option("--cert", default="self.pem",
|
||||||
help="SSL certificate file")
|
help="SSL certificate file")
|
||||||
parser.add_option("--key", default=None,
|
parser.add_option("--key", default=None,
|
||||||
help="SSL key file (if separate from cert)")
|
help="SSL key file (if separate from cert)")
|
||||||
parser.add_option("--ssl-only", action="store_true",
|
parser.add_option("--ssl-only", action="store_true",
|
||||||
help="disallow non-encrypted connections")
|
help="disallow non-encrypted connections")
|
||||||
(opts, args) = parser.parse_args()
|
(opts, args) = parser.parse_args()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
|
|
@ -133,13 +133,13 @@ class WebSocketLoad(WebSockifyRequestHandler):
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
parser = optparse.OptionParser(usage="%prog [options] listen_port")
|
parser = optparse.OptionParser(usage="%prog [options] listen_port")
|
||||||
parser.add_option("--verbose", "-v", action="store_true",
|
parser.add_option("--verbose", "-v", action="store_true",
|
||||||
help="verbose messages and per frame traffic")
|
help="verbose messages and per frame traffic")
|
||||||
parser.add_option("--cert", default="self.pem",
|
parser.add_option("--cert", default="self.pem",
|
||||||
help="SSL certificate file")
|
help="SSL certificate file")
|
||||||
parser.add_option("--key", default=None,
|
parser.add_option("--key", default=None,
|
||||||
help="SSL key file (if separate from cert)")
|
help="SSL key file (if separate from cert)")
|
||||||
parser.add_option("--ssl-only", action="store_true",
|
parser.add_option("--ssl-only", action="store_true",
|
||||||
help="disallow non-encrypted connections")
|
help="disallow non-encrypted connections")
|
||||||
(opts, args) = parser.parse_args()
|
(opts, args) = parser.parse_args()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
|
|
@ -194,7 +194,7 @@ class JWSTokenTestCase(unittest.TestCase):
|
||||||
jwt_token = jwt.JWT({"alg": "RS256"}, {'host': "remote_host", 'port': "remote_port"})
|
jwt_token = jwt.JWT({"alg": "RS256"}, {'host': "remote_host", 'port': "remote_port"})
|
||||||
jwt_token.make_signed_token(private_key)
|
jwt_token.make_signed_token(private_key)
|
||||||
jwe_token = jwt.JWT(header={"alg": "RSA-OAEP", "enc": "A256CBC-HS512"},
|
jwe_token = jwt.JWT(header={"alg": "RSA-OAEP", "enc": "A256CBC-HS512"},
|
||||||
claims=jwt_token.serialize())
|
claims=jwt_token.serialize())
|
||||||
jwe_token.make_encrypted_token(public_key)
|
jwe_token.make_encrypted_token(public_key)
|
||||||
|
|
||||||
result = plugin.lookup(jwt_token.serialize())
|
result = plugin.lookup(jwt_token.serialize())
|
||||||
|
|
|
||||||
|
|
@ -306,7 +306,7 @@ class TokenRedis(BasePlugin):
|
||||||
self._namespace += ":"
|
self._namespace += ":"
|
||||||
|
|
||||||
logger.info("TokenRedis backend initialized (%s:%s)" %
|
logger.info("TokenRedis backend initialized (%s:%s)" %
|
||||||
(self._server, self._port))
|
(self._server, self._port))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
logger.error("The provided --token-source='%s' is not in the "
|
logger.error("The provided --token-source='%s' is not in the "
|
||||||
"expected format <host>[:<port>[:<db>[:<password>[:<namespace>]]]]" %
|
"expected format <host>[:<port>[:<db>[:<password>[:<namespace>]]]]" %
|
||||||
|
|
@ -375,5 +375,5 @@ class UnixDomainSocketDirectory(BasePlugin):
|
||||||
|
|
||||||
return ['unix_socket', uds_path]
|
return ['unix_socket', uds_path]
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("Error finding unix domain socket: %s" % str(e))
|
logger.error("Error finding unix domain socket: %s" % str(e))
|
||||||
return None
|
return None
|
||||||
|
|
|
||||||
|
|
@ -772,7 +772,7 @@ class WebSocket:
|
||||||
dtype = dtype.newbyteorder('>')
|
dtype = dtype.newbyteorder('>')
|
||||||
mask = numpy.frombuffer(mask, dtype, count=(plen % 4))
|
mask = numpy.frombuffer(mask, dtype, count=(plen % 4))
|
||||||
data = numpy.frombuffer(buf, dtype,
|
data = numpy.frombuffer(buf, dtype,
|
||||||
offset=plen - (plen % 4), count=(plen % 4))
|
offset=plen - (plen % 4), count=(plen % 4))
|
||||||
c = numpy.bitwise_xor(data, mask).tobytes()
|
c = numpy.bitwise_xor(data, mask).tobytes()
|
||||||
return b + c
|
return b + c
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ Traffic Legend:
|
||||||
msg = "connecting to unix socket: %s" % self.server.unix_target
|
msg = "connecting to unix socket: %s" % self.server.unix_target
|
||||||
else:
|
else:
|
||||||
msg = "connecting to: %s:%s" % (
|
msg = "connecting to: %s:%s" % (
|
||||||
self.server.target_host, self.server.target_port)
|
self.server.target_host, self.server.target_port)
|
||||||
|
|
||||||
if self.server.ssl_target:
|
if self.server.ssl_target:
|
||||||
msg += " (using SSL)"
|
msg += " (using SSL)"
|
||||||
|
|
@ -110,10 +110,10 @@ Traffic Legend:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
tsock = websockifyserver.WebSockifyServer.socket(self.server.target_host,
|
tsock = websockifyserver.WebSockifyServer.socket(self.server.target_host,
|
||||||
self.server.target_port,
|
self.server.target_port,
|
||||||
connect=True,
|
connect=True,
|
||||||
use_ssl=self.server.ssl_target,
|
use_ssl=self.server.ssl_target,
|
||||||
unix_socket=self.server.unix_target)
|
unix_socket=self.server.unix_target)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.log_message("Failed to connect to %s:%s: %s",
|
self.log_message("Failed to connect to %s:%s: %s",
|
||||||
self.server.target_host, self.server.target_port, e)
|
self.server.target_host, self.server.target_port, e)
|
||||||
|
|
@ -136,7 +136,7 @@ Traffic Legend:
|
||||||
tsock.close()
|
tsock.close()
|
||||||
if self.verbose:
|
if self.verbose:
|
||||||
self.log_message("%s:%s: Closed target",
|
self.log_message("%s:%s: Closed target",
|
||||||
self.server.target_host, self.server.target_port)
|
self.server.target_host, self.server.target_port)
|
||||||
|
|
||||||
def get_target(self, target_plugin):
|
def get_target(self, target_plugin):
|
||||||
"""
|
"""
|
||||||
|
|
@ -249,7 +249,7 @@ Traffic Legend:
|
||||||
# TODO: What about blocking on client socket?
|
# TODO: What about blocking on client socket?
|
||||||
if self.verbose:
|
if self.verbose:
|
||||||
self.log_message("%s:%s: Client closed connection",
|
self.log_message("%s:%s: Client closed connection",
|
||||||
self.server.target_host, self.server.target_port)
|
self.server.target_host, self.server.target_port)
|
||||||
raise self.CClose(closed['code'], closed['reason'])
|
raise self.CClose(closed['code'], closed['reason'])
|
||||||
|
|
||||||
if target in outs:
|
if target in outs:
|
||||||
|
|
@ -279,7 +279,7 @@ Traffic Legend:
|
||||||
|
|
||||||
if self.verbose:
|
if self.verbose:
|
||||||
self.log_message("%s:%s: Target closed connection",
|
self.log_message("%s:%s: Target closed connection",
|
||||||
self.server.target_host, self.server.target_port)
|
self.server.target_host, self.server.target_port)
|
||||||
raise self.CClose(1000, "Target closed")
|
raise self.CClose(1000, "Target closed")
|
||||||
|
|
||||||
cqueue.append(buf)
|
cqueue.append(buf)
|
||||||
|
|
@ -351,7 +351,7 @@ class WebSocketProxy(websockifyserver.WebSockifyServer):
|
||||||
self.wrap_times.append(time.time())
|
self.wrap_times.append(time.time())
|
||||||
self.wrap_times.pop(0)
|
self.wrap_times.pop(0)
|
||||||
self.cmd = subprocess.Popen(
|
self.cmd = subprocess.Popen(
|
||||||
self.wrap_cmd, env=os.environ, preexec_fn=_subprocess_setup)
|
self.wrap_cmd, env=os.environ, preexec_fn=_subprocess_setup)
|
||||||
self.spawn_message = True
|
self.spawn_message = True
|
||||||
|
|
||||||
def started(self):
|
def started(self):
|
||||||
|
|
@ -470,72 +470,72 @@ def websockify_init():
|
||||||
usage += " [source_addr:]source_port -- WRAP_COMMAND_LINE"
|
usage += " [source_addr:]source_port -- WRAP_COMMAND_LINE"
|
||||||
parser = optparse.OptionParser(usage=usage)
|
parser = optparse.OptionParser(usage=usage)
|
||||||
parser.add_option("--verbose", "-v", action="store_true",
|
parser.add_option("--verbose", "-v", action="store_true",
|
||||||
help="verbose messages")
|
help="verbose messages")
|
||||||
parser.add_option("--traffic", action="store_true",
|
parser.add_option("--traffic", action="store_true",
|
||||||
help="per frame traffic")
|
help="per frame traffic")
|
||||||
parser.add_option("--record",
|
parser.add_option("--record",
|
||||||
help="record sessions to FILE.[session_number]", metavar="FILE")
|
help="record sessions to FILE.[session_number]", metavar="FILE")
|
||||||
parser.add_option("--daemon", "-D",
|
parser.add_option("--daemon", "-D",
|
||||||
dest="daemon", action="store_true",
|
dest="daemon", action="store_true",
|
||||||
help="become a daemon (background process)")
|
help="become a daemon (background process)")
|
||||||
parser.add_option("--run-once", action="store_true",
|
parser.add_option("--run-once", action="store_true",
|
||||||
help="handle a single WebSocket connection and exit")
|
help="handle a single WebSocket connection and exit")
|
||||||
parser.add_option("--timeout", type=int, default=0,
|
parser.add_option("--timeout", type=int, default=0,
|
||||||
help="after TIMEOUT seconds exit when not connected")
|
help="after TIMEOUT seconds exit when not connected")
|
||||||
parser.add_option("--idle-timeout", type=int, default=0,
|
parser.add_option("--idle-timeout", type=int, default=0,
|
||||||
help="server exits after TIMEOUT seconds if there are no "
|
help="server exits after TIMEOUT seconds if there are no "
|
||||||
"active connections")
|
"active connections")
|
||||||
parser.add_option("--cert", default="self.pem",
|
parser.add_option("--cert", default="self.pem",
|
||||||
help="SSL certificate file")
|
help="SSL certificate file")
|
||||||
parser.add_option("--key", default=None,
|
parser.add_option("--key", default=None,
|
||||||
help="SSL key file (if separate from cert)")
|
help="SSL key file (if separate from cert)")
|
||||||
parser.add_option("--key-password", default=None,
|
parser.add_option("--key-password", default=None,
|
||||||
help="SSL key password")
|
help="SSL key password")
|
||||||
parser.add_option("--ssl-only", action="store_true",
|
parser.add_option("--ssl-only", action="store_true",
|
||||||
help="disallow non-encrypted client connections")
|
help="disallow non-encrypted client connections")
|
||||||
parser.add_option("--ssl-target", action="store_true",
|
parser.add_option("--ssl-target", action="store_true",
|
||||||
help="connect to SSL target as SSL client")
|
help="connect to SSL target as SSL client")
|
||||||
parser.add_option("--verify-client", action="store_true",
|
parser.add_option("--verify-client", action="store_true",
|
||||||
help="require encrypted client to present a valid certificate "
|
help="require encrypted client to present a valid certificate "
|
||||||
"(needs Python 2.7.9 or newer or Python 3.4 or newer)")
|
"(needs Python 2.7.9 or newer or Python 3.4 or newer)")
|
||||||
parser.add_option("--cafile", metavar="FILE",
|
parser.add_option("--cafile", metavar="FILE",
|
||||||
help="file of concatenated certificates of authorities trusted "
|
help="file of concatenated certificates of authorities trusted "
|
||||||
"for validating clients (only effective with --verify-client). "
|
"for validating clients (only effective with --verify-client). "
|
||||||
"If omitted, system default list of CAs is used.")
|
"If omitted, system default list of CAs is used.")
|
||||||
parser.add_option("--ssl-version", type="choice", default="default",
|
parser.add_option("--ssl-version", type="choice", default="default",
|
||||||
choices=["default", "tlsv1_1", "tlsv1_2", "tlsv1_3"], action="store",
|
choices=["default", "tlsv1_1", "tlsv1_2", "tlsv1_3"], action="store",
|
||||||
help="minimum TLS version to use (default, tlsv1_1, tlsv1_2, tlsv1_3)")
|
help="minimum TLS version to use (default, tlsv1_1, tlsv1_2, tlsv1_3)")
|
||||||
parser.add_option("--ssl-ciphers", action="store",
|
parser.add_option("--ssl-ciphers", action="store",
|
||||||
help="list of ciphers allowed for connection. For a list of "
|
help="list of ciphers allowed for connection. For a list of "
|
||||||
"supported ciphers run `openssl ciphers`")
|
"supported ciphers run `openssl ciphers`")
|
||||||
parser.add_option("--unix-listen",
|
parser.add_option("--unix-listen",
|
||||||
help="listen to unix socket", metavar="FILE", default=None)
|
help="listen to unix socket", metavar="FILE", default=None)
|
||||||
parser.add_option("--unix-listen-mode", default=None,
|
parser.add_option("--unix-listen-mode", default=None,
|
||||||
help="specify mode for unix socket (defaults to 0600)")
|
help="specify mode for unix socket (defaults to 0600)")
|
||||||
parser.add_option("--unix-target",
|
parser.add_option("--unix-target",
|
||||||
help="connect to unix socket target", metavar="FILE")
|
help="connect to unix socket target", metavar="FILE")
|
||||||
parser.add_option("--inetd",
|
parser.add_option("--inetd",
|
||||||
help="inetd mode, receive listening socket from stdin", action="store_true")
|
help="inetd mode, receive listening socket from stdin", action="store_true")
|
||||||
parser.add_option("--web", default=None, metavar="DIR",
|
parser.add_option("--web", default=None, metavar="DIR",
|
||||||
help="run webserver on same port. Serve files from DIR.")
|
help="run webserver on same port. Serve files from DIR.")
|
||||||
parser.add_option("--web-auth", action="store_true",
|
parser.add_option("--web-auth", action="store_true",
|
||||||
help="require authentication to access webserver.")
|
help="require authentication to access webserver.")
|
||||||
parser.add_option("--wrap-mode", default="exit", metavar="MODE",
|
parser.add_option("--wrap-mode", default="exit", metavar="MODE",
|
||||||
choices=["exit", "ignore", "respawn"],
|
choices=["exit", "ignore", "respawn"],
|
||||||
help="action to take when the wrapped program exits "
|
help="action to take when the wrapped program exits "
|
||||||
"or daemonizes: exit (default), ignore, respawn")
|
"or daemonizes: exit (default), ignore, respawn")
|
||||||
parser.add_option("--prefer-ipv6", "-6",
|
parser.add_option("--prefer-ipv6", "-6",
|
||||||
action="store_true", dest="source_is_ipv6",
|
action="store_true", dest="source_is_ipv6",
|
||||||
help="prefer IPv6 when resolving source_addr")
|
help="prefer IPv6 when resolving source_addr")
|
||||||
parser.add_option("--libserver", action="store_true",
|
parser.add_option("--libserver", action="store_true",
|
||||||
help="use Python library SocketServer engine")
|
help="use Python library SocketServer engine")
|
||||||
parser.add_option("--target-config", metavar="FILE",
|
parser.add_option("--target-config", metavar="FILE",
|
||||||
dest="target_cfg",
|
dest="target_cfg",
|
||||||
help="Configuration file containing valid targets "
|
help="Configuration file containing valid targets "
|
||||||
"in the form 'token: host:port' or, alternatively, a "
|
"in the form 'token: host:port' or, alternatively, a "
|
||||||
"directory containing configuration files of this form "
|
"directory containing configuration files of this form "
|
||||||
"(DEPRECATED: use `--token-plugin TokenFile --token-source "
|
"(DEPRECATED: use `--token-plugin TokenFile --token-source "
|
||||||
" path/to/token/file` instead)")
|
" path/to/token/file` instead)")
|
||||||
parser.add_option("--token-plugin", default=None, metavar="CLASS",
|
parser.add_option("--token-plugin", default=None, metavar="CLASS",
|
||||||
help="use a Python class, usually one from websockify.token_plugins, "
|
help="use a Python class, usually one from websockify.token_plugins, "
|
||||||
"such as TokenFile, to process tokens into host:port pairs")
|
"such as TokenFile, to process tokens into host:port pairs")
|
||||||
|
|
@ -552,13 +552,13 @@ def websockify_init():
|
||||||
help="an argument to be passed to the auth plugin "
|
help="an argument to be passed to the auth plugin "
|
||||||
"on instantiation")
|
"on instantiation")
|
||||||
parser.add_option("--heartbeat", type=int, default=0, metavar="INTERVAL",
|
parser.add_option("--heartbeat", type=int, default=0, metavar="INTERVAL",
|
||||||
help="send a ping to the client every INTERVAL seconds")
|
help="send a ping to the client every INTERVAL seconds")
|
||||||
parser.add_option("--log-file", metavar="FILE",
|
parser.add_option("--log-file", metavar="FILE",
|
||||||
dest="log_file",
|
dest="log_file",
|
||||||
help="File where logs will be saved")
|
help="File where logs will be saved")
|
||||||
parser.add_option("--syslog", default=None, metavar="SERVER",
|
parser.add_option("--syslog", default=None, metavar="SERVER",
|
||||||
help="Log to syslog server. SERVER can be local socket, "
|
help="Log to syslog server. SERVER can be local socket, "
|
||||||
"such as /dev/log, or a UDP host:port pair.")
|
"such as /dev/log, or a UDP host:port pair.")
|
||||||
parser.add_option("--legacy-syslog", action="store_true",
|
parser.add_option("--legacy-syslog", action="store_true",
|
||||||
help="Use the old syslog protocol instead of RFC 5424. "
|
help="Use the old syslog protocol instead of RFC 5424. "
|
||||||
"Use this if the messages produced by websockify seem abnormal.")
|
"Use this if the messages produced by websockify seem abnormal.")
|
||||||
|
|
|
||||||
|
|
@ -335,15 +335,15 @@ class WebSockifyServer():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def __init__(self, RequestHandlerClass, listen_fd=None,
|
def __init__(self, RequestHandlerClass, listen_fd=None,
|
||||||
listen_host='', listen_port=None, source_is_ipv6=False,
|
listen_host='', listen_port=None, source_is_ipv6=False,
|
||||||
verbose=False, cert='', key='', key_password=None, ssl_only=None,
|
verbose=False, cert='', key='', key_password=None, ssl_only=None,
|
||||||
verify_client=False, cafile=None,
|
verify_client=False, cafile=None,
|
||||||
daemon=False, record='', web='', web_auth=False,
|
daemon=False, record='', web='', web_auth=False,
|
||||||
file_only=False,
|
file_only=False,
|
||||||
run_once=False, timeout=0, idle_timeout=0, traffic=False,
|
run_once=False, timeout=0, idle_timeout=0, traffic=False,
|
||||||
tcp_keepalive=True, tcp_keepcnt=None, tcp_keepidle=None,
|
tcp_keepalive=True, tcp_keepcnt=None, tcp_keepidle=None,
|
||||||
tcp_keepintvl=None, ssl_ciphers=None, ssl_options=0,
|
tcp_keepintvl=None, ssl_ciphers=None, ssl_options=0,
|
||||||
unix_listen=None, unix_listen_mode=None):
|
unix_listen=None, unix_listen_mode=None):
|
||||||
|
|
||||||
# settings
|
# settings
|
||||||
self.RequestHandlerClass = RequestHandlerClass
|
self.RequestHandlerClass = RequestHandlerClass
|
||||||
|
|
@ -411,7 +411,7 @@ class WebSockifyServer():
|
||||||
self.msg(" - Listen on unix socket %s", self.unix_listen)
|
self.msg(" - Listen on unix socket %s", self.unix_listen)
|
||||||
else:
|
else:
|
||||||
self.msg(" - Listen on %s:%s",
|
self.msg(" - Listen on %s:%s",
|
||||||
self.listen_host, self.listen_port)
|
self.listen_host, self.listen_port)
|
||||||
if self.web:
|
if self.web:
|
||||||
if self.file_only:
|
if self.file_only:
|
||||||
self.msg(" - Web server (no directory listings). Web root: %s", self.web)
|
self.msg(" - Web server (no directory listings). Web root: %s", self.web)
|
||||||
|
|
@ -464,7 +464,7 @@ class WebSockifyServer():
|
||||||
|
|
||||||
if not unix_socket:
|
if not unix_socket:
|
||||||
addrs = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM,
|
addrs = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM,
|
||||||
socket.IPPROTO_TCP, flags)
|
socket.IPPROTO_TCP, flags)
|
||||||
if not addrs:
|
if not addrs:
|
||||||
raise Exception("Could not resolve host '%s'" % host)
|
raise Exception("Could not resolve host '%s'" % host)
|
||||||
addrs.sort(key=lambda x: x[0])
|
addrs.sort(key=lambda x: x[0])
|
||||||
|
|
@ -604,8 +604,8 @@ class WebSockifyServer():
|
||||||
else:
|
else:
|
||||||
context.set_default_verify_paths()
|
context.set_default_verify_paths()
|
||||||
retsock = context.wrap_socket(
|
retsock = context.wrap_socket(
|
||||||
sock,
|
sock,
|
||||||
server_side=True)
|
server_side=True)
|
||||||
except ssl.SSLError:
|
except ssl.SSLError:
|
||||||
_, x, _ = sys.exc_info()
|
_, x, _ = sys.exc_info()
|
||||||
if x.args[0] == ssl.SSL_ERROR_EOF:
|
if x.args[0] == ssl.SSL_ERROR_EOF:
|
||||||
|
|
@ -794,7 +794,7 @@ class WebSockifyServer():
|
||||||
time_elapsed = time.time() - self.launch_time
|
time_elapsed = time.time() - self.launch_time
|
||||||
if self.timeout and time_elapsed > self.timeout:
|
if self.timeout and time_elapsed > self.timeout:
|
||||||
self.msg('listener exit due to --timeout %s'
|
self.msg('listener exit due to --timeout %s'
|
||||||
% self.timeout)
|
% self.timeout)
|
||||||
break
|
break
|
||||||
|
|
||||||
if self.idle_timeout:
|
if self.idle_timeout:
|
||||||
|
|
@ -807,7 +807,7 @@ class WebSockifyServer():
|
||||||
|
|
||||||
if idle_time > self.idle_timeout and child_count == 0:
|
if idle_time > self.idle_timeout and child_count == 0:
|
||||||
self.msg('listener exit due to --idle-timeout %s'
|
self.msg('listener exit due to --idle-timeout %s'
|
||||||
% self.idle_timeout)
|
% self.idle_timeout)
|
||||||
break
|
break
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
@ -842,13 +842,13 @@ class WebSockifyServer():
|
||||||
self.top_new_client(startsock, address)
|
self.top_new_client(startsock, address)
|
||||||
if self.ws_connection:
|
if self.ws_connection:
|
||||||
self.msg('%s: exiting due to --run-once'
|
self.msg('%s: exiting due to --run-once'
|
||||||
% address[0])
|
% address[0])
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
self.vmsg('%s: new handler Process' % address[0])
|
self.vmsg('%s: new handler Process' % address[0])
|
||||||
p = multiprocessing.Process(
|
p = multiprocessing.Process(
|
||||||
target=self.top_new_client,
|
target=self.top_new_client,
|
||||||
args=(startsock, address))
|
args=(startsock, address))
|
||||||
p.start()
|
p.start()
|
||||||
# child will not return
|
# child will not return
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue