diff --git a/src/xmpp/disco.go b/src/xmpp/disco.go
index d9dea7f..3951d8b 100644
--- a/src/xmpp/disco.go
+++ b/src/xmpp/disco.go
@@ -6,8 +6,8 @@ import (
)
const (
- nsDiscoInfo = "http://jabber.org/protocol/disco#info"
- nsDiscoItems = "http://jabber.org/protocol/disco#items"
+ NsDiscoInfo = "http://jabber.org/protocol/disco#info"
+ NsDiscoItems = "http://jabber.org/protocol/disco#items"
)
// Service Discovery (XEP-0030) protocol. "Wraps" XMPP instance to provide a
@@ -19,6 +19,7 @@ type Disco struct {
// Iq get/result payload for "info" requests.
type DiscoInfo struct {
XMLName xml.Name `xml:"http://jabber.org/protocol/disco#info query"`
+ Node string `xml:"node,attr"`
Identity []DiscoIdentity `xml:"identity"`
Feature []DiscoFeature `xml:"feature"`
}
@@ -38,6 +39,7 @@ type DiscoFeature struct {
// Iq get/result payload for "items" requests.
type DiscoItems struct {
XMLName xml.Name `xml:"http://jabber.org/protocol/disco#items query"`
+ Node string `xml:"node,attr"`
Item []DiscoItem `xml:"item"`
}
@@ -49,13 +51,13 @@ type DiscoItem struct {
}
// Request information about the service identified by 'to'.
-func (disco *Disco) Info(to string, from string) (*DiscoInfo, error) {
+func (disco *Disco) Info(to, from string) (*DiscoInfo, error) {
if from == "" {
from = disco.XMPP.JID.Full()
}
- req := &Iq{Id: UUID4(), Type: "get", To: to, From: from}
+ req := &Iq{Id: UUID4(), Type: IqTypeGet, To: to, From: from}
req.PayloadEncode(&DiscoInfo{})
resp, err := disco.XMPP.SendRecv(req)
@@ -72,14 +74,14 @@ func (disco *Disco) Info(to string, from string) (*DiscoInfo, error) {
}
// Request items in the service identified by 'to'.
-func (disco *Disco) Items(to string, from string) (*DiscoItems, error) {
+func (disco *Disco) Items(to, from, node string) (*DiscoItems, error) {
if from == "" {
from = disco.XMPP.JID.Full()
}
- req := &Iq{Id: UUID4(), Type: "get", To: to, From: from}
- req.PayloadEncode(&DiscoItems{})
+ req := &Iq{Id: UUID4(), Type: IqTypeGet, To: to, From: from}
+ req.PayloadEncode(&DiscoItems{Node: node})
resp, err := disco.XMPP.SendRecv(req)
if err != nil {
@@ -94,7 +96,7 @@ func (disco *Disco) Items(to string, from string) (*DiscoItems, error) {
return items, err
}
-var discoNamespacePrefix = strings.Split(nsDiscoInfo, "#")[0]
+var discoNamespacePrefix = strings.Split(NsDiscoInfo, "#")[0]
// Matcher instance to match stanzas with a disco payload.
var DiscoPayloadMatcher = MatcherFunc(
diff --git a/src/xmpp/stanza.go b/src/xmpp/stanza.go
index 584793d..dd51f7f 100644
--- a/src/xmpp/stanza.go
+++ b/src/xmpp/stanza.go
@@ -6,6 +6,15 @@ import (
"fmt"
)
+
+const (
+ IqTypeGet = "get"
+ IqTypeSet = "set"
+ IqTypeResult = "result"
+ IqTypeError = "error"
+)
+
+
// XMPP stanza.
type Iq struct {
XMLName xml.Name `xml:"iq"`
@@ -72,6 +81,10 @@ type Presence struct {
Type string `xml:"type,attr,omitempty"`
To string `xml:"to,attr,omitempty"`
From string `xml:"from,attr,omitempty"`
+ Show string `xml:"show"` // away, chat, dnd, xa
+ Status string `xml:"status"` // sb []clientText
+ Photo string `xml:"photo,omitempty"` // Avatar
+ Nick string `xml:"nick,omitempty"` // Nickname
}
// XMPP . May occur as a top-level stanza or embedded in another