Index: src/XMPPAuthenticator.h ================================================================== --- src/XMPPAuthenticator.h +++ src/XMPPAuthenticator.h @@ -54,12 +54,12 @@ * * @param authcid The authcid to authenticate with * @param password The password to authenticate with * @return A initialized XMPPAuthenticator */ -- initWithAuthcid: (nullable OFString *)authcid - password: (nullable OFString *)password; +- (instancetype)initWithAuthcid: (nullable OFString *)authcid + password: (nullable OFString *)password; /*! * @brief Initializes an already allocated XMPPSCRAMAuthenticator with an * authzid, authcid and password. * @@ -66,13 +66,14 @@ * @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: (nullable OFString *)authzid - authcid: (nullable OFString *)authcid - password: (nullable OFString *)password OF_DESIGNATED_INITIALIZER; +- (instancetype)initWithAuthzid: (nullable OFString *)authzid + authcid: (nullable OFString *)authcid + password: (nullable OFString *)password + OF_DESIGNATED_INITIALIZER; /*! * @brief Returns OFData containing the initial authentication message. * * @return An OFDataAray containing the initial authentication message Index: src/XMPPAuthenticator.m ================================================================== --- src/XMPPAuthenticator.m +++ src/XMPPAuthenticator.m @@ -28,21 +28,21 @@ #import "XMPPAuthenticator.h" @implementation XMPPAuthenticator @synthesize authzid = _authzid, authcid = _authcid, password = _password; -- initWithAuthcid: (OFString *)authcid - password: (OFString *)password +- (instancetype)initWithAuthcid: (OFString *)authcid + password: (OFString *)password { return [self initWithAuthzid: nil authcid: authcid password: password]; } -- initWithAuthzid: (OFString *)authzid - authcid: (OFString *)authcid - password: (OFString *)password +- (instancetype)initWithAuthzid: (OFString *)authzid + authcid: (OFString *)authcid + password: (OFString *)password { self = [super init]; @try { _authzid = [authzid copy]; Index: src/XMPPCallback.h ================================================================== --- src/XMPPCallback.h +++ src/XMPPCallback.h @@ -41,17 +41,17 @@ #endif } #ifdef OF_HAVE_BLOCKS + (instancetype)callbackWithBlock: (xmpp_callback_block_t)callback; -- initWithBlock: (xmpp_callback_block_t)callback; +- (instancetype)initWithBlock: (xmpp_callback_block_t)callback; #endif + (instancetype)callbackWithTarget: (id)target selector: (SEL)selector; -- initWithTarget: (id)target - selector: (SEL)selector; +- (instancetype)initWithTarget: (id)target + selector: (SEL)selector; - (void)runWithIQ: (XMPPIQ *)iq connection: (XMPPConnection *)connection; @end Index: src/XMPPCallback.m ================================================================== --- src/XMPPCallback.m +++ src/XMPPCallback.m @@ -32,11 +32,11 @@ { return [[(XMPPCallback *)[self alloc] initWithBlock: block] autorelease]; } -- initWithBlock: (xmpp_callback_block_t)block +- (instancetype)initWithBlock: (xmpp_callback_block_t)block { self = [super init]; @try { _block = [block copy]; @@ -54,12 +54,12 @@ { return [[[self alloc] initWithTarget: target selector: selector] autorelease]; } -- initWithTarget: (id)target - selector: (SEL)selector +- (instancetype)initWithTarget: (id)target + selector: (SEL)selector { self = [super init]; _target = [target retain]; _selector = selector; Index: src/XMPPConnection.m ================================================================== --- src/XMPPConnection.m +++ src/XMPPConnection.m @@ -56,36 +56,49 @@ #import #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 - -OF_ASSUME_NONNULL_END +- (void)xmpp_socketDidConnect: (OFTCPSocket *)socket + context: (OFArray *)nextSRVRecords + exception: (id)exception; +- (void)xmpp_tryNextSRVRecord: (OFArray *)SRVRecords; +- (void)xmpp_resolver: (OFDNSResolver *)resolver + didResolveDomainName: (OFString *)domainName + answerRecords: (OFDictionary *)answerRecords + authorityRecords: (OFDictionary *)authorityRecords + additionalRecords: (OFDictionary *)additionalRecords + context: (OFString *)domainToASCII + exception: (id)exception; +- (bool)xmpp_parseBuffer: (const void *)buffer + length: (size_t)length; +- (bool)xmpp_stream: (OFStream *)stream + didReadIntoBuffer: (char *)buffer + length: (size_t)length + exception: (OFException *)exception; +- (void)xmpp_startStream; +- (void)xmpp_handleStanza: (OFXMLElement *)element; +- (void)xmpp_handleStream: (OFXMLElement *)element; +- (void)xmpp_handleTLS: (OFXMLElement *)element; +- (void)xmpp_handleSASL: (OFXMLElement *)element; +- (void)xmpp_handleIQ: (XMPPIQ *)IQ; +- (void)xmpp_handleMessage: (XMPPMessage *)message; +- (void)xmpp_handlePresence: (XMPPPresence *)presence; +- (void)xmpp_handleFeatures: (OFXMLElement *)element; +- (void)xmpp_sendAuth: (OFString *)authName; +- (void)xmpp_sendResourceBind; +- (void)xmpp_sendStreamError: (OFString *)condition + text: (OFString *)text; +- (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 @implementation XMPPConnection @synthesize username = _username, resource = _resource, server = _server; @synthesize domain = _domain, password = _password, language = _language; @synthesize privateKeyFile = _privateKeyFile; @@ -97,11 +110,11 @@ + (instancetype)connection { return [[[self alloc] init] autorelease]; } -- init +- (instancetype)init { self = [super init]; @try { _port = 5222; @@ -190,11 +203,11 @@ - (void)setServer: (OFString *)server { OFString *old = _server; if (server != nil) - _server = [self XMPP_IDNAToASCII: server]; + _server = [self xmpp_IDNAToASCII: server]; else _server = nil; [old release]; } @@ -219,11 +232,11 @@ _domain = [[OFString alloc] initWithUTF8String: srv]; } @finally { free(srv); } - _domainToASCII = [self XMPP_IDNAToASCII: _domain]; + _domainToASCII = [self xmpp_IDNAToASCII: _domain]; } else { _domain = nil; _domainToASCII = nil; } @@ -255,19 +268,19 @@ _password = nil; [old release]; } -- (void)XMPP_socketDidConnect: (OFTCPSocket *)socket +- (void)xmpp_socketDidConnect: (OFTCPSocket *)socket context: (OFArray *)nextSRVRecords exception: (id)exception { char *buffer; if (exception != nil) { if (nextSRVRecords != nil) { - [self XMPP_tryNextSRVRecord: nextSRVRecords]; + [self xmpp_tryNextSRVRecord: nextSRVRecords]; return; } [_delegates broadcastSelector: @selector(connection:didThrowException:) @@ -274,22 +287,22 @@ withObject: self withObject: exception]; return; } - [self XMPP_startStream]; + [self xmpp_startStream]; buffer = [self allocMemoryWithSize: BUFFER_LENGTH]; [_socket asyncReadIntoBuffer: buffer length: BUFFER_LENGTH target: self - selector: @selector(XMPP_stream:didReadIntoBuffer: + selector: @selector(xmpp_stream:didReadIntoBuffer: length:exception:) context: nil]; } -- (void)XMPP_tryNextSRVRecord: (OFArray *)SRVRecords +- (void)xmpp_tryNextSRVRecord: (OFArray *)SRVRecords { OFSRVDNSResourceRecord *record = [SRVRecords objectAtIndex: 0]; SRVRecords = [SRVRecords objectsInRange: of_range(1, [SRVRecords count] - 1)]; @@ -297,16 +310,16 @@ SRVRecords = nil; [_socket asyncConnectToHost: [record target] port: [record port] target: self - selector: @selector(XMPP_socketDidConnect: + selector: @selector(xmpp_socketDidConnect: context:exception:) context: SRVRecords]; } -- (void)XMPP_resolver: (OFDNSResolver *)resolver +- (void)xmpp_resolver: (OFDNSResolver *)resolver didResolveDomainName: (OFString *)domainName answerRecords: (OFDictionary *)answerRecords authorityRecords: (OFDictionary *)authorityRecords additionalRecords: (OFDictionary *)additionalRecords context: (OFString *)domainToASCII @@ -333,17 +346,17 @@ if ([records count] == 0) { /* Fall back to A / AAA record. */ [_socket asyncConnectToHost: domainToASCII port: _port target: self - selector: @selector(XMPP_socketDidConnect: + selector: @selector(xmpp_socketDidConnect: context:exception:) context: nil]; return; } - [self XMPP_tryNextSRVRecord: records]; + [self xmpp_tryNextSRVRecord: records]; } - (void)asyncConnect { void *pool = objc_autoreleasePoolPush(); @@ -355,27 +368,27 @@ if (_server != nil) [_socket asyncConnectToHost: _server port: _port target: self - selector: @selector(XMPP_socketDidConnect: + selector: @selector(xmpp_socketDidConnect: context:exception:) context: nil]; else [[OFThread DNSResolver] asyncResolveHost: _domainToASCII target: self - selector: @selector(XMPP_resolver: + selector: @selector(xmpp_resolver: didResolveDomainName:answerRecords: authorityRecords:additionalRecords: context:exception:) context: _domainToASCII]; objc_autoreleasePoolPop(pool); } -- (bool)XMPP_parseBuffer: (const void *)buffer +- (bool)xmpp_parseBuffer: (const void *)buffer length: (size_t)length { if ([_socket isAtEndOfStream]) { [_delegates broadcastSelector: @selector(connectionWasClosed:) withObject: self]; @@ -384,11 +397,11 @@ @try { [_parser parseBuffer: buffer length: length]; } @catch (OFMalformedXMLException *e) { - [self XMPP_sendStreamError: @"bad-format" + [self xmpp_sendStreamError: @"bad-format" text: nil]; [self close]; return false; } @@ -396,21 +409,21 @@ } - (void)parseBuffer: (const void *)buffer length: (size_t)length { - [self XMPP_parseBuffer: buffer + [self xmpp_parseBuffer: buffer length: length]; [_oldParser release]; [_oldElementBuilder release]; _oldParser = nil; _oldElementBuilder = nil; } -- (bool)XMPP_stream: (OFStream *)stream +- (bool)xmpp_stream: (OFStream *)stream didReadIntoBuffer: (char *)buffer length: (size_t)length exception: (OFException *)exception { if (exception != nil) { @@ -421,11 +434,11 @@ [self close]; return false; } @try { - if (![self XMPP_parseBuffer: buffer + if (![self xmpp_parseBuffer: buffer length: length]) return false; } @catch (id e) { [_delegates broadcastSelector: @selector(connection: didThrowException:) @@ -443,11 +456,11 @@ _oldElementBuilder = nil; [_socket asyncReadIntoBuffer: buffer length: BUFFER_LENGTH target: self - selector: @selector(XMPP_stream: + selector: @selector(xmpp_stream: didReadIntoBuffer:length: exception:) context: nil]; return false; @@ -581,31 +594,31 @@ [_socket close]; return; } if (![prefix isEqual: @"stream"]) { - [self XMPP_sendStreamError: @"bad-namespace-prefix" + [self xmpp_sendStreamError: @"bad-namespace-prefix" text: nil]; return; } if (![NS isEqual: XMPP_NS_STREAM]) { - [self XMPP_sendStreamError: @"invalid-namespace" + [self xmpp_sendStreamError: @"invalid-namespace" text: nil]; return; } for (OFXMLAttribute *attribute in attributes) { if ([[attribute name] isEqual: @"from"] && ![[attribute stringValue] isEqual: _domain]) { - [self XMPP_sendStreamError: @"invalid-from" + [self xmpp_sendStreamError: @"invalid-from" text: nil]; return; } if ([[attribute name] isEqual: @"version"] && ![[attribute stringValue] isEqual: @"1.0"]) { - [self XMPP_sendStreamError: @"unsupported-version" + [self xmpp_sendStreamError: @"unsupported-version" text: nil]; return; } } @@ -626,20 +639,20 @@ [_delegates broadcastSelector: @selector(connection:didReceiveElement:) withObject: self withObject: element]; if ([[element namespace] isEqual: XMPP_NS_CLIENT]) - [self XMPP_handleStanza: element]; + [self xmpp_handleStanza: element]; if ([[element namespace] isEqual: XMPP_NS_STREAM]) - [self XMPP_handleStream: element]; + [self xmpp_handleStream: element]; if ([[element namespace] isEqual: XMPP_NS_STARTTLS]) - [self XMPP_handleTLS: element]; + [self xmpp_handleTLS: element]; if ([[element namespace] isEqual: XMPP_NS_SASL]) - [self XMPP_handleSASL: element]; + [self xmpp_handleSASL: element]; } - (void)elementBuilder: (OFXMLElementBuilder *)builder didNotExpectCloseTag: (OFString *)name prefix: (OFString *)prefix @@ -651,11 +664,11 @@ else { [self close]; } } -- (void)XMPP_startStream +- (void)xmpp_startStream { OFString *langString = @""; /* Make sure we don't get any old events */ [_parser setDelegate: nil]; @@ -706,38 +719,38 @@ _streamOpen = _needsSession = _encrypted = false; _supportsRosterVersioning = _supportsStreamManagement = false; _lastID = 0; } -- (void)XMPP_handleStanza: (OFXMLElement *)element +- (void)xmpp_handleStanza: (OFXMLElement *)element { if ([[element name] isEqual: @"iq"]) { - [self XMPP_handleIQ: [XMPPIQ stanzaWithElement: element]]; + [self xmpp_handleIQ: [XMPPIQ stanzaWithElement: element]]; return; } if ([[element name] isEqual: @"message"]) { - [self XMPP_handleMessage: + [self xmpp_handleMessage: [XMPPMessage stanzaWithElement: element]]; return; } if ([[element name] isEqual: @"presence"]) { - [self XMPP_handlePresence: + [self xmpp_handlePresence: [XMPPPresence stanzaWithElement: element]]; return; } - [self XMPP_sendStreamError: @"unsupported-stanza-type" + [self xmpp_sendStreamError: @"unsupported-stanza-type" text: nil]; } -- (void)XMPP_handleStream: (OFXMLElement *)element +- (void)xmpp_handleStream: (OFXMLElement *)element { if ([[element name] isEqual: @"features"]) { - [self XMPP_handleFeatures: element]; + [self xmpp_handleFeatures: element]; return; } if ([[element name] isEqual: @"error"]) { OFString *condition, *reason; @@ -834,11 +847,11 @@ } assert(0); } -- (void)XMPP_handleTLS: (OFXMLElement *)element +- (void)xmpp_handleTLS: (OFXMLElement *)element { if ([[element name] isEqual: @"proceed"]) { /* FIXME: Catch errors here */ SSLSocket *newSock; @@ -863,11 +876,11 @@ [_delegates broadcastSelector: @selector( connectionDidUpgradeToTLS:) withObject: self]; /* Stream restart */ - [self XMPP_startStream]; + [self xmpp_startStream]; return; } if ([[element name] isEqual: @"failure"]) @@ -875,11 +888,11 @@ @throw [OFException exception]; assert(0); } -- (void)XMPP_handleSASL: (OFXMLElement *)element +- (void)xmpp_handleSASL: (OFXMLElement *)element { if ([[element name] isEqual: @"challenge"]) { OFXMLElement *responseTag; OFData *challenge = [OFData dataWithBase64EncodedString: [element stringValue]]; @@ -906,11 +919,11 @@ [_delegates broadcastSelector: @selector( connectionWasAuthenticated:) withObject: self]; /* Stream restart */ - [self XMPP_startStream]; + [self xmpp_startStream]; return; } if ([[element name] isEqual: @"failure"]) { @@ -921,11 +934,11 @@ } assert(0); } -- (void)XMPP_handleIQ: (XMPPIQ *)IQ +- (void)xmpp_handleIQ: (XMPPIQ *)IQ { bool handled = false; XMPPCallback *callback; OFString *key; @@ -952,25 +965,25 @@ [self sendStanza: [IQ errorIQWithType: @"cancel" condition: @"service-unavailable"]]; } } -- (void)XMPP_handleMessage: (XMPPMessage *)message +- (void)xmpp_handleMessage: (XMPPMessage *)message { [_delegates broadcastSelector: @selector(connection:didReceiveMessage:) withObject: self withObject: message]; } -- (void)XMPP_handlePresence: (XMPPPresence *)presence +- (void)xmpp_handlePresence: (XMPPPresence *)presence { [_delegates broadcastSelector: @selector(connection:didReceivePresence:) withObject: self withObject: presence]; } -- (void)XMPP_handleFeatures: (OFXMLElement *)element +- (void)xmpp_handleFeatures: (OFXMLElement *)element { OFXMLElement *startTLS = [element elementForName: @"starttls" namespace: XMPP_NS_STARTTLS]; OFXMLElement *bind = [element elementForName: @"bind" namespace: XMPP_NS_BIND]; @@ -998,21 +1011,17 @@ if ([element elementForName: @"sm" namespace: XMPP_NS_SM] != nil) _supportsStreamManagement = true; if (mechs != nil) { - OFEnumerator *enumerator; - OFXMLElement *mech; - - enumerator = [[mechs children] objectEnumerator]; - while ((mech = [enumerator nextObject]) != nil) + for (OFXMLElement *mech in [mechs children]) [mechanisms addObject: [mech stringValue]]; if (_privateKeyFile != nil && _certificateFile != nil && [mechanisms containsObject: @"EXTERNAL"]) { _authModule = [[XMPPEXTERNALAuth alloc] init]; - [self XMPP_sendAuth: @"EXTERNAL"]; + [self xmpp_sendAuth: @"EXTERNAL"]; return; } if ([mechanisms containsObject: @"SCRAM-SHA-1-PLUS"]) { _authModule = [[XMPPSCRAMAuth alloc] @@ -1019,11 +1028,11 @@ initWithAuthcid: _username password: _password connection: self hash: [OFSHA1Hash class] plusAvailable: true]; - [self XMPP_sendAuth: @"SCRAM-SHA-1-PLUS"]; + [self xmpp_sendAuth: @"SCRAM-SHA-1-PLUS"]; return; } if ([mechanisms containsObject: @"SCRAM-SHA-1"]) { _authModule = [[XMPPSCRAMAuth alloc] @@ -1030,19 +1039,19 @@ initWithAuthcid: _username password: _password connection: self hash: [OFSHA1Hash class] plusAvailable: false]; - [self XMPP_sendAuth: @"SCRAM-SHA-1"]; + [self xmpp_sendAuth: @"SCRAM-SHA-1"]; return; } if ([mechanisms containsObject: @"PLAIN"] && _encrypted) { _authModule = [[XMPPPLAINAuth alloc] initWithAuthcid: _username password: _password]; - [self XMPP_sendAuth: @"PLAIN"]; + [self xmpp_sendAuth: @"PLAIN"]; return; } assert(0); } @@ -1050,18 +1059,18 @@ if (session != nil && [session elementForName: @"optional" namespace: XMPP_NS_SESSION] == nil) _needsSession = true; if (bind != nil) { - [self XMPP_sendResourceBind]; + [self xmpp_sendResourceBind]; return; } assert(0); } -- (void)XMPP_sendAuth: (OFString *)authName +- (void)xmpp_sendAuth: (OFString *)authName { OFXMLElement *authTag; OFData *initialMessage = [_authModule initialMessage]; authTag = [OFXMLElement elementWithName: @"auth" @@ -1077,11 +1086,11 @@ } [self sendStanza: authTag]; } -- (void)XMPP_sendResourceBind +- (void)xmpp_sendResourceBind { XMPPIQ *IQ; OFXMLElement *bind; IQ = [XMPPIQ IQWithType: @"set" @@ -1097,15 +1106,15 @@ [IQ addChild: bind]; [self sendIQ: IQ callbackTarget: self - selector: @selector(XMPP_handleResourceBindForConnection: + selector: @selector(xmpp_handleResourceBindForConnection: IQ:)]; } -- (void)XMPP_sendStreamError: (OFString *)condition +- (void)xmpp_sendStreamError: (OFString *)condition text: (OFString *)text { OFXMLElement *error = [OFXMLElement elementWithName: @"error" namespace: XMPP_NS_STREAM]; @@ -1121,11 +1130,11 @@ [_parser setDelegate: nil]; [self sendStanza: error]; [self close]; } -- (void)XMPP_handleResourceBindForConnection: (XMPPConnection *)connection +- (void)xmpp_handleResourceBindForConnection: (XMPPConnection *)connection IQ: (XMPPIQ *)IQ { OFXMLElement *bindElement, *JIDElement; assert([[IQ type] isEqual: @"result"]); @@ -1138,33 +1147,33 @@ JIDElement = [bindElement elementForName: @"jid" namespace: XMPP_NS_BIND]; _JID = [[XMPPJID alloc] initWithString: [JIDElement stringValue]]; if (_needsSession) { - [self XMPP_sendSession]; + [self xmpp_sendSession]; return; } [_delegates broadcastSelector: @selector(connection:wasBoundToJID:) withObject: self withObject: _JID]; } -- (void)XMPP_sendSession +- (void)xmpp_sendSession { XMPPIQ *IQ = [XMPPIQ IQWithType: @"set" ID: [self generateStanzaID]]; [IQ addChild: [OFXMLElement elementWithName: @"session" namespace: XMPP_NS_SESSION]]; [self sendIQ: IQ callbackTarget: self - selector: @selector(XMPP_handleSessionForConnection:IQ:)]; + selector: @selector(xmpp_handleSessionForConnection:IQ:)]; } -- (void)XMPP_handleSessionForConnection: (XMPPConnection *)connection +- (void)xmpp_handleSessionForConnection: (XMPPConnection *)connection IQ: (XMPPIQ *)IQ { if (![[IQ type] isEqual: @"result"]) OF_ENSURE(0); @@ -1171,11 +1180,11 @@ [_delegates broadcastSelector: @selector(connection:wasBoundToJID:) withObject: self withObject: _JID]; } -- (OFString *)XMPP_IDNAToASCII: (OFString *)domain +- (OFString *)xmpp_IDNAToASCII: (OFString *)domain { OFString *ret; char *cDomain; Idna_rc rc; @@ -1217,10 +1226,10 @@ - (void)removeDelegate: (id )delegate { [_delegates removeDelegate: delegate]; } -- (XMPPMulticastDelegate *)XMPP_delegates +- (XMPPMulticastDelegate *)xmpp_delegates { return _delegates; } @end Index: src/XMPPContact+Private.h ================================================================== --- src/XMPPContact+Private.h +++ src/XMPPContact+Private.h @@ -1,13 +1,13 @@ #import "XMPPContact.h" OF_ASSUME_NONNULL_BEGIN @interface XMPPContact () -- (void)XMPP_setRosterItem: (XMPPRosterItem *)rosterItem; -- (void)XMPP_setPresence: (XMPPPresence *)presence +- (void)xmpp_setRosterItem: (XMPPRosterItem *)rosterItem; +- (void)xmpp_setPresence: (XMPPPresence *)presence resource: (OFString *)resource; -- (void)XMPP_removePresenceForResource: (OFString *)resource; -- (void)XMPP_setLockedOnJID: (nullable XMPPJID *)JID; +- (void)xmpp_removePresenceForResource: (OFString *)resource; +- (void)xmpp_setLockedOnJID: (nullable XMPPJID *)JID; @end OF_ASSUME_NONNULL_END Index: src/XMPPContact.m ================================================================== --- src/XMPPContact.m +++ src/XMPPContact.m @@ -28,11 +28,11 @@ @implementation XMPPContact @synthesize rosterItem = _rosterItem; @synthesize presences = _presences; -- init +- (instancetype)init { self = [super init]; @try { _presences = [[OFMutableDictionary alloc] init]; @@ -60,44 +60,44 @@ [message setTo: _lockedOnJID]; [connection sendStanza: message]; } -- (void)XMPP_setRosterItem: (XMPPRosterItem *)rosterItem +- (void)xmpp_setRosterItem: (XMPPRosterItem *)rosterItem { XMPPRosterItem *old = _rosterItem; _rosterItem = [rosterItem retain]; [old release]; } -- (void)XMPP_setPresence: (XMPPPresence *)presence +- (void)xmpp_setPresence: (XMPPPresence *)presence resource: (OFString *)resource { if (resource != nil) [_presences setObject: presence forKey: resource]; else [_presences setObject: presence forKey: @""]; - [self XMPP_setLockedOnJID: nil]; + [self xmpp_setLockedOnJID: nil]; } -- (void)XMPP_removePresenceForResource: (OFString *)resource +- (void)xmpp_removePresenceForResource: (OFString *)resource { if (resource != nil) { [_presences removeObjectForKey: resource]; } else { [_presences release]; _presences = [[OFMutableDictionary alloc] init]; } - [self XMPP_setLockedOnJID: nil]; + [self xmpp_setLockedOnJID: nil]; } -- (void)XMPP_setLockedOnJID: (XMPPJID *)JID; +- (void)xmpp_setLockedOnJID: (XMPPJID *)JID; { XMPPJID *old = _lockedOnJID; _lockedOnJID = [JID retain]; [old release]; } @end Index: src/XMPPContactManager.h ================================================================== --- src/XMPPContactManager.h +++ src/XMPPContactManager.h @@ -122,12 +122,13 @@ * * @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 OF_DESIGNATED_INITIALIZER; +- (instancetype)initWithConnection: (XMPPConnection *)connection + roster: (XMPPRoster *)roster + OF_DESIGNATED_INITIALIZER; - (void)sendSubscribedToJID: (XMPPJID *)subscriber; - (void)sendUnsubscribedToJID: (XMPPJID *)subscriber; /*! Index: src/XMPPContactManager.m ================================================================== --- src/XMPPContactManager.m +++ src/XMPPContactManager.m @@ -30,12 +30,12 @@ #import "XMPPRosterItem.h" @implementation XMPPContactManager @synthesize contacts = _contacts; -- initWithConnection: (XMPPConnection *)connection - roster: (XMPPRoster *)roster +- (instancetype)initWithConnection: (XMPPConnection *)connection + roster: (XMPPRoster *)roster { self = [super init]; @try { _connection = connection; @@ -88,31 +88,26 @@ [_delegates removeDelegate: delegate]; } - (void)rosterWasReceived: (XMPPRoster *)roster { - OFEnumerator *contactEnumerator; - XMPPContact *contact; OFDictionary *rosterItems; - OFEnumerator *rosterItemEnumerator; - OFString *bareJID; - contactEnumerator = [_contacts objectEnumerator]; - while ((contact = [contactEnumerator nextObject]) != nil) { + for (XMPPContact *contact in _contacts) [_delegates broadcastSelector: @selector(contactManager: didRemoveContact:) withObject: self withObject: contact]; - } [_contacts release]; + _contacts = nil; _contacts = [[OFMutableDictionary alloc] init]; + rosterItems = [roster rosterItems]; - rosterItemEnumerator = [rosterItems keyEnumerator]; - while ((bareJID = [rosterItemEnumerator nextObject]) != nil) { - contact = [[[XMPPContact alloc] init] autorelease]; - [contact XMPP_setRosterItem: + for (OFString *bareJID in rosterItems) { + XMPPContact *contact = [[[XMPPContact alloc] init] autorelease]; + [contact xmpp_setRosterItem: [rosterItems objectForKey: bareJID]]; [_contacts setObject: contact forKey: bareJID]; [_delegates broadcastSelector: @selector(contactManager: didAddContact:) @@ -139,11 +134,11 @@ return; } if (contact == nil) { contact = [[[XMPPContact alloc] init] autorelease]; - [contact XMPP_setRosterItem: rosterItem]; + [contact xmpp_setRosterItem: rosterItem]; [_contacts setObject: contact forKey: bareJID]; [_delegates broadcastSelector: @selector(contactManager: didAddContact:) withObject: self @@ -151,11 +146,11 @@ } else { [_delegates broadcastSelector: @selector(contact: willUpdateWithRosterItem:) withObject: contact withObject: rosterItem]; - [contact XMPP_setRosterItem: rosterItem]; + [contact xmpp_setRosterItem: rosterItem]; } } - (void)connection: (XMPPConnection *)connection didReceivePresence: (XMPPPresence *)presence @@ -178,11 +173,11 @@ if (contact == nil) return; /* Available presence */ if ([type isEqual: @"available"]) { - [contact XMPP_setPresence: presence + [contact xmpp_setPresence: presence resource: [JID resource]]; [_delegates broadcastSelector: @selector(contact: didSendPresence:) withObject: contact withObject: presence]; @@ -189,11 +184,11 @@ return; } /* Unavailable presence */ if ([type isEqual: @"unavailable"]) { - [contact XMPP_removePresenceForResource: [JID resource]]; + [contact xmpp_removePresenceForResource: [JID resource]]; [_delegates broadcastSelector: @selector(contact: didSendPresence:) withObject: contact withObject: presence]; return; @@ -207,12 +202,12 @@ XMPPContact *contact = [_contacts objectForKey: [JID bareJID]]; if (contact == nil) return; - [contact XMPP_setLockedOnJID: JID]; + [contact xmpp_setLockedOnJID: JID]; [_delegates broadcastSelector: @selector(contact:didSendMessage:) withObject: contact withObject: message]; } @end Index: src/XMPPDiscoEntity.h ================================================================== --- src/XMPPDiscoEntity.h +++ src/XMPPDiscoEntity.h @@ -79,25 +79,25 @@ * @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; +- (instancetype)initWithJID: (XMPPJID *)JID + node: (nullable OFString *)node OF_UNAVAILABLE; +- (instancetype)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; +- (instancetype)initWithConnection: (XMPPConnection *)connection; /*! * @brief Initializes an already allocated XMPPDiscoEntity with the specified * connection. * @@ -104,12 +104,13 @@ * @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: (nullable OFString *)capsNode OF_DESIGNATED_INITIALIZER; +- (instancetype)initWithConnection: (XMPPConnection *)connection + capsNode: (nullable OFString *)capsNode + OF_DESIGNATED_INITIALIZER; /*! * @brief Adds a XMPPDiscoNode to provide responses for. * * @param node The XMPPDiscoNode to provide responses for Index: src/XMPPDiscoEntity.m ================================================================== --- src/XMPPDiscoEntity.m +++ src/XMPPDiscoEntity.m @@ -41,25 +41,25 @@ { return [[[self alloc] initWithConnection: connection capsNode: capsNode] autorelease]; } -- initWithConnection: (XMPPConnection *)connection +- (instancetype)initWithConnection: (XMPPConnection *)connection { return [self initWithConnection: connection capsNode: nil]; } -- initWithJID: (XMPPJID *)JID - node: (nullable OFString *)node - name: (nullable OFString *)name +- (instancetype)initWithJID: (XMPPJID *)JID + node: (nullable OFString *)node + name: (nullable OFString *)name { OF_INVALID_INIT_METHOD } -- initWithConnection: (XMPPConnection *)connection - capsNode: (OFString *)capsNode +- (instancetype)initWithConnection: (XMPPConnection *)connection + capsNode: (OFString *)capsNode { self = [super initWithJID: [connection JID] node: nil name: nil]; @@ -91,24 +91,19 @@ forKey: [node node]]; } - (OFString *)capsHash { - OFEnumerator *enumerator; - XMPPDiscoIdentity *identity; - OFString *feature; OFMutableString *caps = [OFMutableString string]; OFSHA1Hash *hash = [OFSHA1Hash cryptoHash]; OFData *digest; - enumerator = [_identities objectEnumerator]; - while ((identity = [enumerator nextObject]) != nil) + for (XMPPDiscoIdentity *identity in _identities) [caps appendFormat: @"%@/%@//%@<", [identity category], [identity type], [identity name]]; - enumerator = [_features objectEnumerator]; - while ((feature = [enumerator nextObject]) != nil) + for (OFString *feature in _features) [caps appendFormat: @"%@<", feature]; [hash updateWithBuffer: [caps UTF8String] length: [caps UTF8StringLength]]; @@ -135,16 +130,16 @@ if (query != nil) { OFString *node = [[query attributeForName: @"node"] stringValue]; if (node == nil) - return [self XMPP_handleItemsIQ: IQ + return [self xmpp_handleItemsIQ: IQ connection: connection]; XMPPDiscoNode *responder = [_discoNodes objectForKey: node]; if (responder != nil) - return [responder XMPP_handleItemsIQ: IQ + return [responder xmpp_handleItemsIQ: IQ connection: connection]; return false; } @@ -154,25 +149,25 @@ if (query != nil) { OFString *node = [[query attributeForName: @"node"] stringValue]; if (node == nil) - return [self XMPP_handleInfoIQ: IQ + return [self xmpp_handleInfoIQ: IQ connection: connection]; OFString *capsNode = [_capsNode stringByAppendingFormat: @"#%@", [self capsHash]]; if ([capsNode isEqual: node]) - return [self XMPP_handleInfoIQ: IQ + return [self xmpp_handleInfoIQ: IQ connection: connection]; XMPPDiscoNode *responder = [_discoNodes objectForKey: node]; if (responder != nil) - return [responder XMPP_handleInfoIQ: IQ + return [responder xmpp_handleInfoIQ: IQ connection: connection]; return false; } return false; } @end Index: src/XMPPDiscoIdentity.h ================================================================== --- src/XMPPDiscoIdentity.h +++ src/XMPPDiscoIdentity.h @@ -70,11 +70,11 @@ * @return A new autoreleased XMPPDiscoIdentity */ + (instancetype)identityWithCategory: (OFString *)category type: (OFString *)type; -- init OF_UNAVAILABLE; +- (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated XMPPDiscoIdentity with the specified * category, type and name. * @@ -81,22 +81,23 @@ * @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: (nullable OFString *)name OF_DESIGNATED_INITIALIZER; +- (instancetype)initWithCategory: (OFString *)category + type: (OFString *)type + 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; +- (instancetype)initWithCategory: (OFString *)category + type: (OFString *)type; @end OF_ASSUME_NONNULL_END Index: src/XMPPDiscoIdentity.m ================================================================== --- src/XMPPDiscoIdentity.m +++ src/XMPPDiscoIdentity.m @@ -40,13 +40,13 @@ { return [[[self alloc] initWithCategory: category type: type] autorelease]; } -- initWithCategory: (OFString *)category - type: (OFString *)type - name: (OFString *)name +- (instancetype)initWithCategory: (OFString *)category + type: (OFString *)type + name: (OFString *)name { self = [super init]; @try { if (category == nil || type == nil) @@ -61,19 +61,19 @@ } return self; } -- initWithCategory: (OFString *)category - type: (OFString *)type +- (instancetype)initWithCategory: (OFString *)category + type: (OFString *)type { return [self initWithCategory: category type: type name: nil]; } -- init +- (instancetype)init { OF_INVALID_INIT_METHOD } - (void)dealloc Index: src/XMPPDiscoNode+Private.h ================================================================== --- src/XMPPDiscoNode+Private.h +++ src/XMPPDiscoNode+Private.h @@ -4,12 +4,12 @@ @class XMPPConnection; @class XMPPIQ; @interface XMPPDiscoNode () -- (bool)XMPP_handleItemsIQ: (XMPPIQ *)IQ +- (bool)xmpp_handleItemsIQ: (XMPPIQ *)IQ connection: (XMPPConnection *)connection; -- (bool)XMPP_handleInfoIQ: (XMPPIQ *)IQ +- (bool)xmpp_handleInfoIQ: (XMPPIQ *)IQ connection: (XMPPConnection *)connection; @end OF_ASSUME_NONNULL_END Index: src/XMPPDiscoNode.h ================================================================== --- src/XMPPDiscoNode.h +++ src/XMPPDiscoNode.h @@ -101,12 +101,12 @@ * * @param JID The JID this node lives on * @param node The node's opaque name * @return An initialized XMPPDiscoNode */ -- initWithJID: (XMPPJID *)JID - node: (nullable OFString *)node; +- (instancetype)initWithJID: (XMPPJID *)JID + node: (nullable OFString *)node; /*! * @brief Initializes an already allocated XMPPDiscoNode with the specified * JID, node and name * @@ -113,32 +113,33 @@ * @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: (nullable OFString *)node - name: (nullable OFString *)name OF_DESIGNATED_INITIALIZER; - - /*! - * @brief Adds an XMPPDiscoIdentity to the node - * - * @param identity The XMPPDiscoIdentity to add - */ +- (instancetype)initWithJID: (XMPPJID *)JID + 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; - /*! - * @brief Adds a feature to the node - * - * @param feature The feature to add - */ +/*! + * @brief Adds a feature to the node + * + * @param feature The feature to add + */ - (void)addFeature: (OFString *)feature; - /*! - * @brief Adds a XMPPDiscoNode as child of the node - * - * @param node The XMPPDiscoNode to add as child - */ +/*! + * @brief Adds a XMPPDiscoNode as child of the node + * + * @param node The XMPPDiscoNode to add as child + */ - (void)addChildNode: (XMPPDiscoNode *)node; @end OF_ASSUME_NONNULL_END Index: src/XMPPDiscoNode.m ================================================================== --- src/XMPPDiscoNode.m +++ src/XMPPDiscoNode.m @@ -49,21 +49,21 @@ return [[[self alloc] initWithJID: JID node: node name: name] autorelease]; } -- initWithJID: (XMPPJID *)JID - node: (OFString *)node +- (instancetype)initWithJID: (XMPPJID *)JID + node: (OFString *)node { return [self initWithJID: JID node: node name: nil]; } -- initWithJID: (XMPPJID *)JID - node: (OFString *)node - name: (OFString *)name +- (instancetype)initWithJID: (XMPPJID *)JID + node: (OFString *)node + name: (OFString *)name { self = [super init]; @try { if (JID == nil && @@ -118,17 +118,15 @@ { [_childNodes setObject: node forKey: [node node]]; } -- (bool)XMPP_handleItemsIQ: (XMPPIQ *)IQ +- (bool)xmpp_handleItemsIQ: (XMPPIQ *)IQ connection: (XMPPConnection *)connection { XMPPIQ *resultIQ; OFXMLElement *response; - XMPPDiscoNode *child; - OFEnumerator *enumerator; OFXMLElement *query = [IQ elementForName: @"query" namespace: XMPP_NS_DISCO_ITEMS]; OFString *node = [[query attributeForName: @"node"] stringValue]; if (!(node == _node) && ![node isEqual: _node]) @@ -137,12 +135,11 @@ resultIQ = [IQ resultIQ]; response = [OFXMLElement elementWithName: @"query" namespace: XMPP_NS_DISCO_ITEMS]; [resultIQ addChild: response]; - enumerator = [_childNodes objectEnumerator]; - while ((child = [enumerator nextObject])) { + for (XMPPDiscoNode *child in _childNodes) { OFXMLElement *item = [OFXMLElement elementWithName: @"item" namespace: XMPP_NS_DISCO_ITEMS]; [item addAttributeWithName: @"jid" @@ -160,26 +157,22 @@ [connection sendStanza: resultIQ]; return true; } -- (bool)XMPP_handleInfoIQ: (XMPPIQ *)IQ +- (bool)xmpp_handleInfoIQ: (XMPPIQ *)IQ connection: (XMPPConnection *)connection { XMPPIQ *resultIQ; OFXMLElement *response; - OFEnumerator *enumerator; - OFString *feature; - XMPPDiscoIdentity *identity; resultIQ = [IQ resultIQ]; response = [OFXMLElement elementWithName: @"query" namespace: XMPP_NS_DISCO_INFO]; [resultIQ addChild: response]; - enumerator = [_identities objectEnumerator]; - while ((identity = [enumerator nextObject])) { + for (XMPPDiscoIdentity *identity in _identities) { OFXMLElement *identityElement = [OFXMLElement elementWithName: @"identity" namespace: XMPP_NS_DISCO_INFO]; [identityElement addAttributeWithName: @"category" @@ -191,12 +184,11 @@ stringValue: [identity name]]; [response addChild: identityElement]; } - enumerator = [_features objectEnumerator]; - while ((feature = [enumerator nextObject])) { + for (OFString *feature in _features) { OFXMLElement *featureElement = [OFXMLElement elementWithName: @"feature" namespace: XMPP_NS_DISCO_INFO]; [featureElement addAttributeWithName: @"var" stringValue: feature]; Index: src/XMPPExceptions.h ================================================================== --- src/XMPPExceptions.h +++ src/XMPPExceptions.h @@ -48,20 +48,20 @@ * for this exception * @return A new XMPPException */ + (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection; -- init OF_UNAVAILABLE; +- (instancetype)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: (nullable XMPPConnection *)connection +- (instancetype)initWithConnection: (nullable XMPPConnection *)connection OF_DESIGNATED_INITIALIZER; @end /*! * @brief An exception indicating a stream error was received @@ -91,23 +91,25 @@ */ + (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection condition: (OFString *)condition reason: (OFString *)reason; -- initWithConnection: (nullable XMPPConnection *)connection OF_UNAVAILABLE; +- (instancetype)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: (nullable XMPPConnection *)connection - condition: (OFString *)condition - reason: (OFString *)reason OF_DESIGNATED_INITIALIZER; +- (instancetype)initWithConnection: (nullable XMPPConnection *)connection + condition: (OFString *)condition + reason: (OFString *)reason + OF_DESIGNATED_INITIALIZER; @end /*! * @brief An exception indicating a stringprep profile * did not apply to a string @@ -137,23 +139,25 @@ */ + (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection profile: (OFString *)profile string: (OFString *)string; -- initWithConnection: (nullable XMPPConnection *)connection OF_UNAVAILABLE; +- (instancetype)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: (nullable XMPPConnection *)connection - profile: (OFString *)profile - string: (OFString *)string OF_DESIGNATED_INITIALIZER; +- (instancetype)initWithConnection: (nullable XMPPConnection *)connection + profile: (OFString *)profile + string: (OFString *)string + OF_DESIGNATED_INITIALIZER; @end /*! * @brief An exception indicating IDNA translation of a string failed */ @@ -182,23 +186,24 @@ */ + (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection operation: (OFString *)operation string: (OFString *)string; -- initWithConnection: (nullable XMPPConnection *)connection OF_UNAVAILABLE; +- (instancetype)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: (nullable XMPPConnection *)connection - operation: (OFString *)operation - string: (OFString *)string; +- (instancetype)initWithConnection: (nullable XMPPConnection *)connection + operation: (OFString *)operation + string: (OFString *)string; @end /*! * @brief An exception indicating authentication failed */ @@ -220,19 +225,21 @@ * @return A new XMPPAuthFailedException */ + (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection reason: (OFString *)reason; -- initWithConnection: (nullable XMPPConnection *)connection OF_UNAVAILABLE; +- (instancetype)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: (nullable XMPPConnection *)connection - reason: (OFString *)reason OF_DESIGNATED_INITIALIZER; +- (instancetype)initWithConnection: (nullable XMPPConnection *)connection + reason: (OFString *)reason + OF_DESIGNATED_INITIALIZER; @end OF_ASSUME_NONNULL_END Index: src/XMPPExceptions.m ================================================================== --- src/XMPPExceptions.m +++ src/XMPPExceptions.m @@ -36,16 +36,16 @@ + (instancetype)exceptionWithConnection: (XMPPConnection *)connection { return [[[self alloc] initWithConnection: connection] autorelease]; } -- init +- (instancetype)init { OF_INVALID_INIT_METHOD } -- initWithConnection: (XMPPConnection *)connection +- (instancetype)initWithConnection: (XMPPConnection *)connection { self = [super init]; @try { _connection = [connection retain]; @@ -75,18 +75,18 @@ return [[[self alloc] initWithConnection: connection condition: condition reason: reason] autorelease]; } -- initWithConnection: (XMPPConnection *)connection +- (instancetype)initWithConnection: (XMPPConnection *)connection { OF_INVALID_INIT_METHOD } -- initWithConnection: (XMPPConnection *)connection - condition: (OFString *)condition - reason: (OFString *)reason +- (instancetype)initWithConnection: (XMPPConnection *)connection + condition: (OFString *)condition + reason: (OFString *)reason { self = [super initWithConnection: connection]; @try { _condition = [condition copy]; @@ -124,18 +124,18 @@ return [[[self alloc] initWithConnection: connection profile: profile string: string] autorelease]; } -- initWithConnection: (XMPPConnection *)connection +- (instancetype)initWithConnection: (XMPPConnection *)connection { OF_INVALID_INIT_METHOD } -- initWithConnection: (XMPPConnection *)connection - profile: (OFString *)profile - string: (OFString *)string +- (instancetype)initWithConnection: (XMPPConnection *)connection + profile: (OFString *)profile + string: (OFString *)string { self = [super initWithConnection: connection]; @try { _profile = [profile copy]; @@ -174,18 +174,18 @@ return [[[self alloc] initWithConnection: connection operation: operation string: string] autorelease]; } -- initWithConnection: (XMPPConnection *)connection +- (instancetype)initWithConnection: (XMPPConnection *)connection { OF_INVALID_INIT_METHOD } -- initWithConnection: (XMPPConnection *)connection - operation: (OFString *)operation - string: (OFString *)string +- (instancetype)initWithConnection: (XMPPConnection *)connection + operation: (OFString *)operation + string: (OFString *)string { self = [super initWithConnection: connection]; @try { _operation = [operation copy]; @@ -221,17 +221,17 @@ { return [[[self alloc] initWithConnection: connection reason: reason] autorelease]; } -- initWithConnection: (XMPPConnection *)connection +- (instancetype)initWithConnection: (XMPPConnection *)connection { OF_INVALID_INIT_METHOD } -- initWithConnection: (XMPPConnection *)connection - reason: (OFString *)reason +- (instancetype)initWithConnection: (XMPPConnection *)connection + reason: (OFString *)reason { self = [super initWithConnection: connection]; @try { _reason = [reason copy]; Index: src/XMPPFileStorage.h ================================================================== --- src/XMPPFileStorage.h +++ src/XMPPFileStorage.h @@ -32,10 +32,10 @@ { OFString *_file; OFMutableDictionary *_data; } -- init OF_UNAVAILABLE; -- initWithFile: (OFString *)file; +- (instancetype)init OF_UNAVAILABLE; +- (instancetype)initWithFile: (OFString *)file; @end OF_ASSUME_NONNULL_END Index: src/XMPPFileStorage.m ================================================================== --- src/XMPPFileStorage.m +++ src/XMPPFileStorage.m @@ -36,16 +36,16 @@ #import #import "XMPPFileStorage.h" @implementation XMPPFileStorage -- init +- (instancetype)init { OF_INVALID_INIT_METHOD } -- initWithFile: (OFString *)file +- (instancetype)initWithFile: (OFString *)file { self = [super init]; @try { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; @@ -78,20 +78,18 @@ - (void)save { [[_data messagePackRepresentation] writeToFile: _file]; } -- (void)XMPP_setObject: (id)object +- (void)xmpp_setObject: (id)object forPath: (OFString *)path { OFArray *pathComponents = [path componentsSeparatedByString: @"."]; OFMutableDictionary *iter = _data; - OFEnumerator *enumerator = [pathComponents objectEnumerator]; - OFString *component; size_t i = 0, components = [pathComponents count]; - while ((component = [enumerator nextObject]) != nil) { + for (OFString *component in pathComponents) { if (i++ == components - 1) continue; OFMutableDictionary *iter2 = [iter objectForKey: component]; @@ -109,11 +107,11 @@ forKey: [pathComponents lastObject]]; else [iter removeObjectForKey: [pathComponents lastObject]]; } -- (id)XMPP_objectForPath: (OFString *)path +- (id)xmpp_objectForPath: (OFString *)path { id object = _data; for (OFString *component in [path componentsSeparatedByString: @"."]) object = [object objectForKey: component]; @@ -124,11 +122,11 @@ - (void)setStringValue: (OFString *)string forPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); - [self XMPP_setObject: string + [self xmpp_setObject: string forPath: path]; objc_autoreleasePoolPop(pool); } @@ -135,11 +133,11 @@ - (OFString *)stringValueForPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); OFString *string; - string = [self XMPP_objectForPath: path]; + string = [self xmpp_objectForPath: path]; objc_autoreleasePoolPop(pool); return string; } @@ -147,11 +145,11 @@ - (void)setBooleanValue: (bool)boolean forPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); - [self XMPP_setObject: [OFNumber numberWithBool: boolean] + [self xmpp_setObject: [OFNumber numberWithBool: boolean] forPath: path]; objc_autoreleasePoolPop(pool); } @@ -158,11 +156,11 @@ - (bool)booleanValueForPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); bool boolean; - boolean = [[self XMPP_objectForPath: path] boolValue]; + boolean = [[self xmpp_objectForPath: path] boolValue]; objc_autoreleasePoolPop(pool); return boolean; } @@ -170,11 +168,11 @@ - (void)setIntegerValue: (intmax_t)integer forPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); - [self XMPP_setObject: [OFNumber numberWithIntMax: integer] + [self xmpp_setObject: [OFNumber numberWithIntMax: integer] forPath: path]; objc_autoreleasePoolPop(pool); } @@ -181,11 +179,11 @@ - (intmax_t)integerValueForPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); intmax_t integer; - integer = [[self XMPP_objectForPath: path] intMaxValue]; + integer = [[self xmpp_objectForPath: path] intMaxValue]; objc_autoreleasePoolPop(pool); return integer; } @@ -193,11 +191,11 @@ - (void)setArray: (OFArray *)array forPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); - [self XMPP_setObject: array + [self xmpp_setObject: array forPath: path]; objc_autoreleasePoolPop(pool); } @@ -204,11 +202,11 @@ - (OFArray *)arrayForPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); OFArray *array; - array = [self XMPP_objectForPath: path]; + array = [self xmpp_objectForPath: path]; objc_autoreleasePoolPop(pool); return array; } @@ -216,11 +214,11 @@ - (void)setDictionary: (OFDictionary *)dictionary forPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); - [self XMPP_setObject: dictionary + [self xmpp_setObject: dictionary forPath: path]; objc_autoreleasePoolPop(pool); } @@ -227,12 +225,12 @@ - (OFDictionary *)dictionaryForPath: (OFString *)path { void *pool = objc_autoreleasePoolPush(); OFDictionary *dictionary; - dictionary = [self XMPP_objectForPath: path]; + dictionary = [self xmpp_objectForPath: path]; objc_autoreleasePoolPop(pool); return dictionary; } @end Index: src/XMPPIQ.h ================================================================== --- src/XMPPIQ.h +++ src/XMPPIQ.h @@ -45,12 +45,12 @@ * * @param type The value for the stanza's type attribute * @param ID The value for the stanza's id attribute * @return An initialized XMPPIQ */ -- initWithType: (OFString *)type - ID: (OFString *)ID; +- (instancetype)initWithType: (OFString *)type + ID: (OFString *)ID; /*! * @brief Generates a result IQ for the receiving object. * * @return A new autoreleased XMPPIQ Index: src/XMPPIQ.m ================================================================== --- src/XMPPIQ.m +++ src/XMPPIQ.m @@ -34,12 +34,12 @@ { return [[[self alloc] initWithType: type ID: ID] autorelease]; } -- initWithType: (OFString *)type - ID: (OFString *)ID +- (instancetype)initWithType: (OFString *)type + ID: (OFString *)ID { self = [super initWithName: @"iq" type: type ID: ID]; Index: src/XMPPJID.h ================================================================== --- src/XMPPJID.h +++ src/XMPPJID.h @@ -67,11 +67,11 @@ * @brief Initializes an already allocated XMPPJID with a string. * * @param string The string to parse into a JID object * @return A initialized XMPPJID */ -- initWithString: (OFString *)string; +- (instancetype)initWithString: (OFString *)string; /*! * @brief Returns the bare JID. * * @return An OFString containing the bare JID Index: src/XMPPJID.m ================================================================== --- src/XMPPJID.m +++ src/XMPPJID.m @@ -43,11 +43,11 @@ + (instancetype)JIDWithString: (OFString *)string { return [[[self alloc] initWithString: string] autorelease]; } -- initWithString: (OFString *)string +- (instancetype)initWithString: (OFString *)string { size_t nodesep, resourcesep; self = [super init]; Index: src/XMPPMessage.h ================================================================== --- src/XMPPMessage.h +++ src/XMPPMessage.h @@ -71,28 +71,28 @@ * @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: (nullable OFString *)ID; +- (instancetype)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: (nullable OFString *)type; +- (instancetype)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: (nullable OFString *)type - ID: (nullable OFString *)ID OF_DESIGNATED_INITIALIZER; +- (instancetype)initWithType: (nullable OFString *)type + ID: (nullable OFString *)ID OF_DESIGNATED_INITIALIZER; @end OF_ASSUME_NONNULL_END Index: src/XMPPMessage.m ================================================================== --- src/XMPPMessage.m +++ src/XMPPMessage.m @@ -49,30 +49,30 @@ { return [[[self alloc] initWithType: type ID: ID] autorelease]; } -- init +- (instancetype)init { return [self initWithType: nil ID: nil]; } -- initWithID: (OFString *)ID +- (instancetype)initWithID: (OFString *)ID { return [self initWithType: nil ID: ID]; } -- initWithType: (OFString *)type +- (instancetype)initWithType: (OFString *)type { return [self initWithType: type ID: nil]; } -- initWithType: (OFString *)type - ID: (OFString *)ID +- (instancetype)initWithType: (OFString *)type + ID: (OFString *)ID { return [super initWithName: @"message" type: type ID: ID]; } Index: src/XMPPMulticastDelegate.m ================================================================== --- src/XMPPMulticastDelegate.m +++ src/XMPPMulticastDelegate.m @@ -28,11 +28,11 @@ #import #import "XMPPMulticastDelegate.h" @implementation XMPPMulticastDelegate -- init +- (instancetype)init { self = [super init]; @try { _delegates = [[OFMutableData alloc] Index: src/XMPPPresence.h ================================================================== --- src/XMPPPresence.h +++ src/XMPPPresence.h @@ -92,28 +92,28 @@ * @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: (nullable OFString *)ID; +- (instancetype)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: (nullable OFString *)type; +- (instancetype)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: (nullable OFString *)type - ID: (nullable OFString *)ID; +- (instancetype)initWithType: (nullable OFString *)type + ID: (nullable OFString *)ID; @end OF_ASSUME_NONNULL_END Index: src/XMPPPresence.m ================================================================== --- src/XMPPPresence.m +++ src/XMPPPresence.m @@ -71,37 +71,37 @@ { return [[[self alloc] initWithType: type ID: ID] autorelease]; } -- init +- (instancetype)init { return [self initWithType: nil ID: nil]; } -- initWithID: (OFString *)ID +- (instancetype)initWithID: (OFString *)ID { return [self initWithType: nil ID: ID]; } -- initWithType: (OFString *)type +- (instancetype)initWithType: (OFString *)type { return [self initWithType: type ID: nil]; } -- initWithType: (OFString *)type - ID: (OFString *)ID +- (instancetype)initWithType: (OFString *)type + ID: (OFString *)ID { return [super initWithName: @"presence" type: type ID: ID]; } -- initWithElement: (OFXMLElement *)element +- (instancetype)initWithElement: (OFXMLElement *)element { self = [super initWithElement: element]; @try { OFXMLElement *subElement; Index: src/XMPPRoster.h ================================================================== --- src/XMPPRoster.h +++ src/XMPPRoster.h @@ -86,20 +86,21 @@ * as key. */ @property (readonly, nonatomic) OFDictionary OF_GENERIC(OFString *, XMPPRosterItem *) *rosterItems; -- init OF_UNAVAILABLE; +- (instancetype)init OF_UNAVAILABLE; /*! * @brief Initializes an already allocated XMPPRoster. * * @param connection The connection roster related stanzas are send and * received over * @return An initialized XMPPRoster */ -- initWithConnection: (XMPPConnection *)connection OF_DESIGNATED_INITIALIZER; +- (instancetype)initWithConnection: (XMPPConnection *)connection + OF_DESIGNATED_INITIALIZER; /*! * @brief Requests the roster from the server. */ - (void)requestRoster; Index: src/XMPPRoster.m ================================================================== --- src/XMPPRoster.m +++ src/XMPPRoster.m @@ -40,28 +40,28 @@ #import "namespaces.h" OF_ASSUME_NONNULL_BEGIN @interface XMPPRoster () -- (void)XMPP_updateRosterItem: (XMPPRosterItem *)rosterItem; -- (void)XMPP_handleInitialRosterForConnection: (XMPPConnection *)connection +- (void)xmpp_updateRosterItem: (XMPPRosterItem *)rosterItem; +- (void)xmpp_handleInitialRosterForConnection: (XMPPConnection *)connection IQ: (XMPPIQ *)IQ; -- (XMPPRosterItem *)XMPP_rosterItemWithXMLElement: (OFXMLElement *)element; +- (XMPPRosterItem *)xmpp_rosterItemWithXMLElement: (OFXMLElement *)element; @end OF_ASSUME_NONNULL_END @implementation XMPPRoster @synthesize connection = _connection, dataStorage = _dataStorage; @synthesize rosterItems = _rosterItems; -- init +- (instancetype)init { OF_INVALID_INIT_METHOD } -- initWithConnection: (XMPPConnection *)connection +- (instancetype)initWithConnection: (XMPPConnection *)connection { self = [super init]; @try { _rosterItems = [[OFMutableDictionary alloc] init]; @@ -112,11 +112,11 @@ [iq addChild: query]; [_connection sendIQ: iq callbackTarget: self - selector: @selector(XMPP_handleInitialRosterForConnection: + selector: @selector(xmpp_handleInitialRosterForConnection: IQ:)]; } - (bool)connection: (XMPPConnection *)connection didReceiveIQ: (XMPPIQ *)IQ @@ -142,18 +142,18 @@ element = [rosterElement elementForName: @"item" namespace: XMPP_NS_ROSTER]; if (element != nil) { - rosterItem = [self XMPP_rosterItemWithXMLElement: element]; + rosterItem = [self xmpp_rosterItemWithXMLElement: element]; [_delegates broadcastSelector: @selector( roster:didReceiveRosterItem:) withObject: self withObject: rosterItem]; - [self XMPP_updateRosterItem: rosterItem]; + [self xmpp_updateRosterItem: rosterItem]; } if ([_connection supportsRosterVersioning]) { OFString *ver = [[rosterElement attributeForName: @"ver"] stringValue]; @@ -178,21 +178,18 @@ ID: [_connection generateStanzaID]]; OFXMLElement *query = [OFXMLElement elementWithName: @"query" namespace: XMPP_NS_ROSTER]; OFXMLElement *item = [OFXMLElement elementWithName: @"item" namespace: XMPP_NS_ROSTER]; - OFEnumerator *enumerator; - OFString *group; [item addAttributeWithName: @"jid" stringValue: [[rosterItem JID] bareJID]]; if ([rosterItem name] != nil) [item addAttributeWithName: @"name" stringValue: [rosterItem name]]; - enumerator = [[rosterItem groups] objectEnumerator]; - while ((group = [enumerator nextObject]) != nil) + for (OFString *group in [rosterItem groups]) [item addChild: [OFXMLElement elementWithName: @"group" namespace: XMPP_NS_ROSTER stringValue: group]]; [query addChild: item]; @@ -238,11 +235,11 @@ @throw [OFInvalidArgumentException exception]; _dataStorage = dataStorage; } -- (void)XMPP_updateRosterItem: (XMPPRosterItem *)rosterItem +- (void)xmpp_updateRosterItem: (XMPPRosterItem *)rosterItem { if ([_connection supportsRosterVersioning]) { OFMutableDictionary *items = [[[_dataStorage dictionaryForPath: @"roster.items"] mutableCopy] autorelease]; @@ -278,15 +275,13 @@ forKey: [[rosterItem JID] bareJID]]; else [_rosterItems removeObjectForKey: [[rosterItem JID] bareJID]]; } -- (XMPPRosterItem *)XMPP_rosterItemWithXMLElement: (OFXMLElement *)element +- (XMPPRosterItem *)xmpp_rosterItemWithXMLElement: (OFXMLElement *)element { OFString *subscription; - OFEnumerator *groupEnumerator; - OFXMLElement *groupElement; OFMutableArray *groups = [OFMutableArray array]; XMPPRosterItem *rosterItem = [XMPPRosterItem rosterItem]; [rosterItem setJID: [XMPPJID JIDWithString: [[element attributeForName: @"jid"] stringValue]]]; [rosterItem setName: @@ -302,36 +297,31 @@ ![subscription isEqual: @"remove"]) subscription = @"none"; [rosterItem setSubscription: subscription]; - groupEnumerator = [[element - elementsForName: @"group" - namespace: XMPP_NS_ROSTER] objectEnumerator]; - while ((groupElement = [groupEnumerator nextObject]) != nil) + for (OFXMLElement *groupElement in + [element elementsForName: @"group" + namespace: XMPP_NS_ROSTER]) [groups addObject: [groupElement stringValue]]; if ([groups count] > 0) [rosterItem setGroups: groups]; return rosterItem; } -- (void)XMPP_handleInitialRosterForConnection: (XMPPConnection *)connection +- (void)xmpp_handleInitialRosterForConnection: (XMPPConnection *)connection IQ: (XMPPIQ *)IQ { OFXMLElement *rosterElement = [IQ elementForName: @"query" namespace: XMPP_NS_ROSTER]; if ([connection supportsRosterVersioning]) { if (rosterElement == nil) { - OFDictionary *items = [_dataStorage - dictionaryForPath: @"roster.items"]; - OFEnumerator *enumerator = [items objectEnumerator]; - OFDictionary *item; - - while ((item = [enumerator nextObject]) != nil) { + for (OFDictionary *item in + [_dataStorage dictionaryForPath: @"roster.items"]) { XMPPRosterItem *rosterItem; XMPPJID *JID; rosterItem = [XMPPRosterItem rosterItem]; JID = [XMPPJID JIDWithString: @@ -358,13 +348,13 @@ if (![[element name] isEqual: @"item"] || ![[element namespace] isEqual: XMPP_NS_ROSTER]) continue; - rosterItem = [self XMPP_rosterItemWithXMLElement: element]; + rosterItem = [self xmpp_rosterItemWithXMLElement: element]; - [self XMPP_updateRosterItem: rosterItem]; + [self xmpp_updateRosterItem: rosterItem]; objc_autoreleasePoolPop(pool); } if ([connection supportsRosterVersioning] && rosterElement != nil) { Index: src/XMPPSCRAMAuth.h ================================================================== --- src/XMPPSCRAMAuth.h +++ src/XMPPSCRAMAuth.h @@ -74,15 +74,15 @@ 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; +- (instancetype)initWithAuthcid: (nullable OFString *)authcid + password: (nullable OFString *)password OF_UNAVAILABLE; +- (instancetype)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. * @@ -91,15 +91,15 @@ * @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: (nullable OFString *)authcid - password: (nullable OFString *)password - connection: (XMPPConnection *)connection - hash: (Class)hash - plusAvailable: (bool)plusAvailable; +- (instancetype)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. * @@ -109,14 +109,14 @@ * @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: (nullable OFString *)authzid - authcid: (nullable OFString *)authcid - password: (nullable OFString *)password - connection: (XMPPConnection *)connection - hash: (Class)hash - plusAvailable: (bool)plusAvailable OF_DESIGNATED_INITIALIZER; +- (instancetype)initWithAuthzid: (nullable OFString *)authzid + authcid: (nullable OFString *)authcid + password: (nullable OFString *)password + connection: (XMPPConnection *)connection + hash: (Class)hash + plusAvailable: (bool)plusAvailable OF_DESIGNATED_INITIALIZER; @end OF_ASSUME_NONNULL_END Index: src/XMPPSCRAMAuth.m ================================================================== --- src/XMPPSCRAMAuth.m +++ src/XMPPSCRAMAuth.m @@ -35,25 +35,21 @@ #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: (OFData *)key +- (OFString *)xmpp_genNonce; +- (const uint8_t *)xmpp_HMACWithKey: (OFData *)key data: (OFData *)data; -- (OFData *)XMPP_hiWithData: (OFData *)str +- (OFData *)xmpp_hiWithData: (OFData *)str salt: (OFData *)salt iterationCount: (intmax_t)i; -- (OFData *)XMPP_parseServerFirstMessage: (OFData *)data; -- (OFData *)XMPP_parseServerFinalMessage: (OFData *)data; +- (OFData *)xmpp_parseServerFirstMessage: (OFData *)data; +- (OFData *)xmpp_parseServerFinalMessage: (OFData *)data; @end -OF_ASSUME_NONNULL_END - @implementation XMPPSCRAMAuth + (instancetype)SCRAMAuthWithAuthcid: (OFString *)authcid password: (OFString *)password connection: (XMPPConnection *)connection hash: (Class)hash @@ -79,30 +75,30 @@ connection: connection hash: hash plusAvailable: plusAvailable] autorelease]; } -- initWithAuthcid: (OFString *)authcid - password: (OFString *)password - connection: (XMPPConnection *)connection - hash: (Class)hash - plusAvailable: (bool)plusAvailable +- (instancetype)initWithAuthcid: (OFString *)authcid + password: (OFString *)password + connection: (XMPPConnection *)connection + hash: (Class)hash + plusAvailable: (bool)plusAvailable { return [self initWithAuthzid: nil authcid: authcid password: password connection: connection hash: hash plusAvailable: plusAvailable]; } -- initWithAuthzid: (OFString *)authzid - authcid: (OFString *)authcid - password: (OFString *)password - connection: (XMPPConnection *)connection - hash: (Class)hash - plusAvailable: (bool)plusAvailable +- (instancetype)initWithAuthzid: (OFString *)authzid + authcid: (OFString *)authcid + password: (OFString *)password + connection: (XMPPConnection *)connection + hash: (Class)hash + plusAvailable: (bool)plusAvailable { self = [super initWithAuthzid: authzid authcid: authcid password: password]; @@ -177,11 +173,11 @@ (_plusAvailable ? @"p=tls-unique" : @"y"), _authzid]; else _GS2Header = (_plusAvailable ? @"p=tls-unique,," : @"y,,"); - _cNonce = [[self XMPP_genNonce] retain]; + _cNonce = [[self xmpp_genNonce] retain]; [_clientFirstMessageBare release]; _clientFirstMessageBare = nil; _clientFirstMessageBare = [[OFString alloc] initWithFormat: @"n=%@,r=%@", _authcid, _cNonce]; @@ -201,31 +197,29 @@ { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFData *ret; if (!_serverSignature) - ret = [self XMPP_parseServerFirstMessage: data]; + ret = [self xmpp_parseServerFirstMessage: data]; else - ret = [self XMPP_parseServerFinalMessage: data]; + ret = [self xmpp_parseServerFinalMessage: data]; [ret retain]; [pool release]; return [ret autorelease]; } -- (OFData *)XMPP_parseServerFirstMessage: (OFData *)data +- (OFData *)xmpp_parseServerFirstMessage: (OFData *)data { size_t i; const uint8_t *clientKey, *serverKey, *clientSignature; intmax_t iterCount = 0; id hash; OFMutableData *ret, *authMessage, *tmpArray; OFData *salt = nil, *saltedPassword; OFString *tmpString, *sNonce = nil; - OFEnumerator *enumerator; - OFString *comp; enum { GOT_SNONCE = 0x01, GOT_SALT = 0x02, GOT_ITERCOUNT = 0x04 } got = 0; @@ -232,33 +226,32 @@ hash = [[[_hashType alloc] init] autorelease]; ret = [OFMutableData data]; authMessage = [OFMutableData data]; - OFString *chal = [OFString stringWithUTF8String: [data items] - length: [data count] * - [data itemSize]]; - - enumerator = - [[chal componentsSeparatedByString: @","] objectEnumerator]; - while ((comp = [enumerator nextObject]) != nil) { - OFString *entry = [comp substringWithRange: - of_range(2, [comp length] - 2)]; - - if ([comp hasPrefix: @"r="]) { + OFString *challenge = [OFString stringWithUTF8String: [data items] + length: [data count] * + [data itemSize]]; + + for (OFString *component in + [challenge componentsSeparatedByString: @","]) { + OFString *entry = [component substringWithRange: + of_range(2, [component length] - 2)]; + + if ([component hasPrefix: @"r="]) { if (![entry hasPrefix: _cNonce]) @throw [XMPPAuthFailedException exceptionWithConnection: nil reason: @"Received wrong " @"nonce"]; sNonce = entry; got |= GOT_SNONCE; - } else if ([comp hasPrefix: @"s="]) { + } else if ([component hasPrefix: @"s="]) { salt = [OFData dataWithBase64EncodedString: entry]; got |= GOT_SALT; - } else if ([comp hasPrefix: @"i="]) { + } else if ([component hasPrefix: @"i="]) { iterCount = [entry decimalValue]; got |= GOT_ITERCOUNT; } } @@ -291,11 +284,11 @@ * IETF RFC 5802: * SaltedPassword := Hi(Normalize(password), salt, i) */ tmpArray = [OFMutableData dataWithItems: [_password UTF8String] count: [_password UTF8StringLength]]; - saltedPassword = [self XMPP_hiWithData: tmpArray + saltedPassword = [self xmpp_hiWithData: tmpArray salt: salt iterationCount: iterCount]; /* * IETF RFC 5802: @@ -314,11 +307,11 @@ /* * IETF RFC 5802: * ClientKey := HMAC(SaltedPassword, "Client Key") */ - clientKey = [self XMPP_HMACWithKey: saltedPassword + clientKey = [self xmpp_HMACWithKey: saltedPassword data: [OFData dataWithItems: "Client Key" count: 10]]; /* * IETF RFC 5802: @@ -330,19 +323,19 @@ /* * IETF RFC 5802: * ClientSignature := HMAC(StoredKey, AuthMessage) */ clientSignature = [self - XMPP_HMACWithKey: [OFData dataWithItems: [hash digest] + xmpp_HMACWithKey: [OFData dataWithItems: [hash digest] count: [_hashType digestSize]] data: authMessage]; /* * IETF RFC 5802: * ServerKey := HMAC(SaltedPassword, "Server Key") */ - serverKey = [self XMPP_HMACWithKey: saltedPassword + serverKey = [self xmpp_HMACWithKey: saltedPassword data: [OFData dataWithItems: "Server Key" count: 10]]; /* * IETF RFC 5802: @@ -351,11 +344,11 @@ tmpArray = [OFMutableData dataWithItems: serverKey count: [_hashType digestSize]]; [_serverSignature release]; _serverSignature = [[OFData alloc] - initWithItems: [self XMPP_HMACWithKey: tmpArray + initWithItems: [self xmpp_HMACWithKey: tmpArray data: authMessage] count: [_hashType digestSize]]; /* * IETF RFC 5802: @@ -376,11 +369,11 @@ count: [tmpString UTF8StringLength]]; return ret; } -- (OFData *)XMPP_parseServerFinalMessage: (OFData *)data +- (OFData *)xmpp_parseServerFinalMessage: (OFData *)data { OFString *mess, *value; /* * server-final-message already received, @@ -405,11 +398,11 @@ reason: value]; return nil; } -- (OFString *)XMPP_genNonce +- (OFString *)xmpp_genNonce { uint8_t buf[64]; size_t i; assert(RAND_pseudo_bytes(buf, 64) >= 0); @@ -426,11 +419,11 @@ return [OFString stringWithCString: (char *)buf encoding: OF_STRING_ENCODING_ASCII length: 64]; } -- (const uint8_t *)XMPP_HMACWithKey: (OFData *)key +- (const uint8_t *)xmpp_HMACWithKey: (OFData *)key data: (OFData *)data { void *pool = objc_autoreleasePoolPush(); OFMutableData *k = [OFMutableData data]; size_t i, kSize, blockSize = [_hashType blockSize]; @@ -482,11 +475,11 @@ objc_autoreleasePoolPop(pool); return [[hashO autorelease] digest]; } -- (OFData *)XMPP_hiWithData: (OFData *)str +- (OFData *)xmpp_hiWithData: (OFData *)str salt: (OFData *)salt iterationCount: (intmax_t)i { void *pool = objc_autoreleasePoolPush(); size_t digestSize = [_hashType digestSize]; @@ -503,11 +496,11 @@ salty = [[salt mutableCopy] autorelease]; [salty addItems: "\0\0\0\1" count: 4]; - uOld = [self XMPP_HMACWithKey: str + uOld = [self xmpp_HMACWithKey: str data: salty]; for (j = 0; j < digestSize; j++) result[j] ^= uOld[j]; @@ -519,11 +512,11 @@ /* releases uOld and previous tmp */ objc_autoreleasePoolPop(pool); pool = objc_autoreleasePoolPush(); [tmp autorelease]; - u = [self XMPP_HMACWithKey: str + u = [self xmpp_HMACWithKey: str data: tmp]; for (k = 0; k < digestSize; k++) result[k] ^= u[k]; Index: src/XMPPStanza.h ================================================================== --- src/XMPPStanza.h +++ src/XMPPStanza.h @@ -109,49 +109,49 @@ * @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; +- (instancetype)initWithName: (OFString *)name + stringValue: (nullable OFString *)stringValue OF_UNAVAILABLE; +- (instancetype)initWithName: (OFString *)name + namespace: (nullable OFString *)namespace OF_UNAVAILABLE; +- (instancetype)initWithName: (OFString *)name + namespace: (nullable OFString *)namespace + stringValue: (nullable OFString *)stringValue OF_UNAVAILABLE; +- (instancetype)initWithXMLString: (OFString *)string OF_UNAVAILABLE; +- (instancetype)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; +- (instancetype)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: (nullable OFString *)type; +- (instancetype)initWithName: (OFString *)name + 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: (nullable OFString *)ID; +- (instancetype)initWithName: (OFString *)name + ID: (nullable OFString *)ID; /*! * @brief Initializes an already allocated XMPPStanza with the specified name, * type and ID. * @@ -158,19 +158,19 @@ * @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: (nullable OFString *)type - ID: (nullable OFString *)ID; +- (instancetype)initWithName: (OFString *)name + 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; +- (instancetype)initWithElement: (OFXMLElement *)element; @end OF_ASSUME_NONNULL_END Index: src/XMPPStanza.m ================================================================== --- src/XMPPStanza.m +++ src/XMPPStanza.m @@ -64,53 +64,53 @@ + (instancetype)stanzaWithElement: (OFXMLElement *)element { return [[[self alloc] initWithElement: element] autorelease]; } -- initWithName: (OFString *)name - namespace: (nullable OFString *)namespace - stringValue: (nullable OFString *)stringValue +- (instancetype)initWithName: (OFString *)name + namespace: (nullable OFString *)namespace + stringValue: (nullable OFString *)stringValue +{ + OF_INVALID_INIT_METHOD +} + +- (instancetype)initWithXMLString: (OFString *)string { OF_INVALID_INIT_METHOD } -- initWithXMLString: (OFString *)string +- (instancetype)initWithFile: (OFString *)path { OF_INVALID_INIT_METHOD } -- initWithFile: (OFString *)path -{ - OF_INVALID_INIT_METHOD -} - -- initWithName: (OFString *)name +- (instancetype)initWithName: (OFString *)name { return [self initWithName: name type: nil ID: nil]; } -- initWithName: (OFString *)name - type: (OFString *)type +- (instancetype)initWithName: (OFString *)name + type: (OFString *)type { return [self initWithName: name type: type ID: nil]; } -- initWithName: (OFString *)name - ID: (OFString *)ID +- (instancetype)initWithName: (OFString *)name + ID: (OFString *)ID { return [self initWithName: name type: nil ID: ID]; } -- initWithName: (OFString *)name - type: (OFString *)type - ID: (OFString *)ID +- (instancetype)initWithName: (OFString *)name + type: (OFString *)type + ID: (OFString *)ID { self = [super initWithName: name namespace: XMPP_NS_CLIENT stringValue: nil]; @@ -134,11 +134,11 @@ } return self; } -- initWithElement: (OFXMLElement *)element +- (instancetype)initWithElement: (OFXMLElement *)element { self = [super initWithElement: element]; @try { OFXMLAttribute *attribute; Index: src/XMPPStreamManagement.h ================================================================== --- src/XMPPStreamManagement.h +++ src/XMPPStreamManagement.h @@ -29,10 +29,10 @@ { XMPPConnection *_connection; uint32_t _receivedCount; } -- init OF_UNAVAILABLE; -- initWithConnection: (XMPPConnection *)connection; +- (instancetype)init OF_UNAVAILABLE; +- (instancetype)initWithConnection: (XMPPConnection *)connection; @end OF_ASSUME_NONNULL_END Index: src/XMPPStreamManagement.m ================================================================== --- src/XMPPStreamManagement.m +++ src/XMPPStreamManagement.m @@ -24,16 +24,16 @@ #import "XMPPStreamManagement.h" #import "namespaces.h" @implementation XMPPStreamManagement -- init +- (instancetype)init { OF_INVALID_INIT_METHOD } -- initWithConnection: (XMPPConnection *)connection +- (instancetype)initWithConnection: (XMPPConnection *)connection { self = [super init]; @try { _connection = connection;