aboutsummaryrefslogtreecommitdiff
path: root/xmpp/extensions/extensions.go
blob: ce276562d9f37457a2e710532981ff58d51f9f61 (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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package extensions

import (
	"encoding/xml"

	"gosrc.io/xmpp/stanza"
)

// PresenceNickExtension is from XEP-0172
type PresenceNickExtension struct {
	XMLName xml.Name `xml:"http://jabber.org/protocol/nick nick"`
	Text    string   `xml:",chardata"`
}

// PresenceXVCardUpdateExtension is from XEP-0153
type PresenceXVCardUpdateExtension struct {
	XMLName xml.Name `xml:"vcard-temp:x:update x"`
	Photo   PresenceXVCardUpdatePhoto
}

// PresenceXVCardUpdatePhoto is from XEP-0153
type PresenceXVCardUpdatePhoto struct {
	XMLName xml.Name `xml:"photo"`
	Text    string   `xml:",chardata"`
}

// IqVcardTemp is from XEP-0054
type IqVcardTemp struct {
	XMLName   xml.Name `xml:"vcard-temp vCard"`
	Fn        IqVcardFn
	Nickname  IqVcardNickname
	N         IqVcardN
	Tel       IqVcardTel
	Photo     IqVcardPhoto
	Desc      IqVcardDesc
	ResultSet *stanza.ResultSet `xml:"set,omitempty"`
}

// IqVcardFn is vCard/FN
type IqVcardFn struct {
	XMLName xml.Name `xml:"FN"`
	Text    string   `xml:",chardata"`
}

// IqVcardNickname is vCard/NICKNAME
type IqVcardNickname struct {
	XMLName xml.Name `xml:"NICKNAME"`
	Text    string   `xml:",chardata"`
}

// IqVcardN is vCard/N
type IqVcardN struct {
	XMLName xml.Name `xml:"N"`
	Family  IqVcardNFamily
	Given   IqVcardNGiven
	Middle  IqVcardNMiddle
}

// IqVcardNFamily is vCard/N/FAMILY
type IqVcardNFamily struct {
	XMLName xml.Name `xml:"FAMILY"`
	Text    string   `xml:",chardata"`
}

// IqVcardNGiven is vCard/N/GIVEN
type IqVcardNGiven struct {
	XMLName xml.Name `xml:"GIVEN"`
	Text    string   `xml:",chardata"`
}

// IqVcardNMiddle is vCard/N/MIDDLE
type IqVcardNMiddle struct {
	XMLName xml.Name `xml:"MIDDLE"`
	Text    string   `xml:",chardata"`
}

// IqVcardTel is vCard/TEL
type IqVcardTel struct {
	XMLName xml.Name `xml:"TEL"`
	Number  IqVcardTelNumber
}

// IqVcardTelNumber is vCard/TEL/NUMBER
type IqVcardTelNumber struct {
	XMLName xml.Name `xml:"NUMBER"`
	Text    string   `xml:",chardata"`
}

// IqVcardPhoto is vCard/PHOTO
type IqVcardPhoto struct {
	XMLName xml.Name `xml:"PHOTO"`
	Type    IqVcardPhotoType
	Binval  IqVcardPhotoBinval
}

// IqVcardPhotoType is vCard/PHOTO/TYPE
type IqVcardPhotoType struct {
	XMLName xml.Name `xml:"TYPE"`
	Text    string   `xml:",chardata"`
}

// IqVcardPhotoBinval is vCard/PHOTO/BINVAL
type IqVcardPhotoBinval struct {
	XMLName xml.Name `xml:"BINVAL"`
	Text    string   `xml:",chardata"`
}

// IqVcardDesc is vCard/DESC
type IqVcardDesc struct {
	XMLName xml.Name `xml:"DESC"`
	Text    string   `xml:",chardata"`
}

// Reply is from XEP-0461
type Reply struct {
	XMLName xml.Name `xml:"urn:xmpp:reply:0 reply"`
	To      string   `xml:"to,attr"`
	Id      string   `xml:"id,attr"`
}

// Namespace is a namespace!
func (c PresenceNickExtension) Namespace() string {
	return c.XMLName.Space
}

// Namespace is a namespace!
func (c PresenceXVCardUpdateExtension) Namespace() string {
	return c.XMLName.Space
}

// Namespace is a namespace!
func (c IqVcardTemp) Namespace() string {
	return c.XMLName.Space
}

// GetSet getsets!
func (c IqVcardTemp) GetSet() *stanza.ResultSet {
	return c.ResultSet
}

// Namespace is a namespace!
func (c Reply) Namespace() string {
	return c.XMLName.Space
}

func init() {
	// presence nick
	stanza.TypeRegistry.MapExtension(stanza.PKTPresence, xml.Name{
		"http://jabber.org/protocol/nick",
		"nick",
	}, PresenceNickExtension{})

	// presence vcard update
	stanza.TypeRegistry.MapExtension(stanza.PKTPresence, xml.Name{
		"vcard-temp:x:update",
		"x",
	}, PresenceXVCardUpdateExtension{})

	// iq vcard request
	stanza.TypeRegistry.MapExtension(stanza.PKTIQ, xml.Name{
		"vcard-temp",
		"vCard",
	}, IqVcardTemp{})

	// reply
	stanza.TypeRegistry.MapExtension(stanza.PKTMessage, xml.Name{
		"urn:xmpp:reply:0",
		"reply",
	}, Reply{})
}