Merge pull request #228 from anton-ryzhov/events
Some events refactoring
This commit is contained in:
commit
0a2737dc77
8 changed files with 45 additions and 45 deletions
|
@ -6,14 +6,20 @@ Event Index
|
|||
|
||||
connected
|
||||
- **Data:** ``{}``
|
||||
- **Source:** :py:class:`~sleekxmpp.clientxmpp.ClientXMPP`
|
||||
- **Source:** :py:class:`~sleekxmpp.xmlstream.XMLstream`
|
||||
|
||||
Signal that a connection has been made with the XMPP server, but a session
|
||||
has not yet been established.
|
||||
|
||||
connection_failed
|
||||
- **Data:** ``{}`` or ``Failure Stanza`` if available
|
||||
- **Source:** :py:class:`~sleekxmpp.xmlstream.XMLstream`
|
||||
|
||||
Signal that a connection can not be established after number of attempts.
|
||||
|
||||
changed_status
|
||||
- **Data:** :py:class:`~sleekxmpp.Presence`
|
||||
- **Source:** :py:class:`~sleekxmpp.BaseXMPP`
|
||||
- **Source:** :py:class:`~sleekxmpp.roster.item.RosterItem`
|
||||
|
||||
Triggered when a presence stanza is received from a JID with a show type
|
||||
different than the last presence stanza from the same JID.
|
||||
|
@ -65,8 +71,8 @@ Event Index
|
|||
|
||||
disconnected
|
||||
- **Data:** ``{}``
|
||||
- **Source:** :py:class:`~sleekxmpp.ClientXMPP`
|
||||
|
||||
- **Source:** :py:class:`~sleekxmpp.xmlstream.XMLstream`
|
||||
|
||||
Signal that the connection with the XMPP server has been lost.
|
||||
|
||||
entity_time
|
||||
|
@ -93,16 +99,16 @@ Event Index
|
|||
|
||||
got_online
|
||||
- **Data:** :py:class:`~sleekxmpp.Presence`
|
||||
- **Source:** :py:class:`~sleekxmpp.BaseXMPP`
|
||||
|
||||
- **Source:** :py:class:`~sleekxmpp.roster.item.RosterItem`
|
||||
|
||||
If a presence stanza is received from a JID which was previously marked as
|
||||
offline, and the presence has a show type of '``chat``', '``dnd``', '``away``',
|
||||
or '``xa``', then this event is triggered as well.
|
||||
|
||||
got_offline
|
||||
- **Data:** :py:class:`~sleekxmpp.Presence`
|
||||
- **Source:** :py:class:`~sleekxmpp.BaseXMPP`
|
||||
|
||||
- **Source:** :py:class:`~sleekxmpp.roster.item.RosterItem`
|
||||
|
||||
Signal that an unavailable presence stanza has been received from a JID.
|
||||
|
||||
groupchat_invite
|
||||
|
@ -110,7 +116,7 @@ Event Index
|
|||
- **Source:**
|
||||
|
||||
groupchat_direct_invite
|
||||
- **Data:** :py:class:`~sleekxmpp.Message`
|
||||
- **Data:** :py:class:`~sleekxmpp.Message`
|
||||
- **Source:** :py:class:`~sleekxmpp.plugins.xep_0249.direct`
|
||||
|
||||
groupchat_message
|
||||
|
@ -147,18 +153,18 @@ Event Index
|
|||
sure to check the message type in order to handle error messages.
|
||||
|
||||
message_form
|
||||
- **Data:** :py:class:`~sleekxmpp.plugins.xep_0004.Form`
|
||||
- **Source:** :py:class:`~sleekxmpp.plugins.xep_0004.xep_0004`
|
||||
|
||||
- **Data:** :py:class:`~sleekxmpp.plugins.xep_0004.Form`
|
||||
- **Source:** :py:class:`~sleekxmpp.plugins.xep_0004.xep_0004`
|
||||
|
||||
Currently the same as :term:`message_xform`.
|
||||
|
||||
message_xform
|
||||
- **Data:** :py:class:`~sleekxmpp.plugins.xep_0004.Form`
|
||||
- **Source:** :py:class:`~sleekxmpp.plugins.xep_0004.xep_0004`
|
||||
|
||||
- **Data:** :py:class:`~sleekxmpp.plugins.xep_0004.Form`
|
||||
- **Source:** :py:class:`~sleekxmpp.plugins.xep_0004.xep_0004`
|
||||
|
||||
Triggered whenever a data form is received inside a message.
|
||||
|
||||
mucc::[room]::got_offline
|
||||
muc::[room]::got_offline
|
||||
- **Data:**
|
||||
- **Source:**
|
||||
|
||||
|
@ -187,8 +193,8 @@ Event Index
|
|||
A presence stanza with a type of '``error``' is received.
|
||||
|
||||
presence_form
|
||||
- **Data:** :py:class:`~sleekxmpp.plugins.xep_0004.Form`
|
||||
- **Source:** :py:class:`~sleekxmpp.plugins.xep_0004.xep_0004`
|
||||
- **Data:** :py:class:`~sleekxmpp.plugins.xep_0004.Form`
|
||||
- **Source:** :py:class:`~sleekxmpp.plugins.xep_0004.xep_0004`
|
||||
|
||||
This event is present in the XEP-0004 plugin code, but is currently not used.
|
||||
|
||||
|
@ -229,22 +235,20 @@ Event Index
|
|||
A presence stanza with a type of '``unsubscribed``' is received.
|
||||
|
||||
roster_update
|
||||
- **Data:** :py:class:`~sleekxmpp.stanza.Roster`
|
||||
- **Source:** :py:class:`~sleekxmpp.ClientXMPP`
|
||||
- **Data:** :py:class:`~sleekxmpp.stanza.Roster`
|
||||
- **Source:** :py:class:`~sleekxmpp.ClientXMPP`
|
||||
|
||||
An IQ result containing roster entries is received.
|
||||
|
||||
sent_presence
|
||||
- **Data:** ``{}``
|
||||
- **Source:** :py:class:`BaseXMPP <sleekxmpp.BaseXMPP>`
|
||||
- **Source:** :py:class:`~sleekxmpp.roster.multi.Roster`
|
||||
|
||||
Signal that an initial presence stanza has been written to the XML stream.
|
||||
|
||||
session_end
|
||||
- **Data:** ``{}``
|
||||
- **Source:** :py:class:`ClientXMPP <sleekxmpp.ClientXMPP>`,
|
||||
:py:class:`ComponentXMPP <sleekxmpp.ComponentXMPP>`
|
||||
:py:class:`XEP-0078 <sleekxmpp.plugins.xep_0078>`
|
||||
- **Source:** :py:class:`~sleekxmpp.xmlstream.XMLstream`
|
||||
|
||||
Signal that a connection to the XMPP server has been lost and the current
|
||||
stream session has ended. Currently equivalent to :term:`disconnected`, but
|
||||
|
@ -256,14 +260,14 @@ Event Index
|
|||
|
||||
session_start
|
||||
- **Data:** ``{}``
|
||||
- **Source:** :py:class:`ClientXMPP <sleekxmpp.ClientXMPP>`,
|
||||
- **Source:** :py:class:`ClientXMPP <sleekxmpp.ClientXMPP>`,
|
||||
:py:class:`ComponentXMPP <sleekxmpp.ComponentXMPP>`
|
||||
:py:class:`XEP-0078 <sleekxmpp.plugins.xep_0078>`
|
||||
|
||||
Signal that a connection to the XMPP server has been made and a session has been established.
|
||||
|
||||
socket_error
|
||||
- **Data:** ``Socket`` exception object
|
||||
- **Data:** ``Socket`` exception object
|
||||
- **Source:** :py:class:`~sleekxmpp.xmlstream.XMLstream`
|
||||
|
||||
stream_error
|
||||
|
|
|
@ -248,7 +248,6 @@ class ClientXMPP(BaseXMPP):
|
|||
callback = lambda resp: self._handle_roster(resp)
|
||||
|
||||
response = iq.send(block, timeout, callback)
|
||||
self.event('roster_received', response)
|
||||
|
||||
if block:
|
||||
self._handle_roster(response)
|
||||
|
|
|
@ -158,8 +158,8 @@ class ComponentXMPP(BaseXMPP):
|
|||
"""
|
||||
self.session_bind_event.set()
|
||||
self.session_started_event.set()
|
||||
self.event("session_bind", self.boundjid, direct=True)
|
||||
self.event("session_start")
|
||||
self.event('session_bind', self.boundjid, direct=True)
|
||||
self.event('session_start')
|
||||
|
||||
def _handle_probe(self, pres):
|
||||
self.roster[pres['to']][pres['from']].handle_probe(pres)
|
||||
|
|
|
@ -62,4 +62,4 @@ class FeatureBind(BasePlugin):
|
|||
log.debug("Established Session")
|
||||
self.xmpp.sessionstarted = True
|
||||
self.xmpp.session_started_event.set()
|
||||
self.xmpp.event("session_start")
|
||||
self.xmpp.event('session_start')
|
||||
|
|
|
@ -171,6 +171,7 @@ class FeatureMechanisms(BasePlugin):
|
|||
except sasl.SASLNoAppropriateMechanism:
|
||||
log.error("No appropriate login method.")
|
||||
self.xmpp.event("no_auth", direct=True)
|
||||
self.xmpp.event("failed_auth", direct=True)
|
||||
self.attempted_mechs = set()
|
||||
return self.xmpp.disconnect()
|
||||
except StringPrepError:
|
||||
|
|
|
@ -51,4 +51,4 @@ class FeatureSession(BasePlugin):
|
|||
log.debug("Established Session")
|
||||
self.xmpp.sessionstarted = True
|
||||
self.xmpp.session_started_event.set()
|
||||
self.xmpp.event("session_start")
|
||||
self.xmpp.event('session_start')
|
||||
|
|
|
@ -559,7 +559,7 @@ class XMLStream(object):
|
|||
|
||||
self.set_socket(self.socket, ignore=True)
|
||||
#this event is where you should set your application state
|
||||
self.event("connected", direct=True)
|
||||
self.event('connected', direct=True)
|
||||
return True
|
||||
except (Socket.error, ssl.SSLError) as serr:
|
||||
error_msg = "Could not connect to %s:%s. Socket Error #%s: %s"
|
||||
|
@ -610,6 +610,7 @@ class XMLStream(object):
|
|||
lines = resp.split('\r\n')
|
||||
if '200' not in lines[0]:
|
||||
self.event('proxy_error', resp)
|
||||
self.event('connection_failed', direct=True)
|
||||
log.error('Proxy Error: %s', lines[0])
|
||||
return False
|
||||
|
||||
|
@ -717,7 +718,7 @@ class XMLStream(object):
|
|||
self.event('socket_error', serr, direct=True)
|
||||
finally:
|
||||
#clear your application state
|
||||
self.event("disconnected", direct=True)
|
||||
self.event('disconnected', direct=True)
|
||||
return True
|
||||
|
||||
def abort(self):
|
||||
|
@ -1130,6 +1131,8 @@ class XMLStream(object):
|
|||
event queue. All event handlers will run in the
|
||||
same thread.
|
||||
"""
|
||||
log.debug("Event triggered: " + name)
|
||||
|
||||
handlers = self.__event_handlers.get(name, [])
|
||||
for handler in handlers:
|
||||
#TODO: Data should not be copied, but should be read only,
|
||||
|
|
|
@ -19,16 +19,9 @@ class TestStreamRoster(SleekTest):
|
|||
"""Test handling roster requests."""
|
||||
self.stream_start(mode='client', jid='tester@localhost')
|
||||
|
||||
events = []
|
||||
roster_updates = []
|
||||
|
||||
def roster_received(iq):
|
||||
events.append('roster_received')
|
||||
|
||||
def roster_update(iq):
|
||||
events.append('roster_update')
|
||||
|
||||
self.xmpp.add_event_handler('roster_received', roster_received)
|
||||
self.xmpp.add_event_handler('roster_update', roster_update)
|
||||
self.xmpp.add_event_handler('roster_update', roster_updates.append)
|
||||
|
||||
# Since get_roster blocks, we need to run it in a thread.
|
||||
t = threading.Thread(name='get_roster', target=self.xmpp.get_roster)
|
||||
|
@ -66,8 +59,8 @@ class TestStreamRoster(SleekTest):
|
|||
# Give the event queue time to process.
|
||||
time.sleep(.1)
|
||||
|
||||
self.failUnless(events == ['roster_received', 'roster_update'],
|
||||
"Wrong roster events fired: %s" % events)
|
||||
self.failUnless(len(roster_updates) == 1,
|
||||
"Wrong number of roster_update events fired: %s (should be 1)" % len(roster_updates))
|
||||
|
||||
def testRosterSet(self):
|
||||
"""Test handling pushed roster updates."""
|
||||
|
@ -156,7 +149,7 @@ class TestStreamRoster(SleekTest):
|
|||
"""Test rejecting a roster push from an unauthorized source."""
|
||||
self.stream_start()
|
||||
self.recv("""
|
||||
<iq to='tester@localhost' from="malicious_user@localhost"
|
||||
<iq to='tester@localhost' from="malicious_user@localhost"
|
||||
type="set" id="1">
|
||||
<query xmlns="jabber:iq:roster">
|
||||
<item jid="user@localhost"
|
||||
|
|
Loading…
Reference in a new issue