def onOpen(self, transport): """ Implements :func:`autobahn.wamp.interfaces.ITransportHandler.onOpen` """ # this is a WAMP transport instance self._transport = transport # WampLongPollResourceSession instance has no attribute '_transport_info' if not hasattr(self._transport, '_transport_info'): self._transport._transport_info = {} # transport configuration if hasattr(self._transport, 'factory') and hasattr(self._transport.factory, '_config'): self._transport_config = self._transport.factory._config else: self._transport_config = {} # a dict with x509 TLS client certificate information (if the client provided a cert) # constructed from information from the Twisted stream transport underlying the WAMP transport client_cert = None # eg LongPoll transports lack underlying Twisted stream transport, since LongPoll is # implemented at the Twisted Web layer. But we should nevertheless be able to # extract the HTTP client cert! <= FIXME if hasattr(self._transport, 'transport'): client_cert = extract_peer_certificate(self._transport.transport) if client_cert: self._transport._transport_info[u'client_cert'] = client_cert self.log.debug("Client connecting with TLS certificate {client_cert}", client_cert=client_cert) # forward the transport channel ID (if any) on transport details channel_id = None if hasattr(self._transport, 'get_channel_id'): # channel ID isn't implemented for LongPolL! channel_id = self._transport.get_channel_id() if channel_id: self._transport._transport_info[u'channel_id'] = binascii.b2a_hex(channel_id).decode('ascii') self.log.debug("Client session connected - transport: {transport_info}", transport_info=self._transport._transport_info) # basic session information self._pending_session_id = None self._realm = None self._session_id = None self._session_roles = None self._session_details = None # session authentication information self._pending_auth = None self._authid = None self._authrole = None self._authmethod = None self._authprovider = None self._authextra = None # the service session to be used eg for WAMP metaevents self._service_session = None