28 } |
28 } |
29 var _ fmt.Stringer = &JID{} |
29 var _ fmt.Stringer = &JID{} |
30 var _ flag.Value = &JID{} |
30 var _ flag.Value = &JID{} |
31 |
31 |
32 // XMPP's <stream:stream> XML element |
32 // XMPP's <stream:stream> XML element |
|
33 // TODO Hide this. |
33 type Stream struct { |
34 type Stream struct { |
34 To string `xml:"attr"` |
35 To string `xml:"attr"` |
35 From string `xml:"attr"` |
36 From string `xml:"attr"` |
36 Id string `xml:"attr"` |
37 Id string `xml:"attr"` |
37 Lang string `xml:"attr"` |
38 Lang string `xml:"attr"` |
39 } |
40 } |
40 var _ xml.Marshaler = &Stream{} |
41 var _ xml.Marshaler = &Stream{} |
41 var _ fmt.Stringer = &Stream{} |
42 var _ fmt.Stringer = &Stream{} |
42 |
43 |
43 // <stream:error> |
44 // <stream:error> |
|
45 // TODO Can this be consolidated with Error? |
44 type StreamError struct { |
46 type StreamError struct { |
45 Any definedCondition |
47 Any definedCondition |
46 Text *errText |
48 Text *errText |
47 } |
49 } |
48 var _ xml.Marshaler = &StreamError{} |
50 var _ xml.Marshaler = &StreamError{} |
49 |
51 |
|
52 // TODO Replace this with Unrecognized. |
50 type definedCondition struct { |
53 type definedCondition struct { |
51 // Must always be in namespace nsStreams |
54 // Must always be in namespace nsStreams |
52 XMLName xml.Name |
55 XMLName xml.Name |
53 Chardata string `xml:"chardata"` |
56 Chardata string `xml:"chardata"` |
54 } |
57 } |
57 Lang string `xml:"attr"` |
60 Lang string `xml:"attr"` |
58 Text string `xml:"chardata"` |
61 Text string `xml:"chardata"` |
59 } |
62 } |
60 var _ xml.Marshaler = &errText{} |
63 var _ xml.Marshaler = &errText{} |
61 |
64 |
|
65 // TODO Store this in Client and make it available to the app. |
62 type Features struct { |
66 type Features struct { |
63 Starttls *starttls |
67 Starttls *starttls |
64 Mechanisms mechs |
68 Mechanisms mechs |
65 Bind *Unrecognized |
69 Bind *Unrecognized |
66 } |
70 } |
67 |
71 |
68 type starttls struct { |
72 type starttls struct { |
69 XMLName xml.Name |
73 XMLName xml.Name |
70 required *string |
74 Required *string |
71 } |
75 } |
72 |
76 |
73 type mechs struct { |
77 type mechs struct { |
74 Mechanism []string |
78 Mechanism []string |
75 } |
79 } |
79 Chardata string `xml:"chardata"` |
83 Chardata string `xml:"chardata"` |
80 Mechanism string `xml:"attr"` |
84 Mechanism string `xml:"attr"` |
81 Any *Unrecognized |
85 Any *Unrecognized |
82 } |
86 } |
83 |
87 |
|
88 // One of the three core XMPP stanza types: iq, message, presence. See |
|
89 // RFC3920, section 9. |
84 type Stanza interface { |
90 type Stanza interface { |
|
91 // Returns "iq", "message", or "presence". |
85 XName() string |
92 XName() string |
|
93 // The to attribute. |
86 XTo() string |
94 XTo() string |
|
95 // The from attribute. |
87 XFrom() string |
96 XFrom() string |
|
97 // The id attribute. |
88 XId() string |
98 XId() string |
|
99 // The type attribute. |
89 XType() string |
100 XType() string |
|
101 // The xml:lang attribute. |
90 XLang() string |
102 XLang() string |
|
103 // A nested error element, if any. |
91 XError() *Error |
104 XError() *Error |
|
105 // A (non-error) nested element, if any. |
92 XChild() *Unrecognized |
106 XChild() *Unrecognized |
93 } |
107 } |
94 |
108 |
|
109 // message stanza |
95 type Message struct { |
110 type Message struct { |
96 To string `xml:"attr"` |
111 To string `xml:"attr"` |
97 From string `xml:"attr"` |
112 From string `xml:"attr"` |
98 Id string `xml:"attr"` |
113 Id string `xml:"attr"` |
99 Type string `xml:"attr"` |
114 Type string `xml:"attr"` |
102 Any *Unrecognized |
117 Any *Unrecognized |
103 } |
118 } |
104 var _ xml.Marshaler = &Message{} |
119 var _ xml.Marshaler = &Message{} |
105 var _ Stanza = &Message{} |
120 var _ Stanza = &Message{} |
106 |
121 |
|
122 // presence stanza |
107 type Presence struct { |
123 type Presence struct { |
108 To string `xml:"attr"` |
124 To string `xml:"attr"` |
109 From string `xml:"attr"` |
125 From string `xml:"attr"` |
110 Id string `xml:"attr"` |
126 Id string `xml:"attr"` |
111 Type string `xml:"attr"` |
127 Type string `xml:"attr"` |
114 Any *Unrecognized |
130 Any *Unrecognized |
115 } |
131 } |
116 var _ xml.Marshaler = &Presence{} |
132 var _ xml.Marshaler = &Presence{} |
117 var _ Stanza = &Presence{} |
133 var _ Stanza = &Presence{} |
118 |
134 |
|
135 // iq stanza |
119 type Iq struct { |
136 type Iq struct { |
120 To string `xml:"attr"` |
137 To string `xml:"attr"` |
121 From string `xml:"attr"` |
138 From string `xml:"attr"` |
122 Id string `xml:"attr"` |
139 Id string `xml:"attr"` |
123 Type string `xml:"attr"` |
140 Type string `xml:"attr"` |
126 Any *Unrecognized |
143 Any *Unrecognized |
127 } |
144 } |
128 var _ xml.Marshaler = &Iq{} |
145 var _ xml.Marshaler = &Iq{} |
129 var _ Stanza = &Iq{} |
146 var _ Stanza = &Iq{} |
130 |
147 |
|
148 // Describes an XMPP stanza error. See RFC 3920, Section 9.3. |
131 type Error struct { |
149 type Error struct { |
|
150 // The error type attribute. |
132 Type string `xml:"attr"` |
151 Type string `xml:"attr"` |
|
152 // Any nested element, if present. |
133 Any *Unrecognized |
153 Any *Unrecognized |
134 } |
154 } |
135 var _ xml.Marshaler = &Error{} |
155 var _ xml.Marshaler = &Error{} |
136 |
156 |
|
157 // Holds an XML element not described by the more specific types. |
137 // TODO Rename this to something like Generic. |
158 // TODO Rename this to something like Generic. |
138 type Unrecognized struct { |
159 type Unrecognized struct { |
139 XMLName xml.Name |
160 XMLName xml.Name |
140 Any *Unrecognized |
161 Any *Unrecognized |
141 Chardata string `xml:"chardata"` |
162 Chardata string `xml:"chardata"` |