send fake activate stanza to assert that proxy

works correctly
This commit is contained in:
Dimitur Kirov 2006-03-20 21:24:10 +00:00
parent 1f43ebfeb3
commit ae33330ac6
4 changed files with 34 additions and 15 deletions

View file

@ -285,7 +285,9 @@ class ConnectionBytestream:
def _bytestreamErrorCB(self, con, iq_obj): def _bytestreamErrorCB(self, con, iq_obj):
gajim.log.debug('_bytestreamErrorCB') gajim.log.debug('_bytestreamErrorCB')
id = unicode(iq_obj.getAttr('id')) id = unicode(iq_obj.getAttr('id'))
frm = helpers.get_full_jid_from_iq(iq_obj)
query = iq_obj.getTag('query') query = iq_obj.getTag('query')
gajim.proxy65_manager.error_cb(frm, query)
jid = helpers.get_jid_from_iq(iq_obj) jid = helpers.get_jid_from_iq(iq_obj)
id = id[3:] id = id[3:]
if not self.files_props.has_key(id): if not self.files_props.has_key(id):

View file

@ -626,6 +626,15 @@ distro_info = {
'Redhat Linux': '/etc/redhat-release' 'Redhat Linux': '/etc/redhat-release'
} }
def get_random_string_16():
''' create random string of length 16'''
rng = range(65, 90)
rng.extend(range(48, 57))
char_sequence = map(lambda e:chr(e), rng)
from random import sample
return reduce(lambda e1, e2: e1 + e2,
sample(char_sequence, 16))
def get_os_info(): def get_os_info():
if os.name == 'nt': if os.name == 'nt':
ver = os.sys.getwindowsversion() ver = os.sys.getwindowsversion()

View file

@ -18,12 +18,14 @@ import struct
import common.xmpp import common.xmpp
from common import gajim from common import gajim
from common import helpers
from socks5 import Socks5 from socks5 import Socks5
from common.xmpp.idlequeue import IdleObject from common.xmpp.idlequeue import IdleObject
S_INITIAL = 0 S_INITIAL = 0
S_STARTED = 1 S_STARTED = 1
S_RESOLVED = 2 S_RESOLVED = 2
S_ACTIVATED = 3
S_FINISHED = 4 S_FINISHED = 4
CONNECT_TIMEOUT = 20 CONNECT_TIMEOUT = 20
@ -68,6 +70,15 @@ class Proxy65Manager:
self.proxies[proxy].resolve_result(host, port, jid) self.proxies[proxy].resolve_result(host, port, jid)
# we can have only one streamhost # we can have only one streamhost
raise common.xmpp.NodeProcessed raise common.xmpp.NodeProcessed
def error_cb(self, proxy, query):
if not self.proxies.has_key(proxy):
return
resolver = self.proxies[proxy]
sid = query.getAttr('sid')
if resolver.sid == sid:
resolver.keep_conf()
def get_proxy(self, proxy): def get_proxy(self, proxy):
if self.proxies.has_key(proxy): if self.proxies.has_key(proxy):
resolver = self.proxies[proxy] resolver = self.proxies[proxy]
@ -87,11 +98,16 @@ class ProxyResolver:
self.host_tester.connect() self.host_tester.connect()
def _on_connect_success(self): def _on_connect_success(self):
conf = gajim.config iq = common.xmpp.Protocol(name = 'iq', to = self.jid, typ = 'set')
conf.add_per('ft_proxies65_cache', self.proxy) query = iq.setTag('query')
conf.set_per('ft_proxies65_cache', self.proxy, 'host', self.host) query.setNamespace(common.xmpp.NS_BYTESTREAM)
conf.set_per('ft_proxies65_cache', self.proxy, 'port', self.port) query.setAttr('sid', self.sid)
conf.set_per('ft_proxies65_cache', self.proxy, 'jid', self.jid) activate = query.setTag('activate')
# activate.setData(self.jid + "/" + self.sid)
self.active_connection.send(iq)
self.state = S_ACTIVATED
def keep_conf(self):
self.state = S_FINISHED self.state = S_FINISHED
def _on_connect_failure(self): def _on_connect_failure(self):
@ -139,6 +155,7 @@ class ProxyResolver:
self.jid = None self.jid = None
self.host = None self.host = None
self.port = None self.port = None
self.sid = helpers.get_random_string_16()
class HostTester(Socks5, IdleObject): class HostTester(Socks5, IdleObject):
''' fake proxy tester. ''' ''' fake proxy tester. '''

View file

@ -525,15 +525,6 @@ _('Connection with peer cannot be established.'))
return iter return iter
iter = self.model.iter_next(iter) iter = self.model.iter_next(iter)
def get_sid(self):
''' create random string of length 16'''
rng = range(65, 90)
rng.extend(range(48, 57))
char_sequence = map(lambda e:chr(e), rng)
from random import sample
return reduce(lambda e1, e2: e1 + e2,
sample(char_sequence, 16))
def get_send_file_props(self, account, contact, file_path, file_name): def get_send_file_props(self, account, contact, file_path, file_name):
''' create new file_props dict and set initial file transfer ''' create new file_props dict and set initial file transfer
properties in it''' properties in it'''
@ -551,7 +542,7 @@ _('Connection with peer cannot be established.'))
return None return None
file_props['elapsed-time'] = 0 file_props['elapsed-time'] = 0
file_props['size'] = unicode(stat[6]) file_props['size'] = unicode(stat[6])
file_props['sid'] = self.get_sid() file_props['sid'] = helpers.get_random_string_16()
file_props['completed'] = False file_props['completed'] = False
file_props['started'] = False file_props['started'] = False
file_props['sender'] = account file_props['sender'] = account