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, def __init__(self, session, transport=None, file_props=None,
use_security=False): use_security=False):
JingleContent.__init__(self, session, transport) JingleContent.__init__(self, session, transport)
log.info("transport value: %s" % transport) log.info("transport value: %s" % transport)
# events we might be interested in # events we might be interested in
self.callbacks['session-initiate'] += [self.__on_session_initiate] self.callbacks['session-initiate'] += [self.__on_session_initiate]
self.callbacks['session-initiate-sent'] += [ self.callbacks['session-initiate-sent'] += [
@ -68,31 +66,25 @@ class JingleFileTransfer(JingleContent):
self.callbacks['transport-reject'] += [self.__on_transport_reject] self.callbacks['transport-reject'] += [self.__on_transport_reject]
self.callbacks['transport-info'] += [self.__on_transport_info] self.callbacks['transport-info'] += [self.__on_transport_info]
self.callbacks['iq-result'] += [self.__on_iq_result] self.callbacks['iq-result'] += [self.__on_iq_result]
self.use_security = use_security self.use_security = use_security
self.file_props = file_props self.file_props = file_props
if file_props is None: if file_props is None:
self.weinitiate = False self.weinitiate = False
else: else:
self.weinitiate = True self.weinitiate = True
if self.file_props is not None: if self.file_props is not None:
self.file_props.sender = session.ourjid self.file_props.sender = session.ourjid
self.file_props.receiver = session.peerjid self.file_props.receiver = session.peerjid
self.file_props.session_type = 'jingle' self.file_props.session_type = 'jingle'
self.file_props.session_sid = session.sid self.file_props.session_sid = session.sid
self.file_props.transfered_size = [] self.file_props.transfered_size = []
log.info("FT request: %s" % file_props) log.info("FT request: %s" % file_props)
if transport is None: if transport is None:
self.transport = JingleTransportSocks5() self.transport = JingleTransportSocks5()
self.transport.set_connection(session.connection) self.transport.set_connection(session.connection)
self.transport.set_file_props(self.file_props) self.transport.set_file_props(self.file_props)
self.transport.set_our_jid(session.ourjid) self.transport.set_our_jid(session.ourjid)
log.info('ourjid: %s' % session.ourjid) log.info('ourjid: %s' % session.ourjid)
self.session = session self.session = session
self.media = 'file' self.media = 'file'
self.nominated_cand = {} self.nominated_cand = {}
@ -128,6 +120,7 @@ class JingleFileTransfer(JingleContent):
# Delete this after file_props refactoring this shouldn't be necesary # Delete this after file_props refactoring this shouldn't be necesary
self.session.file_hash = self.file_props.hash_ self.session.file_hash = self.file_props.hash_
self.session.hash_algo = self.file_props.algo self.session.hash_algo = self.file_props.algo
def __on_session_initiate_sent(self, stanza, content, error, action): def __on_session_initiate_sent(self, stanza, content, error, action):
# Calculate file_hash in a new thread # Calculate file_hash in a new thread
# if we haven't sent the hash already. # if we haven't sent the hash already.
@ -142,7 +135,6 @@ class JingleFileTransfer(JingleContent):
checksum.setNamespace(xmpp.NS_JINGLE_FILE_TRANSFER) checksum.setNamespace(xmpp.NS_JINGLE_FILE_TRANSFER)
self.session.__session_info(checksum ) self.session.__session_info(checksum )
def _calcHash(self): def _calcHash(self):
# Caculates the hash and returns a xep-300 hash stanza # Caculates the hash and returns a xep-300 hash stanza
if self.session.hash_algo == None: if self.session.hash_algo == None:
@ -155,7 +147,7 @@ class JingleFileTransfer(JingleContent):
h = xmpp.Hashes() h = xmpp.Hashes()
hash_ = h.calculateHash(self.session.hash_algo, file_) hash_ = h.calculateHash(self.session.hash_algo, file_)
# DEBUG # DEBUG
#hash_ = '1294809248109223' hash_ = '1294809248109223'
if not hash_: if not hash_:
# Hash alogrithm not supported # Hash alogrithm not supported
return return
@ -169,8 +161,6 @@ class JingleFileTransfer(JingleContent):
security = content.getTag('security') security = content.getTag('security')
if not security: # responder can not verify our fingerprint if not security: # responder can not verify our fingerprint
self.use_security = False self.use_security = False
if self.state == STATE_TRANSPORT_REPLACE: if self.state == STATE_TRANSPORT_REPLACE:
# We ack the session accept # We ack the session accept
response = stanza.buildReply('result') response = stanza.buildReply('result')
@ -179,13 +169,11 @@ class JingleFileTransfer(JingleContent):
# We send the file # We send the file
self.__state_changed(STATE_TRANSFERING) self.__state_changed(STATE_TRANSFERING)
raise xmpp.NodeProcessed raise xmpp.NodeProcessed
self.file_props.streamhosts = self.transport.remote_candidates self.file_props.streamhosts = self.transport.remote_candidates
for host in self.file_props.streamhosts: for host in self.file_props.streamhosts:
host['initiator'] = self.session.initiator host['initiator'] = self.session.initiator
host['target'] = self.session.responder host['target'] = self.session.responder
host['sid'] = self.file_props.sid host['sid'] = self.file_props.sid
response = stanza.buildReply('result') response = stanza.buildReply('result')
response.delChild(response.getQuery()) response.delChild(response.getQuery())
con.connection.send(response) con.connection.send(response)
@ -218,7 +206,6 @@ class JingleFileTransfer(JingleContent):
def __on_transport_info(self, stanza, content, error, action): def __on_transport_info(self, stanza, content, error, action):
log.info("__on_transport_info") log.info("__on_transport_info")
if content.getTag('transport').getTag('candidate-error'): if content.getTag('transport').getTag('candidate-error'):
self.nominated_cand['peer-cand'] = False self.nominated_cand['peer-cand'] = False
if self.state == STATE_CAND_SENT: if self.state == STATE_CAND_SENT:
@ -244,7 +231,6 @@ class JingleFileTransfer(JingleContent):
gajim.socks5queue.send_file(self.file_props, gajim.socks5queue.send_file(self.file_props,
self.session.connection.name, 'client') self.session.connection.name, 'client')
return return
args = {'content' : content, args = {'content' : content,
'sendCand' : False} 'sendCand' : False}
if self.state == STATE_CAND_SENT: if self.state == STATE_CAND_SENT:
@ -257,8 +243,6 @@ class JingleFileTransfer(JingleContent):
else: else:
self.__state_changed(STATE_CAND_RECEIVED, args) self.__state_changed(STATE_CAND_RECEIVED, args)
def __on_iq_result(self, stanza, content, error, action): def __on_iq_result(self, stanza, content, error, action):
log.info("__on_iq_result") log.info("__on_iq_result")
@ -277,12 +261,10 @@ class JingleFileTransfer(JingleContent):
def __transport_setup(self, stanza=None, content=None, error=None, def __transport_setup(self, stanza=None, content=None, error=None,
action=None): action=None):
# Sets up a few transport specific things for the file transfer # Sets up a few transport specific things for the file transfer
if self.transport.type_ == TransportType.IBB: if self.transport.type_ == TransportType.IBB:
# No action required, just set the state to transfering # No action required, just set the state to transfering
self.state = STATE_TRANSFERING self.state = STATE_TRANSFERING
def on_connect(self, streamhost): def on_connect(self, streamhost):
""" """
send candidate-used stanza send candidate-used stanza
@ -292,7 +274,6 @@ class JingleFileTransfer(JingleContent):
return return
args = {'streamhost' : streamhost, args = {'streamhost' : streamhost,
'sendCand' : True} 'sendCand' : True}
self.nominated_cand['our-cand'] = streamhost self.nominated_cand['our-cand'] = streamhost
self.__sendCand(args) self.__sendCand(args)
@ -313,19 +294,15 @@ class JingleFileTransfer(JingleContent):
self.file_props.hash_ = hash_id self.file_props.hash_ = hash_id
def _listen_host(self): def _listen_host(self):
receiver = self.file_props.receiver receiver = self.file_props.receiver
sender = self.file_props.sender sender = self.file_props.sender
sha_str = helpers.get_auth_sha(self.file_props.sid, sender, sha_str = helpers.get_auth_sha(self.file_props.sid, sender,
receiver) receiver)
self.file_props.sha_str = sha_str self.file_props.sha_str = sha_str
port = gajim.config.get('file_transfers_port') port = gajim.config.get('file_transfers_port')
fingerprint = None fingerprint = None
if self.use_security: if self.use_security:
fingerprint = 'server' fingerprint = 'server'
if self.weinitiate: if self.weinitiate:
listener = gajim.socks5queue.start_listener(port, sha_str, listener = gajim.socks5queue.start_listener(port, sha_str,
self._store_socks5_sid, self.file_props, self._store_socks5_sid, self.file_props,
@ -334,10 +311,10 @@ class JingleFileTransfer(JingleContent):
listener = gajim.socks5queue.start_listener(port, sha_str, listener = gajim.socks5queue.start_listener(port, sha_str,
self._store_socks5_sid, self.file_props, self._store_socks5_sid, self.file_props,
fingerprint=fingerprint, typ='receiver') fingerprint=fingerprint, typ='receiver')
if not listener: if not listener:
# send error message, notify the user # send error message, notify the user
return return
def isOurCandUsed(self): def isOurCandUsed(self):
''' '''
If this method returns true then the candidate we nominated will be If this method returns true then the candidate we nominated will be
@ -348,10 +325,8 @@ class JingleFileTransfer(JingleContent):
return True return True
if self.nominated_cand['our-cand'] == False: if self.nominated_cand['our-cand'] == False:
return False return False
peer_pr = int(self.nominated_cand['peer-cand']['priority']) peer_pr = int(self.nominated_cand['peer-cand']['priority'])
our_pr = int(self.nominated_cand['our-cand']['priority']) our_pr = int(self.nominated_cand['our-cand']['priority'])
if peer_pr != our_pr: if peer_pr != our_pr:
return our_pr > peer_pr return our_pr > peer_pr
else: else:

View file

@ -16,6 +16,7 @@ import xmpp
from jingle_transport import * from jingle_transport import *
from common.socks5 import Socks5ReceiverClient, Socks5SenderClient from common.socks5 import Socks5ReceiverClient, Socks5SenderClient
class JingleFileTransferStates: class JingleFileTransferStates:
''' '''
This class implements the state machine design pattern This class implements the state machine design pattern
@ -64,27 +65,22 @@ class StateCandSent(JingleFileTransferStates):
# Send candidate used # Send candidate used
streamhost = args['streamhost'] streamhost = args['streamhost']
self.jft.nominated_cand['our-cand'] = streamhost self.jft.nominated_cand['our-cand'] = streamhost
content = xmpp.Node('content') content = xmpp.Node('content')
content.setAttr('creator', 'initiator') content.setAttr('creator', 'initiator')
content.setAttr('name', self.jft.name) content.setAttr('name', self.jft.name)
transport = xmpp.Node('transport') transport = xmpp.Node('transport')
transport.setNamespace(xmpp.NS_JINGLE_BYTESTREAM) transport.setNamespace(xmpp.NS_JINGLE_BYTESTREAM)
transport.setAttr('sid', self.jft.transport.sid) transport.setAttr('sid', self.jft.transport.sid)
candidateused = xmpp.Node('candidate-used') candidateused = xmpp.Node('candidate-used')
candidateused.setAttr('cid', streamhost['cid']) candidateused.setAttr('cid', streamhost['cid'])
transport.addChild(node=candidateused) transport.addChild(node=candidateused)
content.addChild(node=transport) content.addChild(node=transport)
self.jft.session.send_transport_info(content) self.jft.session.send_transport_info(content)
def action(self, args=None): def action(self, args=None):
self._sendCand(args) self._sendCand(args)
class StateCandReceived(JingleFileTransferStates): class StateCandReceived(JingleFileTransferStates):
''' '''
This state happens when we receive a candidate. This state happens when we receive a candidate.
@ -111,6 +107,7 @@ class StateCandReceived(JingleFileTransferStates):
def action(self, args=None): def action(self, args=None):
self._recvCand(args) self._recvCand(args)
class StateCandSentAndRecv( StateCandSent, StateCandReceived): class StateCandSentAndRecv( StateCandSent, StateCandReceived):
''' '''
This state happens when we have received and sent the candidates. This state happens when we have received and sent the candidates.
@ -124,6 +121,7 @@ class StateCandSentAndRecv( StateCandSent, StateCandReceived):
else: else:
self._recvCand(args) self._recvCand(args)
class StateTransportReplace(JingleFileTransferStates): class StateTransportReplace(JingleFileTransferStates):
''' '''
This state initiates transport replace This state initiates transport replace
@ -132,6 +130,7 @@ class StateTransportReplace(JingleFileTransferStates):
def action(self, args=None): def action(self, args=None):
self.jft.session.transport_replace() self.jft.session.transport_replace()
class StateTransfering(JingleFileTransferStates): class StateTransfering(JingleFileTransferStates):
''' '''
This state will start the transfer depeding on the type of transport This state will start the transfer depeding on the type of transport
@ -146,14 +145,12 @@ class StateTransfering(JingleFileTransferStates):
def __start_SOCK5_transfer(self): def __start_SOCK5_transfer(self):
# It tells wether we start the transfer as client or server # It tells wether we start the transfer as client or server
mode = None mode = None
if self.jft.isOurCandUsed(): if self.jft.isOurCandUsed():
mode = 'client' mode = 'client'
streamhost_used = self.jft.nominated_cand['our-cand'] streamhost_used = self.jft.nominated_cand['our-cand']
else: else:
mode = 'server' mode = 'server'
streamhost_used = self.jft.nominated_cand['peer-cand'] streamhost_used = self.jft.nominated_cand['peer-cand']
if streamhost_used['type'] == 'proxy': if streamhost_used['type'] == 'proxy':
self.jft.file_props.is_a_proxy = True self.jft.file_props.is_a_proxy = True
# This needs to be changed when requesting # 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_sender = streamhost_used['target']
self.jft.file_props.proxy_receiver = streamhost_used[ self.jft.file_props.proxy_receiver = streamhost_used[
'initiator'] 'initiator']
# This needs to be changed when requesting # This needs to be changed when requesting
if not self.jft.weinitiate and streamhost_used['type'] == 'proxy': if not self.jft.weinitiate and streamhost_used['type'] == 'proxy':
r = gajim.socks5queue.readers r = gajim.socks5queue.readers
@ -172,7 +168,6 @@ class StateTransfering(JingleFileTransferStates):
if r[reader].host == streamhost_used['host'] and \ if r[reader].host == streamhost_used['host'] and \
r[reader].connected: r[reader].connected:
return return
# This needs to be changed when requesting # This needs to be changed when requesting
if self.jft.weinitiate and streamhost_used['type'] == 'proxy': if self.jft.weinitiate and streamhost_used['type'] == 'proxy':
s = gajim.socks5queue.senders s = gajim.socks5queue.senders
@ -180,7 +175,6 @@ class StateTransfering(JingleFileTransferStates):
if s[sender].host == streamhost_used['host'] and \ if s[sender].host == streamhost_used['host'] and \
s[sender].connected: s[sender].connected:
return return
if streamhost_used['type'] == 'proxy': if streamhost_used['type'] == 'proxy':
self.jft.file_props.streamhost_used = True self.jft.file_props.streamhost_used = True
streamhost_used['sid'] = self.jft.file_props.sid 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.streamhosts.append(streamhost_used)
self.jft.file_props.proxyhosts = [] self.jft.file_props.proxyhosts = []
self.jft.file_props.proxyhosts.append(streamhost_used) self.jft.file_props.proxyhosts.append(streamhost_used)
# This needs to be changed when requesting # This needs to be changed when requesting
if self.jft.weinitiate: if self.jft.weinitiate:
gajim.socks5queue.idx += 1 gajim.socks5queue.idx += 1
@ -224,3 +217,5 @@ class StateTransfering(JingleFileTransferStates):
elif self.jft.transport.type_ == TransportType.SOCKS5: elif self.jft.transport.type_ == TransportType.SOCKS5:
self.__start_SOCK5_transfer() self.__start_SOCK5_transfer()

View file

@ -26,7 +26,6 @@ import socket
import struct import struct
import hashlib import hashlib
import os import os
from errno import EWOULDBLOCK from errno import EWOULDBLOCK
from errno import ENOBUFS from errno import ENOBUFS
from errno import EINTR from errno import EINTR
@ -36,30 +35,24 @@ from errno import EAFNOSUPPORT
from xmpp.idlequeue import IdleObject from xmpp.idlequeue import IdleObject
from file_props import FilesProp from file_props import FilesProp
import jingle_xtls import jingle_xtls
if jingle_xtls.PYOPENSSL_PRESENT: if jingle_xtls.PYOPENSSL_PRESENT:
import OpenSSL import OpenSSL
import logging import logging
log = logging.getLogger('gajim.c.socks5') log = logging.getLogger('gajim.c.socks5')
MAX_BUFF_LEN = 65536 MAX_BUFF_LEN = 65536
# after foo seconds without activity label transfer as 'stalled' # after foo seconds without activity label transfer as 'stalled'
STALLED_TIMEOUT = 10 STALLED_TIMEOUT = 10
# after foo seconds of waiting to connect, disconnect from # after foo seconds of waiting to connect, disconnect from
# streamhost and try next one # streamhost and try next one
CONNECT_TIMEOUT = 30 CONNECT_TIMEOUT = 30
# nothing received for the last foo seconds - stop transfer # nothing received for the last foo seconds - stop transfer
# if it is 0, then transfer will wait forever # if it is 0, then transfer will wait forever
READ_TIMEOUT = 180 READ_TIMEOUT = 180
# nothing sent for the last foo seconds - stop transfer # nothing sent for the last foo seconds - stop transfer
# if it is 0, then transfer will wait forever # if it is 0, then transfer will wait forever
SEND_TIMEOUT = 180 SEND_TIMEOUT = 180
class SocksQueue: class SocksQueue:
""" """
Queue for all file requests objects Queue for all file requests objects
@ -100,7 +93,6 @@ class SocksQueue:
# There is already a listener, we update the file's information # There is already a listener, we update the file's information
# on the new connection. # on the new connection.
self.listener.file_props = file_props self.listener.file_props = file_props
self.connected += 1 self.connected += 1
return self.listener return self.listener
@ -124,10 +116,8 @@ class SocksQueue:
self.on_failure[sid] = on_failure self.on_failure[sid] = on_failure
file_props = FilesProp.getFileProp(account, sid) file_props = FilesProp.getFileProp(account, sid)
file_props.failure_cb = on_failure file_props.failure_cb = on_failure
if not file_props.streamhosts: if not file_props.streamhosts:
on_failure(file_props.sid) on_failure(file_props.sid)
# add streamhosts to the queue # add streamhosts to the queue
for streamhost in file_props.streamhosts: for streamhost in file_props.streamhosts:
if 'type' in streamhost and streamhost['type'] == 'proxy': if 'type' in streamhost and streamhost['type'] == 'proxy':
@ -310,12 +300,10 @@ class SocksQueue:
return return
if file_props.name in key and file_props.sid in key \ if file_props.name in key and file_props.sid in key \
and self.senders[key].mode == mode: and self.senders[key].mode == mode:
log.info('socks5: sending file') log.info('socks5: sending file')
sender = self.senders[key] sender = self.senders[key]
file_props.streamhost_used = True file_props.streamhost_used = True
sender.account = account sender.account = account
sender.file_props = file_props sender.file_props = file_props
result = sender.send_file() result = sender.send_file()
self.process_result(result, sender) self.process_result(result, sender)
@ -333,7 +321,6 @@ class SocksQueue:
sock_hash = sock.__hash__() sock_hash = sock.__hash__()
if self.type_ == 'sender' and \ if self.type_ == 'sender' and \
not self.isHashInSockObjs(self.senders, sock_hash): not self.isHashInSockObjs(self.senders, sock_hash):
sockobj = Socks5SenderServer(self.idlequeue, sock_hash, self, sockobj = Socks5SenderServer(self.idlequeue, sock_hash, self,
sock[0], sock[1][0], sock[1][1], fingerprint='server', sock[0], sock[1][0], sock[1][1], fingerprint='server',
file_props=listener.file_props) file_props=listener.file_props)
@ -341,7 +328,6 @@ class SocksQueue:
# Start waiting for data # Start waiting for data
self.idlequeue.plug_idle(sockobj, False, True) self.idlequeue.plug_idle(sockobj, False, True)
self.connected += 1 self.connected += 1
if self.type_ == 'receiver' and \ if self.type_ == 'receiver' and \
not self.isHashInSockObjs(self.readers, sock_hash): not self.isHashInSockObjs(self.readers, sock_hash):
sh = {} sh = {}
@ -349,13 +335,11 @@ class SocksQueue:
sh['port'] = sock[1][1] sh['port'] = sock[1][1]
sh['initiator'] = None sh['initiator'] = None
sh['target'] = None sh['target'] = None
sockobj = Socks5ReceiverServer(idlequeue=self.idlequeue, sockobj = Socks5ReceiverServer(idlequeue=self.idlequeue,
streamhost=sh,sid=None, file_props=listener.file_props, streamhost=sh,sid=None, file_props=listener.file_props,
fingerprint='server') fingerprint='server')
self._add(sockobj, self.readers, listener.file_props, sock_hash) self._add(sockobj, self.readers, listener.file_props, sock_hash)
sockobj.set_sock(sock[0]) sockobj.set_sock(sock[0])
sockobj.queue = self sockobj.queue = self
self.connected += 1 self.connected += 1
@ -425,6 +409,7 @@ class SocksQueue:
self.listener = None self.listener = None
self.connected -= 1 self.connected -= 1
class Socks5: class Socks5:
def __init__(self, idlequeue, host, port, initiator, target, sid): def __init__(self, idlequeue, host, port, initiator, target, sid):
if host is not None: if host is not None:
@ -451,7 +436,6 @@ class Socks5:
self.type_ = '' self.type_ = ''
self.mode = '' self.mode = ''
def _is_connected(self): def _is_connected(self):
if self.state < 5: if self.state < 5:
return False return False
@ -463,11 +447,9 @@ class Socks5:
""" """
if self.ais is None: if self.ais is None:
return None return None
for ai in self.ais: for ai in self.ais:
try: try:
self._sock = socket.socket(*ai[:3]) self._sock = socket.socket(*ai[:3])
if not self.fingerprint is None: if not self.fingerprint is None:
self._sock = OpenSSL.SSL.Connection( self._sock = OpenSSL.SSL.Connection(
jingle_xtls.get_context('client'), self._sock) jingle_xtls.get_context('client'), self._sock)
@ -514,7 +496,6 @@ class Socks5:
self.file_props.disconnect_cb = self.disconnect self.file_props.disconnect_cb = self.disconnect
self.file_props.paused = False self.file_props.paused = False
self.state = 1 # connected self.state = 1 # connected
# stop all others connections to sender's streamhosts # stop all others connections to sender's streamhosts
self.queue._socket_connected(self.streamhost, self.file_props) self.queue._socket_connected(self.streamhost, self.file_props)
self.idlequeue.plug_idle(self, True, False) self.idlequeue.plug_idle(self, True, False)
@ -677,7 +658,6 @@ class Socks5:
""" """
Read file contents from socket and write them to file Read file contents from socket and write them to file
""" """
if self.file_props is None or not self.file_props.file_name: if self.file_props is None or not self.file_props.file_name:
self.file_props.error = -2 self.file_props.error = -2
return None return None
@ -900,9 +880,7 @@ class Socks5Sender(IdleObject):
self.queue = parent self.queue = parent
self.file_props = file_props self.file_props = file_props
self.proxy = False self.proxy = False
self._sock = _sock self._sock = _sock
if _sock is not None: if _sock is not None:
if self.fingerprint is not None and not isinstance(self._sock, if self.fingerprint is not None and not isinstance(self._sock,
OpenSSL.SSL.Connection): OpenSSL.SSL.Connection):
@ -910,7 +888,6 @@ class Socks5Sender(IdleObject):
jingle_xtls.get_context('server'), _sock) jingle_xtls.get_context('server'), _sock)
else: else:
self._sock.setblocking(False) self._sock.setblocking(False)
self.fd = _sock.fileno() self.fd = _sock.fileno()
self._recv = _sock.recv self._recv = _sock.recv
self._send = _sock.send self._send = _sock.send
@ -939,13 +916,11 @@ class Socks5Sender(IdleObject):
def set_connection_sock(self, _sock): def set_connection_sock(self, _sock):
self._sock = _sock self._sock = _sock
if self.fingerprint is not None: if self.fingerprint is not None:
self._sock = OpenSSL.SSL.Connection( self._sock = OpenSSL.SSL.Connection(
jingle_xtls.get_context('client'), _sock) jingle_xtls.get_context('client'), _sock)
else: else:
self._sock.setblocking(False) self._sock.setblocking(False)
self.fd = _sock.fileno() self.fd = _sock.fileno()
self._recv = _sock.recv self._recv = _sock.recv
self._send = _sock.send self._send = _sock.send
@ -959,7 +934,6 @@ class Socks5Sender(IdleObject):
""" """
Start sending the file over verified connection Start sending the file over verified connection
""" """
self.pauses = 0 self.pauses = 0
self.state = 7 self.state = 7
# plug for writing # plug for writing
@ -978,6 +952,7 @@ class Socks5Sender(IdleObject):
if self.queue is not None: if self.queue is not None:
self.queue.remove_sender(self.queue_idx, False) self.queue.remove_sender(self.queue_idx, False)
class Socks5Receiver(IdleObject): class Socks5Receiver(IdleObject):
def __init__(self, idlequeue, streamhost, sid, file_props = None, def __init__(self, idlequeue, streamhost, sid, file_props = None,
@ -1055,6 +1030,7 @@ class Socks5Receiver(IdleObject):
self.queue.remove_receiver(self.queue_idx, False) self.queue.remove_receiver(self.queue_idx, False)
class Socks5Server(Socks5): class Socks5Server(Socks5):
def __init__(self, idlequeue, host, port, initiator, target, sid): def __init__(self, idlequeue, host, port, initiator, target, sid):
Socks5.__init__(self, idlequeue, host, port, initiator, target, sid) Socks5.__init__(self, idlequeue, host, port, initiator, target, sid)
self.mode = 'server' self.mode = 'server'
@ -1090,7 +1066,6 @@ class Socks5Server(Socks5):
self.queue.result_sha(self.sha_msg, self.queue_idx) self.queue.result_sha(self.sha_msg, self.queue_idx)
if result == -1: if result == -1:
self.disconnect() self.disconnect()
elif self.state == 5: elif self.state == 5:
self.state = 7 self.state = 7
if self.type_ == 'sender': if self.type_ == 'sender':
@ -1101,7 +1076,6 @@ class Socks5Server(Socks5):
# We plug for reading # We plug for reading
self.idlequeue.plug_idle(self, False, True) self.idlequeue.plug_idle(self, False, True)
return return
elif self.state == 7: elif self.state == 7:
if self.file_props.paused: if self.file_props.paused:
self.file_props.continue_cb = \ self.file_props.continue_cb = \
@ -1175,7 +1149,6 @@ class Socks5Client(Socks5):
# end connection # end connection
self.pollend() self.pollend()
return return
if self.state == 2: # read auth response if self.state == 2: # read auth response
if buff is None or len(buff) != 2: if buff is None or len(buff) != 2:
return None return None
@ -1208,11 +1181,9 @@ class Socks5Client(Socks5):
if self.type_ == 'sender' and self.proxy: if self.type_ == 'sender' and self.proxy:
self.queue.process_result(self.send_file(), self) self.queue.process_result(self.send_file(), self)
return return
if result == 0: if result == 0:
self.state = 8 self.state = 8
self.disconnect() self.disconnect()
# for senders: init file_props # for senders: init file_props
if result == 1 and self.state == 5: if result == 1 and self.state == 5:
if self.file_props.type_ == 's': if self.file_props.type_ == 's':
@ -1233,7 +1204,6 @@ class Socks5Client(Socks5):
else: else:
# receiving file contents from socket # receiving file contents from socket
self.idlequeue.plug_idle(self, False, True) self.idlequeue.plug_idle(self, False, True)
self.file_props.continue_cb = self.continue_paused_transfer self.file_props.continue_cb = self.continue_paused_transfer
# we have set up the connection, next - retrieve file # we have set up the connection, next - retrieve file
self.state = 6 self.state = 6
@ -1445,3 +1415,5 @@ class Socks5Listener(IdleObject):
_sock[0].setblocking(False) _sock[0].setblocking(False)
self.connections.append(_sock[0]) self.connections.append(_sock[0])
return _sock return _sock

View file

@ -1662,9 +1662,9 @@ class YesNoDialog(HigDialog):
*self.user_response_yes[1:]) *self.user_response_yes[1:])
else: else:
if self.textview: if self.textview:
self.user_response_yes(self.is_checked())
else:
self.user_response_yes(self.is_checked(), txt) self.user_response_yes(self.is_checked(), txt)
else:
self.user_response_yes(self.is_checked())
self.call_cancel_on_destroy = False self.call_cancel_on_destroy = False
self.destroy() self.destroy()