fixed zeroconf to work with refactored dispatcher
This commit is contained in:
parent
acdf4ff143
commit
ed7dd84cfe
|
@ -23,6 +23,7 @@ from common.xmpp.idlequeue import IdleObject
|
||||||
from common.xmpp import dispatcher_nb, simplexml
|
from common.xmpp import dispatcher_nb, simplexml
|
||||||
from common.xmpp.client import *
|
from common.xmpp.client import *
|
||||||
from common.xmpp.simplexml import ustr
|
from common.xmpp.simplexml import ustr
|
||||||
|
from common.xmpp.transports_nb import DATA_RECEIVED, DATA_SENT
|
||||||
from common.zeroconf import zeroconf
|
from common.zeroconf import zeroconf
|
||||||
|
|
||||||
from common.xmpp.protocol import *
|
from common.xmpp.protocol import *
|
||||||
|
@ -36,8 +37,6 @@ log = logging.getLogger('gajim.c.z.client_zeroconf')
|
||||||
from common.zeroconf import roster_zeroconf
|
from common.zeroconf import roster_zeroconf
|
||||||
|
|
||||||
MAX_BUFF_LEN = 65536
|
MAX_BUFF_LEN = 65536
|
||||||
DATA_RECEIVED = 'DATA RECEIVED'
|
|
||||||
DATA_SENT = 'DATA SENT'
|
|
||||||
TYPE_SERVER, TYPE_CLIENT = range(2)
|
TYPE_SERVER, TYPE_CLIENT = range(2)
|
||||||
|
|
||||||
# wait XX sec to establish a connection
|
# wait XX sec to establish a connection
|
||||||
|
@ -120,6 +119,7 @@ class P2PClient(IdleObject):
|
||||||
on_ok=None, on_not_ok=None):
|
on_ok=None, on_not_ok=None):
|
||||||
self._owner = self
|
self._owner = self
|
||||||
self.Namespace = 'jabber:client'
|
self.Namespace = 'jabber:client'
|
||||||
|
self.protocol_type = 'XMPP'
|
||||||
self.defaultNamespace = self.Namespace
|
self.defaultNamespace = self.Namespace
|
||||||
self._component = 0
|
self._component = 0
|
||||||
self._registered_name = None
|
self._registered_name = None
|
||||||
|
@ -130,16 +130,7 @@ class P2PClient(IdleObject):
|
||||||
self.Server = host
|
self.Server = host
|
||||||
self.on_ok = on_ok
|
self.on_ok = on_ok
|
||||||
self.on_not_ok = on_not_ok
|
self.on_not_ok = on_not_ok
|
||||||
self.DBG = 'client'
|
|
||||||
self.Connection = None
|
self.Connection = None
|
||||||
if gajim.verbose:
|
|
||||||
debug = ['always', 'nodebuilder']
|
|
||||||
else:
|
|
||||||
debug = []
|
|
||||||
self._DEBUG = Debug.Debug(debug)
|
|
||||||
self.DEBUG = self._DEBUG.Show
|
|
||||||
self.debug_flags = self._DEBUG.debug_flags
|
|
||||||
self.debug_flags.append(self.DBG)
|
|
||||||
self.sock_hash = None
|
self.sock_hash = None
|
||||||
if _sock:
|
if _sock:
|
||||||
self.sock_type = TYPE_SERVER
|
self.sock_type = TYPE_SERVER
|
||||||
|
@ -202,8 +193,6 @@ class P2PClient(IdleObject):
|
||||||
self.Dispatcher.Stream._dispatch_depth = 2
|
self.Dispatcher.Stream._dispatch_depth = 2
|
||||||
self.Dispatcher.Stream.dispatch = self.Dispatcher.dispatch
|
self.Dispatcher.Stream.dispatch = self.Dispatcher.dispatch
|
||||||
self.Dispatcher.Stream.stream_header_received = self._check_stream_start
|
self.Dispatcher.Stream.stream_header_received = self._check_stream_start
|
||||||
self.debug_flags.append(simplexml.DBG_NODEBUILDER)
|
|
||||||
self.Dispatcher.Stream.DEBUG = self.DEBUG
|
|
||||||
self.Dispatcher.Stream.features = None
|
self.Dispatcher.Stream.features = None
|
||||||
if self.sock_type == TYPE_CLIENT:
|
if self.sock_type == TYPE_CLIENT:
|
||||||
self.send_stream_header()
|
self.send_stream_header()
|
||||||
|
@ -221,8 +210,7 @@ class P2PClient(IdleObject):
|
||||||
|
|
||||||
def _check_stream_start(self, ns, tag, attrs):
|
def _check_stream_start(self, ns, tag, attrs):
|
||||||
if ns<>NS_STREAMS or tag<>'stream':
|
if ns<>NS_STREAMS or tag<>'stream':
|
||||||
self.Connection.DEBUG('Incorrect stream start: (%s,%s).Terminating! ' \
|
log.error('Incorrect stream start: (%s,%s).Terminating!' % (tag, ns), 'error')
|
||||||
% (tag, ns), 'error')
|
|
||||||
self.Connection.disconnect()
|
self.Connection.disconnect()
|
||||||
if self.on_not_ok:
|
if self.on_not_ok:
|
||||||
self.on_not_ok('Connection to host could not be established: Incorrect answer from server.')
|
self.on_not_ok('Connection to host could not be established: Incorrect answer from server.')
|
||||||
|
@ -472,13 +460,13 @@ class P2PConnection(IdleObject, PlugIn):
|
||||||
if self._owner.sock_type == TYPE_CLIENT:
|
if self._owner.sock_type == TYPE_CLIENT:
|
||||||
self.set_timeout(ACTIVITY_TIMEOUT_SECONDS)
|
self.set_timeout(ACTIVITY_TIMEOUT_SECONDS)
|
||||||
if received.strip():
|
if received.strip():
|
||||||
self.DEBUG(received, 'got')
|
log.debug('received: %s', received)
|
||||||
if hasattr(self._owner, 'Dispatcher'):
|
if hasattr(self._owner, 'Dispatcher'):
|
||||||
self._owner.Dispatcher.Event('', DATA_RECEIVED, received)
|
self._owner.Dispatcher.Event('', DATA_RECEIVED, received)
|
||||||
self.on_receive(received)
|
self.on_receive(received)
|
||||||
else:
|
else:
|
||||||
# This should never happed, so we need the debug
|
# This should never happed, so we need the debug
|
||||||
self.DEBUG('Unhandled data received: %s' % received,'error')
|
log.error('Unhandled data received: %s' % received)
|
||||||
self.disconnect()
|
self.disconnect()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -553,7 +541,7 @@ class P2PConnection(IdleObject, PlugIn):
|
||||||
|
|
||||||
def _on_send(self):
|
def _on_send(self):
|
||||||
if self.sent_data and self.sent_data.strip():
|
if self.sent_data and self.sent_data.strip():
|
||||||
self.DEBUG(self.sent_data,'sent')
|
log.debug('sent: %s' % self.sent_data)
|
||||||
if hasattr(self._owner, 'Dispatcher'):
|
if hasattr(self._owner, 'Dispatcher'):
|
||||||
self._owner.Dispatcher.Event('', DATA_SENT, self.sent_data)
|
self._owner.Dispatcher.Event('', DATA_SENT, self.sent_data)
|
||||||
self.sent_data = None
|
self.sent_data = None
|
||||||
|
@ -562,7 +550,7 @@ class P2PConnection(IdleObject, PlugIn):
|
||||||
self.buff_is_message = False
|
self.buff_is_message = False
|
||||||
|
|
||||||
def _on_send_failure(self):
|
def _on_send_failure(self):
|
||||||
self.DEBUG("Socket error while sending data",'error')
|
log.error('Socket error while sending data')
|
||||||
self._owner.disconnected()
|
self._owner.disconnected()
|
||||||
self.sent_data = None
|
self.sent_data = None
|
||||||
|
|
||||||
|
@ -698,19 +686,23 @@ class ClientZeroconf:
|
||||||
# look for hashed connections
|
# look for hashed connections
|
||||||
if to in self.recipient_to_hash:
|
if to in self.recipient_to_hash:
|
||||||
conn = self.connections[self.recipient_to_hash[to]]
|
conn = self.connections[self.recipient_to_hash[to]]
|
||||||
|
id = conn.Dispatcher.getAnID()
|
||||||
|
stanza.setID(id)
|
||||||
if conn.add_stanza(stanza, is_message):
|
if conn.add_stanza(stanza, is_message):
|
||||||
if on_ok:
|
if on_ok:
|
||||||
on_ok()
|
on_ok()
|
||||||
return 0
|
return id
|
||||||
|
|
||||||
if item['address'] in self.ip_to_hash:
|
if item['address'] in self.ip_to_hash:
|
||||||
hash = self.ip_to_hash[item['address']]
|
hash = self.ip_to_hash[item['address']]
|
||||||
if self.hash_to_port[hash] == item['port']:
|
if self.hash_to_port[hash] == item['port']:
|
||||||
conn = self.connections[hash]
|
conn = self.connections[hash]
|
||||||
|
id = conn.Dispatcher.getAnID()
|
||||||
|
stanza.setID(id)
|
||||||
if conn.add_stanza(stanza, is_message):
|
if conn.add_stanza(stanza, is_message):
|
||||||
if on_ok:
|
if on_ok:
|
||||||
on_ok()
|
on_ok()
|
||||||
return 0
|
return id
|
||||||
|
|
||||||
# otherwise open new connection
|
# otherwise open new connection
|
||||||
P2PClient(None, item['address'], item['port'], self,
|
P2PClient(None, item['address'], item['port'], self,
|
||||||
|
|
|
@ -460,7 +460,7 @@ class ConnectionHandlersZeroconf(ConnectionVcard, ConnectionBytestream, connecti
|
||||||
else:
|
else:
|
||||||
# XXX this shouldn't be hardcoded
|
# XXX this shouldn't be hardcoded
|
||||||
if isinstance(session, ChatControlSession):
|
if isinstance(session, ChatControlSession):
|
||||||
session.received(frm, msgtxt, tim, encrypted, subject, msg)
|
session.received(frm, msgtxt, tim, encrypted, msg)
|
||||||
else:
|
else:
|
||||||
session.received(msg)
|
session.received(msg)
|
||||||
# END messageCB
|
# END messageCB
|
||||||
|
|
|
@ -138,6 +138,7 @@ class ConnectionZeroconf(ConnectionHandlersZeroconf):
|
||||||
if gajim.handlers.has_key(event):
|
if gajim.handlers.has_key(event):
|
||||||
gajim.handlers[event](self.name, data)
|
gajim.handlers[event](self.name, data)
|
||||||
|
|
||||||
|
|
||||||
def _reconnect(self):
|
def _reconnect(self):
|
||||||
# Do not try to reco while we are already trying
|
# Do not try to reco while we are already trying
|
||||||
self.time_to_reconnect = None
|
self.time_to_reconnect = None
|
||||||
|
@ -449,18 +450,19 @@ class ConnectionZeroconf(ConnectionHandlersZeroconf):
|
||||||
else:
|
else:
|
||||||
kind = 'single_msg_sent'
|
kind = 'single_msg_sent'
|
||||||
gajim.logger.write(kind, jid, log_msg)
|
gajim.logger.write(kind, jid, log_msg)
|
||||||
|
|
||||||
self.dispatch('MSGSENT', (jid, msg, keyID))
|
self.dispatch('MSGSENT', (jid, msg, keyID))
|
||||||
|
|
||||||
def on_send_not_ok(reason):
|
def on_send_not_ok(reason):
|
||||||
reason += ' ' + _('Your message could not be sent.')
|
reason += ' ' + _('Your message could not be sent.')
|
||||||
self.dispatch('MSGERROR', [jid, '-1', reason, None, None, session])
|
self.dispatch('MSGERROR', [jid, '-1', reason, None, None, session])
|
||||||
|
|
||||||
ret = self.connection.send(msg_iq, msg != None, on_ok=on_send_ok,
|
ret = self.connection.send(msg_iq, msg != None, on_ok=on_send_ok,
|
||||||
on_not_ok=on_send_not_ok)
|
on_not_ok=on_send_not_ok)
|
||||||
if ret == -1:
|
if ret == -1:
|
||||||
# Contact Offline
|
# Contact Offline
|
||||||
self.dispatch('MSGERROR', [jid, '-1', _('Contact is offline. Your message could not be sent.'), None, None, session])
|
self.dispatch('MSGERROR', [jid, '-1', _('Contact is offline. Your message could not be sent.'), None, None, session])
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
def send_stanza(self, stanza):
|
def send_stanza(self, stanza):
|
||||||
# send a stanza untouched
|
# send a stanza untouched
|
||||||
|
@ -547,9 +549,9 @@ class ConnectionZeroconf(ConnectionHandlersZeroconf):
|
||||||
|
|
||||||
def _event_dispatcher(self, realm, event, data):
|
def _event_dispatcher(self, realm, event, data):
|
||||||
if realm == '':
|
if realm == '':
|
||||||
if event == common.xmpp.transports.DATA_RECEIVED:
|
if event == common.xmpp.transports_nb.DATA_RECEIVED:
|
||||||
self.dispatch('STANZA_ARRIVED', unicode(data, errors = 'ignore'))
|
self.dispatch('STANZA_ARRIVED', unicode(data, errors = 'ignore'))
|
||||||
elif event == common.xmpp.transports.DATA_SENT:
|
elif event == common.xmpp.transports_nb.DATA_SENT:
|
||||||
self.dispatch('STANZA_SENT', unicode(data))
|
self.dispatch('STANZA_SENT', unicode(data))
|
||||||
|
|
||||||
# END ConnectionZeroconf
|
# END ConnectionZeroconf
|
||||||
|
|
Loading…
Reference in New Issue