diff --git a/src/common/connection.py b/src/common/connection.py index b0a3cf464..f8dcfcbcd 100644 --- a/src/common/connection.py +++ b/src/common/connection.py @@ -493,7 +493,6 @@ class Connection: self.disconnect_transfer(file_props) file_props['error'] = -3 self.dispatch('FILE_REQUEST_ERROR', (to, file_props)) - def _bytestreamResultCB(self, con, iq_obj): gajim.log.debug('_bytestreamResultCB') @@ -592,6 +591,8 @@ class Connection: self.files_props = {} def remove_transfer(self, file_props, remove_from_list = True): + if file_props is None: + return if file_props.has_key('hash'): gajim.socks5queue.remove_sender(file_props['hash']) @@ -608,6 +609,8 @@ class Connection: del(self.files_props['sid']) def disconnect_transfer(self, file_props): + if file_props is None: + return if file_props.has_key('hash'): gajim.socks5queue.remove_sender(file_props['hash']) @@ -750,7 +753,10 @@ class Connection: listener = gajim.socks5queue.start_listener(self.peerhost[0], port, sha_str, self.result_socks5_sid, file_props['sid']) if listener == None: - # FIXME - raise error dialog that address is in use + file_props['error'] = -5 + self.dispatch('FILE_REQUEST_ERROR', (str(receiver), file_props)) + self._connect_error(str(receiver), file_props['sid'], + code = 406) return iq = common.xmpp.Protocol(name = 'iq', to = str(receiver), diff --git a/src/common/socks5.py b/src/common/socks5.py index 8d8190ffe..727f8d6ab 100644 --- a/src/common/socks5.py +++ b/src/common/socks5.py @@ -49,6 +49,12 @@ class SocksQueue: self.listener = Socks5Listener(host, port) self.listener.bind() if self.listener.started is False: + self.listener = None + import sys + sys.stderr.write('\n\n\n========================================\ +========================\nUnable to bind to port %s. \nMaybe you have another \ +running instance of Gajim. \nFile Transfer will be canceled.\n==================\ +==============================================\n\n\n' % port) return None self.connected += 1 return self.listener @@ -82,6 +88,7 @@ class SocksQueue: file_props = self.files_props[account][sid] file_props['success_cb'] = on_success file_props['failure_cb'] = on_failure + # add streamhosts to the queue for streamhost in file_props['streamhosts']: receiver = Socks5Receiver(streamhost, sid, file_props) @@ -123,12 +130,9 @@ class SocksQueue: result = sock5_receiver.connect() self.connected += 1 if result != None: - self.connected += 1 result = sock5_receiver.main() self.process_result(result, sock5_receiver) - return 1 - return None def get_file_from_sender(self, file_props, account): diff --git a/src/gajim.py b/src/gajim.py index 63d9bb6d8..2b7b8802c 100755 --- a/src/gajim.py +++ b/src/gajim.py @@ -715,7 +715,7 @@ class Interface: ft.set_status(file_props['type'], file_props['sid'], 'stop') if gajim.config.get('notify_on_new_message'): # check if we should be notified - if errno == -4: + if errno == -4 or errno == -5: msg_type = 'file-error' else: msg_type = 'file-request-error' @@ -725,7 +725,7 @@ class Interface: elif (gajim.connections[account].connected in (2, 3) and gajim.config.get('autopopup')) or \ gajim.config.get('autopopupaway'): - if errno == -4: + if errno == -4 or errno == -5: self.windows['file_transfers'].show_stopped(jid, file_props) else: self.windows['file_transfers'].show_request_error(file_props)