coding standards

This commit is contained in:
Jefry Lagrange 2012-08-23 17:45:38 -04:00
parent 4928275537
commit 4585c85458
4 changed files with 18 additions and 76 deletions

View File

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

View File

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

View File

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

View File

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