diff --git a/gajim/common/connection.py b/gajim/common/connection.py index 0c4e12448..e1cf1980a 100644 --- a/gajim/common/connection.py +++ b/gajim/common/connection.py @@ -101,6 +101,9 @@ class CommonConnection: self.time_to_reconnect = None self._reconnect_timer_source = None + # If handlers have been registered + self.handlers_registered = False + self.pep = {} # Do we continue connection when we get roster (send presence,get vcard..) self.continue_connect_info = None @@ -124,6 +127,24 @@ class CommonConnection: self.get_config_values_or_default() + def _register_new_handlers(self, con): + for handler in modules.get_handlers(self): + if len(handler) == 5: + name, func, typ, ns, priority = handler + con.RegisterHandler(name, func, typ, ns, priority=priority) + else: + con.RegisterHandler(*handler) + self.handlers_registered = True + + def _unregister_new_handlers(self, con): + if not con: + return + for handler in modules.get_handlers(self): + if len(handler) > 4: + handler = handler[:4] + con.UnregisterHandler(*handler) + self.handlers_registered = False + def _compute_resource(self): resource = app.config.get_per('accounts', self.name, 'resource') # All valid resource substitution strings should be added to this hash. @@ -484,6 +505,7 @@ class CommonConnection: self._change_from_invisible() self._update_status(show, msg, idle_time=idle_time) + class Connection(CommonConnection, ConnectionHandlers): def __init__(self, name): CommonConnection.__init__(self, name) @@ -658,7 +680,7 @@ class Connection(CommonConnection, ConnectionHandlers): app.proxy65_manager.disconnect(self.connection) self.terminate_sessions() self.remove_all_transfers() - ConnectionHandlers._unregister_handlers(self) + self._unregister_new_handlers(self.connection) self.connection = None def _set_reconnect_timer(self): @@ -1331,6 +1353,7 @@ class Connection(CommonConnection, ConnectionHandlers): conn=self, connection_type=con_type)) ConnectionHandlers._register_handlers(self, con, con_type) + self._register_new_handlers(con) def _on_auth_successful(self): if self._unregister_account: diff --git a/gajim/common/connection_handlers.py b/gajim/common/connection_handlers.py index 938b65743..203fbf132 100644 --- a/gajim/common/connection_handlers.py +++ b/gajim/common/connection_handlers.py @@ -33,7 +33,6 @@ from gajim.common import app from gajim.common import ged from gajim.common import helpers from gajim.common import jingle_xtls -from gajim.common import modules from gajim.common.nec import NetworkEvent from gajim.common.caps_cache import muc_caps_cache from gajim.common.connection_handlers_events import * @@ -263,9 +262,6 @@ class ConnectionHandlers(ConnectionSocks5Bytestream, self.continue_connect_info = None - # If handlers have been registered - self.handlers_registered = False - app.nec.register_incoming_event(StreamConflictReceivedEvent) app.nec.register_incoming_event(NotificationEvent) @@ -409,20 +405,3 @@ class ConnectionHandlers(ConnectionSocks5Bytestream, nbxmpp.NS_PUBKEY_PUBKEY) con.RegisterHandler('iq', self._PubkeyResultCB, 'result', nbxmpp.NS_PUBKEY_PUBKEY) - - for handler in modules.get_handlers(self): - if len(handler) == 5: - name, func, typ, ns, priority = handler - con.RegisterHandler(name, func, typ, ns, priority=priority) - else: - con.RegisterHandler(*handler) - self.handlers_registered = True - - def _unregister_handlers(self): - if not self.connection: - return - for handler in modules.get_handlers(self): - if len(handler) > 4: - handler = handler[:4] - self.connection.UnregisterHandler(*handler) - self.handlers_registered = False diff --git a/gajim/common/zeroconf/client_zeroconf.py b/gajim/common/zeroconf/client_zeroconf.py index b4a005efd..834089ecc 100644 --- a/gajim/common/zeroconf/client_zeroconf.py +++ b/gajim/common/zeroconf/client_zeroconf.py @@ -288,6 +288,7 @@ class P2PClient(IdleObject): del self.conn_holder.ids_of_awaiting_messages[self.fd] self.conn_holder.remove_connection(self.sock_hash) if 'Dispatcher' in self.__dict__: + self._caller._unregister_new_handlers(self) self.Dispatcher.PlugOut() if 'P2PConnection' in self.__dict__: self.P2PConnection.PlugOut() @@ -338,6 +339,8 @@ class P2PClient(IdleObject): self.RegisterHandler('iq', self._caller._JingleCB, 'error') self.RegisterHandler('iq', self._caller._JingleCB, 'set', nbxmpp.NS_JINGLE) + self._caller._register_new_handlers(self) + class P2PConnection(IdleObject, PlugIn): def __init__(self, sock_hash, _sock, addresses=None, caller=None,