From 5fa8b0b9b32a935161fe4dd9765eb8568b8d4078 Mon Sep 17 00:00:00 2001 From: Jonathan Schleifer Date: Sat, 13 May 2017 16:49:49 +0200 Subject: [PATCH] Adjust to ObjFW changes --- src/XMPPAuthenticator.h | 24 +++-- src/XMPPAuthenticator.m | 14 +-- src/XMPPCallback.h | 11 ++- src/XMPPCallback.m | 11 ++- src/XMPPConnection.h | 156 ++++++++--------------------- src/XMPPConnection.m | 191 ++++++++++++++++++------------------ src/XMPPContact+Private.h | 13 +++ src/XMPPContact.h | 18 ++-- src/XMPPContact.m | 15 +-- src/XMPPContactManager.h | 39 ++++---- src/XMPPContactManager.m | 25 ++--- src/XMPPDiscoEntity.h | 32 ++++-- src/XMPPDiscoEntity.m | 36 ++++--- src/XMPPDiscoIdentity.h | 32 +++--- src/XMPPDiscoIdentity.m | 31 +++--- src/XMPPDiscoNode+Private.h | 15 +++ src/XMPPDiscoNode.h | 47 +++++---- src/XMPPDiscoNode.m | 42 ++++---- src/XMPPEXTERNALAuth.h | 6 +- src/XMPPEXTERNALAuth.m | 4 +- src/XMPPExceptions.h | 79 +++++++++------ src/XMPPExceptions.m | 64 ++++++------ src/XMPPFileStorage.h | 7 +- src/XMPPFileStorage.m | 46 ++++----- src/XMPPIQ.h | 24 +++-- src/XMPPIQ.m | 20 ++-- src/XMPPJID.h | 18 ++-- src/XMPPJID.m | 33 ++----- src/XMPPMessage.h | 20 ++-- src/XMPPMessage.m | 20 ++-- src/XMPPMulticastDelegate.h | 10 +- src/XMPPPLAINAuth.h | 14 ++- src/XMPPPLAINAuth.m | 12 +-- src/XMPPPresence.h | 31 +++--- src/XMPPPresence.m | 53 ++++------ src/XMPPRoster.h | 38 ++++--- src/XMPPRoster.m | 65 ++++++------ src/XMPPRosterItem.h | 12 ++- src/XMPPRosterItem.m | 2 +- src/XMPPSCRAMAuth.h | 51 +++++----- src/XMPPSCRAMAuth.m | 80 +++++++++------ src/XMPPSRVLookup.h | 24 +++-- src/XMPPSRVLookup.m | 50 ++++++---- src/XMPPStanza.h | 60 ++++++----- src/XMPPStanza.m | 91 ++++++++--------- src/XMPPStorage.h | 30 +++--- src/XMPPStreamManagement.h | 7 +- src/XMPPStreamManagement.m | 19 ++-- src/XMPPXMLElementBuilder.h | 4 + src/XMPPXMLElementBuilder.m | 8 +- tests/test.m | 40 ++++---- 51 files changed, 935 insertions(+), 859 deletions(-) create mode 100644 src/XMPPContact+Private.h create mode 100644 src/XMPPDiscoNode+Private.h diff --git a/src/XMPPAuthenticator.h b/src/XMPPAuthenticator.h index 6acba3b..7530a0f 100644 --- a/src/XMPPAuthenticator.h +++ b/src/XMPPAuthenticator.h @@ -23,6 +23,8 @@ #import +OF_ASSUME_NONNULL_BEGIN + /** * \brief A base class for classes implementing authentication mechanisms */ @@ -32,11 +34,11 @@ } /// \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 @@ -46,8 +48,8 @@ * \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 @@ -58,16 +60,16 @@ * \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; +- (OFDataArray *)initialMessage; /** * \brief Continue authentication with the specified data. @@ -75,5 +77,7 @@ * \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 diff --git a/src/XMPPAuthenticator.m b/src/XMPPAuthenticator.m index 9824d40..16a7b2b 100644 --- a/src/XMPPAuthenticator.m +++ b/src/XMPPAuthenticator.m @@ -30,17 +30,17 @@ @implementation XMPPAuthenticator @synthesize authzid = _authzid, authcid = _authcid, password = _password; -- initWithAuthcid: (OFString*)authcid - password: (OFString*)password +- initWithAuthcid: (OFString *)authcid + password: (OFString *)password { return [self initWithAuthzid: nil authcid: authcid password: password]; } -- initWithAuthzid: (OFString*)authzid - authcid: (OFString*)authcid - password: (OFString*)password +- initWithAuthzid: (OFString *)authzid + authcid: (OFString *)authcid + password: (OFString *)password { self = [super init]; @@ -65,12 +65,12 @@ [super dealloc]; } -- (OFDataArray*)initialMessage +- (OFDataArray *)initialMessage { return nil; } -- (OFDataArray*)continueWithData: (OFDataArray*)challenge +- (OFDataArray *)continueWithData: (OFDataArray *)challenge { return nil; } diff --git a/src/XMPPCallback.h b/src/XMPPCallback.h index ae4a50a..a4937ba 100644 --- a/src/XMPPCallback.h +++ b/src/XMPPCallback.h @@ -22,11 +22,14 @@ #import +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 @@ -48,6 +51,8 @@ typedef void (^xmpp_callback_block_t)(XMPPConnection*, XMPPIQ*); - initWithTarget: (id)target selector: (SEL)selector; -- (void)runWithIQ: (XMPPIQ*)iq - connection: (XMPPConnection*)connection; +- (void)runWithIQ: (XMPPIQ *)iq + connection: (XMPPConnection *)connection; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPCallback.m b/src/XMPPCallback.m index aa752a6..d17b4b3 100644 --- a/src/XMPPCallback.m +++ b/src/XMPPCallback.m @@ -30,7 +30,8 @@ #ifdef OF_HAVE_BLOCKS + (instancetype)callbackWithBlock: (xmpp_callback_block_t)block { - return [[(XMPPCallback*)[self alloc] initWithBlock: block] autorelease]; + return [[(XMPPCallback *)[self alloc] + initWithBlock: block] autorelease]; } - initWithBlock: (xmpp_callback_block_t)block @@ -76,16 +77,16 @@ [super dealloc]; } -- (void)runWithIQ: (XMPPIQ*)iq - connection: (XMPPConnection*)connection +- (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 diff --git a/src/XMPPConnection.h b/src/XMPPConnection.h index b628236..498249d 100644 --- a/src/XMPPConnection.h +++ b/src/XMPPConnection.h @@ -27,6 +27,8 @@ #import "XMPPCallback.h" #import "XMPPStorage.h" +OF_ASSUME_NONNULL_BEGIN + @class XMPPConnection; @class XMPPJID; @class XMPPIQ; @@ -37,13 +39,10 @@ @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 - -#endif @optional /** * \brief This callback is called when the connection received an element. @@ -51,8 +50,8 @@ * \param connection The connection that received the element * \param element The element that was received */ -- (void)connection: (XMPPConnection*)connection - didReceiveElement: (OFXMLElement*)element; +- (void)connection: (XMPPConnection *)connection + didReceiveElement: (OFXMLElement *)element; /** * \brief This callback is called when the connection sent an element. @@ -60,15 +59,15 @@ * \param connection The connection that sent the element * \param element The element that was sent */ -- (void)connection: (XMPPConnection*)connection - didSendElement: (OFXMLElement*)element; +- (void)connection: (XMPPConnection *)connection + didSendElement: (OFXMLElement *)element; /** * \brief This callback is called when the connection sucessfully authenticated. * * \param connection The connection that was authenticated */ -- (void)connectionWasAuthenticated: (XMPPConnection*)connection; +- (void)connectionWasAuthenticated: (XMPPConnection *)connection; /** * \brief This callback is called when the connection was bound to a JID. @@ -76,8 +75,8 @@ * \param connection The connection that was bound to a JID * \param JID The JID the conecction was bound to */ -- (void)connection: (XMPPConnection*)connection - wasBoundToJID: (XMPPJID*)JID; +- (void)connection: (XMPPConnection *)connection + wasBoundToJID: (XMPPJID *)JID; /** * \brief This callback is called when the connection received an IQ stanza. @@ -85,8 +84,8 @@ * \param connection The connection that received the stanza * \param iq The IQ stanza that was received */ -- (bool)connection: (XMPPConnection*)connection - didReceiveIQ: (XMPPIQ*)iq; +- (bool)connection: (XMPPConnection *)connection + didReceiveIQ: (XMPPIQ *)iq; /** * \brief This callback is called when the connection received a presence @@ -95,8 +94,8 @@ * \param connection The connection that received the stanza * \param presence The presence stanza that was received */ -- (void)connection: (XMPPConnection*)connection - didReceivePresence: (XMPPPresence*)presence; +- (void)connection: (XMPPConnection *)connection + didReceivePresence: (XMPPPresence *)presence; /** * \brief This callback is called when the connection received a message stanza. @@ -104,15 +103,15 @@ * \param connection The connection that received the stanza * \param message The message stanza that was received */ -- (void)connection: (XMPPConnection*)connection - didReceiveMessage: (XMPPMessage*)message; +- (void)connection: (XMPPConnection *)connection + didReceiveMessage: (XMPPMessage *)message; /** * \brief This callback is called when the connection was closed. * * \param connection The connection that was closed */ -- (void)connectionWasClosed: (XMPPConnection*)connection; +- (void)connectionWasClosed: (XMPPConnection *)connection; /*! * @brief This callback is called when the connection threw an exception. @@ -123,8 +122,8 @@ * @param connection The connection which threw an exception * @param exception The exception the connection threw */ -- (void)connection: (XMPPConnection*)connection - didThrowException: (OFException*)exception; +- (void)connection: (XMPPConnection *)connection + didThrowException: (OFException *)exception; /** * \brief This callback is called when the connection is about to upgrade to @@ -132,14 +131,14 @@ * * \param connection The connection that will upgraded to TLS */ -- (void)connectionWillUpgradeToTLS: (XMPPConnection*)connection; +- (void)connectionWillUpgradeToTLS: (XMPPConnection *)connection; /** * \brief This callback is called when the connection was upgraded to use TLS. * * \param connection The connection that was upgraded to TLS */ -- (void)connectionDidUpgradeToTLS: (XMPPConnection*)connection; +- (void)connectionDidUpgradeToTLS: (XMPPConnection *)connection; @end /** @@ -160,7 +159,7 @@ id _dataStorage; OFString *_language; XMPPMulticastDelegate *_delegates; - OFMutableDictionary *_callbacks; + OFMutableDictionary OF_GENERIC(OFString *, XMPPCallback *) *_callbacks; XMPPAuthenticator *_authModule; bool _streamOpen; bool _needsSession; @@ -171,33 +170,33 @@ } /// \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 dataStorage; +@property OF_NULLABLE_PROPERTY (assign) id 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 @@ -247,7 +246,8 @@ * 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. @@ -269,43 +269,15 @@ * \param length The length of the buffer. If length is 0, it is assumed that * the connection was closed. */ -- (void)parseBuffer: (const void*)buffer +- (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; +- (void)sendStanza: (OFXMLElement *)element; /*! * @brief Sends an XMPPIQ, registering a callback method. @@ -313,9 +285,9 @@ * @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 +- (void)sendIQ: (XMPPIQ *)IQ callbackTarget: (id)target selector: (SEL)selector; @@ -326,7 +298,7 @@ * @param IQ The IQ to send * @param block The callback block */ -- (void)sendIQ: (XMPPIQ*)IQ +- (void)sendIQ: (XMPPIQ *)IQ callbackBlock: (xmpp_callback_block_t)block; #endif @@ -335,49 +307,7 @@ * * \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 )dataStorage; -- (id )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; +- (OFString *)generateStanzaID; @end -@interface OFObject (XMPPConnectionDelegate) -@end +OF_ASSUME_NONNULL_END diff --git a/src/XMPPConnection.m b/src/XMPPConnection.m index 8388801..c5897be 100644 --- a/src/XMPPConnection.m +++ b/src/XMPPConnection.m @@ -59,19 +59,46 @@ #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; +- initWithSourceThread: (OFThread *)sourceThread + connection: (XMPPConnection *)connection; @end +OF_ASSUME_NONNULL_END + @implementation XMPPConnection_ConnectThread -- initWithSourceThread: (OFThread*)sourceThread - connection: (XMPPConnection*)connection +- initWithSourceThread: (OFThread *)sourceThread + connection: (XMPPConnection *)connection { self = [super init]; @@ -118,7 +145,9 @@ @end @implementation XMPPConnection -@synthesize language = _language, privateKeyFile = _privateKeyFile; +@synthesize username = _username, resource = _resource, server = _server; +@synthesize domain = _domain, password = _password, language = _language; +@synthesize privateKeyFile = _privateKeyFile; @synthesize certificateFile = _certificateFile, socket = _socket; @synthesize encryptionRequired = _encryptionRequired, encrypted = _encrypted; @synthesize supportsRosterVersioning = _supportsRosterVersioning; @@ -165,7 +194,7 @@ [super dealloc]; } -- (void)setUsername: (OFString*)username +- (void)setUsername: (OFString *)username { OFString *old = _username; @@ -191,12 +220,7 @@ [old release]; } -- (OFString*)username -{ - return [[_username copy] autorelease]; -} - -- (void)setResource: (OFString*)resource +- (void)setResource: (OFString *)resource { OFString *old = _resource; @@ -222,12 +246,7 @@ [old release]; } -- (OFString*)resource -{ - return [[_resource copy] autorelease]; -} - -- (void)setServer: (OFString*)server +- (void)setServer: (OFString *)server { OFString *old = _server; @@ -239,12 +258,7 @@ [old release]; } -- (OFString*)server -{ - return [[_server copy] autorelease]; -} - -- (void)setDomain: (OFString*)domain +- (void)setDomain: (OFString *)domain { OFString *oldDomain = _domain; OFString *oldDomainToASCII = _domainToASCII; @@ -276,12 +290,7 @@ [oldDomainToASCII release]; } -- (OFString*)domain -{ - return [[_domain copy] autorelease]; -} - -- (void)setPassword: (OFString*)password +- (void)setPassword: (OFString *)password { OFString *old = _password; @@ -307,11 +316,6 @@ [old release]; } -- (OFString*)password -{ - return [[_password copy] autorelease]; -} - - (void)connect { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; @@ -382,7 +386,7 @@ [pool release]; } -- (bool)XMPP_parseBuffer: (const void*)buffer +- (bool)XMPP_parseBuffer: (const void *)buffer length: (size_t)length { if ([_socket isAtEndOfStream]) { @@ -404,7 +408,7 @@ return true; } -- (void)parseBuffer: (const void*)buffer +- (void)parseBuffer: (const void *)buffer length: (size_t)length { [self XMPP_parseBuffer: buffer @@ -417,10 +421,10 @@ _oldElementBuilder = nil; } -- (bool)stream: (OFStream*)stream - didReadIntoBuffer: (char*)buffer +- (bool)stream: (OFStream *)stream + didReadIntoBuffer: (char *)buffer length: (size_t)length - exception: (OFException*)exception + exception: (OFException *)exception { if (exception != nil) { [_delegates broadcastSelector: @selector(connection: @@ -469,7 +473,7 @@ return _streamOpen; } -- (bool)checkCertificateAndGetReason: (OFString**)reason +- (bool)checkCertificateAndGetReason: (OFString **)reason { X509Certificate *cert; OFDictionary *SANs; @@ -505,7 +509,7 @@ return false; } -- (void)sendStanza: (OFXMLElement*)element +- (void)sendStanza: (OFXMLElement *)element { [_delegates broadcastSelector: @selector(connection:didSendElement:) withObject: self @@ -514,7 +518,7 @@ [_socket writeString: [element XMLString]]; } -- (void)sendIQ: (XMPPIQ*)IQ +- (void)sendIQ: (XMPPIQ *)IQ callbackTarget: (id)target selector: (SEL)selector { @@ -545,7 +549,7 @@ } #ifdef OF_HAVE_BLOCKS -- (void)sendIQ: (XMPPIQ*)IQ +- (void)sendIQ: (XMPPIQ *)IQ callbackBlock: (xmpp_callback_block_t)block { OFAutoreleasePool *pool; @@ -574,20 +578,17 @@ } #endif -- (OFString*)generateStanzaID +- (OFString *)generateStanzaID { return [OFString stringWithFormat: @"objxmpp_%u", _lastID++]; } -- (void)parser: (OFXMLParser*)p - didStartElement: (OFString*)name - prefix: (OFString*)prefix - namespace: (OFString*)ns - attributes: (OFArray*)attributes +- (void)parser: (OFXMLParser *)parser + didStartElement: (OFString *)name + prefix: (OFString *)prefix + 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]; @@ -601,14 +602,13 @@ return; } - if (![ns isEqual: XMPP_NS_STREAM]) { + if (![NS isEqual: XMPP_NS_STREAM]) { [self XMPP_sendStreamError: @"invalid-namespace" text: nil]; return; } - enumerator = [attributes objectEnumerator]; - while ((attribute = [enumerator nextObject]) != nil) { + for (OFXMLAttribute *attribute in attributes) { if ([[attribute name] isEqual: @"from"] && ![[attribute stringValue] isEqual: _domain]) { [self XMPP_sendStreamError: @"invalid-from" @@ -623,11 +623,11 @@ } } - [_parser setDelegate: _elementBuilder]; + [parser setDelegate: _elementBuilder]; } -- (void)elementBuilder: (OFXMLElementBuilder*)builder - didBuildElement: (OFXMLElement*)element +- (void)elementBuilder: (OFXMLElementBuilder *)builder + didBuildElement: (OFXMLElement *)element { /* Ignore whitespace elements */ if ([element name] == nil) @@ -654,10 +654,10 @@ [self XMPP_handleSASL: element]; } -- (void)elementBuilder: (OFXMLElementBuilder*)builder - didNotExpectCloseTag: (OFString*)name - prefix: (OFString*)prefix - namespace: (OFString*)ns +- (void)elementBuilder: (OFXMLElementBuilder *)builder + didNotExpectCloseTag: (OFString *)name + prefix: (OFString *)prefix + namespace: (OFString *)ns { if (![name isEqual: @"stream"] || ![prefix isEqual: @"stream"] || ![ns isEqual: XMPP_NS_STREAM]) @@ -722,7 +722,7 @@ _lastID = 0; } -- (void)XMPP_handleStanza: (OFXMLElement*)element +- (void)XMPP_handleStanza: (OFXMLElement *)element { if ([[element name] isEqual: @"iq"]) { [self XMPP_handleIQ: [XMPPIQ stanzaWithElement: element]]; @@ -746,7 +746,7 @@ } -- (void)XMPP_handleStream: (OFXMLElement*)element +- (void)XMPP_handleStream: (OFXMLElement *)element { if ([[element name] isEqual: @"features"]) { [self XMPP_handleFeatures: element]; @@ -850,7 +850,7 @@ assert(0); } -- (void)XMPP_handleTLS: (OFXMLElement*)element +- (void)XMPP_handleTLS: (OFXMLElement *)element { if ([[element name] isEqual: @"proceed"]) { /* FIXME: Catch errors here */ @@ -891,7 +891,7 @@ assert(0); } -- (void)XMPP_handleSASL: (OFXMLElement*)element +- (void)XMPP_handleSASL: (OFXMLElement *)element { if ([[element name] isEqual: @"challenge"]) { OFXMLElement *responseTag; @@ -939,7 +939,7 @@ assert(0); } -- (void)XMPP_handleIQ: (XMPPIQ*)IQ +- (void)XMPP_handleIQ: (XMPPIQ *)IQ { bool handled = false; XMPPCallback *callback; @@ -970,21 +970,21 @@ } } -- (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]; @@ -1023,7 +1023,7 @@ 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"]; @@ -1063,8 +1063,8 @@ 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) { @@ -1075,7 +1075,7 @@ assert(0); } -- (void)XMPP_sendAuth: (OFString*)authName +- (void)XMPP_sendAuth: (OFString *)authName { OFXMLElement *authTag; OFDataArray *initialMessage = [_authModule initialMessage]; @@ -1119,8 +1119,8 @@ IQ:)]; } -- (void)XMPP_sendStreamError: (OFString*)condition - text: (OFString*)text +- (void)XMPP_sendStreamError: (OFString *)condition + text: (OFString *)text { OFXMLElement *error = [OFXMLElement elementWithName: @"error" @@ -1139,22 +1139,21 @@ [self close]; } -- (void)XMPP_handleResourceBindForConnection: (XMPPConnection*)connection - IQ: (XMPPIQ*)iq +- (void)XMPP_handleResourceBindForConnection: (XMPPConnection *)connection + IQ: (XMPPIQ *)IQ { - OFXMLElement *bindElement; - OFXMLElement *jidElement; + OFXMLElement *bindElement, *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]; @@ -1168,29 +1167,29 @@ - (void)XMPP_sendSession { - XMPPIQ *iq; + XMPPIQ *IQ = [XMPPIQ IQWithType: @"set" + ID: [self generateStanzaID]]; - 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 +- (void)XMPP_handleSessionForConnection: (XMPPConnection *)connection + 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 +- (OFString *)XMPP_IDNAToASCII: (OFString *)domain { OFString *ret; char *cDomain; @@ -1236,7 +1235,7 @@ [_delegates removeDelegate: delegate]; } -- (XMPPMulticastDelegate*)XMPP_delegates +- (XMPPMulticastDelegate *)XMPP_delegates { return _delegates; } diff --git a/src/XMPPContact+Private.h b/src/XMPPContact+Private.h new file mode 100644 index 0000000..d75a05f --- /dev/null +++ b/src/XMPPContact+Private.h @@ -0,0 +1,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 diff --git a/src/XMPPContact.h b/src/XMPPContact.h index cb7f17b..eb5a360 100644 --- a/src/XMPPContact.h +++ b/src/XMPPContact.h @@ -23,6 +23,8 @@ #import +OF_ASSUME_NONNULL_BEGIN + @class XMPPConnection; @class XMPPJID; @class XMPPRosterItem; @@ -40,9 +42,9 @@ } /// \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 @@ -50,12 +52,8 @@ * \param message The message to send * \param connection The connection to use for sending the message */ -- (void)sendMessage: (XMPPMessage*)message - connection: (XMPPConnection*)connection; - -- (void)XMPP_setRosterItem: (XMPPRosterItem*)rosterItem; -- (void)XMPP_setPresence: (XMPPPresence*)presence - resource: (OFString*)resource; -- (void)XMPP_removePresenceForResource: (OFString*)resource; -- (void)XMPP_setLockedOnJID: (XMPPJID*)JID; +- (void)sendMessage: (XMPPMessage *)message + connection: (XMPPConnection *)connection; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPContact.m b/src/XMPPContact.m index f7fe801..83af92d 100644 --- a/src/XMPPContact.m +++ b/src/XMPPContact.m @@ -22,6 +22,7 @@ */ #import "XMPPContact.h" +#import "XMPPContact+Private.h" #import "XMPPMessage.h" #import "XMPPConnection.h" @@ -50,8 +51,8 @@ [super dealloc]; } -- (void)sendMessage: (XMPPMessage*)message - connection: (XMPPConnection*)connection +- (void)sendMessage: (XMPPMessage *)message + connection: (XMPPConnection *)connection { if (_lockedOnJID == nil) [message setTo: [_rosterItem JID]]; @@ -61,15 +62,15 @@ [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 - resource: (OFString*)resource +- (void)XMPP_setPresence: (XMPPPresence *)presence + resource: (OFString *)resource { if (resource != nil) [_presences setObject: presence @@ -81,7 +82,7 @@ [self XMPP_setLockedOnJID: nil]; } -- (void)XMPP_removePresenceForResource: (OFString*)resource +- (void)XMPP_removePresenceForResource: (OFString *)resource { if (resource != nil) { [_presences removeObjectForKey: resource]; @@ -93,7 +94,7 @@ [self XMPP_setLockedOnJID: nil]; } -- (void)XMPP_setLockedOnJID: (XMPPJID*)JID; +- (void)XMPP_setLockedOnJID: (XMPPJID *)JID; { XMPPJID *old = _lockedOnJID; _lockedOnJID = [JID retain]; diff --git a/src/XMPPContactManager.h b/src/XMPPContactManager.h index ce0c8e9..5bf30d6 100644 --- a/src/XMPPContactManager.h +++ b/src/XMPPContactManager.h @@ -26,6 +26,8 @@ #import "XMPPConnection.h" #import "XMPPRoster.h" +OF_ASSUME_NONNULL_BEGIN + @class XMPPContact; @class XMPPContactManager; @class XMPPMulticastDelegate; @@ -43,8 +45,8 @@ * \param manager The contact manager that added the contact * \param contact The contact that was added */ -- (void)contactManager: (XMPPContactManager*)manager - didAddContact: (XMPPContact*)contact; +- (void)contactManager: (XMPPContactManager *)manager + didAddContact: (XMPPContact *)contact; /** * \brief This callback is called whenever a contact is no longer present in @@ -53,8 +55,8 @@ * \param manager The contact manager that removed the contact * \param contact The contact that was removed */ -- (void)contactManager: (XMPPContactManager*)manager - didRemoveContact: (XMPPContact*)contact; +- (void)contactManager: (XMPPContactManager *)manager + didRemoveContact: (XMPPContact *)contact; /** * \brief This callback is called when a subscription request is received @@ -62,8 +64,8 @@ * \param manager The contact manager that received the request * \param presence The type=subscribe presence */ -- (void)contactManager: (XMPPContactManager*)manager - didReceiveSubscriptionRequest: (XMPPPresence*)presence; +- (void)contactManager: (XMPPContactManager *)manager + didReceiveSubscriptionRequest: (XMPPPresence *)presence; /** * \brief This callback is called whenever a contact is about to change its @@ -72,8 +74,8 @@ * \param contact The contact about to updated its roster item * \param rosterItem The roster item the contact is going to update with */ -- (void)contact: (XMPPContact*)contact - willUpdateWithRosterItem: (XMPPRosterItem*)rosterItem; +- (void)contact: (XMPPContact *)contact + willUpdateWithRosterItem: (XMPPRosterItem *)rosterItem; /** * \brief This callback is called whenever a contact send a presence stanza @@ -81,8 +83,8 @@ * \param contact The contact that send the presence * \param presence The presence which was send by the contact */ -- (void)contact: (XMPPContact*)contact - didSendPresence: (XMPPPresence*)presence; +- (void)contact: (XMPPContact *)contact + didSendPresence: (XMPPPresence *)presence; /** * \brief This callback is called whenever a contact send a message stanza @@ -90,8 +92,8 @@ * \param contact The contact that send the message * \param message The message which was send by the contact */ -- (void)contact: (XMPPContact*)contact - didSendMessage: (XMPPMessage*)message; +- (void)contact: (XMPPContact *)contact + didSendMessage: (XMPPMessage *)message; @end /** @@ -110,7 +112,8 @@ } /// \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. @@ -119,11 +122,11 @@ * @param roster The roster used by the contact manager * @return An initialized XMPPContactManager */ -- initWithConnection: (XMPPConnection*)connection - roster: (XMPPRoster*)roster; +- initWithConnection: (XMPPConnection *)connection + roster: (XMPPRoster *)roster OF_DESIGNATED_INITIALIZER; -- (void)sendSubscribedToJID: (XMPPJID*)subscriber; -- (void)sendUnsubscribedToJID: (XMPPJID*)subscriber; +- (void)sendSubscribedToJID: (XMPPJID *)subscriber; +- (void)sendUnsubscribedToJID: (XMPPJID *)subscriber; /** * \brief Adds the specified delegate. @@ -139,3 +142,5 @@ */ - (void)removeDelegate: (id )delegate; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPContactManager.m b/src/XMPPContactManager.m index 19d163a..7f07fc6 100644 --- a/src/XMPPContactManager.m +++ b/src/XMPPContactManager.m @@ -21,8 +21,9 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#import "XMPPContact.h" #import "XMPPContactManager.h" +#import "XMPPContact.h" +#import "XMPPContact+Private.h" #import "XMPPJID.h" #import "XMPPMulticastDelegate.h" #import "XMPPPresence.h" @@ -31,8 +32,8 @@ @implementation XMPPContactManager @synthesize contacts = _contacts; -- initWithConnection: (XMPPConnection*)connection - roster: (XMPPRoster*)roster +- initWithConnection: (XMPPConnection *)connection + roster: (XMPPRoster *)roster { self = [super init]; @@ -62,14 +63,14 @@ } -- (void)sendSubscribedToJID: (XMPPJID*)subscriber +- (void)sendSubscribedToJID: (XMPPJID *)subscriber { XMPPPresence *presence = [XMPPPresence presenceWithType: @"subscribed"]; [presence setTo: subscriber]; [_connection sendStanza: presence]; } -- (void)sendUnsubscribedToJID: (XMPPJID*)subscriber +- (void)sendUnsubscribedToJID: (XMPPJID *)subscriber { XMPPPresence *presence = [XMPPPresence presenceWithType: @"unsubscribed"]; @@ -87,7 +88,7 @@ [_delegates removeDelegate: delegate]; } -- (void)rosterWasReceived: (XMPPRoster*)roster +- (void)rosterWasReceived: (XMPPRoster *)roster { OFEnumerator *contactEnumerator; XMPPContact *contact; @@ -120,8 +121,8 @@ } } -- (void)roster: (XMPPRoster*)roster - didReceiveRosterItem: (XMPPRosterItem*)rosterItem +- (void)roster: (XMPPRoster *)roster + didReceiveRosterItem: (XMPPRosterItem *)rosterItem { XMPPContact *contact; OFString *bareJID = [[rosterItem JID] bareJID]; @@ -156,8 +157,8 @@ } } -- (void)connection: (XMPPConnection*)connection - didReceivePresence: (XMPPPresence*)presence +- (void)connection: (XMPPConnection *)connection + didReceivePresence: (XMPPPresence *)presence { XMPPContact *contact; XMPPJID *JID = [presence from]; @@ -199,8 +200,8 @@ } } -- (void)connection: (XMPPConnection*)connection - didReceiveMessage: (XMPPMessage*)message +- (void)connection: (XMPPConnection *)connection + didReceiveMessage: (XMPPMessage *)message { XMPPJID *JID = [message from]; XMPPContact *contact = [_contacts objectForKey: [JID bareJID]]; diff --git a/src/XMPPDiscoEntity.h b/src/XMPPDiscoEntity.h index 71899a8..171dac4 100644 --- a/src/XMPPDiscoEntity.h +++ b/src/XMPPDiscoEntity.h @@ -26,6 +26,8 @@ #import "XMPPConnection.h" #import "XMPPDiscoNode.h" +OF_ASSUME_NONNULL_BEGIN + @class XMPPJID; /** @@ -53,6 +55,12 @@ */ @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. @@ -60,7 +68,7 @@ * \param connection The XMPPConnection to serve responses on. * \return A new autoreleased XMPPDiscoEntity */ -+ (instancetype)discoEntityWithConnection: (XMPPConnection*)connection; ++ (instancetype)discoEntityWithConnection: (XMPPConnection *)connection; /** * \brief Creates a new autoreleased XMPPDiscoEntity with the specified @@ -70,8 +78,14 @@ * \param capsNode The node advertised for the entity's capabilites * \return A new autoreleased XMPPDiscoEntity */ -+ (instancetype)discoEntityWithConnection: (XMPPConnection*)connection - capsNode: (OFString*)capsNode; ++ (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 @@ -81,7 +95,7 @@ * This must already be bound to a resource) * \return An initialized XMPPDiscoEntity */ -- initWithConnection: (XMPPConnection*)connection; +- initWithConnection: (XMPPConnection *)connection; /** * \brief Initializes an already allocated XMPPDiscoEntity with the specified @@ -92,20 +106,22 @@ * \param capsNode The node advertised for the entity's capabilites * \return An initialized XMPPDiscoEntity */ -- initWithConnection: (XMPPConnection*)connection - capsNode: (OFString*)capsNode; +- 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 */ -- (void)addDiscoNode: (XMPPDiscoNode*)node; +- (void)addDiscoNode: (XMPPDiscoNode *)node; /** * \brief Calculates the Entity Capabilities Hash of the entity * * \return A OFString containing the capabilities hash */ -- (OFString*)capsHash; +- (OFString *)capsHash; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPDiscoEntity.m b/src/XMPPDiscoEntity.m index 012b131..aa68d8d 100644 --- a/src/XMPPDiscoEntity.m +++ b/src/XMPPDiscoEntity.m @@ -22,6 +22,8 @@ */ #import "XMPPDiscoEntity.h" +#import "XMPPDiscoNode.h" +#import "XMPPDiscoNode+Private.h" #import "XMPPDiscoIdentity.h" #import "XMPPIQ.h" #import "namespaces.h" @@ -29,29 +31,37 @@ @implementation XMPPDiscoEntity @synthesize discoNodes = _discoNodes, capsNode = _capsNode; -+ (instancetype)discoEntityWithConnection: (XMPPConnection*)connection ++ (instancetype)discoEntityWithConnection: (XMPPConnection *)connection { return [[[self alloc] initWithConnection: connection] autorelease]; } -+ (instancetype)discoEntityWithConnection: (XMPPConnection*)connection - capsNode: (OFString*)capsNode ++ (instancetype)discoEntityWithConnection: (XMPPConnection *)connection + capsNode: (OFString *)capsNode { return [[[self alloc] initWithConnection: connection capsNode: capsNode] autorelease]; } -- initWithConnection: (XMPPConnection*)connection +- initWithConnection: (XMPPConnection *)connection { return [self initWithConnection: connection capsNode: nil]; } -- initWithConnection: (XMPPConnection*)connection - capsNode: (OFString*)capsNode +- 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]; @@ -75,13 +85,13 @@ [super dealloc]; } -- (void)addDiscoNode: (XMPPDiscoNode*)node +- (void)addDiscoNode: (XMPPDiscoNode *)node { [_discoNodes setObject: node forKey: [node node]]; } -- (OFString*)capsHash +- (OFString *)capsHash { OFEnumerator *enumerator; XMPPDiscoIdentity *identity; @@ -108,14 +118,14 @@ return [digest stringByBase64Encoding]; } -- (void)connection: (XMPPConnection*)connection - wasBoundToJID: (XMPPJID*)JID +- (void)connection: (XMPPConnection *)connection + wasBoundToJID: (XMPPJID *)JID { _JID = [JID copy]; } -- (bool)connection: (XMPPConnection*)connection - didReceiveIQ: (XMPPIQ*)IQ +- (bool)connection: (XMPPConnection *)connection + didReceiveIQ: (XMPPIQ *)IQ { if (![[IQ to] isEqual: _JID]) return false; diff --git a/src/XMPPDiscoIdentity.h b/src/XMPPDiscoIdentity.h index b9dd700..c523b6a 100644 --- a/src/XMPPDiscoIdentity.h +++ b/src/XMPPDiscoIdentity.h @@ -23,6 +23,8 @@ #import +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class describing a Service Discovery Identity */ @@ -32,11 +34,11 @@ } /// \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 @@ -47,9 +49,9 @@ * \param name The name of the identity * \return A new autoreleased XMPPDiscoIdentity */ -+ (instancetype)identityWithCategory: (OFString*)category - type: (OFString*)type - name: (OFString*)name; ++ (instancetype)identityWithCategory: (OFString *)category + type: (OFString *)type + name: (nullable OFString *)name; /** * \brief Creates a new autoreleased XMPPDiscoIdentity with the specified @@ -59,8 +61,10 @@ * \param type The type of the identity * \return A new autoreleased XMPPDiscoIdentity */ -+ (instancetype)identityWithCategory: (OFString*)category - type: (OFString*)type; ++ (instancetype)identityWithCategory: (OFString *)category + type: (OFString *)type; + +- init OF_UNAVAILABLE; /** * \brief Initializes an already allocated XMPPDiscoIdentity with the specified @@ -71,9 +75,9 @@ * \param name The name of the identity * \return An initialized XMPPDiscoIdentity */ -- initWithCategory: (OFString*)category - type: (OFString*)type - name: (OFString*)name; +- initWithCategory: (OFString *)category + type: (OFString *)type + name: (nullable OFString *)name OF_DESIGNATED_INITIALIZER; /** * \brief Initializes an already allocated XMPPDiscoIdentity with the specified @@ -83,6 +87,8 @@ * \param type The type of the identity * \return An initialized XMPPDiscoIdentity */ -- initWithCategory: (OFString*)category - type: (OFString*)type; +- initWithCategory: (OFString *)category + type: (OFString *)type; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPDiscoIdentity.m b/src/XMPPDiscoIdentity.m index b26e477..fb5f09c 100644 --- a/src/XMPPDiscoIdentity.m +++ b/src/XMPPDiscoIdentity.m @@ -26,25 +26,25 @@ @implementation XMPPDiscoIdentity @synthesize category = _category, name = _name, type = _type; -+ (instancetype)identityWithCategory: (OFString*)category - type: (OFString*)type - name: (OFString*)name ++ (instancetype)identityWithCategory: (OFString *)category + type: (OFString *)type + name: (OFString *)name { return [[[self alloc] initWithCategory: category type: type name: name] autorelease]; } -+ (instancetype)identityWithCategory: (OFString*)category - type: (OFString*)type ++ (instancetype)identityWithCategory: (OFString *)category + type: (OFString *)type { return [[[self alloc] initWithCategory: category type: type] autorelease]; } -- initWithCategory: (OFString*)category - type: (OFString*)type - name: (OFString*)name +- initWithCategory: (OFString *)category + type: (OFString *)type + name: (OFString *)name { self = [super init]; @@ -63,8 +63,8 @@ return self; } -- initWithCategory: (OFString*)category - type: (OFString*)type +- initWithCategory: (OFString *)category + type: (OFString *)type { return [self initWithCategory: category type: type @@ -73,14 +73,7 @@ - init { - @try { - [self doesNotRecognizeSelector: _cmd]; - } @catch (id e) { - [self release]; - @throw e; - } - - abort(); + OF_INVALID_INIT_METHOD } - (void)dealloc @@ -139,7 +132,7 @@ if (![object isKindOfClass: [XMPPDiscoIdentity class]]) @throw [OFInvalidArgumentException exception]; - identity = (XMPPDiscoIdentity*)object; + identity = (XMPPDiscoIdentity *)object; categoryResult = [_category compare: identity->_category]; if (categoryResult != OF_ORDERED_SAME) diff --git a/src/XMPPDiscoNode+Private.h b/src/XMPPDiscoNode+Private.h new file mode 100644 index 0000000..69a1eaa --- /dev/null +++ b/src/XMPPDiscoNode+Private.h @@ -0,0 +1,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 diff --git a/src/XMPPDiscoNode.h b/src/XMPPDiscoNode.h index c8971c1..5e1701e 100644 --- a/src/XMPPDiscoNode.h +++ b/src/XMPPDiscoNode.h @@ -23,6 +23,8 @@ #import +OF_ASSUME_NONNULL_BEGIN + @class XMPPDiscoIdentity; @class XMPPJID; @@ -40,17 +42,17 @@ } /// \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 @@ -60,8 +62,8 @@ * \param node The node's opaque name * \return A new autoreleased XMPPDiscoNode */ -+ (instancetype)discoNodeWithJID: (XMPPJID*)JID - node: (OFString*)node; ++ (instancetype)discoNodeWithJID: (XMPPJID *)JID + node: (nullable OFString *)node; /** * \brief Creates a new autoreleased XMPPDiscoNode with the specified @@ -72,9 +74,9 @@ * \param name The node's human friendly name * \return A new autoreleased XMPPDiscoNode */ -+ (instancetype)discoNodeWithJID: (XMPPJID*)JID - node: (OFString*)node - name: (OFString*)name; ++ (instancetype)discoNodeWithJID: (XMPPJID *)JID + node: (nullable OFString *)node + name: (nullable OFString *)name; /** * \brief Initializes an already allocated XMPPDiscoNode with the specified @@ -84,8 +86,8 @@ * \param node The node's opaque name * \return An initialized XMPPDiscoNode */ -- initWithJID: (XMPPJID*)JID - node: (OFString*)node; +- initWithJID: (XMPPJID *)JID + node: (nullable OFString *)node; /** * \brief Initializes an already allocated XMPPDiscoNode with the specified @@ -96,33 +98,30 @@ * \param name The node's human friendly name * \return An initialized XMPPDiscoNode */ -- initWithJID: (XMPPJID*)JID - node: (OFString*)node - name: (OFString*)name; +- 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; +- (void)addIdentity: (XMPPDiscoIdentity *)identity; /** * \brief Adds a feature to the node * * \param feature The feature to add */ -- (void)addFeature: (OFString*)feature; +- (void)addFeature: (OFString *)feature; /** * \brief Adds a XMPPDiscoNode as child of the node * * \param node The XMPPDiscoNode to add as child */ -- (void)addChildNode: (XMPPDiscoNode*)node; - -- (bool)XMPP_handleItemsIQ: (XMPPIQ*)IQ - connection: (XMPPConnection*)connection; -- (bool)XMPP_handleInfoIQ: (XMPPIQ*)IQ - connection: (XMPPConnection*)connection; +- (void)addChildNode: (XMPPDiscoNode *)node; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPDiscoNode.m b/src/XMPPDiscoNode.m index 01f56d6..9abc3c5 100644 --- a/src/XMPPDiscoNode.m +++ b/src/XMPPDiscoNode.m @@ -21,11 +21,12 @@ * 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" @@ -34,33 +35,33 @@ @synthesize JID = _JID, node = _node, name = _name, identities = _identities; @synthesize features = _features, childNodes = _childNodes; -+ (instancetype)discoNodeWithJID: (XMPPJID*)JID - node: (OFString*)node; ++ (instancetype)discoNodeWithJID: (XMPPJID *)JID + node: (OFString *)node; { return [[[self alloc] initWithJID: JID node: node] autorelease]; } -+ (instancetype)discoNodeWithJID: (XMPPJID*)JID - node: (OFString*)node - name: (OFString*)name ++ (instancetype)discoNodeWithJID: (XMPPJID *)JID + node: (OFString *)node + name: (OFString *)name { return [[[self alloc] initWithJID: JID node: node name: name] autorelease]; } -- initWithJID: (XMPPJID*)JID - node: (OFString*)node +- initWithJID: (XMPPJID *)JID + node: (OFString *)node { return [self initWithJID: JID node: node name: nil]; } -- initWithJID: (XMPPJID*)JID - node: (OFString*)node - name: (OFString*)name +- initWithJID: (XMPPJID *)JID + node: (OFString *)node + name: (OFString *)name { self = [super init]; @@ -98,24 +99,29 @@ [super dealloc]; } -- (void)addIdentity: (XMPPDiscoIdentity*)identity +- (OFDictionary *)childNodes +{ + return [[_childNodes copy] autorelease]; +} + +- (void)addIdentity: (XMPPDiscoIdentity *)identity { [_identities insertObject: identity]; } -- (void)addFeature: (OFString*)feature +- (void)addFeature: (OFString *)feature { [_features insertObject: feature]; } -- (void)addChildNode: (XMPPDiscoNode*)node +- (void)addChildNode: (XMPPDiscoNode *)node { [_childNodes setObject: node forKey: [node node]]; } -- (bool)XMPP_handleItemsIQ: (XMPPIQ*)IQ - connection: (XMPPConnection*)connection +- (bool)XMPP_handleItemsIQ: (XMPPIQ *)IQ + connection: (XMPPConnection *)connection { XMPPIQ *resultIQ; OFXMLElement *response; @@ -156,8 +162,8 @@ return true; } -- (bool)XMPP_handleInfoIQ: (XMPPIQ*)IQ - connection: (XMPPConnection*)connection +- (bool)XMPP_handleInfoIQ: (XMPPIQ *)IQ + connection: (XMPPConnection *)connection { XMPPIQ *resultIQ; OFXMLElement *response; diff --git a/src/XMPPEXTERNALAuth.h b/src/XMPPEXTERNALAuth.h index b79fe80..ae5093d 100644 --- a/src/XMPPEXTERNALAuth.h +++ b/src/XMPPEXTERNALAuth.h @@ -23,6 +23,8 @@ #import #import "XMPPAuthenticator.h" +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class to authenticate using SASL EXTERNAL */ @@ -40,5 +42,7 @@ * \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 diff --git a/src/XMPPEXTERNALAuth.m b/src/XMPPEXTERNALAuth.m index d858dae..ea4b777 100644 --- a/src/XMPPEXTERNALAuth.m +++ b/src/XMPPEXTERNALAuth.m @@ -33,14 +33,14 @@ password: nil] autorelease]; } -+ (instancetype)EXTERNALAuthWithAuthzid: (OFString*)authzid ++ (instancetype)EXTERNALAuthWithAuthzid: (OFString *)authzid { return [[[self alloc] initWithAuthzid: authzid authcid: nil password: nil] autorelease]; } -- (OFDataArray*)initialMessage +- (OFDataArray *)initialMessage { OFDataArray *message = [OFDataArray dataArray]; diff --git a/src/XMPPExceptions.h b/src/XMPPExceptions.h index 2905423..a6e20c4 100644 --- a/src/XMPPExceptions.h +++ b/src/XMPPExceptions.h @@ -23,6 +23,8 @@ #import +OF_ASSUME_NONNULL_BEGIN + @class XMPPConnection; @class XMPPAuthenticator; @@ -35,7 +37,7 @@ } /// \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. @@ -44,7 +46,9 @@ * 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. @@ -53,7 +57,8 @@ * for this exception * \return An initialized XMPPException */ -- initWithConnection: (XMPPConnection*)connection; +- initWithConnection: (nullable XMPPConnection *)connection + OF_DESIGNATED_INITIALIZER; @end /** @@ -65,9 +70,9 @@ } /// \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. @@ -77,9 +82,11 @@ * \param reason The descriptive free-form text specified by the stream error * \return A new XMPPStreamErrorException */ -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection - condition: (OFString*)condition - reason: (OFString*)reason; ++ (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection + condition: (OFString *)condition + reason: (OFString *)reason; + +- initWithConnection: (nullable XMPPConnection *)connection OF_UNAVAILABLE; /** * \brief Initializes an already allocated XMPPStreamErrorException. @@ -89,9 +96,9 @@ * \param reason The descriptive free-form text specified by the stream error * \return An initialized XMPPStreamErrorException */ -- initWithConnection: (XMPPConnection*)connection - condition: (OFString*)condition - reason: (OFString*)reason; +- initWithConnection: (nullable XMPPConnection *)connection + condition: (OFString *)condition + reason: (OFString *)reason OF_DESIGNATED_INITIALIZER; @end /** @@ -104,9 +111,9 @@ } /// \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. @@ -116,9 +123,11 @@ * \param string The string that failed the stringprep profile * \return A new XMPPStringPrepFailedException */ -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection - profile: (OFString*)profile - string: (OFString*)string; ++ (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection + profile: (OFString *)profile + string: (OFString *)string; + +- initWithConnection: (nullable XMPPConnection *)connection OF_UNAVAILABLE; /** * \brief Initializes an already allocated XMPPStringPrepFailedException. @@ -128,9 +137,9 @@ * \param string The string that failed the stringprep profile * \return An initialized XMPPStringPrepFailedException */ -- initWithConnection: (XMPPConnection*)connection - profile: (OFString*)profile - string: (OFString*)string; +- initWithConnection: (nullable XMPPConnection *)connection + profile: (OFString *)profile + string: (OFString *)string OF_DESIGNATED_INITIALIZER; @end /** @@ -142,9 +151,9 @@ } /// \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. @@ -154,9 +163,11 @@ * \param string The string that could not be translated * \return A new XMPPIDNATranslationFailedException */ -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection - operation: (OFString*)operation - string: (OFString*)string; ++ (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection + operation: (OFString *)operation + string: (OFString *)string; + +- initWithConnection: (nullable XMPPConnection *)connection OF_UNAVAILABLE; /** * \brief Initializes an already allocated XMPPIDNATranslationFailedException. @@ -166,9 +177,9 @@ * \param string The string that could not be translated * \return An initialized XMPPIDNATranslationFailedException */ -- initWithConnection: (XMPPConnection*)connection - operation: (OFString*)operation - string: (OFString*)string; +- initWithConnection: (nullable XMPPConnection *)connection + operation: (OFString *)operation + string: (OFString *)string; @end /** @@ -180,7 +191,7 @@ } /// \brief The reason the authentication failed -@property (readonly, copy) OFString *reason; +@property (readonly, nonatomic) OFString *reason; /** * \brief Creates a new XMPPAuthFailedException. @@ -189,8 +200,10 @@ * \param reason The reason the authentication failed * \return A new XMPPAuthFailedException */ -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection - reason: (OFString*)reason; ++ (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection + reason: (OFString *)reason; + +- initWithConnection: (nullable XMPPConnection *)connection OF_UNAVAILABLE; /** * \brief Initializes an already allocated XMPPAuthFailedException. @@ -199,6 +212,8 @@ * \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 diff --git a/src/XMPPExceptions.m b/src/XMPPExceptions.m index c05a0e6..186b60b 100644 --- a/src/XMPPExceptions.m +++ b/src/XMPPExceptions.m @@ -33,7 +33,7 @@ @implementation XMPPException @synthesize connection = _connection; -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection ++ (instancetype)exceptionWithConnection: (XMPPConnection *)connection { return [[[self alloc] initWithConnection: connection] autorelease]; } @@ -43,7 +43,7 @@ OF_INVALID_INIT_METHOD } -- initWithConnection: (XMPPConnection*)connection +- initWithConnection: (XMPPConnection *)connection { self = [super init]; @@ -68,23 +68,23 @@ @implementation XMPPStreamErrorException @synthesize condition = _condition, reason = _reason; -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection - condition: (OFString*)condition - reason: (OFString*)reason; ++ (instancetype)exceptionWithConnection: (XMPPConnection *)connection + condition: (OFString *)condition + reason: (OFString *)reason; { return [[[self alloc] initWithConnection: connection condition: condition reason: reason] autorelease]; } -- initWithConnection: (XMPPConnection*)connection +- initWithConnection: (XMPPConnection *)connection { OF_INVALID_INIT_METHOD } -- initWithConnection: (XMPPConnection*)connection - condition: (OFString*)condition - reason: (OFString*)reason +- initWithConnection: (XMPPConnection *)connection + condition: (OFString *)condition + reason: (OFString *)reason { self = [super initWithConnection: connection]; @@ -107,7 +107,7 @@ [super dealloc]; } -- (OFString*)description +- (OFString *)description { return [OFString stringWithFormat: @"Got stream error: %@. Reason: %@!", _condition, _reason]; @@ -117,23 +117,23 @@ @implementation XMPPStringPrepFailedException @synthesize profile = _profile, string = _string; -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection - profile: (OFString*)profile - string: (OFString*)string ++ (instancetype)exceptionWithConnection: (XMPPConnection *)connection + profile: (OFString *)profile + string: (OFString *)string { return [[[self alloc] initWithConnection: connection profile: profile string: string] autorelease]; } -- initWithConnection: (XMPPConnection*)connection +- initWithConnection: (XMPPConnection *)connection { OF_INVALID_INIT_METHOD } -- initWithConnection: (XMPPConnection*)connection - profile: (OFString*)profile - string: (OFString*)string +- initWithConnection: (XMPPConnection *)connection + profile: (OFString *)profile + string: (OFString *)string { self = [super initWithConnection: connection]; @@ -156,7 +156,7 @@ [super dealloc]; } -- (OFString*)description +- (OFString *)description { return [OFString stringWithFormat: @"Stringprep with profile %@ failed on string '%@'!", @@ -167,23 +167,23 @@ @implementation XMPPIDNATranslationFailedException @synthesize operation = _operation, string = _string; -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection - operation: (OFString*)operation - string: (OFString*)string ++ (instancetype)exceptionWithConnection: (XMPPConnection *)connection + operation: (OFString *)operation + string: (OFString *)string { return [[[self alloc] initWithConnection: connection operation: operation string: string] autorelease]; } -- initWithConnection: (XMPPConnection*)connection +- initWithConnection: (XMPPConnection *)connection { OF_INVALID_INIT_METHOD } -- initWithConnection: (XMPPConnection*)connection - operation: (OFString*)operation - string: (OFString*)string +- initWithConnection: (XMPPConnection *)connection + operation: (OFString *)operation + string: (OFString *)string { self = [super initWithConnection: connection]; @@ -206,7 +206,7 @@ [super dealloc]; } -- (OFString*)description +- (OFString *)description { return [OFString stringWithFormat: @"IDNA operation %@ failed on string '%@'!", _operation, _string]; @@ -216,20 +216,20 @@ @implementation XMPPAuthFailedException @synthesize reason = _reason; -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection - reason: (OFString*)reason; ++ (instancetype)exceptionWithConnection: (XMPPConnection *)connection + reason: (OFString *)reason; { return [[[self alloc] initWithConnection: connection reason: reason] autorelease]; } -- initWithConnection: (XMPPConnection*)connection +- initWithConnection: (XMPPConnection *)connection { OF_INVALID_INIT_METHOD } -- initWithConnection: (XMPPConnection*)connection - reason: (OFString*)reason +- initWithConnection: (XMPPConnection *)connection + reason: (OFString *)reason { self = [super initWithConnection: connection]; @@ -250,7 +250,7 @@ [super dealloc]; } -- (OFString*)description +- (OFString *)description { return [OFString stringWithFormat: @"Authentication failed. Reason: %@!", _reason]; diff --git a/src/XMPPFileStorage.h b/src/XMPPFileStorage.h index c5a05e6..fa5fb8a 100644 --- a/src/XMPPFileStorage.h +++ b/src/XMPPFileStorage.h @@ -24,6 +24,8 @@ #import "XMPPStorage.h" +OF_ASSUME_NONNULL_BEGIN + @class OFMutableDictionary; @interface XMPPFileStorage: OFObject @@ -32,5 +34,8 @@ OFMutableDictionary *_data; } -- initWithFile: (OFString*)file; +- init OF_UNAVAILABLE; +- initWithFile: (OFString *)file; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPFileStorage.m b/src/XMPPFileStorage.m index 576edc3..7577e84 100644 --- a/src/XMPPFileStorage.m +++ b/src/XMPPFileStorage.m @@ -40,17 +40,10 @@ @implementation XMPPFileStorage - init { - @try { - [self doesNotRecognizeSelector: _cmd]; - } @catch (id e) { - [self release]; - @throw e; - } - - abort(); + OF_INVALID_INIT_METHOD } -- initWithFile: (OFString*)file +- initWithFile: (OFString *)file { self = [super init]; @@ -88,7 +81,7 @@ } - (void)XMPP_setObject: (id)object - forPath: (OFString*)path + forPath: (OFString *)path { OFArray *pathComponents = [path componentsSeparatedByString: @"."]; OFMutableDictionary *iter = _data; @@ -118,21 +111,18 @@ [iter removeObjectForKey: [pathComponents lastObject]]; } -- (id)XMPP_objectForPath: (OFString*)path +- (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 +- (void)setStringValue: (OFString *)string + forPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; @@ -142,7 +132,7 @@ [pool release]; } -- (OFString*)stringValueForPath: (OFString*)path +- (OFString *)stringValueForPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFString *string; @@ -155,7 +145,7 @@ } - (void)setBooleanValue: (bool)boolean - forPath: (OFString*)path + forPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; @@ -165,7 +155,7 @@ [pool release]; } -- (bool)booleanValueForPath: (OFString*)path +- (bool)booleanValueForPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; bool boolean; @@ -178,7 +168,7 @@ } - (void)setIntegerValue: (intmax_t)integer - forPath: (OFString*)path + forPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; @@ -188,7 +178,7 @@ [pool release]; } -- (intmax_t)integerValueForPath: (OFString*)path +- (intmax_t)integerValueForPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; intmax_t integer; @@ -200,8 +190,8 @@ return integer; } -- (void)setArray: (OFArray*)array - forPath: (OFString*)path +- (void)setArray: (OFArray *)array + forPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; @@ -211,7 +201,7 @@ [pool release]; } -- (OFArray*)arrayForPath: (OFString*)path +- (OFArray *)arrayForPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFArray *array; @@ -223,8 +213,8 @@ return array; } -- (void)setDictionary: (OFDictionary*)dictionary - forPath: (OFString*)path +- (void)setDictionary: (OFDictionary *)dictionary + forPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; @@ -234,7 +224,7 @@ [pool release]; } -- (OFDictionary*)dictionaryForPath: (OFString*)path +- (OFDictionary *)dictionaryForPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFDictionary *dictionary; diff --git a/src/XMPPIQ.h b/src/XMPPIQ.h index d5b3290..99956c9 100644 --- a/src/XMPPIQ.h +++ b/src/XMPPIQ.h @@ -23,6 +23,8 @@ #import "XMPPStanza.h" +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class describing an IQ stanza. */ @@ -34,8 +36,8 @@ * \param ID The value for the stanza's id attribute * \return A new autoreleased XMPPIQ */ -+ (instancetype)IQWithType: (OFString*)type - ID: (OFString*)ID; ++ (instancetype)IQWithType: (OFString *)type + ID: (OFString *)ID; /** * \brief Initializes an already allocated XMPPIQ with the specified type and @@ -45,15 +47,15 @@ * \param ID The value for the stanza's id attribute * \return An initialized XMPPIQ */ -- initWithType: (OFString*)type - ID: (OFString*)ID; +- initWithType: (OFString *)type + ID: (OFString *)ID; /** * \brief Generates a result IQ for the receiving object. * * \return A new autoreleased XMPPIQ */ -- (XMPPIQ*)resultIQ; +- (XMPPIQ *)resultIQ; /** * \brief Generates an error IQ for the receiving object. @@ -63,9 +65,9 @@ * \param text A descriptive text * \return A new autoreleased XMPPIQ */ -- (XMPPIQ*)errorIQWithType: (OFString*)type - condition: (OFString*)condition - text: (OFString*)text; +- (XMPPIQ *)errorIQWithType: (OFString *)type + condition: (OFString *)condition + text: (nullable OFString *)text; /** * \brief Generates an error IQ for the receiving object. @@ -74,6 +76,8 @@ * \param condition A defined conditions from RFC 6120 * \return A new autoreleased XMPPIQ */ -- (XMPPIQ*)errorIQWithType: (OFString*)type - condition: (OFString*)condition; +- (XMPPIQ *)errorIQWithType: (OFString *)type + condition: (OFString *)condition; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPIQ.m b/src/XMPPIQ.m index a126871..bffdfe4 100644 --- a/src/XMPPIQ.m +++ b/src/XMPPIQ.m @@ -29,15 +29,15 @@ #import "XMPPIQ.h" @implementation XMPPIQ -+ (instancetype)IQWithType: (OFString*)type - ID: (OFString*)ID ++ (instancetype)IQWithType: (OFString *)type + ID: (OFString *)ID { return [[[self alloc] initWithType: type ID: ID] autorelease]; } -- initWithType: (OFString*)type - ID: (OFString*)ID +- initWithType: (OFString *)type + ID: (OFString *)ID { self = [super initWithName: @"iq" type: type @@ -55,7 +55,7 @@ return self; } -- (XMPPIQ*)resultIQ +- (XMPPIQ *)resultIQ { XMPPIQ *ret = [XMPPIQ IQWithType: @"result" ID: [self ID]]; @@ -64,9 +64,9 @@ return ret; } -- (XMPPIQ*)errorIQWithType: (OFString*)type - condition: (OFString*)condition - text: (OFString*)text +- (XMPPIQ *)errorIQWithType: (OFString *)type + condition: (OFString *)condition + text: (OFString *)text { XMPPIQ *ret = [XMPPIQ IQWithType: @"error" ID: [self ID]]; @@ -91,8 +91,8 @@ return ret; } -- (XMPPIQ*)errorIQWithType: (OFString*)type - condition: (OFString*)condition +- (XMPPIQ *)errorIQWithType: (OFString *)type + condition: (OFString *)condition { return [self errorIQWithType: type condition: condition diff --git a/src/XMPPJID.h b/src/XMPPJID.h index 6469a70..2eb46b2 100644 --- a/src/XMPPJID.h +++ b/src/XMPPJID.h @@ -23,6 +23,8 @@ #import +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class for easy handling of JIDs. */ @@ -32,11 +34,11 @@ } /// \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. @@ -51,7 +53,7 @@ * \param string The string to parse into a JID object * \return A new autoreleased XMPPJID */ -+ (instancetype)JIDWithString: (OFString*)string; ++ (instancetype)JIDWithString: (OFString *)string; /** * \brief Initializes an already allocated XMPPJID with a string. @@ -59,19 +61,21 @@ * \param string The string to parse into a JID object * \return A initialized XMPPJID */ -- initWithString: (OFString*)string; +- initWithString: (OFString *)string; /** * \brief Returns the bare JID. * * \return An OFString containing the bare JID */ -- (OFString*)bareJID; +- (OFString *)bareJID; /** * \brief Returns the full JID. * * \return An OFString containing the full JID */ -- (OFString*)fullJID; +- (OFString *)fullJID; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPJID.m b/src/XMPPJID.m index da0a4d7..b31f865 100644 --- a/src/XMPPJID.m +++ b/src/XMPPJID.m @@ -33,17 +33,19 @@ #import "XMPPExceptions.h" @implementation XMPPJID +@synthesize node = _node, domain = _domain, resource = _resource; + + (instancetype)JID { return [[[self alloc] init] autorelease]; } -+ (instancetype)JIDWithString: (OFString*)string ++ (instancetype)JIDWithString: (OFString *)string { return [[[self alloc] initWithString: string] autorelease]; } -- initWithString: (OFString*)string +- initWithString: (OFString *)string { size_t nodesep, resourcesep; @@ -103,7 +105,7 @@ return new; } -- (void)setNode: (OFString*)node +- (void)setNode: (OFString *)node { OFString *old = _node; char *nodepart; @@ -132,12 +134,7 @@ [old release]; } -- (OFString*)node -{ - return [[_node copy] autorelease]; -} - -- (void)setDomain: (OFString*)domain +- (void)setDomain: (OFString *)domain { OFString *old = _domain; char *srv; @@ -160,12 +157,7 @@ [old release]; } -- (OFString*)domain -{ - return [[_domain copy] autorelease]; -} - -- (void)setResource: (OFString*)resource +- (void)setResource: (OFString *)resource { OFString *old = _resource; char *res; @@ -194,12 +186,7 @@ [old release]; } -- (OFString*)resource -{ - return [[_resource copy] autorelease]; -} - -- (OFString*)bareJID +- (OFString *)bareJID { if (_node != nil) return [OFString stringWithFormat: @"%@@%@", _node, _domain]; @@ -207,7 +194,7 @@ return [OFString stringWithFormat: @"%@", _domain]; } -- (OFString*)fullJID +- (OFString *)fullJID { /* If we don't have a resource, the full JID is equal to the bare JID */ if (_resource == nil) @@ -221,7 +208,7 @@ _domain, _resource]; } -- (OFString*)description +- (OFString *)description { return [self fullJID]; } diff --git a/src/XMPPMessage.h b/src/XMPPMessage.h index b6727a5..454da20 100644 --- a/src/XMPPMessage.h +++ b/src/XMPPMessage.h @@ -23,6 +23,8 @@ #import "XMPPStanza.h" +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class describing a message stanza. */ @@ -43,7 +45,7 @@ * \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. @@ -51,7 +53,7 @@ * \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. @@ -60,8 +62,8 @@ * \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. @@ -69,7 +71,7 @@ * \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. @@ -77,7 +79,7 @@ * \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 @@ -87,6 +89,8 @@ * \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 diff --git a/src/XMPPMessage.m b/src/XMPPMessage.m index dcb9752..7df4932 100644 --- a/src/XMPPMessage.m +++ b/src/XMPPMessage.m @@ -34,18 +34,18 @@ return [[[self alloc] init] autorelease]; } -+ (instancetype)messageWithID: (OFString*)ID ++ (instancetype)messageWithID: (OFString *)ID { return [[[self alloc] initWithID: ID] autorelease]; } -+ (instancetype)messageWithType: (OFString*)type ++ (instancetype)messageWithType: (OFString *)type { return [[[self alloc] initWithType: type] autorelease]; } -+ (instancetype)messageWithType: (OFString*)type - ID: (OFString*)ID ++ (instancetype)messageWithType: (OFString *)type + ID: (OFString *)ID { return [[[self alloc] initWithType: type ID: ID] autorelease]; @@ -57,27 +57,27 @@ ID: nil]; } -- initWithID: (OFString*)ID +- initWithID: (OFString *)ID { return [self initWithType: nil ID: ID]; } -- initWithType: (OFString*)type +- initWithType: (OFString *)type { return [self initWithType: type ID: nil]; } -- initWithType: (OFString*)type - ID: (OFString*)ID +- initWithType: (OFString *)type + ID: (OFString *)ID { return [super initWithName: @"message" type: type ID: ID]; } -- (void)setBody: (OFString*)body +- (void)setBody: (OFString *)body { OFXMLElement *oldBody = [self elementForName: @"body" namespace: XMPP_NS_CLIENT]; @@ -91,7 +91,7 @@ stringValue: body]]; } -- (OFString*)body +- (OFString *)body { return [[self elementForName: @"body" namespace: XMPP_NS_CLIENT] stringValue]; diff --git a/src/XMPPMulticastDelegate.h b/src/XMPPMulticastDelegate.h index 626762d..3b019e4 100644 --- a/src/XMPPMulticastDelegate.h +++ b/src/XMPPMulticastDelegate.h @@ -22,6 +22,8 @@ #import +OF_ASSUME_NONNULL_BEGIN + @class OFDataArray; /** @@ -53,7 +55,7 @@ * \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. @@ -63,6 +65,8 @@ * \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 diff --git a/src/XMPPPLAINAuth.h b/src/XMPPPLAINAuth.h index 3747abe..40cf632 100644 --- a/src/XMPPPLAINAuth.h +++ b/src/XMPPPLAINAuth.h @@ -23,6 +23,8 @@ #import #import "XMPPAuthenticator.h" +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class to authenticate using SASL PLAIN */ @@ -34,8 +36,8 @@ * \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 @@ -46,7 +48,9 @@ * \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 diff --git a/src/XMPPPLAINAuth.m b/src/XMPPPLAINAuth.m index ce1cfb3..0d17525 100644 --- a/src/XMPPPLAINAuth.m +++ b/src/XMPPPLAINAuth.m @@ -28,23 +28,23 @@ #import "XMPPExceptions.h" @implementation XMPPPLAINAuth -+ (instancetype)PLAINAuthWithAuthcid: (OFString*)authcid - password: (OFString*)password ++ (instancetype)PLAINAuthWithAuthcid: (OFString *)authcid + password: (OFString *)password { return [[[self alloc] initWithAuthcid: authcid password: password] autorelease]; } -+ (instancetype)PLAINAuthWithAuthzid: (OFString*)authzid - authcid: (OFString*)authcid - password: (OFString*)password ++ (instancetype)PLAINAuthWithAuthzid: (OFString *)authzid + authcid: (OFString *)authcid + password: (OFString *)password { return [[[self alloc] initWithAuthzid: authzid authcid: authcid password: password] autorelease]; } -- (OFDataArray*)initialMessage +- (OFDataArray *)initialMessage { OFDataArray *message = [OFDataArray dataArray]; diff --git a/src/XMPPPresence.h b/src/XMPPPresence.h index 8566a67..f56ca34 100644 --- a/src/XMPPPresence.h +++ b/src/XMPPPresence.h @@ -23,6 +23,8 @@ #import "XMPPStanza.h" +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class describing a presence stanza. */ @@ -32,20 +34,25 @@ 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. @@ -60,7 +67,7 @@ * \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. @@ -68,7 +75,7 @@ * \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 @@ -78,8 +85,8 @@ * \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. @@ -87,7 +94,7 @@ * \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. @@ -95,7 +102,7 @@ * \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 @@ -105,6 +112,8 @@ * \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 diff --git a/src/XMPPPresence.m b/src/XMPPPresence.m index a7ad854..1c11cc7 100644 --- a/src/XMPPPresence.m +++ b/src/XMPPPresence.m @@ -49,23 +49,25 @@ show_to_int(OFString *show) } @implementation XMPPPresence +@dynamic type; + + (instancetype)presence { return [[[self alloc] init] autorelease]; } -+ (instancetype)presenceWithID: (OFString*)ID ++ (instancetype)presenceWithID: (OFString *)ID { return [[[self alloc] initWithID: ID] autorelease]; } -+ (instancetype)presenceWithType: (OFString*)type ++ (instancetype)presenceWithType: (OFString *)type { return [[[self alloc] initWithType: type] autorelease]; } -+ (instancetype)presenceWithType: (OFString*)type - ID: (OFString*)ID ++ (instancetype)presenceWithType: (OFString *)type + ID: (OFString *)ID { return [[[self alloc] initWithType: type ID: ID] autorelease]; @@ -77,27 +79,27 @@ show_to_int(OFString *show) ID: nil]; } -- initWithID: (OFString*)ID +- initWithID: (OFString *)ID { return [self initWithType: nil ID: ID]; } -- initWithType: (OFString*)type +- initWithType: (OFString *)type { return [self initWithType: type ID: nil]; } -- initWithType: (OFString*)type - ID: (OFString*)ID +- initWithType: (OFString *)type + ID: (OFString *)ID { return [super initWithName: @"presence" type: type ID: ID]; } -- initWithElement: (OFXMLElement*)element +- initWithElement: (OFXMLElement *)element { self = [super initWithElement: element]; @@ -135,15 +137,15 @@ show_to_int(OFString *show) [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 +- (void)setShow: (OFString *)show { OFXMLElement *oldShow = [self elementForName: @"show" namespace: XMPP_NS_CLIENT]; @@ -162,12 +164,7 @@ show_to_int(OFString *show) [old release]; } -- (OFString*)show -{ - return [[_show copy] autorelease]; -} - -- (void)setStatus: (OFString*)status +- (void)setStatus: (OFString *)status { OFXMLElement *oldStatus = [self elementForName: @"status" namespace: XMPP_NS_CLIENT]; @@ -186,12 +183,7 @@ show_to_int(OFString *show) [old release]; } -- (OFString*)status -{ - return [[_status copy] autorelease]; -} - -- (void)setPriority: (OFNumber*)priority +- (void)setPriority: (OFNumber *)priority { intmax_t prio = [priority intMaxValue]; OFNumber *old; @@ -205,7 +197,7 @@ show_to_int(OFString *show) if (oldPriority != nil) [self removeChild: oldPriority]; - OFString* priority_s = + OFString *priority_s = [OFString stringWithFormat: @"%" @PRId8, [priority int8Value]]; [self addChild: [OFXMLElement elementWithName: @"priority" namespace: XMPP_NS_CLIENT @@ -216,11 +208,6 @@ show_to_int(OFString *show) [old release]; } -- (OFNumber*)priority -{ - return [[_priority copy] autorelease]; -} - - (of_comparison_result_t)compare: (id )object { XMPPPresence *otherPresence; @@ -234,7 +221,7 @@ show_to_int(OFString *show) if (![object isKindOfClass: [XMPPPresence class]]) @throw [OFInvalidArgumentException exception]; - otherPresence = (XMPPPresence*)object; + otherPresence = (XMPPPresence *)object; otherPriority = [otherPresence priority]; if (otherPriority == nil) otherPriority = [OFNumber numberWithInt8: 0]; diff --git a/src/XMPPRoster.h b/src/XMPPRoster.h index 45c1f3a..f83bb8e 100644 --- a/src/XMPPRoster.h +++ b/src/XMPPRoster.h @@ -26,6 +26,8 @@ #import "XMPPConnection.h" #import "XMPPStorage.h" +OF_ASSUME_NONNULL_BEGIN + @class XMPPRosterItem; @class XMPPIQ; @class XMPPRoster; @@ -36,9 +38,6 @@ * of a XMPPRoster */ @protocol XMPPRosterDelegate -#ifndef XMPP_ROSTER_M - -#endif @optional /** * \brief This callback is called after the roster was received (as a result of @@ -46,7 +45,7 @@ * * \param roster The roster that was received */ -- (void)rosterWasReceived: (XMPPRoster*)roster; +- (void)rosterWasReceived: (XMPPRoster *)roster; /** * \brief This callback is called whenever a roster push was received. @@ -54,8 +53,8 @@ * \param roster The roster that was updated by the roster push * \param rosterItem The roster item received in the push */ -- (void)roster: (XMPPRoster*)roster - didReceiveRosterItem: (XMPPRosterItem*)rosterItem; +- (void)roster: (XMPPRoster *)roster + didReceiveRosterItem: (XMPPRosterItem *)rosterItem; @end /** @@ -80,22 +79,25 @@ * * Inherited from the connection if not overridden. */ -@property (assign) id dataStorage; +@property (nonatomic, assign) id 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. @@ -107,21 +109,21 @@ * * \param rosterItem The roster item to add to the roster */ -- (void)addRosterItem: (XMPPRosterItem*)rosterItem; +- (void)addRosterItem: (XMPPRosterItem *)rosterItem; /** * \brief Updates an already existing contact in the roster. * * \param rosterItem The roster item to update */ -- (void)updateRosterItem: (XMPPRosterItem*)rosterItem; +- (void)updateRosterItem: (XMPPRosterItem *)rosterItem; /** * \brief Delete a contact from the roster. * * \param rosterItem The roster item to delete */ -- (void)deleteRosterItem: (XMPPRosterItem*)rosterItem; +- (void)deleteRosterItem: (XMPPRosterItem *)rosterItem; /** * \brief Adds the specified delegate. @@ -136,12 +138,6 @@ * \param delegate The delegate to remove */ - (void)removeDelegate: (id )delegate; - -- (void)XMPP_updateRosterItem: (XMPPRosterItem*)rosterItem; -- (void)XMPP_handleInitialRosterForConnection: (XMPPConnection*)connection - IQ: (XMPPIQ*)iq; -- (XMPPRosterItem*)XMPP_rosterItemWithXMLElement: (OFXMLElement*)element; @end -@interface OFObject (XMPPRosterDelegate) -@end +OF_ASSUME_NONNULL_END diff --git a/src/XMPPRoster.m b/src/XMPPRoster.m index 0763ca4..f5c0ea2 100644 --- a/src/XMPPRoster.m +++ b/src/XMPPRoster.m @@ -39,11 +39,27 @@ #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; -- initWithConnection: (XMPPConnection*)connection +- init +{ + OF_INVALID_INIT_METHOD +} + +- initWithConnection: (XMPPConnection *)connection { self = [super init]; @@ -102,25 +118,25 @@ IQ:)]; } -- (bool)connection: (XMPPConnection*)connection - didReceiveIQ: (XMPPIQ*)iq +- (bool)connection: (XMPPConnection *)connection + 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; @@ -146,17 +162,17 @@ [_dataStorage save]; } - [connection sendStanza: [iq resultIQ]]; + [connection sendStanza: [IQ resultIQ]]; return true; } -- (void)addRosterItem: (XMPPRosterItem*)rosterItem +- (void)addRosterItem: (XMPPRosterItem *)rosterItem { [self updateRosterItem: rosterItem]; } -- (void)updateRosterItem: (XMPPRosterItem*)rosterItem +- (void)updateRosterItem: (XMPPRosterItem *)rosterItem { XMPPIQ *IQ = [XMPPIQ IQWithType: @"set" ID: [_connection generateStanzaID]]; @@ -185,7 +201,7 @@ [_connection sendStanza: IQ]; } -- (void)deleteRosterItem: (XMPPRosterItem*)rosterItem +- (void)deleteRosterItem: (XMPPRosterItem *)rosterItem { XMPPIQ *IQ = [XMPPIQ IQWithType: @"set" ID: [_connection generateStanzaID]]; @@ -224,17 +240,7 @@ _dataStorage = dataStorage; } -- (XMPPConnection*)connection -{ - return _connection; -} - -- (id )dataStorage -{ - return _dataStorage; -} - -- (void)XMPP_updateRosterItem: (XMPPRosterItem*)rosterItem +- (void)XMPP_updateRosterItem: (XMPPRosterItem *)rosterItem { if ([_connection supportsRosterVersioning]) { OFMutableDictionary *items = [[[_dataStorage dictionaryForPath: @@ -274,7 +280,7 @@ [_rosterItems removeObjectForKey: [[rosterItem JID] bareJID]]; } -- (XMPPRosterItem*)XMPP_rosterItemWithXMLElement: (OFXMLElement*)element +- (XMPPRosterItem *)XMPP_rosterItemWithXMLElement: (OFXMLElement *)element { OFString *subscription; OFEnumerator *groupEnumerator; @@ -310,15 +316,11 @@ return rosterItem; } -- (void)XMPP_handleInitialRosterForConnection: (XMPPConnection*)connection - IQ: (XMPPIQ*)IQ +- (void)XMPP_handleInitialRosterForConnection: (XMPPConnection *)connection + IQ: (XMPPIQ *)IQ { - OFXMLElement *rosterElement; - OFEnumerator *enumerator; - OFXMLElement *element; - - rosterElement = [IQ elementForName: @"query" - namespace: XMPP_NS_ROSTER]; + OFXMLElement *rosterElement = [IQ elementForName: @"query" + namespace: XMPP_NS_ROSTER]; if ([connection supportsRosterVersioning]) { if (rosterElement == nil) { @@ -350,8 +352,7 @@ forPath: @"roster.items"]; } - enumerator = [[rosterElement children] objectEnumerator]; - while ((element = [enumerator nextObject]) != nil) { + for (OFXMLElement *element in [rosterElement children]) { OFAutoreleasePool *pool; XMPPRosterItem *rosterItem; diff --git a/src/XMPPRosterItem.h b/src/XMPPRosterItem.h index 40fd2cf..d5bf63a 100644 --- a/src/XMPPRosterItem.h +++ b/src/XMPPRosterItem.h @@ -23,6 +23,8 @@ #import +OF_ASSUME_NONNULL_BEGIN + @class XMPPJID; /** @@ -37,13 +39,13 @@ } /// \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. @@ -52,3 +54,5 @@ */ + (instancetype)rosterItem; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPRosterItem.m b/src/XMPPRosterItem.m index 5cc3c42..3debd30 100644 --- a/src/XMPPRosterItem.m +++ b/src/XMPPRosterItem.m @@ -66,7 +66,7 @@ return new; } -- (OFString*)description +- (OFString *)description { return [OFString stringWithFormat: @"", diff --git a/src/XMPPSCRAMAuth.h b/src/XMPPSCRAMAuth.h index 825b2eb..81ec16e 100644 --- a/src/XMPPSCRAMAuth.h +++ b/src/XMPPSCRAMAuth.h @@ -24,6 +24,8 @@ #import "XMPPAuthenticator.h" #import "XMPPConnection.h" +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class to authenticate using SCRAM */ @@ -49,9 +51,9 @@ * \param plusAvailable Whether the PLUS variant was offered * \return A new autoreleased XMPPSCRAMAuth */ -+ (instancetype)SCRAMAuthWithAuthcid: (OFString*)authcid - password: (OFString*)password - connection: (XMPPConnection*)connection ++ (instancetype)SCRAMAuthWithAuthcid: (nullable OFString *)authcid + password: (nullable OFString *)password + connection: (XMPPConnection *)connection hash: (Class)hash plusAvailable: (bool)plusAvailable; @@ -67,13 +69,19 @@ * \param plusAvailable Whether the PLUS variant was offered * \return A new autoreleased XMPPSCRAMAuth */ -+ (instancetype)SCRAMAuthWithAuthzid: (OFString*)authzid - authcid: (OFString*)authcid - password: (OFString*)password - connection: (XMPPConnection*)connection ++ (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. @@ -85,9 +93,9 @@ * \param plusAvailable Whether the PLUS variant was offered * \return A initialized XMPPSCRAMAuth */ -- initWithAuthcid: (OFString*)authcid - password: (OFString*)password - connection: (XMPPConnection*)connection +- initWithAuthcid: (nullable OFString *)authcid + password: (nullable OFString *)password + connection: (XMPPConnection *)connection hash: (Class)hash plusAvailable: (bool)plusAvailable; @@ -103,21 +111,12 @@ * \param plusAvailable Whether the PLUS variant was offered * \return A initialized XMPPSCRAMAuth */ -- initWithAuthzid: (OFString*)authzid - authcid: (OFString*)authcid - password: (OFString*)password - connection: (XMPPConnection*)connection +- initWithAuthzid: (nullable OFString *)authzid + authcid: (nullable OFString *)authcid + password: (nullable OFString *)password + connection: (XMPPConnection *)connection hash: (Class)hash - plusAvailable: (bool)plusAvailable; - -/// \cond internal -- (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; -/// \endcond + plusAvailable: (bool)plusAvailable OF_DESIGNATED_INITIALIZER; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPSCRAMAuth.m b/src/XMPPSCRAMAuth.m index 87e5997..441a2b2 100644 --- a/src/XMPPSCRAMAuth.m +++ b/src/XMPPSCRAMAuth.m @@ -37,10 +37,25 @@ #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 ++ (instancetype)SCRAMAuthWithAuthcid: (OFString *)authcid + password: (OFString *)password + connection: (XMPPConnection *)connection hash: (Class)hash plusAvailable: (bool)plusAvailable { @@ -51,10 +66,10 @@ plusAvailable: plusAvailable] autorelease]; } -+ (instancetype)SCRAMAuthWithAuthzid: (OFString*)authzid - authcid: (OFString*)authcid - password: (OFString*)password - connection: (XMPPConnection*)connection ++ (instancetype)SCRAMAuthWithAuthzid: (OFString *)authzid + authcid: (OFString *)authcid + password: (OFString *)password + connection: (XMPPConnection *)connection hash: (Class)hash plusAvailable: (bool)plusAvailable { @@ -66,9 +81,9 @@ plusAvailable: plusAvailable] autorelease]; } -- initWithAuthcid: (OFString*)authcid - password: (OFString*)password - connection: (XMPPConnection*)connection +- initWithAuthcid: (OFString *)authcid + password: (OFString *)password + connection: (XMPPConnection *)connection hash: (Class)hash plusAvailable: (bool)plusAvailable { @@ -80,10 +95,10 @@ plusAvailable: plusAvailable]; } -- initWithAuthzid: (OFString*)authzid - authcid: (OFString*)authcid - password: (OFString*)password - connection: (XMPPConnection*)connection +- initWithAuthzid: (OFString *)authzid + authcid: (OFString *)authcid + password: (OFString *)password + connection: (XMPPConnection *)connection hash: (Class)hash plusAvailable: (bool)plusAvailable { @@ -109,7 +124,7 @@ [super dealloc]; } -- (void)setAuthzid: (OFString*)authzid +- (void)setAuthzid: (OFString *)authzid { OFString *old = _authzid; @@ -126,7 +141,7 @@ [old release]; } -- (void)setAuthcid: (OFString*)authcid +- (void)setAuthcid: (OFString *)authcid { OFString *old = _authcid; @@ -143,7 +158,7 @@ [old release]; } -- (OFDataArray*)initialMessage +- (OFDataArray *)initialMessage { OFDataArray *ret = [OFDataArray dataArray]; @@ -180,7 +195,7 @@ return ret; } -- (OFDataArray*)continueWithData: (OFDataArray*)data +- (OFDataArray *)continueWithData: (OFDataArray *)data { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFDataArray *ret; @@ -196,7 +211,7 @@ return [ret autorelease]; } -- (OFDataArray*)XMPP_parseServerFirstMessage: (OFDataArray*)data +- (OFDataArray *)XMPP_parseServerFirstMessage: (OFDataArray *)data { size_t i; const uint8_t *clientKey, *serverKey, *clientSignature; @@ -253,7 +268,8 @@ [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]]; @@ -312,7 +328,7 @@ * IETF RFC 5802: * StoredKey := H(ClientKey) */ - [hash updateWithBuffer: (void*) clientKey + [hash updateWithBuffer: (void *)clientKey length: [_hashType digestSize]]; tmpArray = [OFDataArray dataArray]; [tmpArray addItems: [hash digest] @@ -368,7 +384,7 @@ return ret; } -- (OFDataArray*)XMPP_parseServerFinalMessage: (OFDataArray*)data +- (OFDataArray *)XMPP_parseServerFinalMessage: (OFDataArray *)data { OFString *mess, *value; @@ -398,7 +414,7 @@ return nil; } -- (OFString*)XMPP_genNonce +- (OFString *)XMPP_genNonce { uint8_t buf[64]; size_t i; @@ -414,13 +430,13 @@ buf[i] = '~'; } - return [OFString stringWithCString: (char*)buf + return [OFString stringWithCString: (char *)buf encoding: OF_STRING_ENCODING_ASCII length: 64]; } -- (const uint8_t*)XMPP_HMACWithKey: (OFDataArray*)key - data: (OFDataArray*)data +- (const uint8_t *)XMPP_HMACWithKey: (OFDataArray *)key + data: (OFDataArray *)data { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFDataArray *k = [OFDataArray dataArray]; @@ -453,15 +469,15 @@ } hashI = [[[_hashType alloc] init] autorelease]; - [hashI updateWithBuffer: (char*)kI + [hashI updateWithBuffer: (char *)kI length: blockSize]; [hashI updateWithBuffer: [data items] length: [data itemSize] * [data count]]; hashO = [[[_hashType alloc] init] autorelease]; - [hashO updateWithBuffer: (char*)kO + [hashO updateWithBuffer: (char *)kO length: blockSize]; - [hashO updateWithBuffer: (char*)[hashI digest] + [hashO updateWithBuffer: (char *)[hashI digest] length: [_hashType digestSize]]; } @finally { [self freeMemory: kI]; @@ -474,9 +490,9 @@ return [[hashO autorelease] digest]; } -- (OFDataArray*)XMPP_hiWithData: (OFDataArray*)str - salt: (OFDataArray*)salt - iterationCount: (intmax_t)i +- (OFDataArray *)XMPP_hiWithData: (OFDataArray *)str + salt: (OFDataArray *)salt + iterationCount: (intmax_t)i { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; size_t digestSize = [_hashType digestSize]; diff --git a/src/XMPPSRVLookup.h b/src/XMPPSRVLookup.h index 9f3e93a..16cdcd0 100644 --- a/src/XMPPSRVLookup.h +++ b/src/XMPPSRVLookup.h @@ -27,6 +27,8 @@ #import +OF_ASSUME_NONNULL_BEGIN + @interface XMPPSRVEntry: OFObject { uint16_t _priority; @@ -40,18 +42,19 @@ @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; + 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; + target: (OFString *)target; - initWithResourceRecord: (ns_rr)resourceRecord handle: (ns_msg)handle; @end @@ -63,13 +66,11 @@ OFList *_list; } -@property (readonly, copy) OFString *domain; +@property (readonly, nonatomic) OFString *domain; -+ (instancetype)lookupWithDomain: (OFString*)domain; -- initWithDomain: (OFString*)domain; - -- (void)XMPP_lookup; -- (void)XMPP_addEntry: (XMPPSRVEntry*)item; ++ (instancetype)lookupWithDomain: (OFString *)domain; +- init OF_UNAVAILABLE; +- initWithDomain: (OFString *)domain; @end @interface XMPPSRVEnumerator: OFEnumerator @@ -80,5 +81,8 @@ bool _done; } -- initWithList: (OFList*)list; +- init OF_UNAVAILABLE; +- initWithList: (OFList *)list; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPSRVLookup.m b/src/XMPPSRVLookup.m index 469b419..a94d741 100644 --- a/src/XMPPSRVLookup.m +++ b/src/XMPPSRVLookup.m @@ -40,6 +40,15 @@ #import +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; @@ -48,7 +57,7 @@ + (instancetype)entryWithPriority: (uint16_t)priority weight: (uint16_t)weight port: (uint16_t)port - target: (OFString*)target + target: (OFString *)target { return [[[self alloc] initWithPriority: priority weight: weight @@ -65,20 +74,13 @@ - init { - @try { - [self doesNotRecognizeSelector: _cmd]; - } @catch (id e) { - [self release]; - @throw e; - } - - abort(); + OF_INVALID_INIT_METHOD } - initWithPriority: (uint16_t)priority weight: (uint16_t)weight port: (uint16_t)port - target: (OFString*)target + target: (OFString *)target { self = [super init]; @@ -104,13 +106,13 @@ const uint16_t *rdata; char buffer[NS_MAXDNAME]; - rdata = (const uint16_t*)(void*)ns_rr_rdata(resourceRecord); + rdata = (const uint16_t *)(void *)ns_rr_rdata(resourceRecord); _priority = ntohs(rdata[0]); _weight = ntohs(rdata[1]); _port = ntohs(rdata[2]); if (dn_expand(ns_msg_base(handle), ns_msg_end(handle), - (uint8_t*)&rdata[3], buffer, NS_MAXDNAME) < 1) + (uint8_t *)&rdata[3], buffer, NS_MAXDNAME) < 1) @throw [OFInitializationFailedException exceptionWithClass: [self class]]; @@ -132,7 +134,7 @@ [super dealloc]; } -- (OFString*)description +- (OFString *)description { return [OFString stringWithFormat: @"<%@ priority: %" PRIu16 @", weight: %" PRIu16 @", target: %@:%" @@ -143,12 +145,17 @@ @implementation XMPPSRVLookup @synthesize domain = _domain; -+ (instancetype)lookupWithDomain: (OFString*)domain ++ (instancetype)lookupWithDomain: (OFString *)domain { return [[[self alloc] initWithDomain: domain] autorelease]; } -- initWithDomain: (OFString*)domain +- init +{ + OF_INVALID_INIT_METHOD +} + +- initWithDomain: (OFString *)domain { self = [super init]; @@ -231,7 +238,7 @@ [pool release]; } -- (void)XMPP_addEntry: (XMPPSRVEntry*)entry +- (void)XMPP_addEntry: (XMPPSRVEntry *)entry { OFAutoreleasePool *pool; OFList *subList; @@ -273,14 +280,19 @@ [pool release]; } -- (OFEnumerator*)objectEnumerator +- (OFEnumerator *)objectEnumerator { return [[[XMPPSRVEnumerator alloc] initWithList: _list] autorelease]; } @end @implementation XMPPSRVEnumerator -- initWithList: (OFList*)list +- init +{ + OF_INVALID_INIT_METHOD +} + +- initWithList: (OFList *)list { self = [super init]; @@ -321,7 +333,7 @@ if ([_subListCopy count] > 0) { uint32_t randomWeight; - RAND_pseudo_bytes((uint8_t*)&randomWeight, sizeof(uint32_t)); + RAND_pseudo_bytes((uint8_t *)&randomWeight, sizeof(uint32_t)); randomWeight %= (totalWeight + 1); for (iter = [_subListCopy firstListObject]; iter != NULL; diff --git a/src/XMPPStanza.h b/src/XMPPStanza.h index c9c7e20..239ba44 100644 --- a/src/XMPPStanza.h +++ b/src/XMPPStanza.h @@ -23,6 +23,8 @@ #import +OF_ASSUME_NONNULL_BEGIN + @class XMPPJID; /** @@ -35,15 +37,15 @@ } /// \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. @@ -51,7 +53,7 @@ * \param name The stanza's name (one of iq, message or presence) * \return A new autoreleased XMPPStanza */ -+ (instancetype)stanzaWithName: (OFString*)name; ++ (instancetype)stanzaWithName: (OFString *)name; /** * \brief Creates a new autoreleased XMPPStanza with the specified name and @@ -61,8 +63,8 @@ * \param type The value for the stanza's type attribute * \return A new autoreleased XMPPStanza */ -+ (instancetype)stanzaWithName: (OFString*)name - type: (OFString*)type; ++ (instancetype)stanzaWithName: (OFString *)name + type: (nullable OFString *)type; /** * \brief Creates a new autoreleased XMPPStanza with the specified name and ID. @@ -71,8 +73,8 @@ * \param ID The value for the stanza's id attribute * \return A new autoreleased XMPPStanza */ -+ (instancetype)stanzaWithName: (OFString*)name - ID: (OFString*)ID; ++ (instancetype)stanzaWithName: (OFString *)name + ID: (nullable OFString *)ID; /** * \brief Creates a new autoreleased XMPPStanza with the specified name, type @@ -83,9 +85,9 @@ * \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; ++ (instancetype)stanzaWithName: (OFString *)name + type: (nullable OFString *)type + ID: (nullable OFString *)ID; /** * \brief Creates a new autoreleased XMPPStanza from an OFXMLElement. @@ -93,7 +95,17 @@ * \param element The element to base the XMPPStanza on * \return A new autoreleased XMPPStanza */ -+ (instancetype)stanzaWithElement: (OFXMLElement*)element; ++ (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. @@ -101,7 +113,7 @@ * \param name The stanza's name (one of iq, message or presence) * \return A initialized XMPPStanza */ -- initWithName: (OFString*)name; +- initWithName: (OFString *)name; /** * \brief Initializes an already allocated XMPPStanza with the specified name @@ -111,8 +123,8 @@ * \param type The value for the stanza's type attribute * \return A initialized XMPPStanza */ -- initWithName: (OFString*)name - type: (OFString*)type; +- initWithName: (OFString *)name + type: (nullable OFString *)type; /** * \brief Initializes an already allocated XMPPStanza with the specified name @@ -122,8 +134,8 @@ * \param ID The value for the stanza's id attribute * \return A initialized XMPPStanza */ -- initWithName: (OFString*)name - ID: (OFString*)ID; +- initWithName: (OFString *)name + ID: (nullable OFString *)ID; /** * \brief Initializes an already allocated XMPPStanza with the specified name, @@ -134,9 +146,9 @@ * \param ID The value for the stanza's id attribute * \return A initialized XMPPStanza */ -- initWithName: (OFString*)name - type: (OFString*)type - ID: (OFString*)ID; +- initWithName: (OFString *)name + type: (nullable OFString *)type + ID: (nullable OFString *)ID; /** * \brief Initializes an already allocated XMPPStanza based on a OFXMLElement. @@ -144,5 +156,7 @@ * \param element The element to base the XMPPStanza on * \return A initialized XMPPStanza */ -- initWithElement: (OFXMLElement*)element; +- initWithElement: (OFXMLElement *)element; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPStanza.m b/src/XMPPStanza.m index c4a8ae9..24d2e2c 100644 --- a/src/XMPPStanza.m +++ b/src/XMPPStanza.m @@ -30,65 +30,85 @@ #import "namespaces.h" @implementation XMPPStanza -+ (instancetype)stanzaWithName: (OFString*)name +@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 ++ (instancetype)stanzaWithName: (OFString *)name + type: (OFString *)type { return [[[self alloc] initWithName: name type: type] autorelease]; } -+ (instancetype)stanzaWithName: (OFString*)name - ID: (OFString*)ID ++ (instancetype)stanzaWithName: (OFString *)name + ID: (OFString *)ID { return [[[self alloc] initWithName: name ID: ID] autorelease]; } -+ (instancetype)stanzaWithName: (OFString*)name - type: (OFString*)type - ID: (OFString*)ID ++ (instancetype)stanzaWithName: (OFString *)name + type: (OFString *)type + ID: (OFString *)ID { return [[[self alloc] initWithName: name type: type ID: ID] autorelease]; } -+ (instancetype)stanzaWithElement: (OFXMLElement*)element ++ (instancetype)stanzaWithElement: (OFXMLElement *)element { return [[[self alloc] initWithElement: element] autorelease]; } -- initWithName: (OFString*)name +- 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]; } -- initWithName: (OFString*)name - type: (OFString*)type +- initWithName: (OFString *)name + type: (OFString *)type { return [self initWithName: name type: type ID: nil]; } -- initWithName: (OFString*)name - ID: (OFString*)ID +- initWithName: (OFString *)name + ID: (OFString *)ID { return [self initWithName: name type: nil ID: ID]; } -- initWithName: (OFString*)name - type: (OFString*)type - ID: (OFString*)ID +- initWithName: (OFString *)name + type: (OFString *)type + ID: (OFString *)ID { self = [super initWithName: name namespace: XMPP_NS_CLIENT]; @@ -115,7 +135,7 @@ return self; } -- initWithElement: (OFXMLElement*)element +- initWithElement: (OFXMLElement *)element { self = [super initWithElement: element]; @@ -153,7 +173,7 @@ [super dealloc]; } -- (void)setFrom: (XMPPJID*)from +- (void)setFrom: (XMPPJID *)from { XMPPJID *old = _from; _from = [from copy]; @@ -166,12 +186,7 @@ stringValue: [from fullJID]]; } -- (XMPPJID*)from -{ - return [[_from copy] autorelease]; -} - -- (void)setTo: (XMPPJID*)to +- (void)setTo: (XMPPJID *)to { XMPPJID *old = _to; _to = [to copy]; @@ -184,12 +199,7 @@ stringValue: [to fullJID]]; } -- (XMPPJID*)to -{ - return [[_to copy] autorelease]; -} - -- (void)setType: (OFString*)type +- (void)setType: (OFString *)type { OFString *old = _type; _type = [type copy]; @@ -202,12 +212,7 @@ stringValue: type]; } -- (OFString*)type -{ - return [[_type copy] autorelease]; -} - -- (void)setID: (OFString*)ID +- (void)setID: (OFString *)ID { OFString *old = _ID; _ID = [ID copy]; @@ -220,12 +225,7 @@ stringValue: ID]; } -- (OFString*)ID -{ - return [[_ID copy] autorelease]; -} - -- (void)setLanguage: (OFString*)language +- (void)setLanguage: (OFString *)language { OFString *old = _language; _language = [language copy]; @@ -240,9 +240,4 @@ @"namespace" stringValue: language]; } - -- (OFString*)language -{ - return [[_language copy] autorelease]; -} @end diff --git a/src/XMPPStorage.h b/src/XMPPStorage.h index 1ebbce1..21db338 100644 --- a/src/XMPPStorage.h +++ b/src/XMPPStorage.h @@ -22,25 +22,29 @@ #import +OF_ASSUME_NONNULL_BEGIN + @class OFString; @class OFArray; @class OFDictionary; @protocol XMPPStorage - (void)save; -- (void)setStringValue: (OFString*)string - forPath: (OFString*)path; -- (OFString*)stringValueForPath: (OFString*)path; +- (void)setStringValue: (nullable OFString *)string + forPath: (OFString *)path; +- (nullable OFString *)stringValueForPath: (OFString *)path; - (void)setBooleanValue: (bool)boolean - forPath: (OFString*)path; -- (bool)booleanValueForPath: (OFString*)path; + forPath: (OFString *)path; +- (bool)booleanValueForPath: (OFString *)path; - (void)setIntegerValue: (intmax_t)integer - forPath: (OFString*)path; -- (intmax_t)integerValueForPath: (OFString*)path; -- (void)setArray: (OFArray*)array - forPath: (OFString*)path; -- (OFArray*)arrayForPath: (OFString*)path; -- (void)setDictionary: (OFDictionary*)dictionary - forPath: (OFString*)path; -- (OFDictionary*)dictionaryForPath: (OFString*)path; + forPath: (OFString *)path; +- (intmax_t)integerValueForPath: (OFString *)path; +- (void)setArray: (nullable OFArray *)array + forPath: (OFString *)path; +- (nullable OFArray *)arrayForPath: (OFString *)path; +- (void)setDictionary: (nullable OFDictionary *)dictionary + forPath: (OFString *)path; +- (nullable OFDictionary *)dictionaryForPath: (OFString *)path; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPStreamManagement.h b/src/XMPPStreamManagement.h index 8eed40b..bd1a368 100644 --- a/src/XMPPStreamManagement.h +++ b/src/XMPPStreamManagement.h @@ -23,11 +23,16 @@ #import "XMPPConnection.h" +OF_ASSUME_NONNULL_BEGIN + @interface XMPPStreamManagement: OFObject { XMPPConnection *_connection; uint32_t _receivedCount; } -- initWithConnection: (XMPPConnection*)connection; +- init OF_UNAVAILABLE; +- initWithConnection: (XMPPConnection *)connection; @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPStreamManagement.m b/src/XMPPStreamManagement.m index d7e3b3f..5dd21c6 100644 --- a/src/XMPPStreamManagement.m +++ b/src/XMPPStreamManagement.m @@ -26,7 +26,12 @@ #import "namespaces.h" @implementation XMPPStreamManagement -- initWithConnection: (XMPPConnection*)connection +- init +{ + OF_INVALID_INIT_METHOD +} + +- initWithConnection: (XMPPConnection *)connection { self = [super init]; @@ -48,8 +53,8 @@ [super dealloc]; } -- (void)connection: (XMPPConnection*)connection - didReceiveElement: (OFXMLElement*)element +- (void)connection: (XMPPConnection *)connection + didReceiveElement: (OFXMLElement *)element { OFString *elementName = [element name]; OFString *elementNS = [element namespace]; @@ -85,14 +90,14 @@ } /* TODO: Count outgoing stanzas here and cache them, send own ACK requests -- (void)connection: (XMPPConnection*)connection - didSendElement: (OFXMLElement*)element +- (void)connection: (XMPPConnection *)connection + didSendElement: (OFXMLElement *)element { } */ -- (void)connection: (XMPPConnection*)connection - wasBoundToJID: (XMPPJID*)JID +- (void)connection: (XMPPConnection *)connection + wasBoundToJID: (XMPPJID *)JID { if ([connection supportsStreamManagement]) [connection sendStanza: diff --git a/src/XMPPXMLElementBuilder.h b/src/XMPPXMLElementBuilder.h index 3b77a41..31d5a0b 100644 --- a/src/XMPPXMLElementBuilder.h +++ b/src/XMPPXMLElementBuilder.h @@ -22,5 +22,9 @@ #import +OF_ASSUME_NONNULL_BEGIN + @interface XMPPXMLElementBuilder: OFXMLElementBuilder @end + +OF_ASSUME_NONNULL_END diff --git a/src/XMPPXMLElementBuilder.m b/src/XMPPXMLElementBuilder.m index 6e31edd..5df7ebf 100644 --- a/src/XMPPXMLElementBuilder.m +++ b/src/XMPPXMLElementBuilder.m @@ -29,14 +29,14 @@ #import @implementation XMPPXMLElementBuilder -- (void)parser: (OFXMLParser*)parser - foundProcessingInstructions: (OFString*)pi +- (void)parser: (OFXMLParser *)parser + foundProcessingInstructions: (OFString *)pi { @throw [OFMalformedXMLException exception]; } -- (void)parser: (OFXMLParser*)parser - foundComment: (OFString*)comment +- (void)parser: (OFXMLParser *)parser + foundComment: (OFString *)comment { @throw [OFMalformedXMLException exception]; } diff --git a/tests/test.m b/tests/test.m index 544d801..c71ea4b 100644 --- a/tests/test.m +++ b/tests/test.m @@ -38,9 +38,7 @@ #import "XMPPFileStorage.h" @interface AppDelegate: OFObject -#ifdef OF_HAVE_OPTIONAL_PROTOCOLS -#endif { XMPPConnection *conn; XMPPRoster *roster; @@ -131,25 +129,25 @@ OF_APPLICATION_DELEGATE(AppDelegate) [conn asyncConnectAndHandle]; } -- (void)connection: (XMPPConnection*)conn - didReceiveElement: (OFXMLElement*)element +- (void)connection: (XMPPConnection *)conn + didReceiveElement: (OFXMLElement *)element { of_log(@"In: %@", element); } -- (void)connection: (XMPPConnection*)conn - didSendElement: (OFXMLElement*)element +- (void)connection: (XMPPConnection *)conn + didSendElement: (OFXMLElement *)element { of_log(@"Out: %@", element); } -- (void)connectionWasAuthenticated: (XMPPConnection*)conn +- (void)connectionWasAuthenticated: (XMPPConnection *)conn { of_log(@"Auth successful"); } -- (void)connection: (XMPPConnection*)conn_ - wasBoundToJID: (XMPPJID*)jid +- (void)connection: (XMPPConnection *)conn_ + wasBoundToJID: (XMPPJID *)jid { of_log(@"Bound to JID: %@", [jid fullJID]); of_log(@"Supports SM: %@", @@ -200,7 +198,7 @@ OF_APPLICATION_DELEGATE(AppDelegate) [roster requestRoster]; } -- (void)rosterWasReceived: (XMPPRoster*)roster_ +- (void)rosterWasReceived: (XMPPRoster *)roster_ { XMPPPresence *pres; @@ -224,7 +222,7 @@ OF_APPLICATION_DELEGATE(AppDelegate) #endif } -- (void)connectionDidUpgradeToTLS: (XMPPConnection*)conn_ +- (void)connectionDidUpgradeToTLS: (XMPPConnection *)conn_ { OFString *reason; @@ -238,39 +236,39 @@ OF_APPLICATION_DELEGATE(AppDelegate) } } -- (void)roster: (XMPPRoster*)roster_ - didReceiveRosterItem: (XMPPRosterItem*)rosterItem +- (void)roster: (XMPPRoster *)roster_ + didReceiveRosterItem: (XMPPRosterItem *)rosterItem { of_log(@"Got roster push: %@", rosterItem); } -- (bool)connection: (XMPPConnection*)conn - didReceiveIQ: (XMPPIQ*)iq +- (bool)connection: (XMPPConnection *)conn + didReceiveIQ: (XMPPIQ *)iq { of_log(@"IQ: %@", iq); return NO; } -- (void)connection: (XMPPConnection*)conn - didReceiveMessage: (XMPPMessage*)msg +- (void)connection: (XMPPConnection *)conn + didReceiveMessage: (XMPPMessage *)msg { of_log(@"Message: %@", msg); } -- (void)connection: (XMPPConnection*)conn - didReceivePresence: (XMPPPresence*)pres +- (void)connection: (XMPPConnection *)conn + didReceivePresence: (XMPPPresence *)pres { of_log(@"Presence: %@", pres); } -- (void)connection: (XMPPConnection*)conn +- (void)connection: (XMPPConnection *)conn didThrowException: (id)e { @throw e; } -- (void)connectionWasClosed: (XMPPConnection*)conn +- (void)connectionWasClosed: (XMPPConnection *)conn { of_log(@"Connection was closed!"); }