summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/matterbridge/go-xmpp/xmpp_disco.go
blob: 0bca664a948cfc7ce83e32a220b59a80ecd9a4f7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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
}