fix some small things. Thanks, pyflakes. Fix #2684
This commit is contained in:
parent
fc7bd37634
commit
720b190db8
5 changed files with 7 additions and 225 deletions
|
@ -250,7 +250,6 @@ class P2PClient(IdleObject):
|
||||||
common.xmpp.NS_BYTESTREAM)
|
common.xmpp.NS_BYTESTREAM)
|
||||||
|
|
||||||
class P2PConnection(IdleObject, PlugIn):
|
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):
|
def __init__(self, sock_hash, _sock, host = None, port = None, caller = None, on_connect = None, client = None):
|
||||||
IdleObject.__init__(self)
|
IdleObject.__init__(self)
|
||||||
self._owner = client
|
self._owner = client
|
||||||
|
|
|
@ -18,16 +18,12 @@
|
||||||
## GNU General Public License for more details.
|
## GNU General Public License for more details.
|
||||||
##
|
##
|
||||||
|
|
||||||
import os
|
|
||||||
import time
|
import time
|
||||||
import base64
|
|
||||||
import sha
|
|
||||||
import socket
|
import socket
|
||||||
import sys
|
|
||||||
|
|
||||||
from calendar import timegm
|
from calendar import timegm
|
||||||
|
|
||||||
#import socks5
|
from common import socks5
|
||||||
import common.xmpp
|
import common.xmpp
|
||||||
|
|
||||||
from common import GnuPG
|
from common import GnuPG
|
||||||
|
@ -518,173 +514,8 @@ class ConnectionBytestream:
|
||||||
self.dispatch('FILE_REQUEST_ERROR', (jid, file_props, ''))
|
self.dispatch('FILE_REQUEST_ERROR', (jid, file_props, ''))
|
||||||
raise common.xmpp.NodeProcessed
|
raise common.xmpp.NodeProcessed
|
||||||
|
|
||||||
|
class ConnectionHandlersZeroconf(ConnectionBytestream):
|
||||||
|
|
||||||
class ConnectionVcard:
|
|
||||||
def __init__(self):
|
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)
|
ConnectionBytestream.__init__(self)
|
||||||
# List of IDs we are waiting answers for {id: (type_of_request, data), }
|
# List of IDs we are waiting answers for {id: (type_of_request, data), }
|
||||||
self.awaiting_answers = {}
|
self.awaiting_answers = {}
|
||||||
|
@ -790,15 +621,6 @@ class ConnectionHandlersZeroconf(ConnectionVcard, ConnectionBytestream):
|
||||||
self.dispatch('MSG', (frm, msgtxt, tim, encrypted, 'normal',
|
self.dispatch('MSG', (frm, msgtxt, tim, encrypted, 'normal',
|
||||||
subject, chatstate, msg_id, composing_jep, user_nick))
|
subject, chatstate, msg_id, composing_jep, user_nick))
|
||||||
# END messageCB
|
# 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):
|
def parse_data_form(self, node):
|
||||||
dic = {}
|
dic = {}
|
||||||
|
@ -863,44 +685,14 @@ class ConnectionHandlersZeroconf(ConnectionVcard, ConnectionBytestream):
|
||||||
# serverside metacontacts are not supported with zeroconf
|
# serverside metacontacts are not supported with zeroconf
|
||||||
# (there is no server)
|
# (there is no server)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def remove_transfers_for_contact(self, contact):
|
def remove_transfers_for_contact(self, contact):
|
||||||
''' stop all active transfer for 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
|
pass
|
||||||
|
|
||||||
def remove_all_transfers(self):
|
def remove_all_transfers(self):
|
||||||
''' stops and removes all active connections from the socks5 pool '''
|
''' 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
|
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:
|
def remove_transfer(self, file_props, remove_from_list = True):
|
||||||
if self.files_props.has_key('sid'):
|
|
||||||
del(self.files_props['sid'])
|
|
||||||
'''
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -37,12 +37,9 @@ if os.name != 'nt':
|
||||||
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
|
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
|
||||||
import getpass
|
import getpass
|
||||||
import gobject
|
import gobject
|
||||||
import notify
|
|
||||||
|
|
||||||
from common import helpers
|
|
||||||
from common import gajim
|
from common import gajim
|
||||||
from common import GnuPG
|
from common import GnuPG
|
||||||
from common.zeroconf import connection_handlers_zeroconf
|
|
||||||
from common.zeroconf import client_zeroconf
|
from common.zeroconf import client_zeroconf
|
||||||
from connection_handlers_zeroconf import *
|
from connection_handlers_zeroconf import *
|
||||||
|
|
||||||
|
|
|
@ -134,7 +134,7 @@ class Roster:
|
||||||
|
|
||||||
def getShow(self, jid):
|
def getShow(self, jid):
|
||||||
#print 'roster_zeroconf.py: getShow'
|
#print 'roster_zeroconf.py: getShow'
|
||||||
return getStatus(jid)
|
return self.getStatus(jid)
|
||||||
|
|
||||||
def getPriority(jid):
|
def getPriority(jid):
|
||||||
return 5
|
return 5
|
||||||
|
|
|
@ -12,11 +12,7 @@
|
||||||
## GNU General Public License for more details.
|
## GNU General Public License for more details.
|
||||||
##
|
##
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import socket
|
|
||||||
from common import gajim
|
from common import gajim
|
||||||
from common import xmpp
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import dbus.glib
|
import dbus.glib
|
||||||
|
@ -365,7 +361,7 @@ class Zeroconf:
|
||||||
self.domain_browser.connect_to_signal('ItemNew', self.new_domain_callback)
|
self.domain_browser.connect_to_signal('ItemNew', self.new_domain_callback)
|
||||||
self.domain_browser.connect_to_signal('Failure', self.error_callback)
|
self.domain_browser.connect_to_signal('Failure', self.error_callback)
|
||||||
else:
|
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
|
return True
|
||||||
|
|
||||||
|
@ -397,8 +393,6 @@ class Zeroconf:
|
||||||
reply_handler=self.service_resolved_all_callback, error_handler=self.error_callback)
|
reply_handler=self.service_resolved_all_callback, error_handler=self.error_callback)
|
||||||
|
|
||||||
def get_contacts(self):
|
def get_contacts(self):
|
||||||
if not jid in self.contacts:
|
|
||||||
return None
|
|
||||||
return self.contacts
|
return self.contacts
|
||||||
|
|
||||||
def get_contact(self, jid):
|
def get_contact(self, jid):
|
||||||
|
|
Loading…
Add table
Reference in a new issue