Add support for detecting Stream Management
This commit is contained in:
parent
709a95129e
commit
30e6adc073
24
stream.go
24
stream.go
|
@ -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…
Reference in a new issue