prevent transfer to offline contact, remove

listener when last there are no more senders
This commit is contained in:
Dimitur Kirov 2005-08-23 21:52:56 +00:00
parent 618ae1488b
commit a51c320245
2 changed files with 34 additions and 2 deletions

View File

@ -825,6 +825,25 @@ class Connection:
self.dispatch('FILE_REQUEST', (jid, file_props))
raise common.xmpp.NodeProcessed
def _siErrorCB(self, con, iq_obj):
gajim.log.debug('_siErrorCB')
si = iq_obj.getTag('si')
profile = si.getAttr('profile')
if profile != common.xmpp.NS_FILE:
return
id = iq_obj.getAttr('id')
if not self.files_props.has_key(id):
# no such jid
return
file_props = self.files_props[id]
if file_props is None:
# file properties for jid is none
return
jid = iq_obj.getFrom().getStripped().encode('utf8')
file_props['error'] = -3
self.dispatch('FILE_REQUEST_ERROR', (jid, file_props))
raise common.xmpp.NodeProcessed
def send_file_rejection(self, file_props):
''' informs sender that we refuse to download the file '''
iq = common.xmpp.Protocol(name = 'iq', to = str(file_props['sender']),
@ -1261,6 +1280,8 @@ class Connection:
common.xmpp.NS_ROSTER)
con.RegisterHandler('iq', self._siSetCB, 'set',
common.xmpp.NS_SI)
con.RegisterHandler('iq', self._siErrorCB, 'error',
common.xmpp.NS_SI)
con.RegisterHandler('iq', self._siResultCB, 'result',
common.xmpp.NS_SI)
con.RegisterHandler('iq', self._discoGetCB, 'get',

View File

@ -323,16 +323,21 @@ running instance of Gajim. \nFile Transfer will be canceled.\n==================
del(self.readers[idx])
def remove_sender(self, idx, do_disconnect = True):
''' Remove reciver from the list of senders and decrease the
''' Remove sender from the list of senders and decrease the
number of active connections with 1'''
if idx != -1:
if self.senders.has_key(idx):
if do_disconnect:
self.senders[idx].disconnect()
return
else:
del(self.senders[idx])
if self.connected > 0:
self.connected -= 1
if len(self.senders) == 0 and self.listener is not None:
self.listener.disconnect()
self.listener = None
self.connected -= 1
class Socks5:
def __init__(self, host, port, initiator, target, sid):
@ -712,7 +717,7 @@ class Socks5Sender(Socks5):
self.file_props['disconnect_cb'] = None
if self.queue is not None:
self.queue.remove_sender(self.queue_idx, False)
class Socks5Listener:
def __init__(self, host, port):
self.host, self.port = host, port
@ -735,6 +740,12 @@ class Socks5Listener:
return None
self.started = True
def disconnect(self):
try:
self._serv.close()
except:
pass
def accept_conn(self):
_sock = self._serv.accept()
_sock[0].setblocking(False)