changeset d9cafd91fcfd in /home/hg/repos/gajim
details:http://hg.gajim.org/gajim?cmd=changeset;node=d9cafd91fcfd
description: complete IBB jingle support, fixes #6998
diffstat:
src/common/jingle_ft.py | 36 ++++++++++++++++++++++++++----------
src/common/jingle_transport.py | 11 ++++++-----
2 files changed, 32 insertions(+), 15 deletions(-)
diffs (133 lines):
diff -r d0ce81321fa1 -r d9cafd91fcfd src/common/jingle_ft.py
--- a/src/common/jingle_ft.py Thu Dec 29 17:22:51 2011 -0500
+++ b/src/common/jingle_ft.py Fri Jan 06 23:18:50 2012 -0500
@@ -22,7 +22,7 @@
import gajim
import xmpp
from jingle_content import contents, JingleContent
-from jingle_transport import JingleTransportICEUDP, JingleTransportSocks5
+from jingle_transport import JingleTransportICEUDP, JingleTransportSocks5,
JingleTransportIBB, TransportType
from common import helpers
from common.socks5 import Socks5ReceiverClient, Socks5SenderClient
from common.connection_handlers_events import FileRequestReceivedEvent
@@ -61,7 +61,7 @@
self.callbacks['session-terminate'] += [self.__on_session_terminate]
self.callbacks['transport-accept'] += [self.__on_transport_accept]
self.callbacks['transport-replace'] += [self.__on_transport_replace]
- self.callbacks['session-accept-sent'] += [self._listen_host]
+ self.callbacks['session-accept-sent'] += [self.__transport_setup]
# fallback transport method
self.callbacks['transport-reject'] += [self.__on_transport_reject]
self.callbacks['transport-info'] += [self.__on_transport_info]
@@ -119,10 +119,7 @@
response.delChild(response.getQuery())
con.connection.send(response)
# We send the file
- con.files_props[self.file_props['sid']] = self.file_props
- fp = open(self.file_props['file-name'], 'r')
- con.OpenStream( self.transport.sid, self.session.peerjid,
- fp, blocksize=4096)
+ self.__start_IBB_transfer(con)
raise xmpp.NodeProcessed
self.file_props['streamhosts'] = self.transport.remote_candidates
@@ -142,11 +139,14 @@
fingerprint = None
if self.use_security:
fingerprint = 'client'
- gajim.socks5queue.connect_to_hosts(self.session.connection.name,
+ if self.transport.type == TransportType.SOCKS5:
+ gajim.socks5queue.connect_to_hosts(self.session.connection.name,
self.file_props['sid'], self.send_candidate_used,
self._on_connect_error, fingerprint=fingerprint,
receiving=False)
-
+ elif self.transport.type == TransportType.IBB:
+ self.state = STATE_TRANSFERING
+ self.__start_IBB_transfer(self.session.connection)
raise xmpp.NodeProcessed
def __on_session_terminate(self, stanza, content, error, action):
@@ -224,6 +224,7 @@
self.file_props
# Listen on configured port for file transfer
self._listen_host()
+
elif not self.weinitiate and self.state == STATE_NOT_STARTED:
# session-accept iq-result
if not self.negotiated:
@@ -254,6 +255,22 @@
return
# initiate transfer
self.start_transfer()
+
+ def __start_IBB_transfer(self, con):
+ con.files_props[self.file_props['sid']] = self.file_props
+ fp = open(self.file_props['file-name'], 'r')
+ con.OpenStream( self.transport.sid, self.session.peerjid,
+ fp, blocksize=4096)
+
+ 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.SOCKS5:
+ self._listen_host()
+
+ if self.transport.type == TransportType.IBB:
+ self.state = STATE_TRANSFERING
+
def send_candidate_used(self, streamhost):
"""
@@ -328,8 +345,7 @@
# callback from socsk5queue.start_listener
self.file_props['hash'] = hash_id
- def _listen_host(self, stanza=None, content=None, error=None
- , action=None):
+ def _listen_host(self):
receiver = self.file_props['receiver']
sender = self.file_props['sender']
diff -r d0ce81321fa1 -r d9cafd91fcfd src/common/jingle_transport.py
--- a/src/common/jingle_transport.py Thu Dec 29 17:22:51 2011 -0500
+++ b/src/common/jingle_transport.py Fri Jan 06 23:18:50 2012 -0500
@@ -36,8 +36,9 @@
"""
Possible types of a JingleTransport
"""
- datagram = 1
- streaming = 2
+ ICEUDP = 1
+ SOCKS5 = 2
+ IBB = 3
class JingleTransport(object):
@@ -98,7 +99,7 @@
Note: Don't forget to call set_file_props after initialization
"""
def __init__(self, node=None):
- JingleTransport.__init__(self, TransportType.streaming)
+ JingleTransport.__init__(self, TransportType.SOCKS5)
self.connection = None
self.remote_candidates = []
self.sid = None
@@ -300,7 +301,7 @@
def __init__(self, node=None, block_sz=None):
- JingleTransport.__init__(self, TransportType.streaming)
+ JingleTransport.__init__(self, TransportType.IBB)
if block_sz:
self.block_sz = block_sz
@@ -328,7 +329,7 @@
class JingleTransportICEUDP(JingleTransport):
def __init__(self, node):
- JingleTransport.__init__(self, TransportType.datagram)
+ JingleTransport.__init__(self, TransportType.ICEUDP)
def make_candidate(self, candidate):
types = {farsight.CANDIDATE_TYPE_HOST: 'host',
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits