diff --git a/src/common/zeroconf/client_zeroconf.py b/src/common/zeroconf/client_zeroconf.py index da15b7ad5ec730d0de0ce7b9d44e435e67c925c3..8614acbf48b1fd0450362227df4b6e45fd925bf3 100644 --- a/src/common/zeroconf/client_zeroconf.py +++ b/src/common/zeroconf/client_zeroconf.py @@ -250,7 +250,6 @@ def _register_handlers(self): common.xmpp.NS_BYTESTREAM) class P2PConnection(IdleObject, PlugIn): - ''' class for sending file to socket over socks5 ''' def __init__(self, sock_hash, _sock, host = None, port = None, caller = None, on_connect = None, client = None): IdleObject.__init__(self) self._owner = client diff --git a/src/common/zeroconf/connection_handlers_zeroconf.py b/src/common/zeroconf/connection_handlers_zeroconf.py index 238de3ee8ce82b58b575080e05cdc54335d21a57..9aa8f3089562c5977e1d5e4ed80ea49bf9daeff5 100644 --- a/src/common/zeroconf/connection_handlers_zeroconf.py +++ b/src/common/zeroconf/connection_handlers_zeroconf.py @@ -18,16 +18,12 @@ ## GNU General Public License for more details. ## -import os import time -import base64 -import sha import socket -import sys from calendar import timegm -#import socks5 +from common import socks5 import common.xmpp from common import GnuPG @@ -518,173 +514,8 @@ def _siErrorCB(self, con, iq_obj): self.dispatch('FILE_REQUEST_ERROR', (jid, file_props, '')) raise common.xmpp.NodeProcessed - - -class ConnectionVcard: +class ConnectionHandlersZeroconf(ConnectionBytestream): def __init__(self): - self.vcard_sha = None - self.vcard_shas = {} # sha of contacts - self.room_jids = [] # list of gc jids so that vcard are saved in a folder - - def add_sha(self, p, send_caps = True): - ''' - c = p.setTag('x', namespace = common.xmpp.NS_VCARD_UPDATE) - if self.vcard_sha is not None: - c.setTagData('photo', self.vcard_sha) - if send_caps: - return self.add_caps(p) - return p - ''' - pass - - def add_caps(self, p): - ''' - # advertise our capabilities in presence stanza (jep-0115) - c = p.setTag('c', namespace = common.xmpp.NS_CAPS) - c.setAttr('node', 'http://gajim.org/caps') - c.setAttr('ext', 'ftrans') - c.setAttr('ver', gajim.version) - return p - ''' - pass - - def node_to_dict(self, node): - dict = {} - - for info in node.getChildren(): - name = info.getName() - if name in ('ADR', 'TEL', 'EMAIL'): # we can have several - if not dict.has_key(name): - dict[name] = [] - entry = {} - for c in info.getChildren(): - entry[c.getName()] = c.getData() - dict[name].append(entry) - elif info.getChildren() == []: - dict[name] = info.getData() - else: - dict[name] = {} - for c in info.getChildren(): - dict[name][c.getName()] = c.getData() - - return dict - - def save_vcard_to_hd(self, full_jid, card): - jid, nick = gajim.get_room_and_nick_from_fjid(full_jid) - puny_jid = helpers.sanitize_filename(jid) - path = os.path.join(gajim.VCARD_PATH, puny_jid) - if jid in self.room_jids or os.path.isdir(path): - # remove room_jid file if needed - if os.path.isfile(path): - os.remove(path) - # create folder if needed - if not os.path.isdir(path): - os.mkdir(path, 0700) - puny_nick = helpers.sanitize_filename(nick) - path_to_file = os.path.join(gajim.VCARD_PATH, puny_jid, puny_nick) - else: - path_to_file = path - fil = open(path_to_file, 'w') - fil.write(str(card)) - fil.close() - - def get_cached_vcard(self, fjid, is_fake_jid = False): - '''return the vcard as a dict - return {} if vcard was too old - return None if we don't have cached vcard''' - jid, nick = gajim.get_room_and_nick_from_fjid(fjid) - puny_jid = helpers.sanitize_filename(jid) - if is_fake_jid: - puny_nick = helpers.sanitize_filename(nick) - path_to_file = os.path.join(gajim.VCARD_PATH, puny_jid, puny_nick) - else: - path_to_file = os.path.join(gajim.VCARD_PATH, puny_jid) - if not os.path.isfile(path_to_file): - return None - # We have the vcard cached - f = open(path_to_file) - c = f.read() - f.close() - card = common.xmpp.Node(node = c) - vcard = self.node_to_dict(card) - if vcard.has_key('PHOTO'): - if not isinstance(vcard['PHOTO'], dict): - del vcard['PHOTO'] - elif vcard['PHOTO'].has_key('SHA'): - cached_sha = vcard['PHOTO']['SHA'] - if self.vcard_shas.has_key(jid) and self.vcard_shas[jid] != \ - cached_sha: - # user change his vcard so don't use the cached one - return {} - vcard['jid'] = jid - vcard['resource'] = gajim.get_resource_from_jid(fjid) - return vcard - - def request_vcard(self, jid = None, is_fake_jid = False): - '''request the VCARD. If is_fake_jid is True, it means we request a vcard - to a fake jid, like in private messages in groupchat''' - if not self.connection: - return - ''' - iq = common.xmpp.Iq(typ = 'get') - if jid: - iq.setTo(jid) - iq.setTag(common.xmpp.NS_VCARD + ' vCard') - - id = self.connection.getAnID() - iq.setID(id) - self.awaiting_answers[id] = (VCARD_ARRIVED, jid) - if is_fake_jid: - room_jid, nick = gajim.get_room_and_nick_from_fjid(jid) - if not room_jid in self.room_jids: - self.room_jids.append(room_jid) - self.connection.send(iq) - #('VCARD', {entry1: data, entry2: {entry21: data, ...}, ...}) - ''' - pass - - def send_vcard(self, vcard): - if not self.connection: - return - ''' - iq = common.xmpp.Iq(typ = 'set') - iq2 = iq.setTag(common.xmpp.NS_VCARD + ' vCard') - for i in vcard: - if i == 'jid': - continue - if isinstance(vcard[i], dict): - iq3 = iq2.addChild(i) - for j in vcard[i]: - iq3.addChild(j).setData(vcard[i][j]) - elif type(vcard[i]) == type([]): - for j in vcard[i]: - iq3 = iq2.addChild(i) - for k in j: - iq3.addChild(k).setData(j[k]) - else: - iq2.addChild(i).setData(vcard[i]) - - id = self.connection.getAnID() - iq.setID(id) - self.connection.send(iq) - - # Add the sha of the avatar - if vcard.has_key('PHOTO') and isinstance(vcard['PHOTO'], dict) and \ - vcard['PHOTO'].has_key('BINVAL'): - photo = vcard['PHOTO']['BINVAL'] - photo_decoded = base64.decodestring(photo) - our_jid = gajim.get_jid_from_account(self.name) - gajim.interface.save_avatar_files(our_jid, photo_decoded) - avatar_sha = sha.sha(photo_decoded).hexdigest() - iq2.getTag('PHOTO').setTagData('SHA', avatar_sha) - - self.awaiting_answers[id] = (VCARD_PUBLISHED, iq2) - ''' - pass - -class ConnectionHandlersZeroconf(ConnectionVcard, ConnectionBytestream): - def __init__(self): - ConnectionVcard.__init__(self) ConnectionBytestream.__init__(self) # List of IDs we are waiting answers for {id: (type_of_request, data), } self.awaiting_answers = {} @@ -790,15 +621,6 @@ def _messageCB(self, ip, con, msg): self.dispatch('MSG', (frm, msgtxt, tim, encrypted, 'normal', subject, chatstate, msg_id, composing_jep, user_nick)) # END messageCB - ''' - def build_http_auth_answer(self, iq_obj, answer): - if answer == 'yes': - iq = iq_obj.buildReply('result') - elif answer == 'no': - iq = iq_obj.buildReply('error') - iq.setError('not-authorized', 401) - self.connection.send(iq) - ''' def parse_data_form(self, node): dic = {} @@ -863,44 +685,14 @@ def store_metacontacts(self, tags): # serverside metacontacts are not supported with zeroconf # (there is no server) pass + def remove_transfers_for_contact(self, contact): ''' stop all active transfer for contact ''' - '''for file_props in self.files_props.values(): - if self.is_transfer_stoped(file_props): - continue - receiver_jid = unicode(file_props['receiver']).split('/')[0] - if contact.jid == receiver_jid: - file_props['error'] = -5 - self.remove_transfer(file_props) - self.dispatch('FILE_REQUEST_ERROR', (contact.jid, file_props)) - sender_jid = unicode(file_props['sender']).split('/')[0] - if contact.jid == sender_jid: - file_props['error'] = -3 - self.remove_transfer(file_props) - ''' pass - + def remove_all_transfers(self): ''' stops and removes all active connections from the socks5 pool ''' - ''' - for file_props in self.files_props.values(): - self.remove_transfer(file_props, remove_from_list = False) - del(self.files_props) - self.files_props = {} - ''' pass - - def remove_transfer(self, file_props, remove_from_list = True): - ''' - if file_props is None: - return - self.disconnect_transfer(file_props) - sid = file_props['sid'] - gajim.socks5queue.remove_file_props(self.name, sid) - if remove_from_list: - if self.files_props.has_key('sid'): - del(self.files_props['sid']) - ''' + def remove_transfer(self, file_props, remove_from_list = True): pass - diff --git a/src/common/zeroconf/connection_zeroconf.py b/src/common/zeroconf/connection_zeroconf.py index b5dfd5090e71d68a96195522465a8bbe1d50e167..148893c7f4a5998417c510327158a5918c465335 100644 --- a/src/common/zeroconf/connection_zeroconf.py +++ b/src/common/zeroconf/connection_zeroconf.py @@ -37,12 +37,9 @@ signal.signal(signal.SIGPIPE, signal.SIG_DFL) import getpass import gobject -import notify -from common import helpers from common import gajim from common import GnuPG -from common.zeroconf import connection_handlers_zeroconf from common.zeroconf import client_zeroconf from connection_handlers_zeroconf import * diff --git a/src/common/zeroconf/roster_zeroconf.py b/src/common/zeroconf/roster_zeroconf.py index 269d3dbb2355e156b525143a68da0126c5142de4..ea676ac23c92f30577d4afd622b77c6bb6fdf410 100644 --- a/src/common/zeroconf/roster_zeroconf.py +++ b/src/common/zeroconf/roster_zeroconf.py @@ -134,7 +134,7 @@ def getMessage(self, jid): def getShow(self, jid): #print 'roster_zeroconf.py: getShow' - return getStatus(jid) + return self.getStatus(jid) def getPriority(jid): return 5 diff --git a/src/common/zeroconf/zeroconf.py b/src/common/zeroconf/zeroconf.py index fbaadfd1d83fc4487454f9708a625444a46f1eca..154694fefab072532db823506237ff4dd5f123ca 100755 --- a/src/common/zeroconf/zeroconf.py +++ b/src/common/zeroconf/zeroconf.py @@ -12,11 +12,7 @@ ## GNU General Public License for more details. ## -import os -import sys -import socket from common import gajim -from common import xmpp try: import dbus.glib @@ -365,7 +361,7 @@ def connect(self): self.domain_browser.connect_to_signal('ItemNew', self.new_domain_callback) self.domain_browser.connect_to_signal('Failure', self.error_callback) else: - self.browse_domain(self.avahi.IF_UNSPEC, self.avahi.PROTO_UNSPEC, domain) + self.browse_domain(self.avahi.IF_UNSPEC, self.avahi.PROTO_UNSPEC, self.domain) return True @@ -397,8 +393,6 @@ def resolve_all(self): reply_handler=self.service_resolved_all_callback, error_handler=self.error_callback) def get_contacts(self): - if not jid in self.contacts: - return None return self.contacts def get_contact(self, jid):