fixed zeroconf to work with refactored dispatcher

This commit is contained in:
tomk 2008-08-18 14:34:09 +00:00
parent acdf4ff143
commit ed7dd84cfe
3 changed files with 20 additions and 26 deletions

View File

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

View File

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

View File

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