From 4585c8545849239ac8579ddb744f9bc54dc0db13 Mon Sep 17 00:00:00 2001 From: Jefry Lagrange Date: Thu, 23 Aug 2012 17:45:38 -0400 Subject: [PATCH] coding standards --- src/common/jingle_ft.py | 31 +++------------------------ src/common/jingle_ftstates.py | 19 ++++++----------- src/common/socks5.py | 40 ++++++----------------------------- src/dialogs.py | 4 ++-- 4 files changed, 18 insertions(+), 76 deletions(-) diff --git a/src/common/jingle_ft.py b/src/common/jingle_ft.py index 7e29eecf0..dd9065533 100644 --- a/src/common/jingle_ft.py +++ b/src/common/jingle_ft.py @@ -50,9 +50,7 @@ class JingleFileTransfer(JingleContent): def __init__(self, session, transport=None, file_props=None, use_security=False): JingleContent.__init__(self, session, transport) - log.info("transport value: %s" % transport) - # events we might be interested in self.callbacks['session-initiate'] += [self.__on_session_initiate] self.callbacks['session-initiate-sent'] += [ @@ -68,31 +66,25 @@ class JingleFileTransfer(JingleContent): self.callbacks['transport-reject'] += [self.__on_transport_reject] self.callbacks['transport-info'] += [self.__on_transport_info] self.callbacks['iq-result'] += [self.__on_iq_result] - self.use_security = use_security - self.file_props = file_props if file_props is None: self.weinitiate = False else: self.weinitiate = True - if self.file_props is not None: self.file_props.sender = session.ourjid self.file_props.receiver = session.peerjid self.file_props.session_type = 'jingle' self.file_props.session_sid = session.sid self.file_props.transfered_size = [] - log.info("FT request: %s" % file_props) - if transport is None: self.transport = JingleTransportSocks5() self.transport.set_connection(session.connection) self.transport.set_file_props(self.file_props) self.transport.set_our_jid(session.ourjid) log.info('ourjid: %s' % session.ourjid) - self.session = session self.media = 'file' self.nominated_cand = {} @@ -128,6 +120,7 @@ class JingleFileTransfer(JingleContent): # Delete this after file_props refactoring this shouldn't be necesary self.session.file_hash = self.file_props.hash_ self.session.hash_algo = self.file_props.algo + def __on_session_initiate_sent(self, stanza, content, error, action): # Calculate file_hash in a new thread # if we haven't sent the hash already. @@ -142,7 +135,6 @@ class JingleFileTransfer(JingleContent): checksum.setNamespace(xmpp.NS_JINGLE_FILE_TRANSFER) self.session.__session_info(checksum ) - def _calcHash(self): # Caculates the hash and returns a xep-300 hash stanza if self.session.hash_algo == None: @@ -155,7 +147,7 @@ class JingleFileTransfer(JingleContent): h = xmpp.Hashes() hash_ = h.calculateHash(self.session.hash_algo, file_) # DEBUG - #hash_ = '1294809248109223' + hash_ = '1294809248109223' if not hash_: # Hash alogrithm not supported return @@ -169,8 +161,6 @@ class JingleFileTransfer(JingleContent): security = content.getTag('security') if not security: # responder can not verify our fingerprint self.use_security = False - - if self.state == STATE_TRANSPORT_REPLACE: # We ack the session accept response = stanza.buildReply('result') @@ -179,13 +169,11 @@ class JingleFileTransfer(JingleContent): # We send the file self.__state_changed(STATE_TRANSFERING) raise xmpp.NodeProcessed - self.file_props.streamhosts = self.transport.remote_candidates for host in self.file_props.streamhosts: host['initiator'] = self.session.initiator host['target'] = self.session.responder host['sid'] = self.file_props.sid - response = stanza.buildReply('result') response.delChild(response.getQuery()) con.connection.send(response) @@ -218,7 +206,6 @@ class JingleFileTransfer(JingleContent): def __on_transport_info(self, stanza, content, error, action): log.info("__on_transport_info") - if content.getTag('transport').getTag('candidate-error'): self.nominated_cand['peer-cand'] = False if self.state == STATE_CAND_SENT: @@ -244,7 +231,6 @@ class JingleFileTransfer(JingleContent): gajim.socks5queue.send_file(self.file_props, self.session.connection.name, 'client') return - args = {'content' : content, 'sendCand' : False} if self.state == STATE_CAND_SENT: @@ -257,8 +243,6 @@ class JingleFileTransfer(JingleContent): else: self.__state_changed(STATE_CAND_RECEIVED, args) - - def __on_iq_result(self, stanza, content, error, action): log.info("__on_iq_result") @@ -277,12 +261,10 @@ class JingleFileTransfer(JingleContent): def __transport_setup(self, stanza=None, content=None, error=None, action=None): # Sets up a few transport specific things for the file transfer - if self.transport.type_ == TransportType.IBB: # No action required, just set the state to transfering self.state = STATE_TRANSFERING - def on_connect(self, streamhost): """ send candidate-used stanza @@ -292,7 +274,6 @@ class JingleFileTransfer(JingleContent): return args = {'streamhost' : streamhost, 'sendCand' : True} - self.nominated_cand['our-cand'] = streamhost self.__sendCand(args) @@ -313,19 +294,15 @@ class JingleFileTransfer(JingleContent): self.file_props.hash_ = hash_id def _listen_host(self): - receiver = self.file_props.receiver sender = self.file_props.sender sha_str = helpers.get_auth_sha(self.file_props.sid, sender, receiver) self.file_props.sha_str = sha_str - port = gajim.config.get('file_transfers_port') - fingerprint = None if self.use_security: fingerprint = 'server' - if self.weinitiate: listener = gajim.socks5queue.start_listener(port, sha_str, self._store_socks5_sid, self.file_props, @@ -334,10 +311,10 @@ class JingleFileTransfer(JingleContent): listener = gajim.socks5queue.start_listener(port, sha_str, self._store_socks5_sid, self.file_props, fingerprint=fingerprint, typ='receiver') - if not listener: # send error message, notify the user return + def isOurCandUsed(self): ''' If this method returns true then the candidate we nominated will be @@ -348,10 +325,8 @@ class JingleFileTransfer(JingleContent): return True if self.nominated_cand['our-cand'] == False: return False - peer_pr = int(self.nominated_cand['peer-cand']['priority']) our_pr = int(self.nominated_cand['our-cand']['priority']) - if peer_pr != our_pr: return our_pr > peer_pr else: diff --git a/src/common/jingle_ftstates.py b/src/common/jingle_ftstates.py index 9d7e8e1d7..f4708e9c0 100644 --- a/src/common/jingle_ftstates.py +++ b/src/common/jingle_ftstates.py @@ -16,6 +16,7 @@ import xmpp from jingle_transport import * from common.socks5 import Socks5ReceiverClient, Socks5SenderClient + class JingleFileTransferStates: ''' This class implements the state machine design pattern @@ -64,27 +65,22 @@ class StateCandSent(JingleFileTransferStates): # Send candidate used streamhost = args['streamhost'] self.jft.nominated_cand['our-cand'] = streamhost - content = xmpp.Node('content') content.setAttr('creator', 'initiator') content.setAttr('name', self.jft.name) - transport = xmpp.Node('transport') transport.setNamespace(xmpp.NS_JINGLE_BYTESTREAM) transport.setAttr('sid', self.jft.transport.sid) - candidateused = xmpp.Node('candidate-used') candidateused.setAttr('cid', streamhost['cid']) - transport.addChild(node=candidateused) content.addChild(node=transport) - self.jft.session.send_transport_info(content) - def action(self, args=None): self._sendCand(args) + class StateCandReceived(JingleFileTransferStates): ''' This state happens when we receive a candidate. @@ -111,6 +107,7 @@ class StateCandReceived(JingleFileTransferStates): def action(self, args=None): self._recvCand(args) + class StateCandSentAndRecv( StateCandSent, StateCandReceived): ''' This state happens when we have received and sent the candidates. @@ -124,6 +121,7 @@ class StateCandSentAndRecv( StateCandSent, StateCandReceived): else: self._recvCand(args) + class StateTransportReplace(JingleFileTransferStates): ''' This state initiates transport replace @@ -132,6 +130,7 @@ class StateTransportReplace(JingleFileTransferStates): def action(self, args=None): self.jft.session.transport_replace() + class StateTransfering(JingleFileTransferStates): ''' This state will start the transfer depeding on the type of transport @@ -146,14 +145,12 @@ class StateTransfering(JingleFileTransferStates): def __start_SOCK5_transfer(self): # It tells wether we start the transfer as client or server mode = None - if self.jft.isOurCandUsed(): mode = 'client' streamhost_used = self.jft.nominated_cand['our-cand'] else: mode = 'server' streamhost_used = self.jft.nominated_cand['peer-cand'] - if streamhost_used['type'] == 'proxy': self.jft.file_props.is_a_proxy = True # This needs to be changed when requesting @@ -164,7 +161,6 @@ class StateTransfering(JingleFileTransferStates): self.jft.file_props.proxy_sender = streamhost_used['target'] self.jft.file_props.proxy_receiver = streamhost_used[ 'initiator'] - # This needs to be changed when requesting if not self.jft.weinitiate and streamhost_used['type'] == 'proxy': r = gajim.socks5queue.readers @@ -172,7 +168,6 @@ class StateTransfering(JingleFileTransferStates): if r[reader].host == streamhost_used['host'] and \ r[reader].connected: return - # This needs to be changed when requesting if self.jft.weinitiate and streamhost_used['type'] == 'proxy': s = gajim.socks5queue.senders @@ -180,7 +175,6 @@ class StateTransfering(JingleFileTransferStates): if s[sender].host == streamhost_used['host'] and \ s[sender].connected: return - if streamhost_used['type'] == 'proxy': self.jft.file_props.streamhost_used = True streamhost_used['sid'] = self.jft.file_props.sid @@ -188,7 +182,6 @@ class StateTransfering(JingleFileTransferStates): self.jft.file_props.streamhosts.append(streamhost_used) self.jft.file_props.proxyhosts = [] self.jft.file_props.proxyhosts.append(streamhost_used) - # This needs to be changed when requesting if self.jft.weinitiate: gajim.socks5queue.idx += 1 @@ -224,3 +217,5 @@ class StateTransfering(JingleFileTransferStates): elif self.jft.transport.type_ == TransportType.SOCKS5: self.__start_SOCK5_transfer() + + diff --git a/src/common/socks5.py b/src/common/socks5.py index addbd235c..93c64bf94 100644 --- a/src/common/socks5.py +++ b/src/common/socks5.py @@ -26,7 +26,6 @@ import socket import struct import hashlib import os - from errno import EWOULDBLOCK from errno import ENOBUFS from errno import EINTR @@ -36,30 +35,24 @@ from errno import EAFNOSUPPORT from xmpp.idlequeue import IdleObject from file_props import FilesProp import jingle_xtls - if jingle_xtls.PYOPENSSL_PRESENT: import OpenSSL - import logging log = logging.getLogger('gajim.c.socks5') - MAX_BUFF_LEN = 65536 - # after foo seconds without activity label transfer as 'stalled' STALLED_TIMEOUT = 10 - # after foo seconds of waiting to connect, disconnect from # streamhost and try next one CONNECT_TIMEOUT = 30 - # nothing received for the last foo seconds - stop transfer # if it is 0, then transfer will wait forever READ_TIMEOUT = 180 - # nothing sent for the last foo seconds - stop transfer # if it is 0, then transfer will wait forever SEND_TIMEOUT = 180 + class SocksQueue: """ Queue for all file requests objects @@ -100,7 +93,6 @@ class SocksQueue: # There is already a listener, we update the file's information # on the new connection. self.listener.file_props = file_props - self.connected += 1 return self.listener @@ -124,10 +116,8 @@ class SocksQueue: self.on_failure[sid] = on_failure file_props = FilesProp.getFileProp(account, sid) file_props.failure_cb = on_failure - if not file_props.streamhosts: on_failure(file_props.sid) - # add streamhosts to the queue for streamhost in file_props.streamhosts: if 'type' in streamhost and streamhost['type'] == 'proxy': @@ -310,12 +300,10 @@ class SocksQueue: return if file_props.name in key and file_props.sid in key \ and self.senders[key].mode == mode: - log.info('socks5: sending file') sender = self.senders[key] file_props.streamhost_used = True sender.account = account - sender.file_props = file_props result = sender.send_file() self.process_result(result, sender) @@ -333,7 +321,6 @@ class SocksQueue: sock_hash = sock.__hash__() if self.type_ == 'sender' and \ not self.isHashInSockObjs(self.senders, sock_hash): - sockobj = Socks5SenderServer(self.idlequeue, sock_hash, self, sock[0], sock[1][0], sock[1][1], fingerprint='server', file_props=listener.file_props) @@ -341,7 +328,6 @@ class SocksQueue: # Start waiting for data self.idlequeue.plug_idle(sockobj, False, True) self.connected += 1 - if self.type_ == 'receiver' and \ not self.isHashInSockObjs(self.readers, sock_hash): sh = {} @@ -349,13 +335,11 @@ class SocksQueue: sh['port'] = sock[1][1] sh['initiator'] = None sh['target'] = None - sockobj = Socks5ReceiverServer(idlequeue=self.idlequeue, streamhost=sh,sid=None, file_props=listener.file_props, fingerprint='server') self._add(sockobj, self.readers, listener.file_props, sock_hash) - sockobj.set_sock(sock[0]) sockobj.queue = self self.connected += 1 @@ -425,6 +409,7 @@ class SocksQueue: self.listener = None self.connected -= 1 + class Socks5: def __init__(self, idlequeue, host, port, initiator, target, sid): if host is not None: @@ -451,7 +436,6 @@ class Socks5: self.type_ = '' self.mode = '' - def _is_connected(self): if self.state < 5: return False @@ -463,11 +447,9 @@ class Socks5: """ if self.ais is None: return None - for ai in self.ais: try: self._sock = socket.socket(*ai[:3]) - if not self.fingerprint is None: self._sock = OpenSSL.SSL.Connection( jingle_xtls.get_context('client'), self._sock) @@ -514,7 +496,6 @@ class Socks5: self.file_props.disconnect_cb = self.disconnect self.file_props.paused = False self.state = 1 # connected - # stop all others connections to sender's streamhosts self.queue._socket_connected(self.streamhost, self.file_props) self.idlequeue.plug_idle(self, True, False) @@ -677,7 +658,6 @@ class Socks5: """ Read file contents from socket and write them to file """ - if self.file_props is None or not self.file_props.file_name: self.file_props.error = -2 return None @@ -900,9 +880,7 @@ class Socks5Sender(IdleObject): self.queue = parent self.file_props = file_props self.proxy = False - self._sock = _sock - if _sock is not None: if self.fingerprint is not None and not isinstance(self._sock, OpenSSL.SSL.Connection): @@ -910,7 +888,6 @@ class Socks5Sender(IdleObject): jingle_xtls.get_context('server'), _sock) else: self._sock.setblocking(False) - self.fd = _sock.fileno() self._recv = _sock.recv self._send = _sock.send @@ -939,13 +916,11 @@ class Socks5Sender(IdleObject): def set_connection_sock(self, _sock): self._sock = _sock - if self.fingerprint is not None: self._sock = OpenSSL.SSL.Connection( jingle_xtls.get_context('client'), _sock) else: self._sock.setblocking(False) - self.fd = _sock.fileno() self._recv = _sock.recv self._send = _sock.send @@ -959,7 +934,6 @@ class Socks5Sender(IdleObject): """ Start sending the file over verified connection """ - self.pauses = 0 self.state = 7 # plug for writing @@ -978,6 +952,7 @@ class Socks5Sender(IdleObject): if self.queue is not None: self.queue.remove_sender(self.queue_idx, False) + class Socks5Receiver(IdleObject): def __init__(self, idlequeue, streamhost, sid, file_props = None, @@ -1055,6 +1030,7 @@ class Socks5Receiver(IdleObject): self.queue.remove_receiver(self.queue_idx, False) class Socks5Server(Socks5): + def __init__(self, idlequeue, host, port, initiator, target, sid): Socks5.__init__(self, idlequeue, host, port, initiator, target, sid) self.mode = 'server' @@ -1090,7 +1066,6 @@ class Socks5Server(Socks5): self.queue.result_sha(self.sha_msg, self.queue_idx) if result == -1: self.disconnect() - elif self.state == 5: self.state = 7 if self.type_ == 'sender': @@ -1101,7 +1076,6 @@ class Socks5Server(Socks5): # We plug for reading self.idlequeue.plug_idle(self, False, True) return - elif self.state == 7: if self.file_props.paused: self.file_props.continue_cb = \ @@ -1175,7 +1149,6 @@ class Socks5Client(Socks5): # end connection self.pollend() return - if self.state == 2: # read auth response if buff is None or len(buff) != 2: return None @@ -1208,11 +1181,9 @@ class Socks5Client(Socks5): if self.type_ == 'sender' and self.proxy: self.queue.process_result(self.send_file(), self) return - if result == 0: self.state = 8 self.disconnect() - # for senders: init file_props if result == 1 and self.state == 5: if self.file_props.type_ == 's': @@ -1233,7 +1204,6 @@ class Socks5Client(Socks5): else: # receiving file contents from socket self.idlequeue.plug_idle(self, False, True) - self.file_props.continue_cb = self.continue_paused_transfer # we have set up the connection, next - retrieve file self.state = 6 @@ -1445,3 +1415,5 @@ class Socks5Listener(IdleObject): _sock[0].setblocking(False) self.connections.append(_sock[0]) return _sock + + diff --git a/src/dialogs.py b/src/dialogs.py index 9530bc048..c99674b97 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -1662,9 +1662,9 @@ class YesNoDialog(HigDialog): *self.user_response_yes[1:]) else: if self.textview: - self.user_response_yes(self.is_checked()) - else: self.user_response_yes(self.is_checked(), txt) + else: + self.user_response_yes(self.is_checked()) self.call_cancel_on_destroy = False self.destroy()