mirror of
https://github.com/FluuxIO/go-xmpp.git
synced 2026-05-24 04:43:47 -07:00
Implement Disco queries against other entities (#124)
* Improve support for XEP-0030 This commit allows the user to query information about the server or a node belonging to the server as per XEP-0030. * Fix broken PubSub functionality
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
package xmpp
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
)
|
||||
|
||||
const (
|
||||
XMPPNS_DISCO_ITEMS = "http://jabber.org/protocol/disco#items"
|
||||
XMPPNS_DISCO_INFO = "http://jabber.org/protocol/disco#info"
|
||||
)
|
||||
|
||||
type clientDiscoFeature struct {
|
||||
XMLName xml.Name `xml:"feature"`
|
||||
Var string `xml:"var,attr"`
|
||||
}
|
||||
|
||||
type clientDiscoIdentity struct {
|
||||
XMLName xml.Name `xml:"identity"`
|
||||
Category string `xml:"category,attr"`
|
||||
Type string `xml:"type,attr"`
|
||||
Name string `xml:"name,attr"`
|
||||
}
|
||||
|
||||
type clientDiscoQuery struct {
|
||||
XMLName xml.Name `xml:"query"`
|
||||
Features []clientDiscoFeature `xml:"feature"`
|
||||
Identities []clientDiscoIdentity `xml:"identity"`
|
||||
}
|
||||
|
||||
type clientDiscoItem struct {
|
||||
XMLName xml.Name `xml:"item"`
|
||||
Jid string `xml:"jid,attr"`
|
||||
Node string `xml:"node,attr"`
|
||||
Name string `xml:"name,attr"`
|
||||
}
|
||||
|
||||
type clientDiscoItemsQuery struct {
|
||||
XMLName xml.Name `xml:"query"`
|
||||
Items []clientDiscoItem `xml:"item"`
|
||||
}
|
||||
|
||||
type DiscoIdentity struct {
|
||||
Category string
|
||||
Type string
|
||||
Name string
|
||||
}
|
||||
|
||||
type DiscoItem struct {
|
||||
Jid string
|
||||
Name string
|
||||
Node string
|
||||
}
|
||||
|
||||
type DiscoResult struct {
|
||||
Features []string
|
||||
Identities []DiscoIdentity
|
||||
}
|
||||
|
||||
type DiscoItems struct {
|
||||
Jid string
|
||||
Items []DiscoItem
|
||||
}
|
||||
|
||||
func clientFeaturesToReturn(features []clientDiscoFeature) []string {
|
||||
var ret []string
|
||||
|
||||
for _, feature := range features {
|
||||
ret = append(ret, feature.Var)
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func clientIdentitiesToReturn(identities []clientDiscoIdentity) []DiscoIdentity {
|
||||
var ret []DiscoIdentity
|
||||
|
||||
for _, id := range identities {
|
||||
ret = append(ret, DiscoIdentity{
|
||||
Category: id.Category,
|
||||
Type: id.Type,
|
||||
Name: id.Name,
|
||||
})
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func clientDiscoItemsToReturn(items []clientDiscoItem) []DiscoItem {
|
||||
var ret []DiscoItem
|
||||
for _, item := range items {
|
||||
ret = append(ret, DiscoItem{
|
||||
Jid: item.Jid,
|
||||
Name: item.Name,
|
||||
Node: item.Node,
|
||||
})
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
Reference in New Issue
Block a user