Skip to content

Commit

Permalink
Merge pull request #76 from TallaInc/improvement/information-query
Browse files Browse the repository at this point in the history
expose information queries for custom extensions
  • Loading branch information
mattn committed Jun 23, 2016
2 parents aeb80dd + c7af92b commit e44d187
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 17 deletions.
13 changes: 8 additions & 5 deletions xmpp.go
Expand Up @@ -562,10 +562,11 @@ type Presence struct {
}

type IQ struct {
ID string
From string
To string
Type string
ID string
From string
To string
Type string
Query []byte
}

// Recv waits to receive the next XMPP stanza.
Expand Down Expand Up @@ -599,7 +600,7 @@ 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:
return IQ{v.ID, v.From, v.To, v.Type}, nil
return IQ{ID: v.ID, From: v.From, To: v.To, Type: v.Type, Query: v.Query}, nil
}
}
}
Expand Down Expand Up @@ -747,6 +748,7 @@ type clientIQ struct { // info/query
ID string `xml:"id,attr"`
To string `xml:"to,attr"`
Type string `xml:"type,attr"` // error, get, result, set
Query []byte `xml:",innerxml"`
Error clientError
Bind bindBind
}
Expand Down Expand Up @@ -839,6 +841,7 @@ func next(p *xml.Decoder) (xml.Name, interface{}, error) {
if err = p.DecodeElement(nv, &se); err != nil {
return xml.Name{}, nil, err
}

return se.Name, nv, err
}

Expand Down
12 changes: 0 additions & 12 deletions xmpp_discovery.go

This file was deleted.

24 changes: 24 additions & 0 deletions xmpp_information_query.go
@@ -0,0 +1,24 @@
package xmpp

import (
"fmt"
"strconv"
)

const IQTypeGet = "get"
const IQTypeSet = "set"
const IQTypeResult = "result"

func (c *Client) Discovery() (string, error) {
const namespace = "http://jabber.org/protocol/disco#items"
// use getCookie for a pseudo random id.
reqID := strconv.FormatUint(uint64(getCookie()), 10)
return c.RawInformationQuery(c.jid, c.domain, reqID, IQTypeGet, namespace, "")
}

// RawInformationQuery sends an information query request to the server.
func (c *Client) RawInformationQuery(from, to, id, iqType, requestNamespace, body string) (string, error) {
const xmlIQ = "<iq from='%s' to='%s' id='%s' type='%s'><query xmlns='%s'>%s</query></iq>"
_, err := fmt.Fprintf(c.conn, xmlIQ, xmlEscape(from), xmlEscape(to), id, iqType, requestNamespace, body)
return id, err
}

0 comments on commit e44d187

Please sign in to comment.