summaryrefslogtreecommitdiff
path: root/xmpp/streams.go
diff options
context:
space:
mode:
Diffstat (limited to 'xmpp/streams.go')
-rw-r--r--xmpp/streams.go33
1 files changed, 19 insertions, 14 deletions
diff --git a/xmpp/streams.go b/xmpp/streams.go
index b9c0cb7..9c90554 100644
--- a/xmpp/streams.go
+++ b/xmpp/streams.go
@@ -40,20 +40,6 @@ func closeStream(e *xml.Encoder) {
}
}
-func streamFeaturesHandler(s *session, e []xml.Token) {
- if hasSaslPlain(e) {
- s.sasl()
- return
- }
-
- if hasBind(e) {
- s.sendBind()
- return
- }
-
- log.Println("Stream has no implemented features!")
-}
-
func iqHandler(s *session, e []xml.Token) {
isResult := false
idMatches := false
@@ -77,3 +63,22 @@ func iqHandler(s *session, e []xml.Token) {
}
}
}
+
+type streamFeatures struct {
+ Mechanisms struct {
+ Items []struct {
+ Type string `xml:",innerxml"`
+ } `xml:"mechanism"`
+ } `xml:"mechanisms"`
+}
+
+func streamFeaturesHandler(s *xml.StartElement, d *xml.Decoder, c chan<- any) {
+ e := streamFeatures{}
+
+ err := d.DecodeElement(&e, s)
+ if err != nil {
+ log.Printf("Could not decode stream features: %v\n", err)
+ }
+
+ c <- e
+}