Make xmlstream use an asyncio loop
Scheduled events, connection, TLS handshake (with STARTTLS), read and write on the socket are all done using only asyncio. A lot of threads, and thread-related (and thus useless) things still remain. This is only a first step.
This commit is contained in:
@@ -42,13 +42,16 @@ class FeatureBind(BasePlugin):
|
||||
features -- The stream features stanza.
|
||||
"""
|
||||
log.debug("Requesting resource: %s", self.xmpp.requested_jid.resource)
|
||||
self.features = features
|
||||
iq = self.xmpp.Iq()
|
||||
iq['type'] = 'set'
|
||||
iq.enable('bind')
|
||||
if self.xmpp.requested_jid.resource:
|
||||
iq['bind']['resource'] = self.xmpp.requested_jid.resource
|
||||
response = iq.send(now=True)
|
||||
|
||||
iq.send(block=False, callback=self._on_bind_response)
|
||||
|
||||
def _on_bind_response(self, response):
|
||||
self.xmpp.boundjid = JID(response['bind']['jid'], cache_lock=True)
|
||||
self.xmpp.bound = True
|
||||
self.xmpp.event('session_bind', self.xmpp.boundjid, direct=True)
|
||||
@@ -58,7 +61,7 @@ class FeatureBind(BasePlugin):
|
||||
|
||||
log.info("JID set to: %s", self.xmpp.boundjid.full)
|
||||
|
||||
if 'session' not in features['features']:
|
||||
if 'session' not in self.features['features']:
|
||||
log.debug("Established Session")
|
||||
self.xmpp.sessionstarted = True
|
||||
self.xmpp.session_started_event.set()
|
||||
|
||||
@@ -233,7 +233,9 @@ class FeatureMechanisms(BasePlugin):
|
||||
self.xmpp.authenticated = True
|
||||
self.xmpp.features.add('mechanisms')
|
||||
self.xmpp.event('auth_success', stanza, direct=True)
|
||||
raise RestartStream()
|
||||
# Restart the stream
|
||||
self.xmpp.init_parser()
|
||||
self.xmpp.send_raw(self.xmpp.stream_header)
|
||||
|
||||
def _handle_fail(self, stanza):
|
||||
"""SASL authentication failed. Disconnect and shutdown."""
|
||||
|
||||
@@ -44,8 +44,9 @@ class FeatureSession(BasePlugin):
|
||||
iq = self.xmpp.Iq()
|
||||
iq['type'] = 'set'
|
||||
iq.enable('session')
|
||||
iq.send(now=True)
|
||||
iq.send(block=False, callback=self._on_start_session_response)
|
||||
|
||||
def _on_start_session_response(self, response):
|
||||
self.xmpp.features.add('session')
|
||||
|
||||
log.debug("Established Session")
|
||||
|
||||
@@ -52,7 +52,7 @@ class FeatureSTARTTLS(BasePlugin):
|
||||
# We have already negotiated TLS, but the server is
|
||||
# offering it again, against spec.
|
||||
return False
|
||||
elif not self.xmpp.use_tls:
|
||||
elif self.xmpp.disable_starttls:
|
||||
return False
|
||||
else:
|
||||
self.xmpp.send(features['starttls'], now=True)
|
||||
@@ -63,4 +63,3 @@ class FeatureSTARTTLS(BasePlugin):
|
||||
log.debug("Starting TLS")
|
||||
if self.xmpp.start_tls():
|
||||
self.xmpp.features.add('starttls')
|
||||
raise RestartStream()
|
||||
|
||||
Reference in New Issue
Block a user