Modified src/XMPPAuthenticator.h
from [32835f9423]
to [d2168a1fd5].
︙ | | |
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
|
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
|
+
+
-
+
-
+
-
+
-
-
+
+
-
-
-
+
+
+
-
+
+
+
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/ObjFW.h>
OF_ASSUME_NONNULL_BEGIN
/**
* \brief A base class for classes implementing authentication mechanisms
*/
@interface XMPPAuthenticator: OFObject
{
OFString *_authzid, *_authcid, *_password;
}
/// \brief The authzid to get authorization for
@property (copy) OFString *authzid;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *authzid;
/// \brief The authcid to authenticate with
@property (copy) OFString *authcid;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *authcid;
/// \brief The password to authenticate with
@property (copy) OFString *password;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *password;
/**
* \brief Initializes an already allocated XMPPAuthenticator with an authcid
* and password.
*
* \param authcid The authcid to authenticate with
* \param password The password to authenticate with
* \return A initialized XMPPAuthenticator
*/
- initWithAuthcid: (OFString*)authcid
password: (OFString*)password;
- initWithAuthcid: (nullable OFString *)authcid
password: (nullable OFString *)password;
/**
* \brief Initializes an already allocated XMPPSCRAMAuthenticator with an
* authzid, authcid and password.
*
* \param authzid The authzid to get authorization for
* \param authcid The authcid to authenticate with
* \param password The password to authenticate with
* \return A initialized XMPPAuthenticator
*/
- initWithAuthzid: (OFString*)authzid
authcid: (OFString*)authcid
password: (OFString*)password;
- initWithAuthzid: (nullable OFString *)authzid
authcid: (nullable OFString *)authcid
password: (nullable OFString *)password OF_DESIGNATED_INITIALIZER;
/**
* \brief Returns an OFDataArray containing the initial authentication message.
*
* \return An OFDataAray containing the initial authentication message
*/
- (OFDataArray*)initialMessage;
/**
* \brief Continue authentication with the specified data.
*
* \param data The continuation data send by the server
* \return The appropriate response if the data was a challenge, nil otherwise
*/
- (OFDataArray*)continueWithData: (OFDataArray*)data;
- (nullable OFDataArray *)continueWithData: (OFDataArray *)data;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPAuthenticator.m
from [ff883875bb]
to [8f69cece0e].
whitespace changes only
Modified src/XMPPCallback.h
from [48a5d16844]
to [ee73746306].
︙ | | |
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
+
+
-
+
+
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/ObjFW.h>
OF_ASSUME_NONNULL_BEGIN
@class XMPPConnection;
@class XMPPIQ;
#ifdef OF_HAVE_BLOCKS
typedef void (^xmpp_callback_block_t)(XMPPConnection*, XMPPIQ*);
typedef void (^xmpp_callback_block_t)(XMPPConnection *_Nonnull,
XMPPIQ *_Nonnull);
#endif
@interface XMPPCallback: OFObject
{
id _target;
SEL _selector;
#ifdef OF_HAVE_BLOCKS
|
︙ | | |
47
48
49
50
51
52
53
|
50
51
52
53
54
55
56
57
58
|
+
+
|
selector: (SEL)selector;
- initWithTarget: (id)target
selector: (SEL)selector;
- (void)runWithIQ: (XMPPIQ*)iq
connection: (XMPPConnection*)connection;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPCallback.m
from [e144c7f667]
to [7b928d9476].
︙ | | |
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
+
-
+
|
#import "XMPPCallback.h"
@implementation XMPPCallback
#ifdef OF_HAVE_BLOCKS
+ (instancetype)callbackWithBlock: (xmpp_callback_block_t)block
{
return [[(XMPPCallback *)[self alloc]
return [[(XMPPCallback*)[self alloc] initWithBlock: block] autorelease];
initWithBlock: block] autorelease];
}
- initWithBlock: (xmpp_callback_block_t)block
{
self = [super init];
@try {
|
︙ | | |
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
-
+
-
+
-
+
|
#ifdef OF_HAVE_BLOCKS
[_block release];
#endif
[super dealloc];
}
- (void)runWithIQ: (XMPPIQ*)iq
- (void)runWithIQ: (XMPPIQ *)IQ
connection: (XMPPConnection*)connection
{
#ifdef OF_HAVE_BLOCKS
if (_block != NULL)
_block(connection, iq);
_block(connection, IQ);
else
#endif
[_target performSelector: _selector
withObject: connection
withObject: iq];
withObject: IQ];
}
@end
|
Modified src/XMPPConnection.h
from [d8b74359c0]
to [423e3fef12].
︙ | | |
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
|
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
|
+
+
-
-
+
+
-
-
-
|
*/
#import <ObjFW/ObjFW.h>
#import "XMPPCallback.h"
#import "XMPPStorage.h"
OF_ASSUME_NONNULL_BEGIN
@class XMPPConnection;
@class XMPPJID;
@class XMPPIQ;
@class XMPPMessage;
@class XMPPPresence;
@class XMPPAuthenticator;
@class SSLSocket;
@class XMPPMulticastDelegate;
/**
* \brief A protocol that should be (partially) implemented
* by delegates of a XMPPConnection
* \brief A protocol that should be (partially) implemented by delegates of a
* @ref XMPPConnection
*/
@protocol XMPPConnectionDelegate
#ifndef XMPP_CONNECTION_M
<OFObject>
#endif
@optional
/**
* \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
*/
|
︙ | | |
156
157
158
159
160
161
162
163
164
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
|
155
156
157
158
159
160
161
162
163
164
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
|
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
|
const char *_privateKeyPassphrase;
OFString *_domain, *_domainToASCII;
XMPPJID *_JID;
uint16_t _port;
id <XMPPStorage> _dataStorage;
OFString *_language;
XMPPMulticastDelegate *_delegates;
OFMutableDictionary *_callbacks;
OFMutableDictionary OF_GENERIC(OFString *, XMPPCallback *) *_callbacks;
XMPPAuthenticator *_authModule;
bool _streamOpen;
bool _needsSession;
bool _encryptionRequired, _encrypted;
bool _supportsRosterVersioning;
bool _supportsStreamManagement;
unsigned int _lastID;
}
/// \brief The username to use for authentication
@property (copy) OFString *username;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *username;
/// \brief The password to use for authentication
@property (copy) OFString *password;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *password;
/**
* \brief The server to use for the connection
*
* This is useful if the address of the server is different from the domain.
*/
@property (copy) OFString *server;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *server;
/// \brief The domain to connect to
@property (copy) OFString *domain;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *domain;
/// \brief The resource to request for the connection
@property (copy) OFString *resource;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *resource;
/// \brief The language to request for the connection
@property (copy) OFString *language;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *language;
/// \brief A private key file to use for authentication
@property (copy) OFString *privateKeyFile;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *privateKeyFile;
/// \brief A certificate file to use for authentication
@property (copy) OFString *certificateFile;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *certificateFile;
/// \brief The JID the server assigned to the connection after binding
@property (copy, readonly) XMPPJID *JID;
@property (readonly, nonatomic) XMPPJID *JID;
/// \brief The port to connect to
@property uint16_t port;
/// \brief An object for data storage, conforming to the XMPPStorage protocol
@property (assign) id <XMPPStorage> dataStorage;
@property OF_NULLABLE_PROPERTY (assign) id <XMPPStorage> dataStorage;
/// \brief The socket used for the connection
@property (readonly, retain) OFTCPSocket *socket;
@property (readonly, nonatomic) OFTCPSocket *socket;
/// \brief Whether encryption is required
@property bool encryptionRequired;
/// \brief Whether the connection is encrypted
@property (readonly) bool encrypted;
/// \brief Whether roster versioning is supported
@property (readonly) bool supportsRosterVersioning;
/// \brief Whether stream management is supported
|
︙ | | |
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
|
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
|
-
+
+
|
* 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
* 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
*/
- (bool)checkCertificateAndGetReason: (OFString**)reason;
- (bool)checkCertificateAndGetReason:
(OFString *__autoreleasing _Nonnull *_Nullable)reason;
/**
* \brief Adds the connection to the run loop.
*/
- (void)handleConnection;
/**
|
︙ | | |
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
|
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
|
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
|
* \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 Returns the socket used by the XMPPConnection.
*
* \return The socket used by the XMPPConnection
*/
- (OFTCPSocket*)socket;
/**
* \brief Returns whether encryption is encrypted.
*
* \return Whether encryption is encrypted
*/
- (bool)encryptionRequired;
/**
* \brief Sets whether encryption is required.
*
* \param required Whether encryption is required
*/
- (void)setEncryptionRequired: (bool)required;
/**
* \brief Returns whether the connection is encrypted.
*
* \return Whether the connection is encrypted
*/
- (bool)encrypted;
/**
* \brief Sends an OFXMLElement, usually an XMPPStanza.
*
* \param element The element to send
*/
- (void)sendStanza: (OFXMLElement*)element;
/*!
* @brief Sends an XMPPIQ, registering a callback method.
*
* @param IQ The IQ to send
* @param target The object that contains the callback method
* @param selector The selector of the callback method,
* must take exactly one parameter of type XMPPIQ*
* must take exactly one parameter of type `XMPPIQ *`
*/
- (void)sendIQ: (XMPPIQ*)IQ
callbackTarget: (id)target
selector: (SEL)selector;
#ifdef OF_HAVE_BLOCKS
/*!
|
︙ | | |
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
|
304
305
306
307
308
309
310
311
312
313
|
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
|
/**
* \brief Generates a new, unique stanza ID.
*
* \return A new, generated, unique stanza ID.
*/
- (OFString*)generateStanzaID;
- (void)setUsername: (OFString*)username;
- (OFString*)username;
- (void)setPassword: (OFString*)password;
- (OFString*)password;
- (void)setServer: (OFString*)server;
- (OFString*)server;
- (void)setDomain: (OFString*)domain;
- (OFString*)domain;
- (void)setResource: (OFString*)resource;
- (OFString*)resource;
- (XMPPJID*)JID;
- (void)setPort: (uint16_t)port;
- (uint16_t)port;
- (void)setDataStorage: (id <XMPPStorage>)dataStorage;
- (id <XMPPStorage>)dataStorage;
- (void)setLanguage: (OFString*)language;
- (OFString*)language;
- (bool)supportsRosterVersioning;
- (bool)supportsStreamManagement;
- (void)XMPP_startStream;
- (void)XMPP_handleStream: (OFXMLElement*)element;
- (void)XMPP_handleTLS: (OFXMLElement*)element;
- (void)XMPP_handleSASL: (OFXMLElement*)element;
- (void)XMPP_handleStanza: (OFXMLElement*)element;
- (void)XMPP_sendAuth: (OFString*)authName;
- (void)XMPP_sendResourceBind;
- (void)XMPP_sendStreamError: (OFString*)condition
text: (OFString*)text;
- (void)XMPP_handleIQ: (XMPPIQ*)iq;
- (void)XMPP_handleMessage: (XMPPMessage*)message;
- (void)XMPP_handlePresence: (XMPPPresence*)presence;
- (void)XMPP_handleFeatures: (OFXMLElement*)element;
- (void)XMPP_handleResourceBindForConnection: (XMPPConnection*)connection
IQ: (XMPPIQ*)iq;
- (void)XMPP_sendSession;
- (void)XMPP_handleSessionForConnection: (XMPPConnection*)connection
IQ: (XMPPIQ*)iq;
- (OFString*)XMPP_IDNAToASCII: (OFString*)domain;
- (XMPPMulticastDelegate*)XMPP_delegates;
@end
@interface OFObject (XMPPConnectionDelegate) <XMPPConnectionDelegate>
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPConnection.m
from [26c4d1cce6]
to [e5df95b15f].
︙ | | |
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
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
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
#import "XMPPExceptions.h"
#import "XMPPXMLElementBuilder.h"
#import "namespaces.h"
#import <ObjFW/macros.h>
#define BUFFER_LENGTH 512
OF_ASSUME_NONNULL_BEGIN
@interface XMPPConnection ()
- (void)XMPP_startStream;
- (void)XMPP_handleStream: (OFXMLElement *)element;
- (void)XMPP_handleTLS: (OFXMLElement *)element;
- (void)XMPP_handleSASL: (OFXMLElement *)element;
- (void)XMPP_handleStanza: (OFXMLElement *)element;
- (void)XMPP_sendAuth: (OFString *)authName;
- (void)XMPP_sendResourceBind;
- (void)XMPP_sendStreamError: (OFString *)condition
text: (nullable OFString *)text;
- (void)XMPP_handleIQ: (XMPPIQ *)IQ;
- (void)XMPP_handleMessage: (XMPPMessage *)message;
- (void)XMPP_handlePresence: (XMPPPresence *)presence;
- (void)XMPP_handleFeatures: (OFXMLElement *)element;
- (void)XMPP_handleResourceBindForConnection: (XMPPConnection *)connection
IQ: (XMPPIQ *)IQ;
- (void)XMPP_sendSession;
- (void)XMPP_handleSessionForConnection: (XMPPConnection *)connection
IQ: (XMPPIQ *)IQ;
- (OFString *)XMPP_IDNAToASCII: (OFString *)domain;
- (XMPPMulticastDelegate *)XMPP_delegates;
@end
@interface XMPPConnection_ConnectThread: OFThread
{
OFThread *_sourceThread;
XMPPConnection *_connection;
}
- initWithSourceThread: (OFThread*)sourceThread
connection: (XMPPConnection*)connection;
@end
OF_ASSUME_NONNULL_END
@implementation XMPPConnection_ConnectThread
- initWithSourceThread: (OFThread*)sourceThread
connection: (XMPPConnection*)connection
{
self = [super init];
|
︙ | | |
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
+
+
-
+
|
[pool release];
return nil;
}
@end
@implementation XMPPConnection
@synthesize username = _username, resource = _resource, server = _server;
@synthesize domain = _domain, password = _password, language = _language;
@synthesize language = _language, privateKeyFile = _privateKeyFile;
@synthesize privateKeyFile = _privateKeyFile;
@synthesize certificateFile = _certificateFile, socket = _socket;
@synthesize encryptionRequired = _encryptionRequired, encrypted = _encrypted;
@synthesize supportsRosterVersioning = _supportsRosterVersioning;
@synthesize supportsStreamManagement = _supportsStreamManagement;
+ (instancetype)connection
{
|
︙ | | |
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
|
216
217
218
219
220
221
222
223
224
225
226
227
228
229
|
-
-
-
-
-
|
}
} else
_username = nil;
[old release];
}
- (OFString*)username
{
return [[_username copy] autorelease];
}
- (void)setResource: (OFString*)resource
{
OFString *old = _resource;
if (resource != nil) {
char *res;
Stringprep_rc rc;
|
︙ | | |
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
|
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
|
-
-
-
-
-
-
-
-
-
-
|
}
} else
_resource = nil;
[old release];
}
- (OFString*)resource
{
return [[_resource copy] autorelease];
}
- (void)setServer: (OFString*)server
{
OFString *old = _server;
if (server != nil)
_server = [self XMPP_IDNAToASCII: server];
else
_server = nil;
[old release];
}
- (OFString*)server
{
return [[_server copy] autorelease];
}
- (void)setDomain: (OFString*)domain
{
OFString *oldDomain = _domain;
OFString *oldDomainToASCII = _domainToASCII;
if (domain != nil) {
char *srv;
|
︙ | | |
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
|
286
287
288
289
290
291
292
293
294
295
296
297
298
299
|
-
-
-
-
-
|
_domainToASCII = nil;
}
[oldDomain release];
[oldDomainToASCII release];
}
- (OFString*)domain
{
return [[_domain copy] autorelease];
}
- (void)setPassword: (OFString*)password
{
OFString *old = _password;
if (password != nil) {
char *pass;
Stringprep_rc rc;
|
︙ | | |
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
|
312
313
314
315
316
317
318
319
320
321
322
323
324
325
|
-
-
-
-
-
|
}
} else
_password = nil;
[old release];
}
- (OFString*)password
{
return [[_password copy] autorelease];
}
- (void)connect
{
OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
XMPPSRVEntry *candidate = nil;
XMPPSRVLookup *SRVLookup = nil;
OFEnumerator *enumerator;
|
︙ | | |
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
|
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
|
-
+
-
+
-
-
-
-
+
-
+
-
-
+
|
#endif
- (OFString*)generateStanzaID
{
return [OFString stringWithFormat: @"objxmpp_%u", _lastID++];
}
- (void)parser: (OFXMLParser*)p
- (void)parser: (OFXMLParser *)parser
didStartElement: (OFString*)name
prefix: (OFString*)prefix
namespace: (OFString*)ns
namespace: (OFString *)NS
attributes: (OFArray*)attributes
{
OFEnumerator *enumerator;
OFXMLAttribute *attribute;
if (![name isEqual: @"stream"]) {
// No dedicated stream error for this, may not even be XMPP
[self close];
[_socket close];
return;
}
if (![prefix isEqual: @"stream"]) {
[self XMPP_sendStreamError: @"bad-namespace-prefix"
text: nil];
return;
}
if (![ns isEqual: XMPP_NS_STREAM]) {
if (![NS isEqual: XMPP_NS_STREAM]) {
[self XMPP_sendStreamError: @"invalid-namespace"
text: nil];
return;
}
enumerator = [attributes objectEnumerator];
for (OFXMLAttribute *attribute in attributes) {
while ((attribute = [enumerator nextObject]) != nil) {
if ([[attribute name] isEqual: @"from"] &&
![[attribute stringValue] isEqual: _domain]) {
[self XMPP_sendStreamError: @"invalid-from"
text: nil];
return;
}
if ([[attribute name] isEqual: @"version"] &&
![[attribute stringValue] isEqual: @"1.0"]) {
[self XMPP_sendStreamError: @"unsupported-version"
text: nil];
return;
}
}
[_parser setDelegate: _elementBuilder];
[parser setDelegate: _elementBuilder];
}
- (void)elementBuilder: (OFXMLElementBuilder*)builder
didBuildElement: (OFXMLElement*)element
{
/* Ignore whitespace elements */
if ([element name] == nil)
|
︙ | | |
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
|
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
|
-
+
|
OFEnumerator *enumerator;
OFXMLElement *mech;
enumerator = [[mechs children] objectEnumerator];
while ((mech = [enumerator nextObject]) != nil)
[mechanisms addObject: [mech stringValue]];
if (_privateKeyFile && _certificateFile &&
if (_privateKeyFile != nil && _certificateFile != nil &&
[mechanisms containsObject: @"EXTERNAL"]) {
_authModule = [[XMPPEXTERNALAuth alloc] init];
[self XMPP_sendAuth: @"EXTERNAL"];
return;
}
if ([mechanisms containsObject: @"SCRAM-SHA-1-PLUS"]) {
|
︙ | | |
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
|
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
|
-
-
+
+
|
[self XMPP_sendAuth: @"PLAIN"];
return;
}
assert(0);
}
if (session != nil && ![session elementForName: @"optional"
namespace: XMPP_NS_SESSION])
if (session != nil && [session elementForName: @"optional"
namespace: XMPP_NS_SESSION] == nil)
_needsSession = true;
if (bind != nil) {
[self XMPP_sendResourceBind];
return;
}
|
︙ | | |
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
|
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
|
-
+
-
+
-
-
+
-
+
-
+
-
+
-
-
-
+
+
-
+
+
-
+
-
+
-
-
+
+
|
stringValue: text]];
[_parser setDelegate: nil];
[self sendStanza: error];
[self close];
}
- (void)XMPP_handleResourceBindForConnection: (XMPPConnection*)connection
IQ: (XMPPIQ*)iq
IQ: (XMPPIQ *)IQ
{
OFXMLElement *bindElement;
OFXMLElement *bindElement, *JIDElement;
OFXMLElement *jidElement;
assert([[iq type] isEqual: @"result"]);
assert([[IQ type] isEqual: @"result"]);
bindElement = [iq elementForName: @"bind"
bindElement = [IQ elementForName: @"bind"
namespace: XMPP_NS_BIND];
assert(bindElement != nil);
jidElement = [bindElement elementForName: @"jid"
JIDElement = [bindElement elementForName: @"jid"
namespace: XMPP_NS_BIND];
_JID = [[XMPPJID alloc] initWithString: [jidElement stringValue]];
_JID = [[XMPPJID alloc] initWithString: [JIDElement stringValue]];
if (_needsSession) {
[self XMPP_sendSession];
return;
}
[_delegates broadcastSelector: @selector(connection:wasBoundToJID:)
withObject: self
withObject: _JID];
}
- (void)XMPP_sendSession
{
XMPPIQ *iq;
iq = [XMPPIQ IQWithType: @"set"
XMPPIQ *IQ = [XMPPIQ IQWithType: @"set"
ID: [self generateStanzaID]];
[iq addChild: [OFXMLElement elementWithName: @"session"
[IQ addChild: [OFXMLElement elementWithName: @"session"
namespace: XMPP_NS_SESSION]];
[self sendIQ: iq
[self sendIQ: IQ
callbackTarget: self
selector: @selector(XMPP_handleSessionForConnection:IQ:)];
}
- (void)XMPP_handleSessionForConnection: (XMPPConnection*)connection
IQ: (XMPPIQ*)iq
IQ: (XMPPIQ *)IQ
{
if (![[iq type] isEqual: @"result"])
assert(0);
if (![[IQ type] isEqual: @"result"])
OF_ENSURE(0);
[_delegates broadcastSelector: @selector(connection:wasBoundToJID:)
withObject: self
withObject: _JID];
}
- (OFString*)XMPP_IDNAToASCII: (OFString*)domain
|
︙ | | |
Added src/XMPPContact+Private.h version [19b0cc5ea8].
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
+
+
+
+
+
+
+
+
+
+
+
+
+
|
#import "XMPPContact.h"
OF_ASSUME_NONNULL_BEGIN
@interface XMPPContact ()
- (void)XMPP_setRosterItem: (XMPPRosterItem *)rosterItem;
- (void)XMPP_setPresence: (XMPPPresence *)presence
resource: (OFString *)resource;
- (void)XMPP_removePresenceForResource: (OFString *)resource;
- (void)XMPP_setLockedOnJID: (nullable XMPPJID *)JID;
@end
OF_ASSUME_NONNULL_END
|
| | | | | | | | | | | |
Modified src/XMPPContact.h
from [160c8854c7]
to [3375b65268].
︙ | | |
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
|
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
|
+
+
-
+
-
+
+
-
-
+
-
-
-
-
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/ObjFW.h>
OF_ASSUME_NONNULL_BEGIN
@class XMPPConnection;
@class XMPPJID;
@class XMPPRosterItem;
@class XMPPMessage;
@class XMPPPresence;
/**
* \brief A class describing a contact tracked by a XMPPContactManager
*/
@interface XMPPContact: OFObject
{
XMPPRosterItem *_rosterItem;
OFMutableDictionary *_presences;
XMPPJID *_lockedOnJID;
}
/// \brief The XMPPRosterItem corresponding to this contact
@property (readonly) XMPPRosterItem *rosterItem;
@property (readonly, nonatomic) XMPPRosterItem *rosterItem;
/// \brief The XMPPPresences of this contact with the resources as keys
@property (readonly) OFDictionary *presences;
@property (readonly, nonatomic) OFDictionary *presences;
/**
* \brief Sends a message to the contact honoring resource locking
*
* \param message The message to send
* \param connection The connection to use for sending the message
*/
- (void)sendMessage: (XMPPMessage*)message
connection: (XMPPConnection*)connection;
@end
- (void)XMPP_setRosterItem: (XMPPRosterItem*)rosterItem;
- (void)XMPP_setPresence: (XMPPPresence*)presence
OF_ASSUME_NONNULL_END
resource: (OFString*)resource;
- (void)XMPP_removePresenceForResource: (OFString*)resource;
- (void)XMPP_setLockedOnJID: (XMPPJID*)JID;
@end
|
Modified src/XMPPContact.m
from [c409a8ce2b]
to [f961d31c3a].
︙ | | |
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
+
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import "XMPPContact.h"
#import "XMPPContact+Private.h"
#import "XMPPMessage.h"
#import "XMPPConnection.h"
@implementation XMPPContact
@synthesize rosterItem = _rosterItem;
@synthesize presences = _presences;
|
︙ | | |
Modified src/XMPPContactManager.h
from [13b68822fb]
to [ffd20ba38a].
︙ | | |
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
+
+
|
*/
#import <ObjFW/ObjFW.h>
#import "XMPPConnection.h"
#import "XMPPRoster.h"
OF_ASSUME_NONNULL_BEGIN
@class XMPPContact;
@class XMPPContactManager;
@class XMPPMulticastDelegate;
@class XMPPPresence;
/**
* \brief A protocol that should be (partially) implemented by delegates
|
︙ | | |
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
|
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
|
-
+
+
-
+
+
+
|
OFMutableDictionary *_contacts;
XMPPConnection *_connection;
XMPPRoster *_roster;
XMPPMulticastDelegate *_delegates;
}
/// \brief The tracked contacts, with their bare JID as key
@property (readonly) OFDictionary *contacts;
@property (readonly, nonatomic)
OFDictionary OF_GENERIC(OFString *, XMPPContact *) *contacts;
/*!
* @brief Initializes an already allocated XMPPContactManager.
*
* @param connection The connection to be used to track contacts
* @param roster The roster used by the contact manager
* @return An initialized XMPPContactManager
*/
- initWithConnection: (XMPPConnection*)connection
roster: (XMPPRoster*)roster;
roster: (XMPPRoster *)roster OF_DESIGNATED_INITIALIZER;
- (void)sendSubscribedToJID: (XMPPJID*)subscriber;
- (void)sendUnsubscribedToJID: (XMPPJID*)subscriber;
/**
* \brief Adds the specified delegate.
*
* \param delegate The delegate to add
*/
- (void)addDelegate: (id <XMPPContactManagerDelegate>)delegate;
/**
* \brief Removes the specified delegate.
*
* \param delegate The delegate to remove
*/
- (void)removeDelegate: (id <XMPPContactManagerDelegate>)delegate;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPContactManager.m
from [3f134700d1]
to [e40b256e89].
︙ | | |
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
+
-
+
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import "XMPPContactManager.h"
#import "XMPPContact.h"
#import "XMPPContactManager.h"
#import "XMPPContact+Private.h"
#import "XMPPJID.h"
#import "XMPPMulticastDelegate.h"
#import "XMPPPresence.h"
#import "XMPPRosterItem.h"
@implementation XMPPContactManager
@synthesize contacts = _contacts;
|
︙ | | |
Modified src/XMPPDiscoEntity.h
from [675c041e84]
to [1a213e145c].
︙ | | |
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
+
+
|
*/
#import <ObjFW/ObjFW.h>
#import "XMPPConnection.h"
#import "XMPPDiscoNode.h"
OF_ASSUME_NONNULL_BEGIN
@class XMPPJID;
/**
* \brief A class representing an entity responding to Service Discovery
* queries
*/
@interface XMPPDiscoEntity: XMPPDiscoNode <XMPPConnectionDelegate>
|
︙ | | |
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
|
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
|
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
|
@property (readonly) OFDictionary *discoNodes;
/**
* The node advertised for the entity's capabilites.
*/
@property (readonly) OFString *capsNode;
+ (instancetype)discoNodeWithJID: (XMPPJID *)JID
node: (nullable OFString *)node OF_UNAVAILABLE;
+ (instancetype)discoNodeWithJID: (XMPPJID *)JID
node: (nullable OFString *)node
name: (nullable OFString *)name OF_UNAVAILABLE;
/**
* \brief Creates a new autoreleased XMPPDiscoEntity with the specified
* connection.
*
* \param connection The XMPPConnection to serve responses on.
* \return A new autoreleased XMPPDiscoEntity
*/
+ (instancetype)discoEntityWithConnection: (XMPPConnection*)connection;
/**
* \brief Creates a new autoreleased XMPPDiscoEntity with the specified
* connection.
*
* \param connection The XMPPConnection to serve responses on.
* \param capsNode The node advertised for the entity's capabilites
* \return A new autoreleased XMPPDiscoEntity
*/
+ (instancetype)discoEntityWithConnection: (XMPPConnection*)connection
capsNode: (OFString*)capsNode;
- initWithJID: (XMPPJID *)JID
node: (nullable OFString *)node OF_UNAVAILABLE;
- initWithJID: (XMPPJID *)JID
node: (nullable OFString *)node
name: (nullable OFString *)name OF_UNAVAILABLE;
/**
* \brief Initializes an already allocated XMPPDiscoEntity with the specified
* connection.
*
* \param connection The XMPPConnection to serve responses on.
* This must already be bound to a resource)
* \return An initialized XMPPDiscoEntity
*/
- initWithConnection: (XMPPConnection*)connection;
/**
* \brief Initializes an already allocated XMPPDiscoEntity with the specified
* connection.
*
* \param connection The XMPPConnection to serve responses on.
* This must already be bound to a resource)
* \param capsNode The node advertised for the entity's capabilites
* \return An initialized XMPPDiscoEntity
*/
- initWithConnection: (XMPPConnection*)connection
capsNode: (OFString*)capsNode;
capsNode: (nullable OFString *)capsNode OF_DESIGNATED_INITIALIZER;
/**
* \brief Adds a XMPPDiscoNode to provide responses for.
*
* \param node The XMPPDiscoNode to provide responses for
*/
- (void)addDiscoNode: (XMPPDiscoNode*)node;
/**
* \brief Calculates the Entity Capabilities Hash of the entity
*
* \return A OFString containing the capabilities hash
*/
- (OFString*)capsHash;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPDiscoEntity.m
from [35881ca3b2]
to [f708ffe294].
︙ | | |
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
+
+
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import "XMPPDiscoEntity.h"
#import "XMPPDiscoNode.h"
#import "XMPPDiscoNode+Private.h"
#import "XMPPDiscoIdentity.h"
#import "XMPPIQ.h"
#import "namespaces.h"
@implementation XMPPDiscoEntity
@synthesize discoNodes = _discoNodes, capsNode = _capsNode;
|
︙ | | |
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
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
|
+
+
+
+
+
+
+
-
+
+
|
}
- initWithConnection: (XMPPConnection*)connection
{
return [self initWithConnection: connection
capsNode: nil];
}
- initWithJID: (XMPPJID *)JID
node: (nullable OFString *)node
name: (nullable OFString *)name
{
OF_INVALID_INIT_METHOD
}
- initWithConnection: (XMPPConnection*)connection
capsNode: (OFString*)capsNode
{
self = [super initWithJID: [connection JID]
node: nil];
node: nil
name: nil];
@try {
_discoNodes = [[OFMutableDictionary alloc] init];
_connection = connection;
_capsNode = [capsNode copy];
[_connection addDelegate: self];
|
︙ | | |
Modified src/XMPPDiscoIdentity.h
from [574d3c2fee]
to [969a73bffe].
︙ | | |
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
|
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
|
+
+
-
+
-
+
-
+
-
+
+
+
-
+
+
+
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/ObjFW.h>
OF_ASSUME_NONNULL_BEGIN
/**
* \brief A class describing a Service Discovery Identity
*/
@interface XMPPDiscoIdentity: OFObject <OFComparing>
{
OFString *_category, *_name, *_type;
}
/// \brief The category of the identity
@property (readonly) OFString *category;
@property (readonly, nonatomic) OFString *category;
/// \brief The name of the identity, might be unset
@property (readonly) OFString *name;
@property (readonly, nonatomic) OFString *name;
/// \brief The type of the identity
@property (readonly) OFString *type;
@property (readonly, nonatomic) OFString *type;
/**
* \brief Creates a new autoreleased XMPPDiscoIdentity with the specified
* category, type and name.
*
* \param category The category of the identity
* \param type The type of the identity
* \param name The name of the identity
* \return A new autoreleased XMPPDiscoIdentity
*/
+ (instancetype)identityWithCategory: (OFString*)category
type: (OFString*)type
name: (OFString*)name;
name: (nullable OFString *)name;
/**
* \brief Creates a new autoreleased XMPPDiscoIdentity with the specified
* category and type.
*
* \param category The category of the identity
* \param type The type of the identity
* \return A new autoreleased XMPPDiscoIdentity
*/
+ (instancetype)identityWithCategory: (OFString*)category
type: (OFString*)type;
- init OF_UNAVAILABLE;
/**
* \brief Initializes an already allocated XMPPDiscoIdentity with the specified
* category, type and name.
*
* \param category The category of the identity
* \param type The type of the identity
* \param name The name of the identity
* \return An initialized XMPPDiscoIdentity
*/
- initWithCategory: (OFString*)category
type: (OFString*)type
name: (OFString*)name;
name: (nullable OFString *)name OF_DESIGNATED_INITIALIZER;
/**
* \brief Initializes an already allocated XMPPDiscoIdentity with the specified
* category and type.
*
* \param category The category of the identity
* \param type The type of the identity
* \return An initialized XMPPDiscoIdentity
*/
- initWithCategory: (OFString*)category
type: (OFString*)type;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPDiscoIdentity.m
from [95bd037e63]
to [52a90e08e0].
︙ | | |
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
-
-
-
-
-
-
-
+
-
|
return [self initWithCategory: category
type: type
name: nil];
}
- init
{
@try {
[self doesNotRecognizeSelector: _cmd];
} @catch (id e) {
[self release];
@throw e;
}
OF_INVALID_INIT_METHOD
abort();
}
- (void)dealloc
{
[_category release];
[_name release];
[_type release];
|
︙ | | |
Added src/XMPPDiscoNode+Private.h version [e20421d02a].
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
#import "XMPPDiscoNode.h"
OF_ASSUME_NONNULL_BEGIN
@class XMPPConnection;
@class XMPPIQ;
@interface XMPPDiscoNode ()
- (bool)XMPP_handleItemsIQ: (XMPPIQ *)IQ
connection: (XMPPConnection *)connection;
- (bool)XMPP_handleInfoIQ: (XMPPIQ *)IQ
connection: (XMPPConnection *)connection;
@end
OF_ASSUME_NONNULL_END
|
| | | | | | | | | | | | | |
Modified src/XMPPDiscoNode.h
from [fa28e0da2b]
to [04990bb259].
︙ | | |
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
|
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
|
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/ObjFW.h>
OF_ASSUME_NONNULL_BEGIN
@class XMPPDiscoIdentity;
@class XMPPJID;
/**
* \brief A class describing a Service Discovery Node
*/
@interface XMPPDiscoNode: OFObject
{
XMPPJID *_JID;
OFString *_node;
OFString *_name;
OFSortedList *_identities;
OFSortedList *_features;
OFMutableDictionary *_childNodes;
}
/// \brief The JID this node lives on
@property (readonly) XMPPJID *JID;
@property (readonly, nonatomic) XMPPJID *JID;
/// \brief The node's opaque name of the node
@property (readonly) OFString *node;
@property (readonly, nonatomic) OFString *node;
/// \brief The node's human friendly name (may be unspecified)
@property (readonly) OFString *name;
@property OF_NULLABLE_PROPERTY (readonly, nonatomic) OFString *name;
/// \brief The node's list of identities
@property (readonly) OFSortedList *identities;
@property (readonly, nonatomic) OFSortedList *identities;
/// \brief The node's list of features
@property (readonly) OFSortedList *features;
@property (readonly, nonatomic) OFSortedList *features;
/// \brief The node's children
@property (readonly) OFDictionary *childNodes;
@property (readonly, nonatomic) OFDictionary *childNodes;
/**
* \brief Creates a new autoreleased XMPPDiscoNode with the specified
* JID and node
*
* \param JID The JID this node lives on
* \param node The node's opaque name
* \return A new autoreleased XMPPDiscoNode
*/
+ (instancetype)discoNodeWithJID: (XMPPJID*)JID
node: (OFString*)node;
node: (nullable OFString *)node;
/**
* \brief Creates a new autoreleased XMPPDiscoNode with the specified
* JID, node and name
*
* \param JID The JID this node lives on
* \param node The node's opaque name
* \param name The node's human friendly name
* \return A new autoreleased XMPPDiscoNode
*/
+ (instancetype)discoNodeWithJID: (XMPPJID*)JID
node: (OFString*)node
name: (OFString*)name;
node: (nullable OFString *)node
name: (nullable OFString *)name;
/**
* \brief Initializes an already allocated XMPPDiscoNode with the specified
* JID and node
*
* \param JID The JID this node lives on
* \param node The node's opaque name
* \return An initialized XMPPDiscoNode
*/
- initWithJID: (XMPPJID*)JID
node: (OFString*)node;
node: (nullable OFString *)node;
/**
* \brief Initializes an already allocated XMPPDiscoNode with the specified
* JID, node and name
*
* \param JID The JID this node lives on
* \param node The node's opaque name
* \param name The node's human friendly name
* \return An initialized XMPPDiscoNode
*/
- initWithJID: (XMPPJID*)JID
node: (OFString*)node
name: (OFString*)name;
node: (nullable OFString *)node
name: (nullable OFString *)name OF_DESIGNATED_INITIALIZER;
/**
* \brief Adds an XMPPDiscoIdentity to the node
*
* \param identity The XMPPDiscoIdentity to add
*/
- (void)addIdentity: (XMPPDiscoIdentity*)identity;
|
︙ | | |
116
117
118
119
120
121
122
123
124
125
126
127
128
|
118
119
120
121
122
123
124
125
126
127
|
+
-
-
+
-
-
-
|
/**
* \brief Adds a XMPPDiscoNode as child of the node
*
* \param node The XMPPDiscoNode to add as child
*/
- (void)addChildNode: (XMPPDiscoNode*)node;
@end
- (bool)XMPP_handleItemsIQ: (XMPPIQ*)IQ
connection: (XMPPConnection*)connection;
OF_ASSUME_NONNULL_END
- (bool)XMPP_handleInfoIQ: (XMPPIQ*)IQ
connection: (XMPPConnection*)connection;
@end
|
Modified src/XMPPDiscoNode.m
from [adea212c4a]
to [07959d2558].
︙ | | |
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
+
+
-
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import "XMPPDiscoNode.h"
#import "XMPPDiscoNode+Private.h"
#import "XMPPConnection.h"
#import "XMPPIQ.h"
#import "XMPPJID.h"
#import "XMPPDiscoEntity.h"
#import "XMPPDiscoNode.h"
#import "XMPPDiscoIdentity.h"
#import "namespaces.h"
@implementation XMPPDiscoNode
@synthesize JID = _JID, node = _node, name = _name, identities = _identities;
@synthesize features = _features, childNodes = _childNodes;
|
︙ | | |
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
+
+
+
+
+
|
[_name release];
[_identities release];
[_features release];
[_childNodes release];
[super dealloc];
}
- (OFDictionary *)childNodes
{
return [[_childNodes copy] autorelease];
}
- (void)addIdentity: (XMPPDiscoIdentity*)identity
{
[_identities insertObject: identity];
}
- (void)addFeature: (OFString*)feature
|
︙ | | |
Modified src/XMPPEXTERNALAuth.h
from [87300c70b8]
to [0051e84d45].
︙ | | |
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
|
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
|
+
+
-
+
+
+
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/ObjFW.h>
#import "XMPPAuthenticator.h"
OF_ASSUME_NONNULL_BEGIN
/**
* \brief A class to authenticate using SASL EXTERNAL
*/
@interface XMPPEXTERNALAuth: XMPPAuthenticator
/**
* \brief Creates a new autoreleased XMPPEXTERNALAuth.
*
* \return A new autoreleased XMPPEXTERNALAuth
*/
+ (instancetype)EXTERNALAuth;
/**
* \brief Creates a new autoreleased XMPPEXTERNALAuth with an authzid.
*
* \param authzid The authzid to get authorization for
* \return A new autoreleased XMPPEXTERNALAuth
*/
+ (instancetype)EXTERNALAuthWithAuthzid: (OFString*)authzid;
+ (instancetype)EXTERNALAuthWithAuthzid: (nullable OFString *)authzid;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPEXTERNALAuth.m
from [4c3013d555]
to [c6103d3079].
whitespace changes only
Modified src/XMPPExceptions.h
from [69b290104a]
to [679b6851a0].
︙ | | |
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
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
|
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
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
|
+
+
-
+
-
+
+
+
-
+
+
-
+
-
+
-
+
+
+
-
+
-
+
-
+
-
+
-
+
+
+
-
+
-
+
-
+
-
+
-
+
+
+
-
+
-
+
-
+
+
+
-
-
+
+
+
+
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/ObjFW.h>
OF_ASSUME_NONNULL_BEGIN
@class XMPPConnection;
@class XMPPAuthenticator;
/**
* \brief A base class for XMPP related exceptions
*/
@interface XMPPException: OFException
{
XMPPConnection *_connection;
}
/// \brief The connection the exception relates to
@property (readonly, retain) XMPPConnection *connection;
@property OF_NULLABLE_PROPERTY (readonly, nonatomic) XMPPConnection *connection;
/**
* \brief Creates a new XMPPException.
*
* \param connection The connection that received the data responsible
* for this exception
* \return A new XMPPException
*/
+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection;
+ (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection;
- init OF_UNAVAILABLE;
/**
* \brief Initializes an already allocated XMPPException.
*
* \param connection The connection that received the data responsible
* for this exception
* \return An initialized XMPPException
*/
- initWithConnection: (XMPPConnection*)connection;
- initWithConnection: (nullable XMPPConnection *)connection
OF_DESIGNATED_INITIALIZER;
@end
/**
* \brief An exception indicating a stream error was received
*/
@interface XMPPStreamErrorException: XMPPException
{
OFString *_condition, *_reason;
}
/// \brief The defined error condition specified by the stream error
@property (readonly, copy) OFString *condition;
@property (readonly, nonatomic) OFString *condition;
/// \brief The descriptive free-form text specified by the stream error
@property (readonly, copy) OFString *reason;
@property (readonly, nonatomic) OFString *reason;
/**
* \brief Creates a new XMPPStreamErrorException.
*
* \param connection The connection that received the stream error
* \param condition The defined error condition specified by the stream error
* \param reason The descriptive free-form text specified by the stream error
* \return A new XMPPStreamErrorException
*/
+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection
+ (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection
condition: (OFString*)condition
reason: (OFString*)reason;
- initWithConnection: (nullable XMPPConnection *)connection OF_UNAVAILABLE;
/**
* \brief Initializes an already allocated XMPPStreamErrorException.
*
* \param connection The connection that received the stream error
* \param condition The defined error condition specified by the stream error
* \param reason The descriptive free-form text specified by the stream error
* \return An initialized XMPPStreamErrorException
*/
- initWithConnection: (XMPPConnection*)connection
- initWithConnection: (nullable XMPPConnection *)connection
condition: (OFString*)condition
reason: (OFString*)reason;
reason: (OFString *)reason OF_DESIGNATED_INITIALIZER;
@end
/**
* \brief An exception indicating a stringprep profile
* did not apply to a string
*/
@interface XMPPStringPrepFailedException: XMPPException
{
OFString *_profile, *_string;
}
/// \brief The name of the stringprep profile that did not apply
@property (readonly, copy) OFString *profile;
@property (readonly, nonatomic) OFString *profile;
/// \brief The string that failed the stringprep profile
@property (readonly, copy) OFString *string;
@property (readonly, nonatomic) OFString *string;
/**
* \brief Creates a new XMPPStringPrepFailedException.
*
* \param connection The connection the string relates to
* \param profile The name of the stringprep profile that did not apply
* \param string The string that failed the stringprep profile
* \return A new XMPPStringPrepFailedException
*/
+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection
+ (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection
profile: (OFString*)profile
string: (OFString*)string;
- initWithConnection: (nullable XMPPConnection *)connection OF_UNAVAILABLE;
/**
* \brief Initializes an already allocated XMPPStringPrepFailedException.
*
* \param connection The connection the string relates to
* \param profile The name of the stringprep profile that did not apply
* \param string The string that failed the stringprep profile
* \return An initialized XMPPStringPrepFailedException
*/
- initWithConnection: (XMPPConnection*)connection
- initWithConnection: (nullable XMPPConnection *)connection
profile: (OFString*)profile
string: (OFString*)string;
string: (OFString *)string OF_DESIGNATED_INITIALIZER;
@end
/**
* \brief An exception indicating IDNA translation of a string failed
*/
@interface XMPPIDNATranslationFailedException: XMPPException
{
OFString *_operation, *_string;
}
/// \brief The IDNA translation operation which failed
@property (readonly, copy) OFString *operation;
@property (readonly, nonatomic) OFString *operation;
/// \brief The string that could not be translated
@property (readonly, copy) OFString *string;
@property (readonly, nonatomic) OFString *string;
/**
* \brief Creates a new XMPPIDNATranslationFailedException.
*
* \param connection The connection the string relates to
* \param operation The name of the stringprep profile that did not apply
* \param string The string that could not be translated
* \return A new XMPPIDNATranslationFailedException
*/
+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection
+ (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection
operation: (OFString*)operation
string: (OFString*)string;
- initWithConnection: (nullable XMPPConnection *)connection OF_UNAVAILABLE;
/**
* \brief Initializes an already allocated XMPPIDNATranslationFailedException.
*
* \param connection The connection the string relates to
* \param operation The name of the stringprep profile that did not apply
* \param string The string that could not be translated
* \return An initialized XMPPIDNATranslationFailedException
*/
- initWithConnection: (XMPPConnection*)connection
- initWithConnection: (nullable XMPPConnection *)connection
operation: (OFString*)operation
string: (OFString*)string;
@end
/**
* \brief An exception indicating authentication failed
*/
@interface XMPPAuthFailedException: XMPPException
{
OFString *_reason;
}
/// \brief The reason the authentication failed
@property (readonly, copy) OFString *reason;
@property (readonly, nonatomic) OFString *reason;
/**
* \brief Creates a new XMPPAuthFailedException.
*
* \param connection The connection that could not be authenticated
* \param reason The reason the authentication failed
* \return A new XMPPAuthFailedException
*/
+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection
+ (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection
reason: (OFString*)reason;
- initWithConnection: (nullable XMPPConnection *)connection OF_UNAVAILABLE;
/**
* \brief Initializes an already allocated XMPPAuthFailedException.
*
* \param connection The connection that could not be authenticated
* \param reason The reason the authentication failed
* \return An initialized XMPPAuthFailedException
*/
- initWithConnection: (XMPPConnection*)connection
reason: (OFString*)reason;
- initWithConnection: (nullable XMPPConnection *)connection
reason: (OFString *)reason OF_DESIGNATED_INITIALIZER;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPExceptions.m
from [d64ce8e761]
to [b482b72e53].
whitespace changes only
Modified src/XMPPFileStorage.h
from [8262bc5c51]
to [7e93a8c354].
︙ | | |
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
+
+
+
+
+
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/OFObject.h>
#import "XMPPStorage.h"
OF_ASSUME_NONNULL_BEGIN
@class OFMutableDictionary;
@interface XMPPFileStorage: OFObject <XMPPStorage>
{
OFString *_file;
OFMutableDictionary *_data;
}
- init OF_UNAVAILABLE;
- initWithFile: (OFString*)file;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPFileStorage.m
from [522ef88dbb]
to [d3dafb0daf].
︙ | | |
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
-
-
-
-
-
-
-
+
-
|
#import <ObjFW/OFNotImplementedException.h>
#import "XMPPFileStorage.h"
@implementation XMPPFileStorage
- init
{
@try {
[self doesNotRecognizeSelector: _cmd];
} @catch (id e) {
[self release];
@throw e;
}
OF_INVALID_INIT_METHOD
abort();
}
- initWithFile: (OFString*)file
{
self = [super init];
@try {
|
︙ | | |
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
-
-
-
-
+
|
forKey: [pathComponents lastObject]];
else
[iter removeObjectForKey: [pathComponents lastObject]];
}
- (id)XMPP_objectForPath: (OFString*)path
{
OFArray *pathComponents = [path componentsSeparatedByString: @"."];
OFEnumerator *enumerator = [pathComponents objectEnumerator];
OFString *component;
id object = _data;
while ((component = [enumerator nextObject]) != nil)
for (OFString *component in [path componentsSeparatedByString: @"."])
object = [object objectForKey: component];
return object;
}
- (void)setStringValue: (OFString*)string
forPath: (OFString*)path
|
︙ | | |
Modified src/XMPPIQ.h
from [15421246e4]
to [e565b6e506].
︙ | | |
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
+
+
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import "XMPPStanza.h"
OF_ASSUME_NONNULL_BEGIN
/**
* \brief A class describing an IQ stanza.
*/
@interface XMPPIQ: XMPPStanza
/**
* \brief Creates a new XMPPIQ with the specified type and ID.
*
|
︙ | | |
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
-
+
+
+
|
* \param type An error type as defined by RFC 6120
* \param condition An error condition as defined by RFC 6120
* \param text A descriptive text
* \return A new autoreleased XMPPIQ
*/
- (XMPPIQ*)errorIQWithType: (OFString*)type
condition: (OFString*)condition
text: (OFString*)text;
text: (nullable OFString *)text;
/**
* \brief Generates an error IQ for the receiving object.
*
* \param type An error type as defined by RFC 6120
* \param condition A defined conditions from RFC 6120
* \return A new autoreleased XMPPIQ
*/
- (XMPPIQ*)errorIQWithType: (OFString*)type
condition: (OFString*)condition;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPIQ.m
from [a625c5453d]
to [4202e71e12].
whitespace changes only
Modified src/XMPPJID.h
from [db8b96c7e4]
to [bbf76b475f].
︙ | | |
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
|
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
|
+
+
-
+
-
+
-
+
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/ObjFW.h>
OF_ASSUME_NONNULL_BEGIN
/**
* \brief A class for easy handling of JIDs.
*/
@interface XMPPJID: OFObject <OFCopying>
{
OFString *_node, *_domain, *_resource;
}
/// \brief The JID's localpart
@property (copy) OFString *node;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *node;
/// \brief The JID's domainpart
@property (copy) OFString *domain;
@property (nonatomic, copy) OFString *domain;
/// \brief The JID's resourcepart
@property (copy) OFString *resource;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *resource;
/**
* \brief Creates a new autoreleased XMPPJID.
*
* \return A new autoreleased XMPPJID
*/
+ (instancetype)JID;
|
︙ | | |
71
72
73
74
75
76
77
|
73
74
75
76
77
78
79
80
81
|
+
+
|
/**
* \brief Returns the full JID.
*
* \return An OFString containing the full JID
*/
- (OFString*)fullJID;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPJID.m
from [48ba6c2d57]
to [bccd623ec3].
︙ | | |
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
+
+
|
#include <stringprep.h>
#import "XMPPJID.h"
#import "XMPPExceptions.h"
@implementation XMPPJID
@synthesize node = _node, domain = _domain, resource = _resource;
+ (instancetype)JID
{
return [[[self alloc] init] autorelease];
}
+ (instancetype)JIDWithString: (OFString*)string
{
|
︙ | | |
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
-
-
-
-
-
|
} @finally {
free(nodepart);
}
[old release];
}
- (OFString*)node
{
return [[_node copy] autorelease];
}
- (void)setDomain: (OFString*)domain
{
OFString *old = _domain;
char *srv;
Stringprep_rc rc;
if (((rc = stringprep_profile([domain UTF8String], &srv,
|
︙ | | |
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
-
-
-
-
-
|
} @finally {
free(srv);
}
[old release];
}
- (OFString*)domain
{
return [[_domain copy] autorelease];
}
- (void)setResource: (OFString*)resource
{
OFString *old = _resource;
char *res;
Stringprep_rc rc;
if (resource == nil) {
|
︙ | | |
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
|
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
-
-
-
-
-
|
} @finally {
free(res);
}
[old release];
}
- (OFString*)resource
{
return [[_resource copy] autorelease];
}
- (OFString*)bareJID
{
if (_node != nil)
return [OFString stringWithFormat: @"%@@%@", _node, _domain];
else
return [OFString stringWithFormat: @"%@", _domain];
}
|
︙ | | |
Modified src/XMPPMessage.h
from [546573fa68]
to [c499d3c2dc].
︙ | | |
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
|
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
|
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
+
+
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import "XMPPStanza.h"
OF_ASSUME_NONNULL_BEGIN
/**
* \brief A class describing a message stanza.
*/
@interface XMPPMessage: XMPPStanza
/** The text content of the body of the message. */
@property (copy) OFString *body;
/**
* \brief Creates a new autoreleased XMPPMessage.
*
* \return A new autoreleased XMPPMessage
*/
+ (instancetype)message;
/**
* \brief Creates a new autoreleased XMPPMessage with the specified ID.
*
* \param ID The value for the stanza's id attribute
* \return A new autoreleased XMPPMessage
*/
+ (instancetype)messageWithID: (OFString*)ID;
+ (instancetype)messageWithID: (nullable OFString *)ID;
/**
* \brief Creates a new autoreleased XMPPMessage with the specified type.
*
* \param type The value for the stanza's type attribute
* \return A new autoreleased XMPPMessage
*/
+ (instancetype)messageWithType: (OFString*)type;
+ (instancetype)messageWithType: (nullable OFString *)type;
/**
* \brief Creates a new autoreleased XMPPMessage with the specified type and ID.
*
* \param type The value for the stanza's type attribute
* \param ID The value for the stanza's id attribute
* \return A new autoreleased XMPPMessage
*/
+ (instancetype)messageWithType: (OFString*)type
ID: (OFString*)ID;
+ (instancetype)messageWithType: (nullable OFString *)type
ID: (nullable OFString *)ID;
/**
* \brief Initializes an already allocated XMPPMessage with the specified ID.
*
* \param ID The value for the stanza's id attribute
* \return A initialized XMPPMessage
*/
- initWithID: (OFString*)ID;
- initWithID: (nullable OFString *)ID;
/**
* \brief Initializes an already allocated XMPPMessage with the specified type.
*
* \param type The value for the stanza's type attribute
* \return A initialized XMPPMessage
*/
- initWithType: (OFString*)type;
- initWithType: (nullable OFString *)type;
/**
* \brief Initializes an already allocated XMPPMessage with the specified type
* and ID.
*
* \param type The value for the stanza's type attribute
* \param ID The value for the stanza's id attribute
* \return A initialized XMPPMessage
*/
- initWithType: (OFString*)type
ID: (OFString*)ID;
- initWithType: (nullable OFString *)type
ID: (nullable OFString *)ID OF_DESIGNATED_INITIALIZER;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPMessage.m
from [19d004e57c]
to [64ae4d9271].
whitespace changes only
Modified src/XMPPMulticastDelegate.h
from [9c7e2a3fbd]
to [51673325c7].
︙ | | |
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
+
+
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/OFObject.h>
OF_ASSUME_NONNULL_BEGIN
@class OFDataArray;
/**
* \brief A class to provide multiple delegates in a single class
*/
@interface XMPPMulticastDelegate: OFObject
{
|
︙ | | |
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
-
+
-
-
+
+
+
+
|
/**
* \brief Broadcasts a selector with an object to all registered delegates.
*
* \param selector The selector to broadcast
* \param object The object to broadcast
*/
- (bool)broadcastSelector: (SEL)selector
withObject: (id)object;
withObject: (nullable id)object;
/**
* \brief Broadcasts a selector with two objects to all registered delegates.
*
* \param selector The selector to broadcast
* \param object1 The first object to broadcast
* \param object2 The second object to broadcast
*/
- (bool)broadcastSelector: (SEL)selector
withObject: (id)object1
withObject: (id)object2;
withObject: (nullable id)object1
withObject: (nullable id)object2;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPPLAINAuth.h
from [5dfa895145]
to [3c1bd83caf].
︙ | | |
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
|
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
|
+
+
-
-
+
+
-
-
-
+
+
+
+
+
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/ObjFW.h>
#import "XMPPAuthenticator.h"
OF_ASSUME_NONNULL_BEGIN
/**
* \brief A class to authenticate using SASL PLAIN
*/
@interface XMPPPLAINAuth: XMPPAuthenticator
/**
* \brief Creates a new autoreleased XMPPPLAINAuth with an authcid and password.
*
* \param authcid The authcid to authenticate with
* \param password The password to authenticate with
* \return A new autoreleased XMPPPLAINAuth
*/
+ (instancetype)PLAINAuthWithAuthcid: (OFString*)authcid
password: (OFString*)password;
+ (instancetype)PLAINAuthWithAuthcid: (nullable OFString *)authcid
password: (nullable OFString *)password;
/**
* \brief Creates a new autoreleased XMPPPLAINAuth with an authzid, authcid and
* password.
*
* \param authzid The authzid to get authorization for
* \param authcid The authcid to authenticate with
* \param password The password to authenticate with
* \return A new autoreleased XMPPPLAINAuth
*/
+ (instancetype)PLAINAuthWithAuthzid: (OFString*)authzid
authcid: (OFString*)authcid
password: (OFString*)password;
+ (instancetype)PLAINAuthWithAuthzid: (nullable OFString *)authzid
authcid: (nullable OFString *)authcid
password: (nullable OFString *)password;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPPLAINAuth.m
from [9d4992173d]
to [9f0783c62c].
whitespace changes only
Modified src/XMPPPresence.h
from [3d03c9db92]
to [0497c404f5].
︙ | | |
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
|
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
|
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
+
+
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import "XMPPStanza.h"
OF_ASSUME_NONNULL_BEGIN
/**
* \brief A class describing a presence stanza.
*/
@interface XMPPPresence: XMPPStanza <OFComparing>
{
OFString *_status, *_show;
OFNumber *_priority;
}
/**
* The value of the stanza's type attribute.
*/
@property OF_NULL_RESETTABLE_PROPERTY (nonatomic, copy) OFString *type;
/**
* The text content of the status element.
*/
@property (copy) OFString *status;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *status;
/**
* The text content of the show element of the presence stanza.
*/
@property (copy) OFString *show;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *show;
/**
* The numeric content of the priority element.
*/
@property (copy) OFNumber *priority;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFNumber *priority;
/**
* \brief Creates a new autoreleased XMPPPresence.
*
* \return A new autoreleased XMPPPresence
*/
+ (instancetype)presence;
/**
* \brief Creates a new autoreleased XMPPPresence with the specified ID.
*
* \param ID The value for the stanza's id attribute
* \return A new autoreleased XMPPPresence
*/
+ (instancetype)presenceWithID: (OFString*)ID;
+ (instancetype)presenceWithID: (nullable OFString *)ID;
/**
* \brief Creates a new autoreleased XMPPPresence with the specified type.
*
* \param type The value for the stanza's type attribute
* \return A new autoreleased XMPPPresence
*/
+ (instancetype)presenceWithType: (OFString*)type;
+ (instancetype)presenceWithType: (nullable OFString *)type;
/**
* \brief Creates a new autoreleased XMPPPresence with the specified type and
* ID.
*
* \param type The value for the stanza's type attribute
* \param ID The value for the stanza's id attribute
* \return A new autoreleased XMPPPresence
*/
+ (instancetype)presenceWithType: (OFString*)type
ID: (OFString*)ID;
+ (instancetype)presenceWithType: (nullable OFString *)type
ID: (nullable OFString *)ID;
/**
* \brief Initializes an already allocated XMPPPresence with the specified ID.
*
* \param ID The value for the stanza's id attribute
* \return A initialized XMPPPresence
*/
- initWithID: (OFString*)ID;
- initWithID: (nullable OFString *)ID;
/**
* \brief Initializes an already allocated XMPPPresence with the specified type.
*
* \param type The value for the stanza's type attribute
* \return A initialized XMPPPresence
*/
- initWithType: (OFString*)type;
- initWithType: (nullable OFString *)type;
/**
* \brief Initializes an already allocated XMPPPresence with the specified type
* and ID.
*
* \param type The value for the stanza's type attribute
* \param ID The value for the stanza's id attribute
* \return A initialized XMPPPresence
*/
- initWithType: (OFString*)type
ID: (OFString*)ID;
- initWithType: (nullable OFString *)type
ID: (nullable OFString *)ID;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPPresence.m
from [5c903aded4]
to [defd4ee1a6].
︙ | | |
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
+
+
|
if ([show isEqual: @"xa"])
return 4;
OF_ENSURE(0);
}
@implementation XMPPPresence
@dynamic type;
+ (instancetype)presence
{
return [[[self alloc] init] autorelease];
}
+ (instancetype)presenceWithID: (OFString*)ID
{
|
︙ | | |
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
-
+
-
-
+
+
-
+
|
[_status release];
[_show release];
[_priority release];
[super dealloc];
}
- (OFString*)type
- (void)setType: (OFString *)type
{
if (_type == nil)
return @"available";
if (type == nil)
type = @"available";
return [[_type copy] autorelease];
[super setType: type];
}
- (void)setShow: (OFString*)show
{
OFXMLElement *oldShow = [self elementForName: @"show"
namespace: XMPP_NS_CLIENT];
OFString *old;
|
︙ | | |
158
159
160
161
162
163
164
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
|
160
161
162
163
164
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
|
-
-
-
-
-
-
-
-
-
-
|
stringValue: show]];
old = _show;
_show = [show copy];
[old release];
}
- (OFString*)show
{
return [[_show copy] autorelease];
}
- (void)setStatus: (OFString*)status
{
OFXMLElement *oldStatus = [self elementForName: @"status"
namespace: XMPP_NS_CLIENT];
OFString *old;
if (oldStatus != nil)
[self removeChild: oldStatus];
if (status != nil)
[self addChild: [OFXMLElement elementWithName: @"status"
namespace: XMPP_NS_CLIENT
stringValue: status]];
old = _status;
_status = [status copy];
[old release];
}
- (OFString*)status
{
return [[_status copy] autorelease];
}
- (void)setPriority: (OFNumber*)priority
{
intmax_t prio = [priority intMaxValue];
OFNumber *old;
if ((prio < -128) || (prio > 127))
@throw [OFInvalidArgumentException exception];
|
︙ | | |
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
|
204
205
206
207
208
209
210
211
212
213
214
215
216
217
|
-
-
-
-
-
|
stringValue: priority_s]];
old = _priority;
_priority = [priority copy];
[old release];
}
- (OFNumber*)priority
{
return [[_priority copy] autorelease];
}
- (of_comparison_result_t)compare: (id <OFComparing>)object
{
XMPPPresence *otherPresence;
OFNumber *otherPriority;
OFString *otherShow;
of_comparison_result_t priorityOrder;
|
︙ | | |
Modified src/XMPPRoster.h
from [9f74b009a4]
to [7a62e71bc2].
︙ | | |
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
|
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
|
+
+
-
-
-
|
*/
#import <ObjFW/ObjFW.h>
#import "XMPPConnection.h"
#import "XMPPStorage.h"
OF_ASSUME_NONNULL_BEGIN
@class XMPPRosterItem;
@class XMPPIQ;
@class XMPPRoster;
@class XMPPMulticastDelegate;
/**
* \brief A protocol that should be (partially) implemented by delegates
* of a XMPPRoster
*/
@protocol XMPPRosterDelegate
#ifndef XMPP_ROSTER_M
<OFObject>
#endif
@optional
/**
* \brief This callback is called after the roster was received (as a result of
* calling -requestRoster).
*
* \param roster The roster that was received
*/
|
︙ | | |
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
|
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
|
-
+
-
+
+
+
+
-
-
+
+
-
+
|
@property (readonly, assign) XMPPConnection *connection;
/**
* \brief An object for data storage, conforming to the XMPPStorage protocol.
*
* Inherited from the connection if not overridden.
*/
@property (assign) id <XMPPStorage> dataStorage;
@property (nonatomic, assign) id <XMPPStorage> dataStorage;
/**
* \brief The list of contacts as an OFDictionary with the bare JID as a string
* as key.
*/
@property (readonly, copy) OFDictionary *rosterItems;
@property (readonly, nonatomic)
OFDictionary OF_GENERIC(OFString *, XMPPRosterItem *) *rosterItems;
- init OF_UNAVAILABLE;
/**
* \brief Initializes an already allocated XMPPRoster.
*
* \param connection The connection roster related stanzas
* are send and received over
* \param connection The connection roster related stanzas are send and
* received over
* \return An initialized XMPPRoster
*/
- initWithConnection: (XMPPConnection*)connection;
- initWithConnection: (XMPPConnection *)connection OF_DESIGNATED_INITIALIZER;
/**
* \brief Requests the roster from the server.
*/
- (void)requestRoster;
/**
|
︙ | | |
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
134
135
136
137
138
139
140
141
142
143
|
-
-
-
-
-
-
-
+
|
/**
* \brief Removes the specified delegate.
*
* \param delegate The delegate to remove
*/
- (void)removeDelegate: (id <XMPPRosterDelegate>)delegate;
- (void)XMPP_updateRosterItem: (XMPPRosterItem*)rosterItem;
- (void)XMPP_handleInitialRosterForConnection: (XMPPConnection*)connection
IQ: (XMPPIQ*)iq;
- (XMPPRosterItem*)XMPP_rosterItemWithXMLElement: (OFXMLElement*)element;
@end
@interface OFObject (XMPPRosterDelegate) <XMPPRosterDelegate>
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPRoster.m
from [8b7b6f027e]
to [7642c78519].
︙ | | |
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
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
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
#import "XMPPRoster.h"
#import "XMPPRosterItem.h"
#import "XMPPConnection.h"
#import "XMPPIQ.h"
#import "XMPPJID.h"
#import "XMPPMulticastDelegate.h"
#import "namespaces.h"
OF_ASSUME_NONNULL_BEGIN
@interface XMPPRoster ()
- (void)XMPP_updateRosterItem: (XMPPRosterItem *)rosterItem;
- (void)XMPP_handleInitialRosterForConnection: (XMPPConnection *)connection
IQ: (XMPPIQ *)IQ;
- (XMPPRosterItem *)XMPP_rosterItemWithXMLElement: (OFXMLElement *)element;
@end
OF_ASSUME_NONNULL_END
@implementation XMPPRoster
@synthesize connection = _connection, dataStorage = _dataStorage;
@synthesize rosterItems = _rosterItems;
- init
{
OF_INVALID_INIT_METHOD
}
- initWithConnection: (XMPPConnection*)connection
{
self = [super init];
@try {
_rosterItems = [[OFMutableDictionary alloc] init];
|
︙ | | |
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
|
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
|
-
+
-
+
-
+
-
+
|
[_connection sendIQ: iq
callbackTarget: self
selector: @selector(XMPP_handleInitialRosterForConnection:
IQ:)];
}
- (bool)connection: (XMPPConnection*)connection
didReceiveIQ: (XMPPIQ*)iq
didReceiveIQ: (XMPPIQ *)IQ
{
OFXMLElement *rosterElement;
OFXMLElement *element;
XMPPRosterItem *rosterItem;
OFString *origin;
rosterElement = [iq elementForName: @"query"
rosterElement = [IQ elementForName: @"query"
namespace: XMPP_NS_ROSTER];
if (rosterElement == nil)
return false;
if (![[iq type] isEqual: @"set"])
if (![[IQ type] isEqual: @"set"])
return false;
// Ensure the roster push has been sent by the server
origin = [[iq from] fullJID];
origin = [[IQ from] fullJID];
if (origin != nil && ![origin isEqual: [[connection JID] bareJID]])
return false;
element = [rosterElement elementForName: @"item"
namespace: XMPP_NS_ROSTER];
if (element != nil) {
|
︙ | | |
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
-
+
|
OFString *ver =
[[rosterElement attributeForName: @"ver"] stringValue];
[_dataStorage setStringValue: ver
forPath: @"roster.ver"];
[_dataStorage save];
}
[connection sendStanza: [iq resultIQ]];
[connection sendStanza: [IQ resultIQ]];
return true;
}
- (void)addRosterItem: (XMPPRosterItem*)rosterItem
{
[self updateRosterItem: rosterItem];
|
︙ | | |
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
|
236
237
238
239
240
241
242
243
244
245
246
247
248
249
|
-
-
-
-
-
-
-
-
-
-
|
if (_rosterRequested)
/* FIXME: Find a better exception! */
@throw [OFInvalidArgumentException exception];
_dataStorage = dataStorage;
}
- (XMPPConnection*)connection
{
return _connection;
}
- (id <XMPPStorage>)dataStorage
{
return _dataStorage;
}
- (void)XMPP_updateRosterItem: (XMPPRosterItem*)rosterItem
{
if ([_connection supportsRosterVersioning]) {
OFMutableDictionary *items = [[[_dataStorage dictionaryForPath:
@"roster.items"] mutableCopy] autorelease];
if (items == nil)
|
︙ | | |
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
|
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
|
-
+
-
-
-
-
|
return rosterItem;
}
- (void)XMPP_handleInitialRosterForConnection: (XMPPConnection*)connection
IQ: (XMPPIQ*)IQ
{
OFXMLElement *rosterElement;
OFXMLElement *rosterElement = [IQ elementForName: @"query"
OFEnumerator *enumerator;
OFXMLElement *element;
rosterElement = [IQ elementForName: @"query"
namespace: XMPP_NS_ROSTER];
if ([connection supportsRosterVersioning]) {
if (rosterElement == nil) {
OFDictionary *items = [_dataStorage
dictionaryForPath: @"roster.items"];
OFEnumerator *enumerator = [items objectEnumerator];
|
︙ | | |
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
|
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
|
-
+
-
|
forKey: [JID bareJID]];
}
} else
[_dataStorage setDictionary: nil
forPath: @"roster.items"];
}
enumerator = [[rosterElement children] objectEnumerator];
for (OFXMLElement *element in [rosterElement children]) {
while ((element = [enumerator nextObject]) != nil) {
OFAutoreleasePool *pool;
XMPPRosterItem *rosterItem;
if (![[element name] isEqual: @"item"] ||
![[element namespace] isEqual: XMPP_NS_ROSTER])
continue;
|
︙ | | |
Modified src/XMPPRosterItem.h
from [fbf33416fb]
to [b424f574a0].
︙ | | |
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
|
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
|
+
+
-
+
-
+
-
+
-
+
+
+
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/ObjFW.h>
OF_ASSUME_NONNULL_BEGIN
@class XMPPJID;
/**
* \brief A class for representing an item in the roster.
*/
@interface XMPPRosterItem: OFObject
{
XMPPJID *_JID;
OFString *_name;
OFString *_subscription;
OFArray *_groups;
}
/// \brief The JID of the roster item
@property (copy) XMPPJID *JID;
@property (nonatomic, copy) XMPPJID *JID;
/// \brief The name of the roster item to show to the user
@property (copy) OFString *name;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *name;
/// \brief The subscription for the roster item
@property (copy) OFString *subscription;
@property (nonatomic, copy) OFString *subscription;
/// \brief An array of groups in which the roster item is
@property (copy) OFArray *groups;
@property (nonatomic, copy) OFArray OF_GENERIC(OFString *) *groups;
/**
* \brief Creates a new autoreleased roster item.
*
* \return A new autoreleased roster item.
*/
+ (instancetype)rosterItem;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPRosterItem.m
from [896b51646c]
to [5e285f3028].
whitespace changes only
Modified src/XMPPSCRAMAuth.h
from [caa9d18a81]
to [fc2ab6d5ef].
︙ | | |
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
+
+
|
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/ObjFW.h>
#import "XMPPAuthenticator.h"
#import "XMPPConnection.h"
OF_ASSUME_NONNULL_BEGIN
/**
* \brief A class to authenticate using SCRAM
*/
@interface XMPPSCRAMAuth: XMPPAuthenticator
{
Class _hashType;
OFString *_cNonce;
|
︙ | | |
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
|
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
|
-
-
+
+
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
+
+
-
-
+
-
-
-
-
-
-
-
-
-
|
* \param authcid The authcid to authenticate with
* \param password The password to authenticate with
* \param connection The connection over which authentication is done
* \param hash The class to use for calulating hashes
* \param plusAvailable Whether the PLUS variant was offered
* \return A new autoreleased XMPPSCRAMAuth
*/
+ (instancetype)SCRAMAuthWithAuthcid: (OFString*)authcid
password: (OFString*)password
+ (instancetype)SCRAMAuthWithAuthcid: (nullable OFString *)authcid
password: (nullable OFString *)password
connection: (XMPPConnection*)connection
hash: (Class)hash
plusAvailable: (bool)plusAvailable;
/**
* \brief Creates a new autoreleased XMPPSCRAMAuth with an authzid, authcid and
* password.
*
* \param authzid The authzid to get authorization for
* \param authcid The authcid to authenticate with
* \param password The password to authenticate with
* \param connection The connection over which authentication is done
* \param hash The class to use for calulating hashes
* \param plusAvailable Whether the PLUS variant was offered
* \return A new autoreleased XMPPSCRAMAuth
*/
+ (instancetype)SCRAMAuthWithAuthzid: (OFString*)authzid
authcid: (OFString*)authcid
password: (OFString*)password
+ (instancetype)SCRAMAuthWithAuthzid: (nullable OFString *)authzid
authcid: (nullable OFString *)authcid
password: (nullable OFString *)password
connection: (XMPPConnection*)connection
hash: (Class)hash
plusAvailable: (bool)plusAvailable;
- initWithAuthcid: (nullable OFString *)authcid
password: (nullable OFString *)password OF_UNAVAILABLE;
- initWithAuthzid: (nullable OFString *)authzid
authcid: (nullable OFString *)authcid
password: (nullable OFString *)password OF_UNAVAILABLE;
/**
* \brief Initializes an already allocated XMPPSCRAMAuth with an authcid and
* password.
*
* \param authcid The authcid to authenticate with
* \param password The password to authenticate with
* \param connection The connection over which authentication is done
* \param hash The class to use for calulating hashes
* \param plusAvailable Whether the PLUS variant was offered
* \return A initialized XMPPSCRAMAuth
*/
- initWithAuthcid: (OFString*)authcid
password: (OFString*)password
- initWithAuthcid: (nullable OFString *)authcid
password: (nullable OFString *)password
connection: (XMPPConnection*)connection
hash: (Class)hash
plusAvailable: (bool)plusAvailable;
/**
* \brief Initializes an already allocated XMPPSCRAMAuth with a authzid,
* authcid and password.
*
* \param authzid The authzid to get authorization for
* \param authcid The authcid to authenticate with
* \param password The password to authenticate with
* \param connection The connection over which authentication is done
* \param hash The class to use for calulating hashes
* \param plusAvailable Whether the PLUS variant was offered
* \return A initialized XMPPSCRAMAuth
*/
- initWithAuthzid: (OFString*)authzid
authcid: (OFString*)authcid
password: (OFString*)password
- initWithAuthzid: (nullable OFString *)authzid
authcid: (nullable OFString *)authcid
password: (nullable OFString *)password
connection: (XMPPConnection*)connection
hash: (Class)hash
plusAvailable: (bool)plusAvailable;
plusAvailable: (bool)plusAvailable OF_DESIGNATED_INITIALIZER;
@end
/// \cond internal
- (OFString*)XMPP_genNonce;
OF_ASSUME_NONNULL_END
- (const uint8_t*)XMPP_HMACWithKey: (OFDataArray*)key
data: (OFDataArray*)data;
- (OFDataArray*)XMPP_hiWithData: (OFDataArray*)str
salt: (OFDataArray*)salt
iterationCount: (intmax_t)i;
- (OFDataArray*)XMPP_parseServerFirstMessage: (OFDataArray*)data;
- (OFDataArray*)XMPP_parseServerFinalMessage: (OFDataArray*)data;
/// \endcond
@end
|
Modified src/XMPPSCRAMAuth.m
from [ec991072f9]
to [e2f43c5d67].
︙ | | |
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
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
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
#import <ObjOpenSSL/SSLSocket.h>
#import "XMPPSCRAMAuth.h"
#import "XMPPExceptions.h"
#define HMAC_IPAD 0x36
#define HMAC_OPAD 0x5c
OF_ASSUME_NONNULL_BEGIN
@interface XMPPSCRAMAuth ()
- (OFString *)XMPP_genNonce;
- (const uint8_t *)XMPP_HMACWithKey: (OFDataArray *)key
data: (OFDataArray *)data;
- (OFDataArray *)XMPP_hiWithData: (OFDataArray *)str
salt: (OFDataArray *)salt
iterationCount: (intmax_t)i;
- (OFDataArray *)XMPP_parseServerFirstMessage: (OFDataArray *)data;
- (OFDataArray *)XMPP_parseServerFinalMessage: (OFDataArray *)data;
@end
OF_ASSUME_NONNULL_END
@implementation XMPPSCRAMAuth
+ (instancetype)SCRAMAuthWithAuthcid: (OFString*)authcid
password: (OFString*)password
connection: (XMPPConnection*)connection
hash: (Class)hash
plusAvailable: (bool)plusAvailable
|
︙ | | |
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
|
-
+
+
|
@throw [OFInvalidServerReplyException exception];
// Add c=<base64(GS2Header+channelBindingData)>
tmpArray = [OFDataArray dataArray];
[tmpArray addItems: [_GS2Header UTF8String]
count: [_GS2Header UTF8StringLength]];
if (_plusAvailable && [_connection encrypted]) {
OFDataArray *channelBinding = [((SSLSocket*)[_connection socket])
OFDataArray *channelBinding =
[((SSLSocket *)[_connection socket])
channelBindingDataWithType: @"tls-unique"];
[tmpArray addItems: [channelBinding items]
count: [channelBinding count]];
}
tmpString = [tmpArray stringByBase64Encoding];
[ret addItems: "c="
count: 2];
|
︙ | | |
Modified src/XMPPSRVLookup.h
from [f29224bbe8]
to [c9768d0ace].
︙ | | |
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
|
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
|
+
+
-
+
+
-
+
+
-
-
-
+
+
+
|
*/
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
#import <ObjFW/ObjFW.h>
OF_ASSUME_NONNULL_BEGIN
@interface XMPPSRVEntry: OFObject
{
uint16_t _priority;
uint16_t _weight;
uint32_t _accumulatedWeight;
uint16_t _port;
OFString *_target;
}
@property (readonly) uint16_t priority;
@property (readonly) uint16_t weight;
@property uint32_t accumulatedWeight;
@property (readonly) uint16_t port;
@property (readonly, copy) OFString *target;
@property (readonly, nonatomic) OFString *target;
+ (instancetype)entryWithPriority: (uint16_t)priority
weight: (uint16_t)weight
port: (uint16_t)port
target: (OFString*)target;
+ (instancetype)entryWithResourceRecord: (ns_rr)resourceRecord
handle: (ns_msg)handle;
- init OF_UNAVAILABLE;
- initWithPriority: (uint16_t)priority
weight: (uint16_t)weight
port: (uint16_t)port
target: (OFString*)target;
- initWithResourceRecord: (ns_rr)resourceRecord
handle: (ns_msg)handle;
@end
@interface XMPPSRVLookup: OFObject <OFEnumerating>
{
OFString *_domain;
struct __res_state _resState;
OFList *_list;
}
@property (readonly, copy) OFString *domain;
@property (readonly, nonatomic) OFString *domain;
+ (instancetype)lookupWithDomain: (OFString*)domain;
- init OF_UNAVAILABLE;
- initWithDomain: (OFString*)domain;
- (void)XMPP_lookup;
- (void)XMPP_addEntry: (XMPPSRVEntry*)item;
@end
@interface XMPPSRVEnumerator: OFEnumerator
{
OFList *_list;
of_list_object_t *_listIter;
OFList *_subListCopy;
bool _done;
}
- init OF_UNAVAILABLE;
- initWithList: (OFList*)list;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPSRVLookup.m
from [b57e70e54d]
to [e13fa9dc89].
︙ | | |
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
+
+
+
+
+
+
+
+
+
|
#include <netdb.h>
#include <sys/types.h>
#include <openssl/rand.h>
#import "XMPPSRVLookup.h"
#import <ObjFW/OFLocalization.h>
OF_ASSUME_NONNULL_BEGIN
@interface XMPPSRVLookup ()
- (void)XMPP_lookup;
- (void)XMPP_addEntry: (XMPPSRVEntry *)item;
@end
OF_ASSUME_NONNULL_END
@implementation XMPPSRVEntry
@synthesize priority = _priority, weight = _weight;
@synthesize accumulatedWeight = _accumulatedWeight, port = _port;
@synthesize target = _target;
+ (instancetype)entryWithPriority: (uint16_t)priority
|
︙ | | |
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
-
-
-
-
-
-
-
+
-
|
{
return [[[self alloc] initWithResourceRecord: resourceRecord
handle: handle] autorelease];
}
- init
{
@try {
[self doesNotRecognizeSelector: _cmd];
} @catch (id e) {
[self release];
@throw e;
}
OF_INVALID_INIT_METHOD
abort();
}
- initWithPriority: (uint16_t)priority
weight: (uint16_t)weight
port: (uint16_t)port
target: (OFString*)target
{
|
︙ | | |
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
+
+
+
+
+
|
@implementation XMPPSRVLookup
@synthesize domain = _domain;
+ (instancetype)lookupWithDomain: (OFString*)domain
{
return [[[self alloc] initWithDomain: domain] autorelease];
}
- init
{
OF_INVALID_INIT_METHOD
}
- initWithDomain: (OFString*)domain
{
self = [super init];
@try {
_list = [[OFList alloc] init];
|
︙ | | |
276
277
278
279
280
281
282
283
284
285
286
287
288
289
|
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
|
+
+
+
+
+
|
- (OFEnumerator*)objectEnumerator
{
return [[[XMPPSRVEnumerator alloc] initWithList: _list] autorelease];
}
@end
@implementation XMPPSRVEnumerator
- init
{
OF_INVALID_INIT_METHOD
}
- initWithList: (OFList*)list
{
self = [super init];
@try {
_list = [list copy];
} @catch (id e) {
|
︙ | | |
Modified src/XMPPStanza.h
from [7ce6b98454]
to [a0d35df9af].
︙ | | |
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
|
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
|
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
+
+
+
+
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/ObjFW.h>
OF_ASSUME_NONNULL_BEGIN
@class XMPPJID;
/**
* \brief A class describing an XMPP Stanza.
*/
@interface XMPPStanza: OFXMLElement
{
XMPPJID *_from, *_to;
OFString *_type, *_ID, *_language;
}
/// \brief The value of the stanza's from attribute
@property (copy) XMPPJID *from;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) XMPPJID *from;
/// \brief The value of the stanza's to attribute
@property (copy) XMPPJID *to;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) XMPPJID *to;
/// \brief The value of the stanza's type attribute
@property (copy) OFString *type;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *type;
/// \brief The value of the stanza's id attribute
@property (copy) OFString *ID;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *ID;
/// \brief The stanza's xml:lang
@property (copy) OFString *language;
@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *language;
/**
* \brief Creates a new autoreleased XMPPStanza with the specified name.
*
* \param name The stanza's name (one of iq, message or presence)
* \return A new autoreleased XMPPStanza
*/
+ (instancetype)stanzaWithName: (OFString*)name;
/**
* \brief Creates a new autoreleased XMPPStanza with the specified name and
* type.
*
* \param name The stanza's name (one of iq, message or presence)
* \param type The value for the stanza's type attribute
* \return A new autoreleased XMPPStanza
*/
+ (instancetype)stanzaWithName: (OFString*)name
type: (OFString*)type;
type: (nullable OFString *)type;
/**
* \brief Creates a new autoreleased XMPPStanza with the specified name and ID.
*
* \param name The stanza's name (one of iq, message or presence)
* \param ID The value for the stanza's id attribute
* \return A new autoreleased XMPPStanza
*/
+ (instancetype)stanzaWithName: (OFString*)name
ID: (OFString*)ID;
ID: (nullable OFString *)ID;
/**
* \brief Creates a new autoreleased XMPPStanza with the specified name, type
* and ID.
*
* \param name The stanza's name (one of iq, message or presence)
* \param type The value for the stanza's type attribute
* \param ID The value for the stanza's id attribute
* \return A new autoreleased XMPPStanza
*/
+ (instancetype)stanzaWithName: (OFString*)name
type: (OFString*)type
ID: (OFString*)ID;
type: (nullable OFString *)type
ID: (nullable OFString *)ID;
/**
* \brief Creates a new autoreleased XMPPStanza from an OFXMLElement.
*
* \param element The element to base the XMPPStanza on
* \return A new autoreleased XMPPStanza
*/
+ (instancetype)stanzaWithElement: (OFXMLElement*)element;
- initWithName: (OFString *)name
stringValue: (nullable OFString *)stringValue OF_UNAVAILABLE;
- initWithName: (OFString *)name
namespace: (nullable OFString *)namespace OF_UNAVAILABLE;
- initWithName: (OFString *)name
namespace: (nullable OFString *)namespace
stringValue: (nullable OFString *)stringValue OF_UNAVAILABLE;
- initWithXMLString: (OFString *)string OF_UNAVAILABLE;
- initWithFile: (OFString *)path OF_UNAVAILABLE;
/**
* \brief Initializes an already allocated XMPPStanza with the specified name.
*
* \param name The stanza's name (one of iq, message or presence)
* \return A initialized XMPPStanza
*/
- initWithName: (OFString*)name;
/**
* \brief Initializes an already allocated XMPPStanza with the specified name
* and type.
*
* \param name The stanza's name (one of iq, message or presence)
* \param type The value for the stanza's type attribute
* \return A initialized XMPPStanza
*/
- initWithName: (OFString*)name
type: (OFString*)type;
type: (nullable OFString *)type;
/**
* \brief Initializes an already allocated XMPPStanza with the specified name
* and ID.
*
* \param name The stanza's name (one of iq, message or presence)
* \param ID The value for the stanza's id attribute
* \return A initialized XMPPStanza
*/
- initWithName: (OFString*)name
ID: (OFString*)ID;
ID: (nullable OFString *)ID;
/**
* \brief Initializes an already allocated XMPPStanza with the specified name,
* type and ID.
*
* \param name The stanza's name (one of iq, message or presence)
* \param type The value for the stanza's type attribute
* \param ID The value for the stanza's id attribute
* \return A initialized XMPPStanza
*/
- initWithName: (OFString*)name
type: (OFString*)type
ID: (OFString*)ID;
type: (nullable OFString *)type
ID: (nullable OFString *)ID;
/**
* \brief Initializes an already allocated XMPPStanza based on a OFXMLElement.
*
* \param element The element to base the XMPPStanza on
* \return A initialized XMPPStanza
*/
- initWithElement: (OFXMLElement*)element;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPStanza.m
from [62c85c1076]
to [26c7c49d18].
︙ | | |
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
+
+
+
|
#endif
#import "XMPPStanza.h"
#import "XMPPJID.h"
#import "namespaces.h"
@implementation XMPPStanza
@synthesize from = _from, to = _to, type = _type, ID = _ID;
@synthesize language = _language;
+ (instancetype)stanzaWithName: (OFString*)name
{
return [[[self alloc] initWithName: name] autorelease];
}
+ (instancetype)stanzaWithName: (OFString*)name
type: (OFString*)type
|
︙ | | |
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
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
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
ID: ID] autorelease];
}
+ (instancetype)stanzaWithElement: (OFXMLElement*)element
{
return [[[self alloc] initWithElement: element] autorelease];
}
- initWithName: (OFString *)name
namespace: (nullable OFString *)namespace
stringValue: (nullable OFString *)stringValue
{
OF_INVALID_INIT_METHOD
}
- initWithXMLString: (OFString *)string
{
OF_INVALID_INIT_METHOD
}
- initWithFile: (OFString *)path
{
OF_INVALID_INIT_METHOD
}
- initWithName: (OFString*)name
{
return [self initWithName: name
type: nil
ID: nil];
}
|
︙ | | |
162
163
164
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
|
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
|
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|
[self removeAttributeForName: @"from"];
if (from != nil)
[self addAttributeWithName: @"from"
stringValue: [from fullJID]];
}
- (XMPPJID*)from
{
return [[_from copy] autorelease];
}
- (void)setTo: (XMPPJID*)to
{
XMPPJID *old = _to;
_to = [to copy];
[old release];
[self removeAttributeForName: @"to"];
if (to != nil)
[self addAttributeWithName: @"to"
stringValue: [to fullJID]];
}
- (XMPPJID*)to
{
return [[_to copy] autorelease];
}
- (void)setType: (OFString*)type
{
OFString *old = _type;
_type = [type copy];
[old release];
[self removeAttributeForName: @"type"];
if (type != nil)
[self addAttributeWithName: @"type"
stringValue: type];
}
- (OFString*)type
{
return [[_type copy] autorelease];
}
- (void)setID: (OFString*)ID
{
OFString *old = _ID;
_ID = [ID copy];
[old release];
[self removeAttributeForName: @"id"];
if (ID != nil)
[self addAttributeWithName: @"id"
stringValue: ID];
}
- (OFString*)ID
{
return [[_ID copy] autorelease];
}
- (void)setLanguage: (OFString*)language
{
OFString *old = _language;
_language = [language copy];
[old release];
[self removeAttributeForName: @"lang"
namespace: @"http://www.w3.org/XML/1998/namespace"];
if (language != nil)
[self addAttributeWithName: @"lang"
namespace: @"http://www.w3.org/XML/1998/"
@"namespace"
stringValue: language];
}
- (OFString*)language
{
return [[_language copy] autorelease];
}
@end
|
Modified src/XMPPStorage.h
from [f2a91237cc]
to [1c089b9216].
︙ | | |
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
|
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
|
+
+
-
+
-
+
-
+
-
-
+
+
-
+
+
+
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/OFObject.h>
OF_ASSUME_NONNULL_BEGIN
@class OFString;
@class OFArray;
@class OFDictionary;
@protocol XMPPStorage <OFObject>
- (void)save;
- (void)setStringValue: (OFString*)string
- (void)setStringValue: (nullable OFString *)string
forPath: (OFString*)path;
- (OFString*)stringValueForPath: (OFString*)path;
- (nullable OFString *)stringValueForPath: (OFString *)path;
- (void)setBooleanValue: (bool)boolean
forPath: (OFString*)path;
- (bool)booleanValueForPath: (OFString*)path;
- (void)setIntegerValue: (intmax_t)integer
forPath: (OFString*)path;
- (intmax_t)integerValueForPath: (OFString*)path;
- (void)setArray: (OFArray*)array
- (void)setArray: (nullable OFArray *)array
forPath: (OFString*)path;
- (OFArray*)arrayForPath: (OFString*)path;
- (void)setDictionary: (OFDictionary*)dictionary
- (nullable OFArray *)arrayForPath: (OFString *)path;
- (void)setDictionary: (nullable OFDictionary *)dictionary
forPath: (OFString*)path;
- (OFDictionary*)dictionaryForPath: (OFString*)path;
- (nullable OFDictionary *)dictionaryForPath: (OFString *)path;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPStreamManagement.h
from [dbbf14c9a5]
to [eba4bbe440].
︙ | | |
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
+
+
+
+
+
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import "XMPPConnection.h"
OF_ASSUME_NONNULL_BEGIN
@interface XMPPStreamManagement: OFObject <XMPPConnectionDelegate>
{
XMPPConnection *_connection;
uint32_t _receivedCount;
}
- init OF_UNAVAILABLE;
- initWithConnection: (XMPPConnection*)connection;
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPStreamManagement.m
from [9dc52c523a]
to [57b85a948f].
︙ | | |
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
+
+
+
+
+
|
#include <inttypes.h>
#import "XMPPStreamManagement.h"
#import "namespaces.h"
@implementation XMPPStreamManagement
- init
{
OF_INVALID_INIT_METHOD
}
- initWithConnection: (XMPPConnection*)connection
{
self = [super init];
@try {
_connection = connection;
[_connection addDelegate: self];
|
︙ | | |
Modified src/XMPPXMLElementBuilder.h
from [e6038a457f]
to [60ea5de24d].
︙ | | |
17
18
19
20
21
22
23
24
25
26
|
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
+
+
+
+
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import <ObjFW/OFXMLElementBuilder.h>
OF_ASSUME_NONNULL_BEGIN
@interface XMPPXMLElementBuilder: OFXMLElementBuilder
@end
OF_ASSUME_NONNULL_END
|
Modified src/XMPPXMLElementBuilder.m
from [c3e2053f34]
to [757efe5b8a].
whitespace changes only
Modified tests/test.m
from [1e6a6151cf]
to [a93ba6280b].
︙ | | |
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
-
-
|
#import "XMPPMessage.h"
#import "XMPPPresence.h"
#import "XMPPRoster.h"
#import "XMPPStreamManagement.h"
#import "XMPPFileStorage.h"
@interface AppDelegate: OFObject
#ifdef OF_HAVE_OPTIONAL_PROTOCOLS
<OFApplicationDelegate, XMPPConnectionDelegate, XMPPRosterDelegate>
#endif
{
XMPPConnection *conn;
XMPPRoster *roster;
}
@end
OF_APPLICATION_DELEGATE(AppDelegate)
|
︙ | | |