コード例 #1
0
ファイル: bytestream.py プロジェクト: jabber-at/gajim
 def OpenStream(self, sid, to, fp, blocksize=4096):
     """
     Start new stream. You should provide stream id 'sid', the endpoind jid
     'to', the file object containing info for send 'fp'. Also the desired
     blocksize can be specified.
     Take into account that recommended stanza size is 4k and IBB uses
     base64 encoding that increases size of data by 1/3.
     """
     if not nbxmpp.JID(to).getResource():
         return
     file_props = FilesProp.getFilePropBySid(sid)
     file_props.direction = '|>' + to
     file_props.block_size = blocksize
     file_props.fp = fp
     file_props.seq = 0
     file_props.error = 0
     file_props.paused = False
     file_props.received_len = 0
     file_props.last_time = time.time()
     file_props.connected = True
     file_props.completed = False
     file_props.disconnect_cb = None
     file_props.continue_cb = None
     syn = nbxmpp.Protocol('iq', to, 'set', payload=[nbxmpp.Node(
         nbxmpp.NS_IBB + ' open', {'sid': file_props.transport_sid,
         'block-size': blocksize, 'stanza': 'iq'})])
     self.connection.send(syn)
     file_props.syn_id = syn.getID()
     return file_props
コード例 #2
0
ファイル: bytestream.py プロジェクト: xiayuming/gajim
 def _result_socks5_sid(self, sid, hash_id):
     """
     Store the result of SHA message from auth
     """
     file_props = FilesProp.getFilePropBySid(sid)
     file_props.hash_ = hash_id
     return
コード例 #3
0
ファイル: bytestream.py プロジェクト: jabber-at/gajim
 def _result_socks5_sid(self, sid, hash_id):
     """
     Store the result of SHA message from auth
     """
     file_props = FilesProp.getFilePropBySid(sid)
     file_props.hash_ = hash_id
     return
コード例 #4
0
ファイル: bytestream.py プロジェクト: lheckemann/gajim
 def OpenStream(self, sid, to, fp, blocksize=4096):
     """
     Start new stream. You should provide stream id 'sid', the endpoind jid
     'to', the file object containing info for send 'fp'. Also the desired
     blocksize can be specified.
     Take into account that recommended stanza size is 4k and IBB uses
     base64 encoding that increases size of data by 1/3.
     """
     if not nbxmpp.JID(to).getResource():
         return
     file_props = FilesProp.getFilePropBySid(sid)
     file_props.direction = '|>' + to
     file_props.block_size = blocksize
     file_props.fp = fp
     file_props.seq = 0
     file_props.error = 0
     file_props.paused = False
     file_props.received_len = 0
     file_props.last_time = time.time()
     file_props.connected = True
     file_props.completed = False
     file_props.disconnect_cb = None
     file_props.continue_cb = None
     syn = nbxmpp.Protocol('iq', to, 'set', payload=[nbxmpp.Node(
         nbxmpp.NS_IBB + ' open', {'sid': file_props.transport_sid,
         'block-size': blocksize, 'stanza': 'iq'})])
     self.connection.send(syn)
     file_props.syn_id = syn.getID()
     return file_props
コード例 #5
0
ファイル: bytestream.py プロジェクト: xiayuming/gajim
    def _bytestreamSetCB(self, con, iq_obj):
        target = iq_obj.getAttr('to')
        id_ = iq_obj.getAttr('id')
        query = iq_obj.getTag('query')
        sid = query.getAttr('sid')
        file_props = FilesProp.getFileProp(self.name, sid)
        streamhosts = []
        for item in query.getChildren():
            if item.getName() == 'streamhost':
                host_dict = {
                    'state': 0,
                    'target': target,
                    'id': id_,
                    'sid': sid,
                    'initiator': self._ft_get_from(iq_obj)
                }
                for attr in item.getAttrs():
                    host_dict[attr] = item.getAttr(attr)
                if 'host' not in host_dict:
                    continue
                if 'jid' not in host_dict:
                    continue
                if 'port' not in host_dict:
                    continue
                streamhosts.append(host_dict)
        file_props = FilesProp.getFilePropBySid(sid)
        if file_props is not None:
            if file_props.type_ == 's':  # FIXME: remove fast xmlns
                # only psi do this
                if file_props.streamhosts:
                    file_props.streamhosts.extend(streamhosts)
                else:
                    file_props.streamhosts = streamhosts
                gajim.socks5queue.connect_to_hosts(
                    self.name, sid, self.send_success_connect_reply, None)
                raise nbxmpp.NodeProcessed
        else:
            log.warning(
                'Gajim got streamhosts for unknown transfer. Ignoring it.')
            raise nbxmpp.NodeProcessed

        file_props.streamhosts = streamhosts

        def _connection_error(sid):
            self._connect_error(sid,
                                'item-not-found',
                                'cancel',
                                msg='Could not connect to given hosts')

        if file_props.type_ == 'r':
            gajim.socks5queue.connect_to_hosts(self.name, sid,
                                               self.send_success_connect_reply,
                                               _connection_error)
        raise nbxmpp.NodeProcessed
