diff options
author | Wim <wim@42.be> | 2016-11-26 14:44:33 +0100 |
---|---|---|
committer | Wim <wim@42.be> | 2016-11-26 14:44:33 +0100 |
commit | 4ef32103cae4fe7e4908a8909f83efbf3c071651 (patch) | |
tree | 42d647ee1355488376e5d8d33cdbb336f44a6d7c /vendor/github.com/mattn/go-xmpp/xmpp.go | |
parent | e4ec27c5e24b46d289af00f6848ba2c65966eae2 (diff) | |
download | matterbridge-msglm-4ef32103cae4fe7e4908a8909f83efbf3c071651.tar.gz matterbridge-msglm-4ef32103cae4fe7e4908a8909f83efbf3c071651.tar.bz2 matterbridge-msglm-4ef32103cae4fe7e4908a8909f83efbf3c071651.zip |
Update xmpp vendor
Diffstat (limited to 'vendor/github.com/mattn/go-xmpp/xmpp.go')
-rw-r--r-- | vendor/github.com/mattn/go-xmpp/xmpp.go | 67 |
1 files changed, 55 insertions, 12 deletions
diff --git a/vendor/github.com/mattn/go-xmpp/xmpp.go b/vendor/github.com/mattn/go-xmpp/xmpp.go index a792e5a3..e20b57a8 100644 --- a/vendor/github.com/mattn/go-xmpp/xmpp.go +++ b/vendor/github.com/mattn/go-xmpp/xmpp.go @@ -536,12 +536,13 @@ func (c *Client) IsEncrypted() bool { // Chat is an incoming or outgoing XMPP chat message. type Chat struct { - Remote string - Type string - Text string - Roster Roster - Other []string - Stamp time.Time + Remote string + Type string + Text string + Roster Roster + Other []string + OtherElem []XMLElement + Stamp time.Time } type Roster []Contact @@ -584,11 +585,12 @@ func (c *Client) Recv() (stanza interface{}, err error) { v.Delay.Stamp, ) chat := Chat{ - Remote: v.From, - Type: v.Type, - Text: v.Body, - Other: v.Other, - Stamp: stamp, + Remote: v.From, + Type: v.Type, + Text: v.Body, + Other: v.OtherStrings(), + OtherElem: v.Other, + Stamp: stamp, } return chat, nil case *clientQuery: @@ -600,6 +602,12 @@ func (c *Client) Recv() (stanza interface{}, err error) { case *clientPresence: return Presence{v.From, v.To, v.Type, v.Show, v.Status}, nil case *clientIQ: + if bytes.Equal(v.Query, []byte(`<ping xmlns='urn:xmpp:ping'/>`)) { + err := c.SendResultPing(v.ID, v.From) + if err != nil { + return Chat{}, err + } + } return IQ{ID: v.ID, From: v.From, To: v.To, Type: v.Type, Query: v.Query}, nil } } @@ -714,11 +722,46 @@ type clientMessage struct { Thread string `xml:"thread"` // Any hasn't matched element - Other []string `xml:",any"` + Other []XMLElement `xml:",any"` Delay Delay `xml:"delay"` } +func (m *clientMessage) OtherStrings() []string { + a := make([]string, len(m.Other)) + for i, e := range m.Other { + a[i] = e.String() + } + return a +} + +type XMLElement struct { + XMLName xml.Name + InnerXML string `xml:",innerxml"` +} + +func (e *XMLElement) String() string { + r := bytes.NewReader([]byte(e.InnerXML)) + d := xml.NewDecoder(r) + var buf bytes.Buffer + for { + tok, err := d.Token() + if err != nil { + break + } + switch v := tok.(type) { + case xml.StartElement: + err = d.Skip() + case xml.CharData: + _, err = buf.Write(v) + } + if err != nil { + break + } + } + return buf.String() +} + type Delay struct { Stamp string `xml:"stamp,attr"` } |