home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 October / maximum-cd-2011-10.iso / DiscContents / digsby_setup.exe / lib / plugins / component_gtalk / gtalkVideo.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-06-22  |  4.0 KB  |  91 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. from logging import getLogger
  5. from peak.util.addons import AddOn
  6. from pyxmpp.objects import StanzaPayloadObject
  7. from pyxmpp.iq import Iq
  8. log = getLogger('plugins.gtalk_video')
  9. GTALK_SESSION_NS = 'http://www.google.com/session'
  10. GTALK_VIDEO_SESSION_NS = 'http://www.google.com/session/video'
  11.  
  12. class gtalk_iq_video_initiate(AddOn):
  13.     
  14.     def __init__(self, subject):
  15.         self.protocol = subject
  16.         super(gtalk_iq_video_initiate, self).__init__(subject)
  17.  
  18.     
  19.     def setup(self, stream):
  20.         self.stream = stream
  21.         log.debug('setting up iq session')
  22.         stream.set_iq_set_handler('session', GTALK_SESSION_NS, self.video_initiate)
  23.  
  24.     
  25.     def video_initiate(self, iq):
  26.         d = dict(ses = GTALK_SESSION_NS, vid = GTALK_VIDEO_SESSION_NS)
  27.         vid_initiates = iq.xpath_eval("ses:session[@type='initiate']/vid:description", d)
  28.         if vid_initiates:
  29.             sessions = iq.xpath_eval('ses:session', d)
  30.             iq_from = iq.get_from()
  31.             if sessions:
  32.                 session = sessions[0]
  33.                 session_id = session.prop('id')
  34.                 if not session_id:
  35.                     log.error('No ID found for videochat session initiation request')
  36.                 
  37.                 session_initiator = session.prop('initiator')
  38.                 if not session_initiator:
  39.                     log.error('No initiator found for videochat session initiation request')
  40.                 
  41.             
  42.             
  43.             def vidoechat_response_callback(accepted = (None, None, None, False)):
  44.                 if not accepted:
  45.                     self.protocol.send_iq(GoogleSessionReject(session_id, session_initiator).make_set(iq_from))
  46.                 else:
  47.                     log.error("Video Session accepted? But we don't support that yet!")
  48.  
  49.             self.protocol.convo_for(iq.get_from()).received_native_videochat_request(vidoechat_response_callback)
  50.         
  51.         self.protocol.send_iq(iq.make_result_response())
  52.         return True
  53.  
  54.  
  55.  
  56. class GoogleSessionReject(StanzaPayloadObject):
  57.     xml_element_name = 'session'
  58.     xml_element_namespace = GTALK_SESSION_NS
  59.     
  60.     def __init__(self, id, initiator):
  61.         self.id = id
  62.         self.initiator = initiator
  63.  
  64.     
  65.     def complete_xml_element(self, xmlnode, doc):
  66.         xmlnode.setProp('type', 'reject')
  67.         xmlnode.setProp('initiator', self.initiator)
  68.         xmlnode.setProp('id', self.id)
  69.  
  70.     
  71.     def make_set(self, to):
  72.         iq = Iq(stanza_type = 'set')
  73.         iq.set_to(to)
  74.         self.as_xml(parent = iq.get_node())
  75.         return iq
  76.  
  77.  
  78.  
  79. def session_started(protocol, stream, *a, **k):
  80.     if getattr(protocol, 'name', None) != 'gtalk':
  81.         return None
  82.     log.debug('registering "%s" feature', GTALK_SESSION_NS)
  83.     gtalk_iq_video_initiate(protocol).setup(stream)
  84.  
  85.  
  86. def initialized(protocol, *a, **k):
  87.     if getattr(protocol, 'name', None) != 'gtalk':
  88.         return None
  89.     protocol.register_feature(GTALK_SESSION_NS)
  90.  
  91.