Add support for detecting Stream Management

disco_info_form
Mickael Remond 5 years ago
parent 709a95129e
commit 30e6adc073
No known key found for this signature in database
GPG Key ID: E6F6045D79965AA3

@ -13,11 +13,12 @@ type StreamFeatures struct {
// Server capabilities hash
Caps Caps
// Stream features
StartTLS tlsStartTLS
Mechanisms saslMechanisms
Bind BindBind
Session sessionSession
Any []xml.Name `xml:",any"`
StartTLS tlsStartTLS
Mechanisms saslMechanisms
Bind BindBind
Session sessionSession
StreamManagement streamManagement
Any []xml.Name `xml:",any"`
}
func (StreamFeatures) Name() string {
@ -104,6 +105,19 @@ type saslMechanisms struct {
Mechanism []string `xml:"mechanism"`
}
// StreamManagement
// Reference: XEP-0198 - https://xmpp.org/extensions/xep-0198.html#feature
type streamManagement struct {
XMLName xml.Name `xml:"urn:xmpp:sm:3 sm"`
}
func (sf *StreamFeatures) DoesStreamManagement() (isSupported bool) {
if sf.StreamManagement.XMLName.Space+" "+sf.StreamManagement.XMLName.Local == "urn:xmpp:sm:3 sm" {
return true
}
return false
}
// ============================================================================
// StreamError Packet

@ -45,3 +45,20 @@ func TestStartTLS(t *testing.T) {
t.Error("StartTLS feature should be required")
}
}
// TODO: Ability to support / detect previous version of stream management feature
func TestStreamManagement(t *testing.T) {
streamFeatures := `<stream:features xmlns:stream='http://etherx.jabber.org/streams'>
<sm xmlns='urn:xmpp:sm:3'/>
</stream:features>`
var parsedSF xmpp.StreamFeatures
if err := xml.Unmarshal([]byte(streamFeatures), &parsedSF); err != nil {
t.Errorf("Unmarshal(%s) returned error: %v", streamFeatures, err)
}
ok := parsedSF.DoesStreamManagement()
if !ok {
t.Error("Stream Management feature should have been detected")
}
}

Loading…
Cancel
Save