remove roster item state responsibility from clients

This commit is contained in:
Nathan Fritz 2011-04-14 16:27:27 -07:00
parent b9bf30e095
commit 46dc6eac88
3 changed files with 41 additions and 28 deletions

View file

@ -146,8 +146,6 @@ class BaseXMPP(XMLStream):
self._handle_unsubscribe) self._handle_unsubscribe)
self.add_event_handler('presence_unsubscribed', self.add_event_handler('presence_unsubscribed',
self._handle_unsubscribed) self._handle_unsubscribed)
self.add_event_handler('presence_probe',
self._handle_probe)
self.add_event_handler('roster_subscription_request', self.add_event_handler('roster_subscription_request',
self._handle_new_subscription) self._handle_new_subscription)
@ -663,11 +661,6 @@ class BaseXMPP(XMLStream):
pfrom = presence['from'].bare pfrom = presence['from'].bare
self.roster[pto][pfrom].handle_unsubscribed(presence) self.roster[pto][pfrom].handle_unsubscribed(presence)
def _handle_probe(self, presence):
pto = presence['to'].bare
pfrom = presence['from'].bare
self.roster[pto][pfrom].handle_probe(presence)
def _handle_presence(self, presence): def _handle_presence(self, presence):
""" """
Process incoming presence stanzas. Process incoming presence stanzas.

View file

@ -78,6 +78,8 @@ class ComponentXMPP(BaseXMPP):
Callback('Handshake', Callback('Handshake',
MatchXPath('{jabber:component:accept}handshake'), MatchXPath('{jabber:component:accept}handshake'),
self._handle_handshake)) self._handle_handshake))
self.add_event_handler('presence_probe',
self._handle_probe)
def connect(self): def connect(self):
""" """
@ -139,3 +141,8 @@ class ComponentXMPP(BaseXMPP):
xml -- The reply handshake stanza. xml -- The reply handshake stanza.
""" """
self.event("session_start") self.event("session_start")
def _handle_probe(self, presence):
pto = presence['to'].bare
pfrom = presence['from'].bare
self.roster[pto][pfrom].handle_probe(presence)

View file

@ -658,12 +658,16 @@ class RosterItem(object):
| "Both" | no * | no state change | | "Both" | no * | no state change |
+------------------------------------------------------------------+ +------------------------------------------------------------------+
""" """
if not self['from'] and not self['pending_in']: if self.xmpp.is_component:
self['pending_in'] = True if not self['from'] and not self['pending_in']:
self['pending_in'] = True
self.xmpp.event('roster_subscription_request', presence)
elif self['from']:
self._subscribed()
self.save()
else:
#server shouldn't send an invalid subscription request
self.xmpp.event('roster_subscription_request', presence) self.xmpp.event('roster_subscription_request', presence)
elif self['from']:
self._subscribed()
self.save()
def handle_subscribed(self, presence): def handle_subscribed(self, presence):
""" """
@ -681,11 +685,14 @@ class RosterItem(object):
| "Both" | no | no state change | | "Both" | no | no state change |
+------------------------------------------------------------------+ +------------------------------------------------------------------+
""" """
if not self['to'] and self['pending_out']: if self.xmpp.is_component:
self['pending_out'] = False if not self['to'] and self['pending_out']:
self['to'] = True self['pending_out'] = False
self['to'] = True
self.xmpp.event('roster_subscription_authorized', presence)
self.save()
else:
self.xmpp.event('roster_subscription_authorized', presence) self.xmpp.event('roster_subscription_authorized', presence)
self.save()
def handle_unsubscribe(self, presence): def handle_unsubscribe(self, presence):
""" """
@ -703,14 +710,17 @@ class RosterItem(object):
| "Both" | yes * | "To" | | "Both" | yes * | "To" |
+------------------------------------------------------------------+ +------------------------------------------------------------------+
""" """
if not self['from'] and self['pending_in']: if self.xmpp.is_component:
self['pending_in'] = False if not self['from'] and self['pending_in']:
self._unsubscribed() self['pending_in'] = False
elif self['from']: self._unsubscribed()
self['from'] = False elif self['from']:
self._unsubscribed() self['from'] = False
self._unsubscribed()
self.xmpp.event('roster_subscription_remove', presence)
self.save()
else:
self.xmpp.event('roster_subscription_remove', presence) self.xmpp.event('roster_subscription_remove', presence)
self.save()
def handle_unsubscribed(self, presence): def handle_unsubscribed(self, presence):
""" """
@ -728,12 +738,15 @@ class RosterItem(object):
| "Both" | yes | "From" | | "Both" | yes | "From" |
+------------------------------------------------------------------ +------------------------------------------------------------------
""" """
if not self['to'] and self['pending_out']: if self.xmpp.is_component:
self['pending_out'] = False if not self['to'] and self['pending_out']:
elif self['to'] and not self['pending_out']: self['pending_out'] = False
self['to'] = False elif self['to'] and not self['pending_out']:
self['to'] = False
self.xmpp.event('roster_subscription_removed', presence)
self.save()
else:
self.xmpp.event('roster_subscription_removed', presence) self.xmpp.event('roster_subscription_removed', presence)
self.save()
def handle_probe(self, presence): def handle_probe(self, presence):
if self['to']: if self['to']: