ObjXMPP  Diff

Differences From Artifact [423e3fef12]:

To Artifact [0b78eccdeb]:


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







-
-
+
+




-
-
+
+

-
-
+
+




-
-
+
+

-
-
+
+




-
-
+
+

-
+



-
-
+
+

-
-
+
+




-
-
+
+

-
-
+
+




-
-
+
+


-
-
+
+




-
-
+
+

-
-
+
+




-
-
+
+

-
+















-
-
+
+


-
+



-
-
+
+

-
+




-
-
+
+







@class XMPPIQ;
@class XMPPMessage;
@class XMPPPresence;
@class XMPPAuthenticator;
@class SSLSocket;
@class XMPPMulticastDelegate;

/**
 * \brief A protocol that should be (partially) implemented by delegates of a
/*!
 * @brief A protocol that should be (partially) implemented by delegates of a
 *	  @ref XMPPConnection
 */
@protocol XMPPConnectionDelegate
@optional
/**
 * \brief This callback is called when the connection received an element.
/*!
 * @brief This callback is called when the connection received an element.
 *
 * \param connection The connection that received the element
 * \param element The element that was received
 * @param connection The connection that received the element
 * @param element The element that was received
 */
-  (void)connection: (XMPPConnection *)connection
  didReceiveElement: (OFXMLElement *)element;

/**
 * \brief This callback is called when the connection sent an element.
/*!
 * @brief This callback is called when the connection sent an element.
 *
 * \param connection The connection that sent the element
 * \param element The element that was sent
 * @param connection The connection that sent the element
 * @param element The element that was sent
 */
- (void)connection: (XMPPConnection *)connection
    didSendElement: (OFXMLElement *)element;

/**
 * \brief This callback is called when the connection sucessfully authenticated.
/*!
 * @brief This callback is called when the connection sucessfully authenticated.
 *
 * \param connection The connection that was authenticated
 * @param connection The connection that was authenticated
 */
- (void)connectionWasAuthenticated: (XMPPConnection *)connection;

/**
 * \brief This callback is called when the connection was bound to a JID.
/*!
 * @brief This callback is called when the connection was bound to a JID.
 *
 * \param connection The connection that was bound to a JID
 * \param JID The JID the conecction was bound to
 * @param connection The connection that was bound to a JID
 * @param JID The JID the conecction was bound to
 */
- (void)connection: (XMPPConnection *)connection
     wasBoundToJID: (XMPPJID *)JID;

/**
 * \brief This callback is called when the connection received an IQ stanza.
/*!
 * @brief This callback is called when the connection received an IQ stanza.
 *
 * \param connection The connection that received the stanza
 * \param iq The IQ stanza that was received
 * @param connection The connection that received the stanza
 * @param iq The IQ stanza that was received
 */
- (bool)connection: (XMPPConnection *)connection
      didReceiveIQ: (XMPPIQ *)iq;

/**
 * \brief This callback is called when the connection received a presence
/*!
 * @brief This callback is called when the connection received a presence
 *	  stanza.
 *
 * \param connection The connection that received the stanza
 * \param presence The presence stanza that was received
 * @param connection The connection that received the stanza
 * @param presence The presence stanza that was received
 */
-   (void)connection: (XMPPConnection *)connection
  didReceivePresence: (XMPPPresence *)presence;

/**
 * \brief This callback is called when the connection received a message stanza.
/*!
 * @brief This callback is called when the connection received a message stanza.
 *
 * \param connection The connection that received the stanza
 * \param message The message stanza that was received
 * @param connection The connection that received the stanza
 * @param message The message stanza that was received
 */
-  (void)connection: (XMPPConnection *)connection
  didReceiveMessage: (XMPPMessage *)message;

/**
 * \brief This callback is called when the connection was closed.
/*!
 * @brief This callback is called when the connection was closed.
 *
 * \param connection The connection that was closed
 * @param connection The connection that was closed
 */
- (void)connectionWasClosed: (XMPPConnection *)connection;

/*!
 * @brief This callback is called when the connection threw an exception.
 *
 * This is only called for connections on which
 * @ref XMPPConnection::handleConnection has been called.
 *
 * @param connection The connection which threw an exception
 * @param exception The exception the connection threw
 */
-  (void)connection: (XMPPConnection *)connection
  didThrowException: (OFException *)exception;

/**
 * \brief This callback is called when the connection is about to upgrade to
/*!
 * @brief This callback is called when the connection is about to upgrade to
 *	  TLS.
 *
 * \param connection The connection that will upgraded to TLS
 * @param connection The connection that will upgraded to TLS
 */
- (void)connectionWillUpgradeToTLS: (XMPPConnection *)connection;

/**
 * \brief This callback is called when the connection was upgraded to use TLS.
/*!
 * @brief This callback is called when the connection was upgraded to use TLS.
 *
 * \param connection The connection that was upgraded to TLS
 * @param connection The connection that was upgraded to TLS
 */
- (void)connectionDidUpgradeToTLS: (XMPPConnection *)connection;
@end

/**
 * \brief A class which abstracts a connection to an XMPP service.
/*!
 * @brief A class which abstracts a connection to an XMPP service.
 */
@interface XMPPConnection: OFObject <OFXMLParserDelegate,
    OFXMLElementBuilderDelegate>
{
	id _socket;
	OFXMLParser *_parser, *_oldParser;
	OFXMLElementBuilder *_elementBuilder, *_oldElementBuilder;
165
166
167
168
169
170
171

172


173


174


175

176
177


178
179
180
181


182


183


184


185


186


187


188


189


190


191


192


193


194


195


196


197


198


199


200


201


202


203


204


205


206


207
208
209
210


211
212

213
214
215
216
217


218
219

220
221
222
223
224


225
226

227
228
229
230
231


232
233
234
235
236


237
238
239
240
241


242
243
244

245
246
247

248
249
250
251
252
253


254
255
256
257
258


259
260
261
262
263
264


265
266
267
268
269


270
271
272
273
274
275
276


277
278

279
280
281
282
283
284
285
165
166
167
168
169
170
171
172

173
174
175
176
177

178
179
180
181


182
183
184
185
186
187
188
189

190
191
192
193
194

195
196
197
198
199

200
201
202
203
204

205
206
207
208
209

210
211
212
213
214

215
216
217
218
219

220
221
222
223
224

225
226
227
228
229

230
231
232
233
234

235
236
237
238
239

240
241
242
243
244

245
246
247
248
249

250
251
252
253


254
255
256

257
258
259
260


261
262
263

264
265
266
267


268
269
270

271
272
273
274


275
276
277
278
279


280
281
282
283
284


285
286
287
288

289
290
291

292
293
294
295
296


297
298
299
300
301


302
303
304
305
306
307


308
309
310
311
312


313
314
315
316
317
318
319


320
321
322

323
324
325
326
327
328
329
330







+
-
+
+

+
+
-
+
+

+
-
-
+
+




+
+
-
+
+

+
+
-
+
+

+
+
-
+
+

+
+
-
+
+

+
+
-
+
+

+
+
-
+
+

+
+
-
+
+

+
+
-
+
+

+
+
-
+
+

+
+
-
+
+

+
+
-
+
+

+
+
-
+
+

+
+
-
+
+


-
-
+
+

-
+



-
-
+
+

-
+



-
-
+
+

-
+



-
-
+
+



-
-
+
+



-
-
+
+


-
+


-
+




-
-
+
+



-
-
+
+




-
-
+
+



-
-
+
+





-
-
+
+

-
+







	bool _needsSession;
	bool _encryptionRequired, _encrypted;
	bool _supportsRosterVersioning;
	bool _supportsStreamManagement;
	unsigned int _lastID;
}

/*!
/// \brief The username to use for authentication
 * The username to use for authentication.
 */
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *username;

/*!
/// \brief The password to use for authentication
 * The password to use for authentication.
 */
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *password;

/**
 * \brief The server to use for the connection
/*!
 * The server to use for the connection.
 *
 * This is useful if the address of the server is different from the domain.
 */
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *server;

/*!
/// \brief The domain to connect to
 * The domain to connect to.
 */
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *domain;

/*!
/// \brief The resource to request for the connection
 * The resource to request for the connection.
 */
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *resource;

/*!
/// \brief The language to request for the connection
 * The language to request for the connection.
 */
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *language;

/*!
/// \brief A private key file to use for authentication
 * A private key file to use for authentication.
 */
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *privateKeyFile;

/*!
/// \brief A certificate file to use for authentication
 * A certificate file to use for authentication.
 */
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *certificateFile;

/*!
/// \brief The JID the server assigned to the connection after binding
 * The JID the server assigned to the connection after binding.
 */
@property (readonly, nonatomic) XMPPJID *JID;

/*!
/// \brief The port to connect to
 * The port to connect to.
 */
@property uint16_t port;

/*!
/// \brief An object for data storage, conforming to the XMPPStorage protocol
 * An object for data storage, conforming to the XMPPStorage protocol.
 */
