aboutsummaryrefslogtreecommitdiff
path: root/xmpp/extensions/extensions.go
blob: ea0000835ab43bf4ef3a423927156786c2246153 (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
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
	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"`
}

// 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
}

// Namespace is a namespace!
func (c IqVcardTemp) GetSet() *stanza.ResultSet {
	return c.ResultSet
}

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{})
}