Пример #1
0
 def start_whiteboard(self):
     conn = gajim.connections[self.chat_control.account]
     jingle = JingleSession(conn, weinitiate=True, jid=self.jid)
     self.sid = jingle.sid
     conn._sessions[jingle.sid] = jingle
     content = JingleWhiteboard(jingle)
     content.control = self
     jingle.add_content('xhtml', content)
     jingle.start_session()
Пример #2
0
 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, weinitiate=True, jid=jid)
         self._sessions[jingle.sid] = jingle
         jingle.add_content('voice', JingleAudio(jingle))
         jingle.start_session()
     return jingle.sid
Пример #3
0
 def start_file_transfer(self, jid, file_props, request=False):
     logger.info("start file transfer with file: %s", file_props)
     contact = gajim.contacts.get_contact_with_highest_priority(
         self.name, gajim.get_jid_without_resource(jid))
     if gajim.contacts.is_gc_contact(self.name, jid):
         gcc = jid.split('/')
         if len(gcc) == 2:
             contact = gajim.contacts.get_gc_contact(
                 self.name, gcc[0], gcc[1])
     if contact is None:
         return
     use_security = contact.supports(nbxmpp.NS_JINGLE_XTLS)
     jingle = JingleSession(self,
                            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(nbxmpp.NS_JINGLE_BYTESTREAM):
         transport = JingleTransportSocks5()
     elif contact.supports(nbxmpp.NS_JINGLE_IBB):
         transport = JingleTransportIBB()
     c = JingleFileTransfer(jingle,
                            transport=transport,
                            file_props=file_props,
                            use_security=use_security)
     file_props.algo = self.__hash_support(contact)
     jingle.add_content('file' + helpers.get_random_string_16(), c)
     jingle.start_session()
     return c.transport.sid
Пример #4
0
 def start_file_transfer(self, jid, file_props, request=False):
     logger.info("start file transfer with file: %s" % file_props)
     contact = gajim.contacts.get_contact_with_highest_priority(self.name,
         gajim.get_jid_without_resource(jid))
     if gajim.contacts.is_gc_contact(self.name,jid):
         gcc = jid.split('/')
         if len(gcc) == 2:
             contact = gajim.contacts.get_gc_contact(self.name, gcc[0], gcc[1])
     if contact is None:
         return
     use_security = contact.supports(nbxmpp.NS_JINGLE_XTLS)
     jingle = JingleSession(self, 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(nbxmpp.NS_JINGLE_BYTESTREAM):
         transport = JingleTransportSocks5()
     elif contact.supports(nbxmpp.NS_JINGLE_IBB):
         transport = JingleTransportIBB()
     c = JingleFileTransfer(jingle, transport=transport,
         file_props=file_props, use_security=use_security)
     file_props.algo = self.__hash_support(contact)
     jingle.add_content('file' + helpers.get_random_string_16(), c)
     jingle.start_session()
     return c.transport.sid
Пример #5
0
 def start_whiteboard(self):
     conn = gajim.connections[self.chat_control.account]
     jingle = JingleSession(conn, weinitiate=True, jid=self.jid)
     self.sid = jingle.sid
     conn._sessions[jingle.sid] = jingle
     content = JingleWhiteboard(jingle)
     content.control = self
     jingle.add_content('xhtml', content)
     jingle.start_session()
Пример #6
0
    def _JingleCB(self, con, stanza):
        """
        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
        adequatelly.
        """
        # 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(con=self,
                                      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
Пример #7
0
 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, weinitiate=True, jid=jid)
         self._sessions[jingle.sid] = jingle
         jingle.add_content('voice', JingleAudio(jingle))
         jingle.start_session()
     return jingle.sid