Update xmpp vendor

This commit is contained in:
Wim 2016-11-26 14:44:33 +01:00
parent e4ec27c5e2
commit 4ef32103ca
3 changed files with 62 additions and 13 deletions

View File

@ -536,12 +536,13 @@ func (c *Client) IsEncrypted() bool {
// Chat is an incoming or outgoing XMPP chat message. // Chat is an incoming or outgoing XMPP chat message.
type Chat struct { type Chat struct {
Remote string Remote string
Type string Type string
Text string Text string
Roster Roster Roster Roster
Other []string Other []string
Stamp time.Time OtherElem []XMLElement
Stamp time.Time
} }
type Roster []Contact type Roster []Contact
@ -584,11 +585,12 @@ func (c *Client) Recv() (stanza interface{}, err error) {
v.Delay.Stamp, v.Delay.Stamp,
) )
chat := Chat{ chat := Chat{
Remote: v.From, Remote: v.From,
Type: v.Type, Type: v.Type,
Text: v.Body, Text: v.Body,
Other: v.Other, Other: v.OtherStrings(),
Stamp: stamp, OtherElem: v.Other,
Stamp: stamp,
} }
return chat, nil return chat, nil
case *clientQuery: case *clientQuery:
@ -600,6 +602,12 @@ func (c *Client) Recv() (stanza interface{}, err error) {
case *clientPresence: case *clientPresence:
return Presence{v.From, v.To, v.Type, v.Show, v.Status}, nil return Presence{v.From, v.To, v.Type, v.Show, v.Status}, nil
case *clientIQ: 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 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"` Thread string `xml:"thread"`
// Any hasn't matched element // Any hasn't matched element
Other []string `xml:",any"` Other []XMLElement `xml:",any"`
Delay Delay `xml:"delay"` 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 { type Delay struct {
Stamp string `xml:"stamp,attr"` Stamp string `xml:"stamp,attr"`
} }

View File

@ -25,3 +25,9 @@ func (c *Client) PingS2S(fromServer, toServer string) error {
xmlEscape(fromServer), xmlEscape(toServer)) xmlEscape(fromServer), xmlEscape(toServer))
return err return err
} }
func (c *Client) SendResultPing(id, toServer string) error {
_, err := fmt.Fprintf(c.conn, "<iq type='result' to='%s' id='%s'/>",
xmlEscape(toServer), xmlEscape(id))
return err
}

2
vendor/manifest vendored
View File

@ -113,7 +113,7 @@
"importpath": "github.com/mattn/go-xmpp", "importpath": "github.com/mattn/go-xmpp",
"repository": "https://github.com/mattn/go-xmpp", "repository": "https://github.com/mattn/go-xmpp",
"vcs": "git", "vcs": "git",
"revision": "e44d1877bb457f5c3991903e9934a31e55c3a2ad", "revision": "f4550b5399387339df5ce4c3f88c1ef85333bdd5",
"branch": "master", "branch": "master",
"notests": true "notests": true
}, },