def start_whiteboard(self): conn = app.connections[self.chat_control.account] jingle = JingleSession(conn, weinitiate=True, jid=self.jid) self.sid = jingle.sid conn.get_module('Jingle')._sessions[jingle.sid] = jingle content = JingleWhiteboard(jingle) content.control = self jingle.add_content('xhtml', content) jingle.start_session()
def _on_jingle_iq(self, _con, stanza, _properties): """ The jingle stanza dispatcher Route jingle stanza to proper JingleSession object, or create one if it is a new session. TODO: Also check if the stanza isn't an error stanza, if so route it adequately. """ # get data try: jid = helpers.get_full_jid_from_iq(stanza) except helpers.InvalidFormat: logger.warning('Invalid JID: %s, ignoring it', stanza.getFrom()) return id_ = stanza.getID() if (jid, id_) in self.__iq_responses.keys(): self.__iq_responses[(jid, id_)].on_stanza(stanza) del self.__iq_responses[(jid, id_)] raise nbxmpp.NodeProcessed jingle = stanza.getTag('jingle') # a jingle element is not necessary in iq-result stanza # don't check for that if jingle: sid = jingle.getAttr('sid') else: sid = None for sesn in self._sessions.values(): if id_ in sesn.iq_ids: sesn.on_stanza(stanza) return # do we need to create a new jingle object if sid not in self._sessions: #TODO: tie-breaking and other things... newjingle = JingleSession(self._con, weinitiate=False, jid=jid, iq_id=id_, sid=sid) self._sessions[sid] = newjingle # we already have such session in dispatcher... self._sessions[sid].collect_iq_id(id_) self._sessions[sid].on_stanza(stanza) # Delete invalid/unneeded sessions if sid in self._sessions and \ self._sessions[sid].state == JingleStates.ENDED: self.delete_jingle_session(sid) raise nbxmpp.NodeProcessed
def start_audio(self, jid): if self.get_jingle_session(jid, media='audio'): return self.get_jingle_session(jid, media='audio').sid jingle = self.get_jingle_session(jid, media='video') if jingle: jingle.add_content('voice', JingleAudio(jingle)) else: jingle = JingleSession(self._con, weinitiate=True, jid=jid) self._sessions[jingle.sid] = jingle jingle.add_content('voice', JingleAudio(jingle)) jingle.start_session() return jingle.sid
def start_video(self, jid, in_xid, out_xid): if self.get_jingle_session(jid, media='video'): return self.get_jingle_session(jid, media='video').sid jingle = self.get_jingle_session(jid, media='audio') if jingle: jingle.add_content( 'video', JingleVideo(jingle, in_xid=in_xid, out_xid=out_xid)) else: jingle = JingleSession(self, weinitiate=True, jid=jid) self._sessions[jingle.sid] = jingle jingle.add_content( 'video', JingleVideo(jingle, in_xid=in_xid, out_xid=out_xid)) jingle.start_session() return jingle.sid
def start_file_transfer(self, jid, file_props, request=False): logger.info("start file transfer with file: %s", file_props) contact = app.contacts.get_contact_with_highest_priority( self._account, app.get_jid_without_resource(jid)) if app.contacts.is_gc_contact(self._account, jid): gcc = jid.split('/') if len(gcc) == 2: contact = app.contacts.get_gc_contact(self._account, gcc[0], gcc[1]) if contact is None: return None use_security = contact.supports(Namespace.JINGLE_XTLS) jingle = JingleSession(self._con, weinitiate=True, jid=jid, werequest=request) # this is a file transfer jingle.session_type_ft = True self._sessions[jingle.sid] = jingle file_props.sid = jingle.sid if contact.supports(Namespace.JINGLE_BYTESTREAM): transport = JingleTransportSocks5() elif contact.supports(Namespace.JINGLE_IBB): transport = JingleTransportIBB() else: transport = None senders = 'initiator' if request: senders = 'responder' transfer = JingleFileTransfer(jingle, transport=transport, file_props=file_props, use_security=use_security, senders=senders) file_props.transport_sid = transport.sid file_props.algo = self.__hash_support(contact) jingle.add_content('file' + helpers.get_random_string(), transfer) jingle.start_session() return transfer.transport.sid
def start_audio_video(self, jid): if self.get_jingle_session(jid, media='video'): return self.get_jingle_session(jid, media='video').sid audio_session = self.get_jingle_session(jid, media='audio') video_session = self.get_jingle_session(jid, media='video') if audio_session and video_session: return audio_session.sid if audio_session: video = JingleVideo(audio_session) audio_session.add_content('video', video) return audio_session.sid if video_session: audio = JingleAudio(video_session) video_session.add_content('audio', audio) return video_session.sid jingle_session = JingleSession(self._con, weinitiate=True, jid=jid) self._sessions[jingle_session.sid] = jingle_session audio = JingleAudio(jingle_session) video = JingleVideo(jingle_session) jingle_session.add_content('audio', audio) jingle_session.add_content('video', video) jingle_session.start_session() return jingle_session.sid