Changeset 746

Show
Ignore:
Timestamp:
07/28/08 10:39:42 (4 months ago)
Author:
sylvain
Message:

InformationDiscovery? handler to support Node information retrieval

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • oss/headstock/headstock/api/discovery.py

    r744 r746  
    1313     XMPP_DATA_FORM_NS, XMPP_CLIENT_NS, XMPP_STREAM_NS, XMPP_PUBSUB_NS 
    1414 
    15 __all__ = ['FeaturesDiscovery', 'ItemsDiscovery', 
     15__all__ = ['FeaturesDiscovery', 'ItemsDiscovery', 'InformationDiscovery', 
    1616           'SubscriptionsDiscovery', 'AffiliationsDiscovery'] 
    1717 
     
    247247 
    248248        return disco 
     249 
     250class InformationDiscovery(Entity): 
     251    def __init__(self, from_jid, to_jid, node_name=None, type=u'get', stanza_id=None): 
     252        Entity.__init__(self, from_jid, to_jid, type, stanza_id) 
     253        self.node_name = node_name 
     254     
     255    @staticmethod 
     256    def to_element(e): 
     257        iq = Entity.to_element(e) 
     258        attrs = {u'node': e.node_name} 
     259        E(u'query', namespace=XMPP_DISCO_INFO_NS, parent=iq, 
     260          attributes=attrs) 
     261 
     262        return iq 
     263 
     264    @staticmethod 
     265    def from_element(e): 
     266        disco = InformationDiscovery(JID.parse(e.get_attribute_value('from')), 
     267                                   JID.parse(e.get_attribute_value('to')), 
     268                                   type=e.get_attribute_value('type'), 
     269                                   stanza_id=e.get_attribute_value('id')) 
     270 
     271        return disco 
  • oss/headstock/headstock/protocol/extension/discovery.py

    r739 r746  
    22 
    33from headstock.api.discovery import FeaturesDiscovery, ItemsDiscovery,\ 
    4     SubscriptionsDiscovery, AffiliationsDiscovery 
     4    SubscriptionsDiscovery, AffiliationsDiscovery, InformationDiscovery 
    55from bridge import Element as E 
    66from bridge import Attribute as A 
     
    1313__all__ = ['FeaturesDiscoveryDispatcher', 'ItemsDiscoveryDispatcher', 
    1414           'SubscriptionsDiscoveryDispatcher', 'AffiliationsDiscoveryDispatcher', 
    15            'DiscoveryDispatcher'] 
     15           'InformationDiscoveryDispatcher', 'DiscoveryDispatcher'] 
    1616 
    1717class FeaturesDiscoveryDispatcher(component): 
     
    232232            yield 1 
    233233 
     234class InformationDiscoveryDispatcher(component): 
     235     
     236    Inboxes = {"inbox"              : "bridge.Element instance", 
     237               "control"            : "Shutdown the client stream", 
     238               "forward"            : "", 
     239               } 
     240     
     241    Outboxes = {"outbox"       : "bridge.Element instance", 
     242                "signal"       : "Shutdown signal", 
     243                "log"          : "log", 
     244                "unknown"      : "Unknown element that could not be dispatched properly", 
     245                "xmpp.get"     : "Activity requests", 
     246                "xmpp.set"     : "Activity requests", 
     247                "xmpp.result"  : "Activity responses", 
     248                "xmpp.error"   : "Activity response error", 
     249                } 
     250     
     251    def __init__(self): 
     252       super(InformationDiscoveryDispatcher, self).__init__()  
     253 
     254    def main(self): 
     255        while 1: 
     256            if self.dataReady("control"): 
     257                mes = self.recv("control") 
     258                 
     259                if isinstance(mes, shutdownMicroprocess) or \ 
     260                   isinstance(mes, producerFinished): 
     261                    self.send(producerFinished(), "signal") 
     262                    break 
     263 
     264            if self.dataReady("forward"): 
     265                m = self.recv("forward") 
     266                self.send(InformationDiscovery.to_element(m), "outbox") 
     267 
     268            if self.dataReady("inbox"): 
     269                handled = False 
     270                s = self.recv("inbox") 
     271                e = s.xml_parent.xml_parent 
     272                self.send(('INCOMING', e), "log") 
     273                 
     274                msg_type = e.get_attribute_value(u'type') or u'get' 
     275                key = 'xmpp.%s' % unicode(msg_type) 
     276 
     277                if key in self.outboxes: 
     278                    self.send(InformationDiscovery.from_element(e), key) 
     279                    handled = True 
     280 
     281                if not handled: 
     282                    self.send(e, "unknown") 
     283 
     284            if not self.anyReady(): 
     285                self.pause() 
     286   
     287            yield 1 
     288 
     289 
    234290class DiscoveryDispatcher(component): 
    235291    Inboxes = {"inbox"              : "bridge.Element instance", 
    236292               "control"            : "Shutdown the client stream", 
     293                
    237294               "features.inbox": "", 
    238295               "subscription.inbox": "", 
    239296               "affiliation.inbox": "", 
    240297               "items.inbox": "", 
     298               "info.inbox": "", 
     299                
    241300               "features.forward": "", 
    242301               "subscription.forward": "", 
    243302               "affiliation.forward": "", 
    244303               "items.forward": "", 
     304               "info.forward": "", 
     305                
    245306               "in.features.get"     : "Activity requests", 
    246307               "in.features.set"     : "Activity requests", 
     
    258319               "in.affiliation.set"     : "Activity requests", 
    259320               "in.affiliation.result"  : "Activity responses", 
    260                "in.affiliation.error"   : "Activity response error",} 
    261      
    262     Outboxes = {"outbox"       : "bridge.Element instance", 
    263                 "signal"       : "Shutdown signal", 
    264                 "log"          : "log", 
    265                 "unknown"      : "Unknown element that could not be dispatched properly", 
     321               "in.affiliation.error"   : "Activity response error", 
     322               "in.info.get"     : "Activity requests", 
     323               "in.info.set"     : "Activity requests", 
     324               "in.info.result"  : "Activity responses", 
     325               "in.info.error"   : "Activity response error",} 
     326     
     327    Outboxes = {"outbox"       : "bridge.Element instance", 
     328                "signal"       : "Shutdown signal", 
     329                "log"          : "log", 
     330                "unknown"      : "Unknown element that could not be dispatched properly", 
     331 
    266332                "features.outbox": "", 
    267333                "subscription.outbox": "", 
    268334                "affiliation.outbox": "", 
    269335                "items.outbox": "", 
     336                "info.outbox": "", 
     337                 
    270338                "out.features.get"     : "Activity requests", 
    271339                "out.features.set"     : "Activity requests", 
     
    284352                "out.affiliation.result"  : "Activity responses", 
    285353                "out.affiliation.error"   : "Activity response error", 
     354                "out.info.get"     : "Activity requests", 
     355                "out.info.set"     : "Activity requests", 
     356                "out.info.result"  : "Activity responses", 
     357                "out.info.error"   : "Activity response error", 
    286358                } 
    287359     
     
    358430        itemsdisp.activate() 
    359431 
     432        infodisp = InformationDiscoveryDispatcher() 
     433        self.link((self, 'info.inbox'), (infodisp, 'inbox'), passthrough=1) 
     434        self.link((self, 'info.forward'), (infodisp, 'forward'), passthrough=1) 
     435        self.link((self, 'in.info.get'), (infodisp, 'forward'), passthrough=1) 
     436        self.link((self, 'in.info.set'), (infodisp, 'forward'), passthrough=1) 
     437        self.link((self, 'in.info.result'), (infodisp, 'forward'), passthrough=1) 
     438        self.link((self, 'in.info.error'), (infodisp, 'forward'), passthrough=1) 
     439        self.link((infodisp, 'outbox'), (self, 'outbox'), passthrough=2) 
     440        self.link((infodisp, 'xmpp.get'), (self, 'out.info.get'), passthrough=2) 
     441        self.link((infodisp, 'xmpp.set'), (self, 'out.info.set'), passthrough=2) 
     442        self.link((infodisp, 'xmpp.result'), (self, 'out.info.result'), passthrough=2) 
     443        self.link((infodisp, 'xmpp.error'), (self, 'out.info.error'), passthrough=2) 
     444        self.link((infodisp, 'unknown'), (self, 'unknown'), passthrough=2) 
     445        self.link((infodisp, 'log'), (self, 'log'), passthrough=2) 
     446        self.addChildren(infodisp) 
     447        infodisp.activate() 
     448 
    360449        return 1 
    361450