Changeset 746
- Timestamp:
- 07/28/08 10:39:42 (4 months ago)
- Files:
-
- oss/headstock/headstock/api/discovery.py (modified) (2 diffs)
- oss/headstock/headstock/protocol/extension/discovery.py (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
oss/headstock/headstock/api/discovery.py
r744 r746 13 13 XMPP_DATA_FORM_NS, XMPP_CLIENT_NS, XMPP_STREAM_NS, XMPP_PUBSUB_NS 14 14 15 __all__ = ['FeaturesDiscovery', 'ItemsDiscovery', 15 __all__ = ['FeaturesDiscovery', 'ItemsDiscovery', 'InformationDiscovery', 16 16 'SubscriptionsDiscovery', 'AffiliationsDiscovery'] 17 17 … … 247 247 248 248 return disco 249 250 class 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 2 2 3 3 from headstock.api.discovery import FeaturesDiscovery, ItemsDiscovery,\ 4 SubscriptionsDiscovery, AffiliationsDiscovery 4 SubscriptionsDiscovery, AffiliationsDiscovery, InformationDiscovery 5 5 from bridge import Element as E 6 6 from bridge import Attribute as A … … 13 13 __all__ = ['FeaturesDiscoveryDispatcher', 'ItemsDiscoveryDispatcher', 14 14 'SubscriptionsDiscoveryDispatcher', 'AffiliationsDiscoveryDispatcher', 15 ' DiscoveryDispatcher']15 'InformationDiscoveryDispatcher', 'DiscoveryDispatcher'] 16 16 17 17 class FeaturesDiscoveryDispatcher(component): … … 232 232 yield 1 233 233 234 class 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 234 290 class DiscoveryDispatcher(component): 235 291 Inboxes = {"inbox" : "bridge.Element instance", 236 292 "control" : "Shutdown the client stream", 293 237 294 "features.inbox": "", 238 295 "subscription.inbox": "", 239 296 "affiliation.inbox": "", 240 297 "items.inbox": "", 298 "info.inbox": "", 299 241 300 "features.forward": "", 242 301 "subscription.forward": "", 243 302 "affiliation.forward": "", 244 303 "items.forward": "", 304 "info.forward": "", 305 245 306 "in.features.get" : "Activity requests", 246 307 "in.features.set" : "Activity requests", … … 258 319 "in.affiliation.set" : "Activity requests", 259 320 "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 266 332 "features.outbox": "", 267 333 "subscription.outbox": "", 268 334 "affiliation.outbox": "", 269 335 "items.outbox": "", 336 "info.outbox": "", 337 270 338 "out.features.get" : "Activity requests", 271 339 "out.features.set" : "Activity requests", … … 284 352 "out.affiliation.result" : "Activity responses", 285 353 "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", 286 358 } 287 359 … … 358 430 itemsdisp.activate() 359 431 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 360 449 return 1 361 450
