diff options
-rw-r--r-- | xmpp/sasl.go | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/xmpp/sasl.go b/xmpp/sasl.go index 512fd58..24edc9a 100644 --- a/xmpp/sasl.go +++ b/xmpp/sasl.go @@ -6,32 +6,26 @@ import ( "log" ) -func (s *session) sasl() { - tokens := make([]xml.Token, 0, 3) +type saslRequest struct { + Payload []byte `xml:",chardata"` +} +func (s *session) sasl() { start := xml.StartElement{ xml.Name{"urn:ietf:params:xml:ns:xmpp-sasl", "auth"}, []xml.Attr{ xml.Attr{xml.Name{"", "mechanism"}, "PLAIN"}, }, } - tokens = append(tokens, start) data := []byte("\x00" + username(s.jid) + "\x00" + s.pwd) - dst := make([]byte, base64.StdEncoding.EncodedLen(len(data))) - base64.StdEncoding.Encode(dst, data) - payload := xml.CharData(dst) - tokens = append(tokens, payload) + inner := saslRequest{} + inner.Payload = make([]byte, base64.StdEncoding.EncodedLen(len(data))) + base64.StdEncoding.Encode(inner.Payload, data) - end := start.End() - tokens = append(tokens, end) - - for _, t := range tokens { - err := s.ed.encodeToken(t) - if err != nil { - log.Println("Could not encode SASL PLAIN element!") - return - } + err := s.ed.tx.EncodeElement(inner, start) + if err != nil { + log.Println("Could not encode SASL PLAIN element!") } } |