diff --git a/src/chat_control.py b/src/chat_control.py index 1009a8699..cb727fdeb 100644 --- a/src/chat_control.py +++ b/src/chat_control.py @@ -51,7 +51,7 @@ from common.logger import KindConstant from nbxmpp.protocol import NS_XHTML, NS_XHTML_IM, NS_FILE, NS_MUC from nbxmpp.protocol import NS_ESESSION from nbxmpp.protocol import NS_JINGLE_RTP_AUDIO, NS_JINGLE_RTP_VIDEO -from nbxmpp.protocol import NS_JINGLE_ICE_UDP, NS_JINGLE_FILE_TRANSFER +from nbxmpp.protocol import NS_JINGLE_ICE_UDP, NS_JINGLE_FILE_TRANSFER_5 from nbxmpp.protocol import NS_CHATSTATES from common.connection_handlers_events import MessageOutgoingEvent from common.exceptions import GajimGeneralException @@ -387,7 +387,7 @@ class ChatControl(ChatControlBase): # Send file if ((self.contact.supports(NS_FILE) or \ - self.contact.supports(NS_JINGLE_FILE_TRANSFER)) and \ + self.contact.supports(NS_JINGLE_FILE_TRANSFER_5)) and \ (self.type_id == 'chat' or self.gc_contact.resource)) and \ self.contact.show != 'offline': self._send_file_button.set_sensitive(True) @@ -395,7 +395,7 @@ class ChatControl(ChatControlBase): else: self._send_file_button.set_sensitive(False) if not (self.contact.supports(NS_FILE) or self.contact.supports( - NS_JINGLE_FILE_TRANSFER)): + NS_JINGLE_FILE_TRANSFER_5)): self._send_file_button.set_tooltip_text(_( "This contact does not support file transfer.")) else: diff --git a/src/common/caps_cache.py b/src/common/caps_cache.py index c0ccbd3f5..6a1fc7d15 100644 --- a/src/common/caps_cache.py +++ b/src/common/caps_cache.py @@ -39,11 +39,11 @@ log = logging.getLogger('gajim.c.caps_cache') from nbxmpp import (NS_XHTML_IM, NS_ESESSION, NS_CHATSTATES, NS_JINGLE_ICE_UDP, NS_JINGLE_RTP_AUDIO, NS_JINGLE_RTP_VIDEO, - NS_JINGLE_FILE_TRANSFER) + NS_JINGLE_FILE_TRANSFER_5) # Features where we cannot safely assume that the other side supports them FEATURE_BLACKLIST = [NS_CHATSTATES, NS_XHTML_IM, NS_ESESSION, NS_JINGLE_ICE_UDP, NS_JINGLE_RTP_AUDIO, NS_JINGLE_RTP_VIDEO, - NS_JINGLE_FILE_TRANSFER] + NS_JINGLE_FILE_TRANSFER_5] # Query entry status codes NEW = 0 diff --git a/src/common/connection_handlers.py b/src/common/connection_handlers.py index 80f4cf19d..7ac2b8a94 100644 --- a/src/common/connection_handlers.py +++ b/src/common/connection_handlers.py @@ -187,7 +187,7 @@ class ConnectionDisco: query.setAttr('node', 'http://gajim.org#' + gajim.version.split('-', 1)[ 0]) for f in (nbxmpp.NS_BYTESTREAM, nbxmpp.NS_SI, nbxmpp.NS_FILE, - nbxmpp.NS_COMMANDS, nbxmpp.NS_JINGLE_FILE_TRANSFER, + nbxmpp.NS_COMMANDS, nbxmpp.NS_JINGLE_FILE_TRANSFER_5, nbxmpp.NS_JINGLE_XTLS, nbxmpp.NS_PUBKEY_PUBKEY, nbxmpp.NS_PUBKEY_REVOKE, nbxmpp.NS_PUBKEY_ATTEST): feature = nbxmpp.Node('feature') diff --git a/src/common/connection_handlers_events.py b/src/common/connection_handlers_events.py index d88508203..f820db879 100644 --- a/src/common/connection_handlers_events.py +++ b/src/common/connection_handlers_events.py @@ -2306,12 +2306,12 @@ class FileRequestReceivedEvent(nec.NetworkIncomingEvent, HelperEvent): self.file_props.session_type = 'jingle' self.file_props.stream_methods = nbxmpp.NS_BYTESTREAM desc = self.jingle_content.getTag('description') - if desc.getTag('offer'): - file_tag = desc.getTag('offer').getTag('file') + if self.jingle_content.getAttr('creator') == 'initiator': + file_tag = desc.getTag('file') self.file_props.sender = self.fjid self.file_props.receiver = self.conn._ft_get_our_jid() else: - file_tag = desc.getTag('request').getTag('file') + file_tag = desc.getTag('file') h = file_tag.getTag('hash') h = h.getData() if h else None n = file_tag.getTag('name') diff --git a/src/common/gajim.py b/src/common/gajim.py index fc7fc323b..9726c4064 100644 --- a/src/common/gajim.py +++ b/src/common/gajim.py @@ -253,7 +253,7 @@ gajim_common_features = [nbxmpp.NS_BYTESTREAM, nbxmpp.NS_SI, nbxmpp.NS_FILE, nbxmpp.NS_REGISTER, nbxmpp.NS_VERSION, nbxmpp.NS_DATA, nbxmpp.NS_ENCRYPTED, 'msglog', 'sslc2s', 'stringprep', nbxmpp.NS_PING, nbxmpp.NS_TIME_REVISED, nbxmpp.NS_SSN, nbxmpp.NS_MOOD, nbxmpp.NS_ACTIVITY, nbxmpp.NS_NICK, - nbxmpp.NS_ROSTERX, nbxmpp.NS_SECLABEL, nbxmpp.NS_HASHES, + nbxmpp.NS_ROSTERX, nbxmpp.NS_SECLABEL, nbxmpp.NS_HASHES_2, nbxmpp.NS_HASHES_MD5, nbxmpp.NS_HASHES_SHA1, nbxmpp.NS_HASHES_SHA256, nbxmpp.NS_HASHES_SHA512, nbxmpp.NS_CONFERENCE] diff --git a/src/common/helpers.py b/src/common/helpers.py index 4d3b5b431..0d8f4cf70 100644 --- a/src/common/helpers.py +++ b/src/common/helpers.py @@ -1289,7 +1289,7 @@ def update_optional_features(account = None): gajim.gajim_optional_features[a].append(nbxmpp.NS_JINGLE_RTP_VIDEO) gajim.gajim_optional_features[a].append(nbxmpp.NS_JINGLE_ICE_UDP) gajim.gajim_optional_features[a].append( - nbxmpp.NS_JINGLE_FILE_TRANSFER) + nbxmpp.NS_JINGLE_FILE_TRANSFER_5) gajim.gajim_optional_features[a].append(nbxmpp.NS_JINGLE_XTLS) gajim.gajim_optional_features[a].append(nbxmpp.NS_JINGLE_BYTESTREAM) gajim.gajim_optional_features[a].append(nbxmpp.NS_JINGLE_IBB) diff --git a/src/common/jingle.py b/src/common/jingle.py index 7f6cfc0bc..6903679b9 100644 --- a/src/common/jingle.py +++ b/src/common/jingle.py @@ -172,15 +172,19 @@ class ConnectionJingle(object): return c.transport.sid def __hash_support(self, contact): - if contact.supports(nbxmpp.NS_HASHES): - if contact.supports(nbxmpp.NS_HASHES_SHA512): + if contact.supports(nbxmpp.NS_HASHES_2): + if contact.supports(nbxmpp.NS_HASHES_BLAKE2B_512): + return 'blake2b-512' + elif contact.supports(nbxmpp.NS_HASHES_BLAKE2B_256): + return 'blake2b-256' + elif contact.supports(nbxmpp.NS_HASHES_SHA3_512): + return 'sha3-512' + elif contact.supports(nbxmpp.NS_HASHES_SHA3_256): + return 'sha3-256' + elif contact.supports(nbxmpp.NS_HASHES_SHA512): return 'sha-512' elif contact.supports(nbxmpp.NS_HASHES_SHA256): return 'sha-256' - elif contact.supports(nbxmpp.NS_HASHES_SHA1): - return 'sha-1' - elif contact.supports(nbxmpp.NS_HASHES_MD5): - return 'md5' return None def iter_jingle_sessions(self, jid, sid=None, media=None): diff --git a/src/common/jingle_content.py b/src/common/jingle_content.py index 1c457013c..4108f8ebc 100644 --- a/src/common/jingle_content.py +++ b/src/common/jingle_content.py @@ -175,12 +175,8 @@ class JingleContent: def _fill_content(self, content): description_node = nbxmpp.simplexml.Node( - tag=nbxmpp.NS_JINGLE_FILE_TRANSFER + ' description') - if self.session.werequest: - simode = nbxmpp.simplexml.Node(tag='request') - else: - simode = nbxmpp.simplexml.Node(tag='offer') - file_tag = simode.setTag('file') + tag=nbxmpp.NS_JINGLE_FILE_TRANSFER_5 + ' description') + file_tag = description_node.setTag('file') if self.file_props.name: node = nbxmpp.simplexml.Node(tag='name') node.addData(self.file_props.name) @@ -196,7 +192,7 @@ class JingleContent: if self.file_props.type_ == 'r': if self.file_props.hash_: file_tag.addChild('hash', attrs={'algo': self.file_props.algo}, - namespace=nbxmpp.NS_HASHES, + namespace=nbxmpp.NS_HASHES_2, payload=self.file_props.hash_) else: # if the file is less than 10 mb, then it is small @@ -217,7 +213,6 @@ class JingleContent: desc = file_tag.setTag('desc') if self.file_props.desc: desc.setData(self.file_props.desc) - description_node.addChild(node=simode) if self.use_security: security = nbxmpp.simplexml.Node( tag=nbxmpp.NS_JINGLE_XTLS + ' security') diff --git a/src/common/jingle_ft.py b/src/common/jingle_ft.py index 35ffe0f40..3f7eae168 100644 --- a/src/common/jingle_ft.py +++ b/src/common/jingle_ft.py @@ -155,7 +155,7 @@ class JingleFileTransfer(JingleContent): checksum = nbxmpp.Node(tag='checksum', payload=[nbxmpp.Node(tag='file', payload=[self._compute_hash()])]) - checksum.setNamespace(nbxmpp.NS_JINGLE_FILE_TRANSFER) + checksum.setNamespace(nbxmpp.NS_JINGLE_FILE_TRANSFER_5) self.session.__session_info(checksum) pjid = gajim.get_jid_without_resource(self.session.peerjid) file_info = {'name' : self.file_props.name, @@ -176,7 +176,7 @@ class JingleFileTransfer(JingleContent): except IOError: # can't open file return - h = nbxmpp.Hashes() + h = nbxmpp.Hashes2() hash_ = h.calculateHash(self.file_props.algo, file_) file_.close() # DEBUG @@ -410,4 +410,4 @@ class JingleFileTransfer(JingleContent): def get_content(desc): return JingleFileTransfer -contents[nbxmpp.NS_JINGLE_FILE_TRANSFER] = get_content +contents[nbxmpp.NS_JINGLE_FILE_TRANSFER_5] = get_content diff --git a/src/common/jingle_session.py b/src/common/jingle_session.py index 79d724ffb..371baf56c 100644 --- a/src/common/jingle_session.py +++ b/src/common/jingle_session.py @@ -444,9 +444,9 @@ class JingleSession: for child in payload: if child.getName() == 'checksum': hash_ = child.getTag('file').getTag(name='hash', - namespace=nbxmpp.NS_HASHES) + namespace=nbxmpp.NS_HASHES_2) algo = hash_.getAttr('algo') - if algo in nbxmpp.Hashes.supported: + if algo in nbxmpp.Hashes2.supported: file_props = FilesProp.getFileProp(self.connection.name, self.sid) file_props.algo = algo diff --git a/src/common/protocol/bytestream.py b/src/common/protocol/bytestream.py index 032f9b38c..809a682f3 100644 --- a/src/common/protocol/bytestream.py +++ b/src/common/protocol/bytestream.py @@ -926,10 +926,10 @@ class ConnectionIBBytestream(ConnectionBytestream): log.debug('ReceiveHandler called sid->%s seq->%s' % (sid, seq)) try: seq = int(seq) - data = base64.b64decode(data.encode('utf-8')).decode('utf-8') + data = base64.b64decode(data.encode('utf-8')) except Exception: seq = '' - data = '' + data = b'' err = None file_props = FilesProp.getFilePropByTransportSid(self.name, sid) if file_props is None: diff --git a/src/filetransfers_window.py b/src/filetransfers_window.py index 456874d09..7d1ab5483 100644 --- a/src/filetransfers_window.py +++ b/src/filetransfers_window.py @@ -40,7 +40,7 @@ from common import helpers from common.file_props import FilesProp from common.protocol.bytestream import (is_transfer_active, is_transfer_paused, is_transfer_stopped) -from nbxmpp.protocol import NS_JINGLE_FILE_TRANSFER +from nbxmpp.protocol import NS_JINGLE_FILE_TRANSFER_5 import logging log = logging.getLogger('gajim.filetransfer_window') @@ -357,7 +357,7 @@ class FileTransfersWindow: file_path, file_name, file_desc) if file_props is None: return False - if contact.supports(NS_JINGLE_FILE_TRANSFER): + if contact.supports(NS_JINGLE_FILE_TRANSFER_5): log.info("contact %s supports jingle file transfer"%(contact.get_full_jid())) gajim.connections[account].start_file_transfer(contact.get_full_jid(), file_props) diff --git a/src/gui_interface.py b/src/gui_interface.py index c2e420817..ebfc4cfe4 100644 --- a/src/gui_interface.py +++ b/src/gui_interface.py @@ -73,7 +73,7 @@ from session import ChatControlSession from common import sleepy from nbxmpp import idlequeue -from nbxmpp import Hashes +from nbxmpp import Hashes2 from common.zeroconf import connection_zeroconf from common import resolver from common import caps_cache @@ -988,7 +988,7 @@ class Interface: session = gajim.connections[account].get_jingle_session(jid=None, sid=file_props.sid) ft_win = self.instances['file_transfers'] - h = Hashes() + h = Hashes2() try: file_ = open(file_props.file_name, 'rb') except: diff --git a/src/gui_menu_builder.py b/src/gui_menu_builder.py index 58f892533..d96a6ad18 100644 --- a/src/gui_menu_builder.py +++ b/src/gui_menu_builder.py @@ -27,7 +27,7 @@ from common import gajim from common import helpers from common import i18n from nbxmpp.protocol import NS_COMMANDS, NS_FILE, NS_MUC, NS_ESESSION -from nbxmpp.protocol import NS_JINGLE_FILE_TRANSFER, NS_CONFERENCE +from nbxmpp.protocol import NS_JINGLE_FILE_TRANSFER_5, NS_CONFERENCE from gtkgui_helpers import get_action def build_resources_submenu(contacts, account, action, room_jid=None, @@ -260,7 +260,7 @@ control=None, gc_contact=None, is_anonymous=True): else: start_chat_menuitem.connect('activate', gajim.interface.on_open_chat_window, contact, account) - if contact.supports(NS_FILE) or contact.supports(NS_JINGLE_FILE_TRANSFER): + if contact.supports(NS_FILE) or contact.supports(NS_JINGLE_FILE_TRANSFER_5): send_file_menuitem.set_sensitive(True) send_file_menuitem.connect('activate', roster.on_send_file_menuitem_activate, contact, account)