Add option to turn on auto-pong
This allows the websockify server to respond to heart beat ping messages sent by clients
This commit is contained in:
parent
dbb1362fd2
commit
2bd5c8febd
@ -104,6 +104,7 @@ class WebSocketRequestHandler(SimpleHTTPRequestHandler):
|
|||||||
self.handler_id = getattr(server, "handler_id", False)
|
self.handler_id = getattr(server, "handler_id", False)
|
||||||
self.file_only = getattr(server, "file_only", False)
|
self.file_only = getattr(server, "file_only", False)
|
||||||
self.traffic = getattr(server, "traffic", False)
|
self.traffic = getattr(server, "traffic", False)
|
||||||
|
self.auto_pong = getattr(server, "auto_pong", False)
|
||||||
|
|
||||||
self.logger = getattr(server, "logger", None)
|
self.logger = getattr(server, "logger", None)
|
||||||
if self.logger is None:
|
if self.logger is None:
|
||||||
@ -364,6 +365,11 @@ class WebSocketRequestHandler(SimpleHTTPRequestHandler):
|
|||||||
closed = {'code': frame['close_code'],
|
closed = {'code': frame['close_code'],
|
||||||
'reason': frame['close_reason']}
|
'reason': frame['close_reason']}
|
||||||
break
|
break
|
||||||
|
elif self.auto_pong and frame['opcode'] == 0x9: # ping
|
||||||
|
self.print_traffic("} ping %s\n" %
|
||||||
|
repr(frame['payload']))
|
||||||
|
self.send_pong(frame['payload'])
|
||||||
|
return [], False
|
||||||
|
|
||||||
self.print_traffic("}")
|
self.print_traffic("}")
|
||||||
|
|
||||||
@ -396,6 +402,11 @@ class WebSocketRequestHandler(SimpleHTTPRequestHandler):
|
|||||||
buf, h, t = self.encode_hybi(msg, opcode=0x08, base64=False)
|
buf, h, t = self.encode_hybi(msg, opcode=0x08, base64=False)
|
||||||
self.request.send(buf)
|
self.request.send(buf)
|
||||||
|
|
||||||
|
def send_pong(self, data=''):
|
||||||
|
""" Send a WebSocket pong frame. """
|
||||||
|
buf, h, t = self.encode_hybi(s2b(data), opcode=0x0A, base64=False)
|
||||||
|
self.request.send(buf)
|
||||||
|
|
||||||
def do_websocket_handshake(self):
|
def do_websocket_handshake(self):
|
||||||
h = self.headers
|
h = self.headers
|
||||||
|
|
||||||
@ -571,7 +582,7 @@ class WebSocketServer(object):
|
|||||||
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):
|
tcp_keepintvl=None, auto_pong=False):
|
||||||
|
|
||||||
# settings
|
# settings
|
||||||
self.RequestHandlerClass = RequestHandlerClass
|
self.RequestHandlerClass = RequestHandlerClass
|
||||||
@ -596,6 +607,7 @@ class WebSocketServer(object):
|
|||||||
self.tcp_keepidle = tcp_keepidle
|
self.tcp_keepidle = tcp_keepidle
|
||||||
self.tcp_keepintvl = tcp_keepintvl
|
self.tcp_keepintvl = tcp_keepintvl
|
||||||
|
|
||||||
|
self.auto_pong = auto_pong
|
||||||
# Make paths settings absolute
|
# Make paths settings absolute
|
||||||
self.cert = os.path.abspath(cert)
|
self.cert = os.path.abspath(cert)
|
||||||
self.key = self.web = self.record = ''
|
self.key = self.web = self.record = ''
|
||||||
|
@ -368,6 +368,8 @@ def websockify_init():
|
|||||||
parser.add_option("--token-source", default=None, metavar="ARG",
|
parser.add_option("--token-source", default=None, metavar="ARG",
|
||||||
help="an argument to be passed to the token plugin"
|
help="an argument to be passed to the token plugin"
|
||||||
"on instantiation")
|
"on instantiation")
|
||||||
|
parser.add_option("--auto-pong", action="store_true",
|
||||||
|
help="Automatically respond to ping frames with a pong")
|
||||||
|
|
||||||
(opts, args) = parser.parse_args()
|
(opts, args) = parser.parse_args()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user