From b8914c62198897fc8cf7685174dfa0494fa52bea Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Tue, 24 Aug 2010 23:12:34 +0200 Subject: [PATCH] coding standards --- src/common/jingle_ft.py | 129 ++++++++++++++++++++++------------------ 1 file changed, 70 insertions(+), 59 deletions(-) diff --git a/src/common/jingle_ft.py b/src/common/jingle_ft.py index d340ddbf9..5db8f206b 100644 --- a/src/common/jingle_ft.py +++ b/src/common/jingle_ft.py @@ -27,7 +27,6 @@ from common import helpers from common.socks5 import Socks5Receiver import logging - log = logging.getLogger('gajim.c.jingle_ft') STATE_NOT_STARTED = 0 @@ -37,25 +36,27 @@ STATE_TRANSPORT_INFO = 3 STATE_PROXY_ACTIVATED = 4 class JingleFileTransfer(JingleContent): - def __init__(self, session, transport=None, file_props=None, use_security=False): + 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 + + # events we might be interested in self.callbacks['session-initiate'] += [self.__on_session_initiate] self.callbacks['session-accept'] += [self.__on_session_accept] self.callbacks['session-terminate'] += [self.__on_session_terminate] self.callbacks['transport-accept'] += [self.__on_transport_accept] - self.callbacks['transport-replace'] += [self.__on_transport_replace] #fallback transport method + self.callbacks['transport-replace'] += [self.__on_transport_replace] + # fallback transport method 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.state = STATE_NOT_STARTED - + self.use_security = use_security - + self.file_props = file_props if file_props is None: self.weinitiate = False @@ -68,9 +69,8 @@ class JingleFileTransfer(JingleContent): self.file_props['session-type'] = 'jingle' self.file_props['sid'] = session.sid self.file_props['transfered_size'] = [] - - log.info("FT request: %s" % file_props) + log.info("FT request: %s" % file_props) if transport is None: self.transport = JingleTransportSocks5() @@ -81,11 +81,11 @@ class JingleFileTransfer(JingleContent): self.session = session self.media = 'file' - + def __on_session_initiate(self, stanza, content, error, action): jid = unicode(stanza.getFrom()) log.info("jid:%s" % jid) - + file_props = {'type': 'r'} file_props['sender'] = jid file_props['request-id'] = unicode(stanza.getAttr('id')) @@ -93,8 +93,9 @@ class JingleFileTransfer(JingleContent): file_props['session-type'] = 'jingle' self.use_security = bool(content.getTag('security')) - # TODO: extract fingerprint element, encryption method element for later use - + # TODO: extract fingerprint element, encryption method element for later + # use + file_tag = content.getTag('description').getTag('offer').getTag('file') for attribute in file_tag.getAttrs(): if attribute in ('name', 'size', 'hash', 'date'): @@ -105,7 +106,7 @@ class JingleFileTransfer(JingleContent): file_desc_tag = file_tag.getTag('desc') if file_desc_tag is not None: file_props['desc'] = file_desc_tag.getData() - + file_props['receiver'] = self.session.ourjid log.info("ourjid: %s" % self.session.ourjid) file_props['sid'] = unicode(stanza.getTag('jingle').getAttr('sid')) @@ -119,7 +120,8 @@ class JingleFileTransfer(JingleContent): self.transport.set_connection(self.session.connection) self.transport.set_file_props(self.file_props) if self.file_props.has_key("streamhosts"): - self.file_props['streamhosts'].extend(self.transport.remote_candidates) + self.file_props['streamhosts'].extend( + self.transport.remote_candidates) else: self.file_props['streamhosts'] = self.transport.remote_candidates for host in self.file_props['streamhosts']: @@ -131,11 +133,10 @@ class JingleFileTransfer(JingleContent): def __on_session_accept(self, stanza, content, error, action): log.info("__on_session_accept") - + security = content.getTag('security') if not security: # responder can not verify our fingerprint self.use_security = False - def __on_session_terminate(self, stanza, content, error, action): log.info("__on_session_terminate") @@ -145,16 +146,17 @@ class JingleFileTransfer(JingleContent): def __on_transport_replace(self, stanza, content, error, action): log.info("__on_transport_replace") - + def __on_transport_reject(self, stanza, content, error, action): log.info("__on_transport_reject") def __on_transport_info(self, stanza, content, error, action): log.info("__on_transport_info") - + if not self.weinitiate: # proxy activated from initiator return - streamhost_cid = content.getTag('transport').getTag('candidate-used').getAttr('cid') + streamhost_cid = content.getTag('transport').getTag('candidate-used').\ + getAttr('cid') streamhost_used = None for cand in self.transport.candidates: if cand['candidate_id'] == streamhost_cid: @@ -167,8 +169,8 @@ class JingleFileTransfer(JingleContent): self.file_props['streamhost-used'] = True for proxy in self.file_props['proxyhosts']: if proxy['host'] == streamhost_used['host'] and \ - proxy['port'] == streamhost_used['port'] and \ - proxy['jid'] == streamhost_used['jid']: + proxy['port'] == streamhost_used['port'] and \ + proxy['jid'] == streamhost_used['jid']: streamhost_used = proxy break if 'streamhosts' not in self.file_props: @@ -176,75 +178,85 @@ class JingleFileTransfer(JingleContent): self.file_props['streamhosts'].append(streamhost_used) self.file_props['is_a_proxy'] = True receiver = Socks5Receiver(gajim.idlequeue, streamhost_used, - self.file_props['sid'], self.file_props) - gajim.socks5queue.add_receiver(self.session.connection.name, receiver) + self.file_props['sid'], self.file_props) + gajim.socks5queue.add_receiver(self.session.connection.name, + receiver) streamhost_used['idx'] = receiver.queue_idx gajim.socks5queue.on_success = self.transport._on_proxy_auth_ok else: jid = gajim.get_jid_without_resource(self.session.ourjid) - gajim.socks5queue.send_file(self.file_props, self.session.connection.name) - + gajim.socks5queue.send_file(self.file_props, + self.session.connection.name) + def __on_iq_result(self, stanza, content, error, action): log.info("__on_iq_result") - + if self.weinitiate and self.state == STATE_NOT_STARTED: self.state = STATE_INITIALIZED - self.session.connection.files_props[self.file_props['sid']] = self.file_props + self.session.connection.files_props[self.file_props['sid']] = \ + self.file_props receiver = self.file_props['receiver'] sender = self.file_props['sender'] - - sha_str = helpers.get_auth_sha(self.file_props['sid'], sender, receiver) + + 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') - + listener = gajim.socks5queue.start_listener(port, sha_str, - self._store_socks5_sid, self.file_props['sid'], fingerprint = 'server') - + self._store_socks5_sid, self.file_props['sid'], + fingerprint='server') + if not listener: return # send error message, notify the user - elif not self.weinitiate and self.state == STATE_NOT_STARTED: # session-accept iq-result + elif not self.weinitiate and self.state == STATE_NOT_STARTED: + # session-accept iq-result self.state = STATE_ACCEPTED - if not gajim.socks5queue.get_file_props(self.session.connection.name, self.file_props['sid']): - gajim.socks5queue.add_file_props(self.session.connection.name, self.file_props) - gajim.socks5queue.connect_to_hosts(self.session.connection.name, self.file_props['sid'], - self.send_candidate_used, self._on_connect_error, - fingerprint = 'client') - elif not self.weinitiate and self.state == STATE_ACCEPTED: # transport-info iq-result + if not gajim.socks5queue.get_file_props( + self.session.connection.name, self.file_props['sid']): + gajim.socks5queue.add_file_props(self.session.connection.name, + self.file_props) + gajim.socks5queue.connect_to_hosts(self.session.connection.name, + self.file_props['sid'], self.send_candidate_used, + self._on_connect_error, fingerprint='client') + elif not self.weinitiate and self.state == STATE_ACCEPTED: + # transport-info iq-result self.state = STATE_TRANSPORT_INFO - elif self.weinitiate and self.state == STATE_INITIALIZED: # proxy activated + elif self.weinitiate and self.state == STATE_INITIALIZED: + # proxy activated self.state = STATE_PROXY_ACTIVATED - + def send_candidate_used(self, streamhost): """ send candidate-used stanza """ - log.info("send_candidate_used") + log.info('send_candidate_used') if streamhost is None: return - + content = xmpp.Node('content') content.setAttr('creator', 'initiator') content.setAttr('name', 'file') - + transport = xmpp.Node('transport') transport.setAttr('xmlns', xmpp.NS_JINGLE_BYTESTREAM) - + candidateused = xmpp.Node('candidate-used') candidateused.setAttr('cid', streamhost['cid']) - + transport.addChild(node=candidateused) content.addChild(node=transport) self.session.send_transport_info(content) - + def _on_connect_error(self, to, _id, sid, code=404): - log.info("connect error, sid=" + sid) - return - + log.info('connect error, sid=' + sid) + def _fill_content(self, content): - description_node = xmpp.simplexml.Node(tag=xmpp.NS_JINGLE_FILE_TRANSFER + ' description') + description_node = xmpp.simplexml.Node( + tag=xmpp.NS_JINGLE_FILE_TRANSFER + ' description') sioffer = xmpp.simplexml.Node(tag='offer') file_tag = sioffer.setTag('file', namespace=xmpp.NS_FILE) @@ -255,9 +267,10 @@ class JingleFileTransfer(JingleContent): desc.setData(self.file_props['desc']) description_node.addChild(node=sioffer) - + if self.use_security: - security = xmpp.simplexml.Node(tag=xmpp.NS_JINGLE_XTLS + ' security') + security = xmpp.simplexml.Node( + tag=xmpp.NS_JINGLE_XTLS + ' security') # TODO: add fingerprint element for m in ('x509', ): # supported authentication methods method = xmpp.simplexml.Node(tag='method') @@ -266,14 +279,12 @@ class JingleFileTransfer(JingleContent): content.addChild(node=security) content.addChild(node=description_node) - + def _store_socks5_sid(self, sid, hash_id): # callback from socsk5queue.start_listener self.file_props['hash'] = hash_id - return def get_content(desc): return JingleFileTransfer - contents[xmpp.NS_JINGLE_FILE_TRANSFER] = get_content