@property OF_NULLABLE_PROPERTY (assign) id <XMPPStorage> dataStorage;

/*!
/// \brief The socket used for the connection
 * The socket used for the connection.
 */
@property (readonly, nonatomic) OFTCPSocket *socket;

/*!
/// \brief Whether encryption is required
 * Whether encryption is required.
 */
@property bool encryptionRequired;

/*!
/// \brief Whether the connection is encrypted
 * Whether the connection is encrypted.
 */
@property (readonly) bool encrypted;

/*!
/// \brief Whether roster versioning is supported
 * Whether roster versioning is supported.
 */
@property (readonly) bool supportsRosterVersioning;

/*!
/// \brief Whether stream management is supported
 * Whether stream management is supported.
 */
@property (readonly) bool supportsStreamManagement;

/**
 * \brief Creates a new autoreleased XMPPConnection.
/*!
 * Creates a new autoreleased XMPPConnection.
 *
 * \return A new autoreleased XMPPConnection
 * @return A new autoreleased XMPPConnection
 */
+ (instancetype)connection;

/**
 * \brief Adds the specified delegate.
/*!
 * @brief Adds the specified delegate.
 *
 * \param delegate The delegate to add
 * @param delegate The delegate to add
 */
- (void)addDelegate: (id <XMPPConnectionDelegate>)delegate;

/**
 * \brief Removes the specified delegate.
/*!
 * @brief Removes the specified delegate.
 *
 * \param delegate The delegate to remove
 * @param delegate The delegate to remove
 */
- (void)removeDelegate: (id <XMPPConnectionDelegate>)delegate;

/**
 * \brief Connects to the XMPP service.
/*!
 * @brief Connects to the XMPP service.
 */
- (void)connect;

/**
 * \brief Closes the stream to the XMPP service
/*!
 * @brief Closes the stream to the XMPP service
 */
- (void)close;

/**
 * \brief Checks the certificate presented by the server and sets the specified
/*!
 * @brief Checks the certificate presented by the server and sets the specified
 *	  pointer to the reason why the certificate is not valid
 *
 * \param reason A pointer to an OFString which is set to a reason in case the
 * @param reason A pointer to an OFString which is set to a reason in case the
 *		 certificate is not valid (otherwise, it does not touch it).
 *		 Passing NULL means the reason is not stored anywhere.
 * \return Whether the certificate is valid
 * @return Whether the certificate is valid
 */
- (bool)checkCertificateAndGetReason:
    (OFString *__autoreleasing _Nonnull *_Nullable)reason;

/**
 * \brief Adds the connection to the run loop.
/*!
 * @brief Adds the connection to the run loop.
 */
- (void)handleConnection;

/**
 * \brief Asynchronously connects to the server and adds the connection to the
/*!
 * @brief Asynchronously connects to the server and adds the connection to the
 *	  run loop.
 */
- (void)asyncConnectAndHandle;

/**
 * \brief Parses the specified buffer.
/*!
 * @brief Parses the specified buffer.
 *
 * This is useful for handling multiple connections at once.
 *
 * \param buffer The buffer to parse
 * \param length The length of the buffer. If length is 0, it is assumed that
 * @param buffer The buffer to parse
 * @param length The length of the buffer. If length is 0, it is assumed that
 *		 the connection was closed.
 */
- (void)parseBuffer: (const void *)buffer
	     length: (size_t)length;

/**
 * \brief Sends an OFXMLElement, usually an XMPPStanza.
/*!
 * @brief Sends an OFXMLElement, usually an XMPPStanza.
 *
 * \param element The element to send
 * @param element The element to send
 */
- (void)sendStanza: (OFXMLElement *)element;

/*!
 * @brief Sends an XMPPIQ, registering a callback method.
 *
 * @param IQ The IQ to send
298
299
300
301
302
303
304
305
306


307
308

309
310
311
312
313
343
344
345
346
347
348
349


350
351
352

353
354
355
356
357
358







-
-
+
+

-
+





 * @param IQ The IQ to send
 * @param block The callback block
 */
-  (void)sendIQ: (XMPPIQ *)IQ
  callbackBlock: (xmpp_callback_block_t)block;
#endif

/**
 * \brief Generates a new, unique stanza ID.
/*!
 * @brief Generates a new, unique stanza ID.
 *
 * \return A new, generated, unique stanza ID.
 * @return A new, generated, unique stanza ID.
 */
- (OFString *)generateStanzaID;
@end

OF_ASSUME_NONNULL_END