forward HTTP header and more transport info; some polish

This commit is contained in:
Tobias Oberstein
2015-05-31 19:07:22 +02:00
parent 14b6a7bdd6
commit 7ccf41d0cf

View File

@@ -76,7 +76,7 @@ class WampLongPollResourceSessionSend(Resource):
"""
payload = request.content.read()
if self._debug:
log.msg("WampLongPoll: receiving data for transport '{0}'\n{1}".format(self._parent._transportid, binascii.hexlify(payload)))
log.msg("WampLongPoll: receiving data for transport '{0}'\n{1}".format(self._parent._transport_id, binascii.hexlify(payload)))
try:
# process (batch of) WAMP message(s)
@@ -115,7 +115,7 @@ class WampLongPollResourceSessionReceive(Resource):
if self._debug:
def logqueue():
if not self._killed:
log.msg("WampLongPoll: transport '{0}' - currently polled {1}, pending messages {2}".format(self._parent._transportid, self._request is not None, len(self._queue)))
log.msg("WampLongPoll: transport '{0}' - currently polled {1}, pending messages {2}".format(self._parent._transport_id, self._request is not None, len(self._queue)))
self.reactor.callLater(1, logqueue)
logqueue()
@@ -173,7 +173,7 @@ class WampLongPollResourceSessionReceive(Resource):
def cancel(_):
if self._debug:
log.msg("WampLongPoll: poll request for transport '{0}' has gone away".format(self._parent._transportid))
log.msg("WampLongPoll: poll request for transport '{0}' has gone away".format(self._parent._transport_id))
self._request = None
request.notifyFinish().addErrback(cancel)
@@ -205,13 +205,13 @@ class WampLongPollResourceSessionClose(Resource):
by issuing a HTTP/POST with empty body to this resource.
"""
if self._debug:
log.msg("WampLongPoll: closing transport '{0}'".format(self._parent._transportid))
log.msg("WampLongPoll: closing transport '{0}'".format(self._parent._transport_id))
# now actually close the session
self._parent.close()
if self._debug:
log.msg("WampLongPoll: session ended and transport {0} closed".format(self._parent._transportid))
log.msg("WampLongPoll: session ended and transport {0} closed".format(self._parent._transport_id))
request.setResponseCode(http.NO_CONTENT)
self._parent._parent._setStandardHeaders(request)
@@ -223,14 +223,14 @@ class WampLongPollResourceSession(Resource):
A Web resource representing an open WAMP session.
"""
def __init__(self, parent, transportid, serializer):
def __init__(self, parent, transport_details):
"""
Create a new Web resource representing a WAMP session.
:param parent: The parent Web resource.
:type parent: Instance of :class:`autobahn.twisted.longpoll.WampLongPollResource`.
:param serializer: The WAMP serializer in use for this session.
:type serializer: An object that implements :class:`autobahn.wamp.interfaces.ISerializer`.
:param transport_details: Details on the WAMP-over-Longpoll transport session.
:type transport_details: dict
"""
Resource.__init__(self)
@@ -239,8 +239,8 @@ class WampLongPollResourceSession(Resource):
self._debug_wamp = True
self.reactor = self._parent.reactor
self._transportid = transportid
self._serializer = serializer
self._transport_id = transport_details['transport']
self._serializer = transport_details['serializer']
self._session = None
# session authentication information
@@ -266,15 +266,15 @@ class WampLongPollResourceSession(Resource):
def killIfDead():
if not self._isalive:
if self._debug:
log.msg("WampLongPoll: killing inactive WAMP session with transport '{0}'".format(self._transportid))
log.msg("WampLongPoll: killing inactive WAMP session with transport '{0}'".format(self._transport_id))
self.onClose(False, 5000, "session inactive")
self._receive._kill()
if self._transportid in self._parent._transports:
del self._parent._transports[self._transportid]
if self._transport_id in self._parent._transports:
del self._parent._transports[self._transport_id]
else:
if self._debug:
log.msg("WampLongPoll: transport '{0}' is still alive".format(self._transportid))
log.msg("WampLongPoll: transport '{0}' is still alive".format(self._transport_id))
self._isalive = False
self.reactor.callLater(killAfter, killIfDead)
@@ -282,10 +282,10 @@ class WampLongPollResourceSession(Resource):
self.reactor.callLater(killAfter, killIfDead)
else:
if self._debug:
log.msg("WampLongPoll: transport '{0}' automatic killing of inactive session disabled".format(self._transportid))
log.msg("WampLongPoll: transport '{0}' automatic killing of inactive session disabled".format(self._transport_id))
if self._debug:
log.msg("WampLongPoll: session resource for transport '{0}' initialized)".format(self._transportid))
log.msg("WampLongPoll: session resource for transport '{0}' initialized)".format(self._transport_id))
self.onOpen()
@@ -296,7 +296,7 @@ class WampLongPollResourceSession(Resource):
if self.isOpen():
self.onClose(True, 1000, u"session closed")
self._receive._kill()
del self._parent._transports[self._transportid]
del self._parent._transports[self._transport_id]
else:
raise TransportLost()
@@ -307,7 +307,7 @@ class WampLongPollResourceSession(Resource):
if self.isOpen():
self.onClose(True, 1000, u"session aborted")
self._receive._kill()
del self._parent._transports[self._transportid]
del self._parent._transports[self._transport_id]
else:
raise TransportLost()
@@ -426,20 +426,26 @@ class WampLongPollResourceOpen(Resource):
else:
transport = newid()
# create transport info object
#
transport_info = {
'type': 'longpoll',
'transport_id': transport,
# this doesn't contain all the info (when a header key appears multiple times)
# http_headers_received = request.getAllHeaders()
http_headers_received = {}
for key, values in request.requestHeaders.getAllRawHeaders():
if key not in http_headers_received:
http_headers_received[key] = []
http_headers_received[key].extend(values)
transport_details = {
'transport': transport,
'serializer': serializer,
'protocol': protocol,
'peer': request.getClientIP(),
'http_headers_received': None,
'http_headers_received': http_headers_received,
'http_headers_sent': None
}
# create instance of WampLongPollResourceSession or subclass thereof ..
#
self._parent._transports[transport] = self._parent.protocol(self._parent, transport, serializer, transport_info)
self._parent._transports[transport] = self._parent.protocol(self._parent, transport_details)
# create response
#