Register handlers in CommonConnection class

This commit is contained in:
Philipp Hörist 2019-01-03 09:01:22 +01:00
parent 1399c41d59
commit f3d5babc65
3 changed files with 27 additions and 22 deletions

View File

@ -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:

View File

@ -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

View File

@ -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,