summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLV-426 <lv-426@taproot.org.il>2015-04-09 01:45:22 +0300
committerLV-426 <lv-426@taproot.org.il>2015-04-09 02:03:45 +0300
commit4e172bbd63cefe0fb204506cbc90d7ae59286a96 (patch)
treee53f1afdadc82bac466608ddc8a311de96bb148c /src
parent7709bb7896d9283047ea56ea6b89458c29b6fac3 (diff)
wip: socketio_route_handler() non socketio client handling
Diffstat (limited to 'src')
-rw-r--r--src/server/rz_mesh.py36
1 files changed, 24 insertions, 12 deletions
diff --git a/src/server/rz_mesh.py b/src/server/rz_mesh.py
index 570e09d9..b0547dbe 100644
--- a/src/server/rz_mesh.py
+++ b/src/server/rz_mesh.py
@@ -72,18 +72,6 @@ def init_ws_interface(cfg, kernel, flask_webapp):
ws_env = namedtuple('RZ_websocket_env', ['kernel'])
ws_env.kernel = kernel
- def socketio_route_handler(url_path):
- try:
- if None == request.environ.get('socketio'):
- # avoid python-socketio's direct access to environ['socketio']
- raise Exception('failed to obtain socketio object from WSGI environment')
-
- # connect socketio manager
- socketio_manage(request.environ, {'/graph': WebSocket_Graph_NS}, ws_env)
- except:
- flask_webapp.logger.error("Exception while handling socketio connection", exc_info=True)
- return make_response__http__empty(101) # 'switching protocols' HTTP status code
-
def decorator__ws_multicast(ws_srv, f, f_multicast):
"""
Emit multicast on topo_diff, attr_diff
@@ -150,6 +138,30 @@ def init_ws_interface(cfg, kernel, flask_webapp):
req_ctx = f_args[1]
return req_ctx.rzdoc
+ def socketio_route_handler(url_path):
+
+ # FIXME: ws upgrade process for non socketio clients
+ if None == request.environ.get('socketio'):
+ header__upgrade = request.headers.get('Upgrade')
+ if 'websocket' == header__upgrade:
+
+ remote_addr = request.environ['REMOTE_ADDR']
+ remote_port = request.environ['REMOTE_PORT']
+
+ log.debug('ws: \'Upgrade: websocket\' header detected, serving \'101\': remote-socket-addr: %s:%s' % (remote_addr, remote_port))
+ resp = make_response__http__empty(101) # 'switching protocols' HTTP status code
+ resp.headers['Upgrade'] = 'websocket'
+ resp.headers['Connection'] = 'Upgrade'
+ return resp
+ else:
+ raise Exception('ws: failed to obtain socketio object from WSGI environment')
+
+ try:
+ socketio_manage(request.environ, {'/graph': WebSocket_Graph_NS}, ws_env) # connect socketio manager
+ except:
+ log.exception("ws: exception while handling connection", exc_info=True)
+ return make_response__json(status=HTTP_STATUS__500_INTERNAL_SERVER_ERROR)
+
def ws_broadcast_to_rzdoc_readers(ws_srv, pkt, rzdoc):
"""
Cast update messege to subscribed readers