Ejemplo n.º 1
0
    def _send_socks5_info(self, file_props):
        """
        Send iq for the present streamhosts and proxies
        """
        if not self.connection or self.connected < 2:
            return
        receiver = file_props.receiver
        sender = file_props.sender

        sha_str = helpers.get_auth_sha(file_props.sid, sender, receiver)
        file_props.sha_str = sha_str

        port = gajim.config.get('file_transfers_port')
        listener = gajim.socks5queue.start_listener(port, sha_str,
                self._result_socks5_sid, file_props)
        if not listener:
            file_props.error = -5
            from common.connection_handlers_events import FileRequestErrorEvent
            gajim.nec.push_incoming_event(FileRequestErrorEvent(None, conn=self,
                jid=unicode(receiver), file_props=file_props, error_msg=''))
            self._connect_error(unicode(receiver), file_props.sid,
                    file_props.sid, code=406)
        else:
            iq = nbxmpp.Iq(to=unicode(receiver), typ='set')
            file_props.request_id = 'id_' + file_props.sid
            iq.setID(file_props.request_id)
            query = iq.setTag('query', namespace=nbxmpp.NS_BYTESTREAM)
            query.setAttr('sid', file_props.sid)

            self._add_addiditional_streamhosts_to_query(query, file_props)
            self._add_local_ips_as_streamhosts_to_query(query, file_props)
            self._add_proxy_streamhosts_to_query(query, file_props)
            self._add_upnp_igd_as_streamhost_to_query(query, file_props, iq)
Ejemplo n.º 2
0
 def _listen_host(self):
     receiver = self.file_props.receiver
     sender = self.file_props.sender
     sha_str = helpers.get_auth_sha(self.file_props.sid, sender, receiver)
     self.file_props.sha_str = sha_str
     port = gajim.config.get('file_transfers_port')
     fingerprint = None
     if self.use_security:
         fingerprint = 'server'
     if self.weinitiate:
         listener = gajim.socks5queue.start_listener(
             port,
             sha_str,
             self._store_socks5_sid,
             self.file_props,
             fingerprint=fingerprint,
             typ='sender')
     else:
         listener = gajim.socks5queue.start_listener(
             port,
             sha_str,
             self._store_socks5_sid,
             self.file_props,
             fingerprint=fingerprint,
             typ='receiver')
     if not listener:
         # send error message, notify the user
         return
Ejemplo n.º 3
0
    def _send_socks5_info(self, file_props):
        """
        Send iq for the present streamhosts and proxies
        """
        if not self.connection or self.connected < 2:
            return
        receiver = file_props.receiver
        sender = file_props.sender

        sha_str = helpers.get_auth_sha(file_props.sid, sender, receiver)
        file_props.sha_str = sha_str

        port = gajim.config.get('file_transfers_port')
        listener = gajim.socks5queue.start_listener(port, sha_str,
                self._result_socks5_sid, file_props)
        if not listener:
            file_props.error = -5
            from common.connection_handlers_events import FileRequestErrorEvent
            gajim.nec.push_incoming_event(FileRequestErrorEvent(None, conn=self,
                jid=receiver, file_props=file_props, error_msg=''))
            self._connect_error(file_props.sid, error='not-acceptable',
                error_type='modify')
        else:
            iq = nbxmpp.Iq(to=receiver, typ='set')
            file_props.request_id = 'id_' + file_props.sid
            iq.setID(file_props.request_id)
            query = iq.setTag('query', namespace=nbxmpp.NS_BYTESTREAM)
            query.setAttr('sid', file_props.sid)

            self._add_addiditional_streamhosts_to_query(query, file_props)
            self._add_local_ips_as_streamhosts_to_query(query, file_props)
            self._add_proxy_streamhosts_to_query(query, file_props)
            self._add_upnp_igd_as_streamhost_to_query(query, file_props, iq)
Ejemplo n.º 4
0
 def ok(s, proto, ext_ip, re, ext_port, local_ip, local_port, desc):
     log.debug('Got GUPnP-IGD answer: external: %s:%s, internal: %s:%s',
         ext_ip, ext_port, local_ip, local_port)
     if local_port != gajim.config.get('file_transfers_port'):
         sender = file_props.sender
         receiver = file_props.receiver
         sha_str = helpers.get_auth_sha(file_props.sid, sender,
             receiver)
         listener = gajim.socks5queue.start_listener(local_port, sha_str,
             self._result_socks5_sid, file_props.sid)
         if listener:
             self._add_streamhosts_to_query(query, sender, ext_port,
                 [ext_ip])
     else:
         self._add_streamhosts_to_query(query, file_props.sender,
             ext_port, [ext_ip])
     self.connection.send(iq)
     cleanup_gupnp()