コード例 #6
0
ファイル: bytestream.py プロジェクト: jabber-at/gajim
 def _ResultCB(self, con, iq_obj):
     # if we want to respect xep-0065 we have to check for proxy
     # activation result in any result iq
     real_id = unicode(iq_obj.getAttr('id'))
     if not real_id.startswith('au_'):
         return
     frm = self._ft_get_from(iq_obj)
     id_ = real_id[3:]
     file_props = FilesProp.getFilePropBySid(id_)
     if file_props.streamhost_used:
         for host in file_props.proxyhosts:
             if host['initiator'] == frm and 'idx' in host:
                 gajim.socks5queue.activate_proxy(host['idx'])
                 raise nbxmpp.NodeProcessed
コード例 #7
0
ファイル: bytestream.py プロジェクト: xiayuming/gajim
 def _ResultCB(self, con, iq_obj):
     # if we want to respect xep-0065 we have to check for proxy
     # activation result in any result iq
     real_id = iq_obj.getAttr('id')
     if not real_id.startswith('au_'):
         return
     frm = self._ft_get_from(iq_obj)
     id_ = real_id[3:]
     file_props = FilesProp.getFilePropBySid(id_)
     if file_props.streamhost_used:
         for host in file_props.proxyhosts:
             if host['initiator'] == frm and 'idx' in host:
                 gajim.socks5queue.activate_proxy(host['idx'])
                 raise nbxmpp.NodeProcessed
コード例 #8
0
ファイル: bytestream.py プロジェクト: jabber-at/gajim
 def _bytestreamErrorCB(self, con, iq_obj):
     id_ = unicode(iq_obj.getAttr('id'))
     frm = helpers.get_full_jid_from_iq(iq_obj)
     query = iq_obj.getTag('query')
     gajim.proxy65_manager.error_cb(frm, query)
     jid = helpers.get_jid_from_iq(iq_obj)
     id_ = id_[3:]
     file_props = FilesProp.getFilePropBySid(id_)
     if not file_props:
         return
     file_props.error = -4
     from common.connection_handlers_events import FileRequestErrorEvent
     gajim.nec.push_incoming_event(FileRequestErrorEvent(None, conn=self,
         jid=jid, file_props=file_props, error_msg=''))
     raise nbxmpp.NodeProcessed
コード例 #9
0
ファイル: bytestream.py プロジェクト: lheckemann/gajim
 def _bytestreamErrorCB(self, con, iq_obj):
     id_ = iq_obj.getAttr('id')
     frm = helpers.get_full_jid_from_iq(iq_obj)
     query = iq_obj.getTag('query')
     gajim.proxy65_manager.error_cb(frm, query)
     jid = helpers.get_jid_from_iq(iq_obj)
     id_ = id_[3:]
     file_props = FilesProp.getFilePropBySid(id_)
     if not file_props:
         return
     file_props.error = -4
     from common.connection_handlers_events import FileRequestErrorEvent
     gajim.nec.push_incoming_event(FileRequestErrorEvent(None, conn=self,
         jid=jid, file_props=file_props, error_msg=''))
     raise nbxmpp.NodeProcessed
コード例 #10
0
ファイル: bytestream.py プロジェクト: gajim/gajim
    def _bytestreamSetCB(self, con, iq_obj):
        target = iq_obj.getAttr('to')
        id_ = iq_obj.getAttr('id')
        query = iq_obj.getTag('query')
        sid = query.getAttr('sid')
        file_props = FilesProp.getFileProp(self.name, sid)
        streamhosts = []
        for item in query.getChildren():
            if item.getName() == 'streamhost':
                host_dict = {
                        'state': 0,
                        'target': target,
                        'id': id_,
                        'sid': sid,
                        'initiator': self._ft_get_from(iq_obj)
                }
                for attr in item.getAttrs():
                    host_dict[attr] = item.getAttr(attr)
                if 'host' not in host_dict:
                    continue
                if 'jid' not in host_dict:
                    continue
                if 'port' not in host_dict:
                    continue
                streamhosts.append(host_dict)
        file_props = FilesProp.getFilePropBySid(sid)
        if file_props is not None:
            if file_props.type_ == 's': # FIXME: remove fast xmlns
                # only psi do this
                if file_props.streamhosts:
                    file_props.streamhosts.extend(streamhosts)
                else:
                    file_props.streamhosts = streamhosts
                gajim.socks5queue.connect_to_hosts(self.name, sid,
                        self.send_success_connect_reply, None)
                raise nbxmpp.NodeProcessed
        else:
            log.warning('Gajim got streamhosts for unknown transfer. Ignoring it.')
            raise nbxmpp.NodeProcessed

        file_props.streamhosts = streamhosts
        def _connection_error(sid):
            self._connect_error(sid, 'item-not-found', 'cancel',
                msg='Could not connect to given hosts')
        if file_props.type_ == 'r':
            gajim.socks5queue.connect_to_hosts(self.name, sid,
                    self.send_success_connect_reply, _connection_error)
        raise nbxmpp.NodeProcessed