stanza: add a Handshake class and use it in componentxmpp

This commit is contained in:
mathieui 2021-04-18 21:15:22 +02:00
parent 7057773d18
commit 3bb01de120
3 changed files with 36 additions and 4 deletions

View file

@ -10,6 +10,7 @@ import logging
import hashlib
from slixmpp.basexmpp import BaseXMPP
from slixmpp.stanza import Handshake
from slixmpp.xmlstream import XMLStream
from slixmpp.xmlstream import ET
from slixmpp.xmlstream.matcher import MatchXPath
@ -123,9 +124,10 @@ class ComponentXMPP(BaseXMPP):
sid = xml.get('id', '')
pre_hash = bytes('%s%s' % (sid, self.secret), 'utf-8')
handshake = ET.Element('{jabber:component:accept}handshake')
handshake.text = hashlib.sha1(pre_hash).hexdigest().lower()
self.send_xml(handshake)
handshake = Handshake()
handshake['value'] = hashlib.sha1(pre_hash).hexdigest().lower()
self.send(handshake)
def _handle_handshake(self, xml):
"""The handshake has been accepted.

View file

@ -1,4 +1,3 @@
# Slixmpp: The Slick XMPP Library
# Copyright (C) 2010 Nathanael C. Fritz
# This file is part of Slixmpp.
@ -10,3 +9,9 @@ from slixmpp.stanza.message import Message
from slixmpp.stanza.presence import Presence
from slixmpp.stanza.stream_features import StreamFeatures
from slixmpp.stanza.stream_error import StreamError
from slixmpp.stanza.handshake import Handshake
__all__ = [
'Error', 'Iq', 'Message', 'Presence', 'StreamFeatures', 'StreamError',
'Handshake'
]

View file

@ -0,0 +1,25 @@
# Slixmpp: The Slick XMPP Library
# Copyright (C) 2021 Mathieu Pasquet
# This file is part of Slixmpp.
# See the file LICENSE for copying permission.
from slixmpp.xmlstream import StanzaBase
class Handshake(StanzaBase):
"""
Jabber Component protocol handshake
"""
namespace = 'jabber:component:accept'
name = 'handshake'
interfaces = {'value'}
def set_value(self, value: str):
self.xml.text = value
def get_value(self) -> str:
return self.xml.text
def del_value(self):
self.xml.text = ''