Ejemplo n.º 5
0
 def ok(s, proto, ext_ip, re, ext_port, local_ip, local_port, desc):
     log.debug('Got GUPnP-IGD answer: external: %s:%s, internal: %s:%s',
         ext_ip, ext_port, local_ip, local_port)
     if local_port != gajim.config.get('file_transfers_port'):
         sender = file_props.sender
         receiver = file_props.receiver
         sha_str = helpers.get_auth_sha(file_props.sid, sender,
             receiver)
         listener = gajim.socks5queue.start_listener(local_port, sha_str,
             self._result_socks5_sid, file_props.sid)
         if listener:
             self._add_streamhosts_to_query(query, sender, ext_port,
                 [ext_ip])
     else:
         self._add_streamhosts_to_query(query, file_props.sender,
             ext_port, [ext_ip])
     self.connection.send(iq)
     cleanup_gupnp()
Ejemplo n.º 6
0
 def _listen_host(self):
     receiver = self.file_props.receiver
     sender = self.file_props.sender
     sha_str = helpers.get_auth_sha(self.file_props.sid, sender,
         receiver)
     self.file_props.sha_str = sha_str
     port = gajim.config.get('file_transfers_port')
     fingerprint = None
     if self.use_security:
         fingerprint = 'server'
     if self.weinitiate:
         listener = gajim.socks5queue.start_listener(port, sha_str,
             self._store_socks5_sid, self.file_props,
             fingerprint=fingerprint, typ='sender')
     else:
         listener = gajim.socks5queue.start_listener(port, sha_str,
             self._store_socks5_sid, self.file_props,
             fingerprint=fingerprint, typ='receiver')
     if not listener:
         # send error message, notify the user
         return
Ejemplo n.º 7
0
    def send_socks5_info(self,
                         file_props,
                         fast=True,
                         receiver=None,
                         sender=None):
        ''' send iq for the present streamhosts and proxies '''
        if not isinstance(self.peerhost, tuple):
            return
        port = gajim.config.get('file_transfers_port')
        ft_add_hosts_to_send = gajim.config.get('ft_add_hosts_to_send')
        if receiver is None:
            receiver = file_props['receiver']
        if sender is None:
            sender = file_props['sender']
        proxyhosts = []
        sha_str = helpers.get_auth_sha(file_props['sid'], sender, receiver)
        file_props['sha_str'] = sha_str
        ft_add_hosts = []
        if ft_add_hosts_to_send:
            ft_add_hosts_to_send = map(lambda e: e.strip(),
                                       ft_add_hosts_to_send.split(','))
            for ft_host in ft_add_hosts_to_send:
                try:
                    ft_host = socket.gethostbyname(ft_host)
                    ft_add_hosts.append(ft_host)
                except socket.gaierror:
                    self.dispatch('ERROR', (
                        _('Wrong host'),
                        _('The host %s you configured as the ft_add_hosts_to_send advanced option is not valid, so ignored.'
                          ) % ft_host))
        listener = gajim.socks5queue.start_listener(port, sha_str,
                                                    self._result_socks5_sid,
                                                    file_props['sid'])
        if listener is None:
            file_props['error'] = -5
            self.dispatch('FILE_REQUEST_ERROR',
                          (unicode(receiver), file_props, ''))
            self._connect_error(unicode(receiver),
                                file_props['sid'],
                                file_props['sid'],
                                code=406)
            return

        iq = common.xmpp.Protocol(name='iq', to=unicode(receiver), typ='set')
        file_props['request-id'] = 'id_' + file_props['sid']
        iq.setID(file_props['request-id'])
        query = iq.setTag('query')
        query.setNamespace(common.xmpp.NS_BYTESTREAM)
        query.setAttr('mode', 'tcp')
        query.setAttr('sid', file_props['sid'])
        for ft_host in ft_add_hosts:
            # The streamhost, if set
            ostreamhost = common.xmpp.Node(tag='streamhost')
            query.addChild(node=ostreamhost)
            ostreamhost.setAttr('port', unicode(port))
            ostreamhost.setAttr('host', ft_host)
            ostreamhost.setAttr('jid', sender)
        for thehost in self.peerhost:
            thehost = self.peerhost[0]
            streamhost = common.xmpp.Node(tag='streamhost')  # My IP
            query.addChild(node=streamhost)
            streamhost.setAttr('port', unicode(port))
            streamhost.setAttr('host', thehost)
            streamhost.setAttr('jid', sender)
        self.connection.send(iq)