Index: src/XMPPAuthenticator.h ================================================================== --- src/XMPPAuthenticator.h +++ src/XMPPAuthenticator.h @@ -21,35 +21,37 @@ * POSSIBILITY OF SUCH DAMAGE. */ #import +OF_ASSUME_NONNULL_BEGIN + /** * \brief A base class for classes implementing authentication mechanisms */ @interface XMPPAuthenticator: OFObject { OFString *_authzid, *_authcid, *_password; } /// \brief The authzid to get authorization for -@property (copy) OFString *authzid; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *authzid; /// \brief The authcid to authenticate with -@property (copy) OFString *authcid; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *authcid; /// \brief The password to authenticate with -@property (copy) OFString *password; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *password; /** * \brief Initializes an already allocated XMPPAuthenticator with an authcid * and password. * * \param authcid The authcid to authenticate with * \param password The password to authenticate with * \return A initialized XMPPAuthenticator */ -- initWithAuthcid: (OFString*)authcid - password: (OFString*)password; +- initWithAuthcid: (nullable OFString *)authcid + password: (nullable OFString *)password; /** * \brief Initializes an already allocated XMPPSCRAMAuthenticator with an * authzid, authcid and password. * @@ -56,24 +58,26 @@ * \param authzid The authzid to get authorization for * \param authcid The authcid to authenticate with * \param password The password to authenticate with * \return A initialized XMPPAuthenticator */ -- initWithAuthzid: (OFString*)authzid - authcid: (OFString*)authcid - password: (OFString*)password; +- initWithAuthzid: (nullable OFString *)authzid + authcid: (nullable OFString *)authcid + password: (nullable OFString *)password OF_DESIGNATED_INITIALIZER; /** * \brief Returns an OFDataArray containing the initial authentication message. * * \return An OFDataAray containing the initial authentication message */ -- (OFDataArray*)initialMessage; +- (OFDataArray *)initialMessage; /** * \brief Continue authentication with the specified data. * * \param data The continuation data send by the server * \return The appropriate response if the data was a challenge, nil otherwise */ -- (OFDataArray*)continueWithData: (OFDataArray*)data; +- (nullable OFDataArray *)continueWithData: (OFDataArray *)data; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPAuthenticator.m ================================================================== --- src/XMPPAuthenticator.m +++ src/XMPPAuthenticator.m @@ -28,21 +28,21 @@ #import "XMPPAuthenticator.h" @implementation XMPPAuthenticator @synthesize authzid = _authzid, authcid = _authcid, password = _password; -- initWithAuthcid: (OFString*)authcid - password: (OFString*)password +- 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]; @try { _authzid = [authzid copy]; @@ -63,15 +63,15 @@ [_password release]; [super dealloc]; } -- (OFDataArray*)initialMessage +- (OFDataArray *)initialMessage { return nil; } -- (OFDataArray*)continueWithData: (OFDataArray*)challenge +- (OFDataArray *)continueWithData: (OFDataArray *)challenge { return nil; } @end Index: src/XMPPCallback.h ================================================================== --- src/XMPPCallback.h +++ src/XMPPCallback.h @@ -20,15 +20,18 @@ * POSSIBILITY OF SUCH DAMAGE. */ #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 { id _target; @@ -46,8 +49,10 @@ + (instancetype)callbackWithTarget: (id)target selector: (SEL)selector; - 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 Index: src/XMPPCallback.m ================================================================== --- src/XMPPCallback.m +++ src/XMPPCallback.m @@ -28,11 +28,12 @@ @implementation XMPPCallback #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 { self = [super init]; @@ -74,18 +75,18 @@ #endif [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 Index: src/XMPPConnection.h ================================================================== --- src/XMPPConnection.h +++ src/XMPPConnection.h @@ -25,10 +25,12 @@ #import #import "XMPPCallback.h" #import "XMPPStorage.h" +OF_ASSUME_NONNULL_BEGIN + @class XMPPConnection; @class XMPPJID; @class XMPPIQ; @class XMPPMessage; @class XMPPPresence; @@ -35,86 +37,83 @@ @class XMPPAuthenticator; @class SSLSocket; @class XMPPMulticastDelegate; /** - * \brief A protocol that should be (partially) implemented - * by delegates of a XMPPConnection + * \brief A protocol that should be (partially) implemented by delegates of a + * @ref XMPPConnection */ @protocol XMPPConnectionDelegate -#ifndef XMPP_CONNECTION_M - -#endif @optional /** * \brief This callback is called when the connection received an element. * * \param connection The connection that received the element * \param element The element that was received */ -- (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. * * \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. * * \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. * * \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 * stanza. * * \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. * * \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. * * This is only called for connections on which @@ -121,27 +120,27 @@ * @ref XMPPConnection::handleConnection has been called. * * @param connection The connection which threw an exception * @param exception The exception the connection threw */ -- (void)connection: (XMPPConnection*)connection - didThrowException: (OFException*)exception; +- (void)connection: (XMPPConnection *)connection + didThrowException: (OFException *)exception; /** * \brief This callback is called when the connection is about to upgrade to * TLS. * * \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 /** * \brief A class which abstracts a connection to an XMPP service. */ @@ -158,11 +157,11 @@ XMPPJID *_JID; uint16_t _port; id _dataStorage; OFString *_language; XMPPMulticastDelegate *_delegates; - OFMutableDictionary *_callbacks; + OFMutableDictionary OF_GENERIC(OFString *, XMPPCallback *) *_callbacks; XMPPAuthenticator *_authModule; bool _streamOpen; bool _needsSession; bool _encryptionRequired, _encrypted; bool _supportsRosterVersioning; @@ -169,37 +168,37 @@ bool _supportsStreamManagement; unsigned int _lastID; } /// \brief The username to use for authentication -@property (copy) OFString *username; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *username; /// \brief The password to use for authentication -@property (copy) OFString *password; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *password; /** * \brief The server to use for the connection * * This is useful if the address of the server is different from the domain. */ -@property (copy) OFString *server; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *server; /// \brief The domain to connect to -@property (copy) OFString *domain; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *domain; /// \brief The resource to request for the connection -@property (copy) OFString *resource; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *resource; /// \brief The language to request for the connection -@property (copy) OFString *language; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *language; /// \brief A private key file to use for authentication -@property (copy) OFString *privateKeyFile; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *privateKeyFile; /// \brief A certificate file to use for authentication -@property (copy) OFString *certificateFile; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *certificateFile; /// \brief The JID the server assigned to the connection after binding -@property (copy, readonly) XMPPJID *JID; +@property (readonly, nonatomic) XMPPJID *JID; /// \brief The port to connect to @property uint16_t port; /// \brief An object for data storage, conforming to the XMPPStorage protocol -@property (assign) id 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 @property (readonly) bool encrypted; /// \brief Whether roster versioning is supported @@ -245,11 +244,12 @@ * \param reason A pointer to an OFString which is set to a reason in case the * certificate is not valid (otherwise, it does not touch it). * Passing NULL means the reason is not stored anywhere. * \return Whether the certificate is valid */ -- (bool)checkCertificateAndGetReason: (OFString**)reason; +- (bool)checkCertificateAndGetReason: + (OFString *__autoreleasing _Nonnull *_Nullable)reason; /** * \brief Adds the connection to the run loop. */ - (void)handleConnection; @@ -267,57 +267,29 @@ * * \param buffer The buffer to parse * \param length The length of the buffer. If length is 0, it is assumed that * the connection was closed. */ -- (void)parseBuffer: (const void*)buffer +- (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. * * @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; #ifdef OF_HAVE_BLOCKS /*! @@ -324,60 +296,18 @@ * @brief Sends an XMPPIQ, registering a callback block. * * @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 /** * \brief Generates a new, unique stanza ID. * * \return A new, generated, unique stanza ID. */ -- (OFString*)generateStanzaID; - -- (void)setUsername: (OFString*)username; -- (OFString*)username; -- (void)setPassword: (OFString*)password; -- (OFString*)password; -- (void)setServer: (OFString*)server; -- (OFString*)server; -- (void)setDomain: (OFString*)domain; -- (OFString*)domain; -- (void)setResource: (OFString*)resource; -- (OFString*)resource; -- (XMPPJID*)JID; -- (void)setPort: (uint16_t)port; -- (uint16_t)port; -- (void)setDataStorage: (id )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; -@end - -@interface OFObject (XMPPConnectionDelegate) -@end +- (OFString *)generateStanzaID; +@end + +OF_ASSUME_NONNULL_END Index: src/XMPPConnection.m ================================================================== --- src/XMPPConnection.m +++ src/XMPPConnection.m @@ -56,24 +56,51 @@ #import "namespaces.h" #import #define BUFFER_LENGTH 512 + +OF_ASSUME_NONNULL_BEGIN + +@interface XMPPConnection () +- (void)XMPP_startStream; +- (void)XMPP_handleStream: (OFXMLElement *)element; +- (void)XMPP_handleTLS: (OFXMLElement *)element; +- (void)XMPP_handleSASL: (OFXMLElement *)element; +- (void)XMPP_handleStanza: (OFXMLElement *)element; +- (void)XMPP_sendAuth: (OFString *)authName; +- (void)XMPP_sendResourceBind; +- (void)XMPP_sendStreamError: (OFString *)condition + text: (nullable OFString *)text; +- (void)XMPP_handleIQ: (XMPPIQ *)IQ; +- (void)XMPP_handleMessage: (XMPPMessage *)message; +- (void)XMPP_handlePresence: (XMPPPresence *)presence; +- (void)XMPP_handleFeatures: (OFXMLElement *)element; +- (void)XMPP_handleResourceBindForConnection: (XMPPConnection *)connection + IQ: (XMPPIQ *)IQ; +- (void)XMPP_sendSession; +- (void)XMPP_handleSessionForConnection: (XMPPConnection *)connection + IQ: (XMPPIQ *)IQ; +- (OFString *)XMPP_IDNAToASCII: (OFString *)domain; +- (XMPPMulticastDelegate *)XMPP_delegates; +@end @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]; @try { _sourceThread = [sourceThread retain]; @@ -116,11 +143,13 @@ return nil; } @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; @synthesize supportsStreamManagement = _supportsStreamManagement; @@ -163,11 +192,11 @@ [_authModule release]; [super dealloc]; } -- (void)setUsername: (OFString*)username +- (void)setUsername: (OFString *)username { OFString *old = _username; if (username != nil) { char *node; @@ -189,16 +218,11 @@ _username = nil; [old release]; } -- (OFString*)username -{ - return [[_username copy] autorelease]; -} - -- (void)setResource: (OFString*)resource +- (void)setResource: (OFString *)resource { OFString *old = _resource; if (resource != nil) { char *res; @@ -220,16 +244,11 @@ _resource = nil; [old release]; } -- (OFString*)resource -{ - return [[_resource copy] autorelease]; -} - -- (void)setServer: (OFString*)server +- (void)setServer: (OFString *)server { OFString *old = _server; if (server != nil) _server = [self XMPP_IDNAToASCII: server]; @@ -237,16 +256,11 @@ _server = nil; [old release]; } -- (OFString*)server -{ - return [[_server copy] autorelease]; -} - -- (void)setDomain: (OFString*)domain +- (void)setDomain: (OFString *)domain { OFString *oldDomain = _domain; OFString *oldDomainToASCII = _domainToASCII; if (domain != nil) { @@ -274,16 +288,11 @@ [oldDomain release]; [oldDomainToASCII release]; } -- (OFString*)domain -{ - return [[_domain copy] autorelease]; -} - -- (void)setPassword: (OFString*)password +- (void)setPassword: (OFString *)password { OFString *old = _password; if (password != nil) { char *pass; @@ -305,15 +314,10 @@ _password = nil; [old release]; } -- (OFString*)password -{ - return [[_password copy] autorelease]; -} - - (void)connect { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; XMPPSRVEntry *candidate = nil; XMPPSRVLookup *SRVLookup = nil; @@ -380,11 +384,11 @@ connection: self] autorelease] start]; [pool release]; } -- (bool)XMPP_parseBuffer: (const void*)buffer +- (bool)XMPP_parseBuffer: (const void *)buffer length: (size_t)length { if ([_socket isAtEndOfStream]) { [_delegates broadcastSelector: @selector(connectionWasClosed:) withObject: self]; @@ -402,11 +406,11 @@ } return true; } -- (void)parseBuffer: (const void*)buffer +- (void)parseBuffer: (const void *)buffer length: (size_t)length { [self XMPP_parseBuffer: buffer length: length]; @@ -415,14 +419,14 @@ _oldParser = nil; _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: didThrowException:) withObject: self @@ -467,11 +471,11 @@ - (bool)streamOpen { return _streamOpen; } -- (bool)checkCertificateAndGetReason: (OFString**)reason +- (bool)checkCertificateAndGetReason: (OFString **)reason { X509Certificate *cert; OFDictionary *SANs; bool serviceSpecific = false; @@ -503,20 +507,20 @@ return true; return false; } -- (void)sendStanza: (OFXMLElement*)element +- (void)sendStanza: (OFXMLElement *)element { [_delegates broadcastSelector: @selector(connection:didSendElement:) withObject: self withObject: element]; [_socket writeString: [element XMLString]]; } -- (void)sendIQ: (XMPPIQ*)IQ +- (void)sendIQ: (XMPPIQ *)IQ callbackTarget: (id)target selector: (SEL)selector { OFAutoreleasePool *pool; XMPPCallback *callback; @@ -543,11 +547,11 @@ [self sendStanza: IQ]; } #ifdef OF_HAVE_BLOCKS -- (void)sendIQ: (XMPPIQ*)IQ +- (void)sendIQ: (XMPPIQ *)IQ callbackBlock: (xmpp_callback_block_t)block { OFAutoreleasePool *pool; XMPPCallback *callback; OFString *ID, *key; @@ -572,24 +576,21 @@ [self sendStanza: IQ]; } #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 -{ - OFEnumerator *enumerator; - OFXMLAttribute *attribute; - +- (void)parser: (OFXMLParser *)parser + didStartElement: (OFString *)name + prefix: (OFString *)prefix + namespace: (OFString *)NS + attributes: (OFArray *)attributes +{ if (![name isEqual: @"stream"]) { // No dedicated stream error for this, may not even be XMPP [self close]; [_socket close]; return; @@ -599,18 +600,17 @@ [self XMPP_sendStreamError: @"bad-namespace-prefix" text: nil]; return; } - if (![ns isEqual: XMPP_NS_STREAM]) { + if (![NS isEqual: XMPP_NS_STREAM]) { [self XMPP_sendStreamError: @"invalid-namespace" text: nil]; return; } - enumerator = [attributes objectEnumerator]; - while ((attribute = [enumerator nextObject]) != nil) { + for (OFXMLAttribute *attribute in attributes) { if ([[attribute name] isEqual: @"from"] && ![[attribute stringValue] isEqual: _domain]) { [self XMPP_sendStreamError: @"invalid-from" text: nil]; return; @@ -621,15 +621,15 @@ text: nil]; return; } } - [_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) return; @@ -652,14 +652,14 @@ if ([[element namespace] isEqual: XMPP_NS_SASL]) [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]) @throw [OFMalformedXMLException exception]; else { @@ -720,11 +720,11 @@ _streamOpen = _needsSession = _encrypted = false; _supportsRosterVersioning = _supportsStreamManagement = false; _lastID = 0; } -- (void)XMPP_handleStanza: (OFXMLElement*)element +- (void)XMPP_handleStanza: (OFXMLElement *)element { if ([[element name] isEqual: @"iq"]) { [self XMPP_handleIQ: [XMPPIQ stanzaWithElement: element]]; return; } @@ -744,11 +744,11 @@ [self XMPP_sendStreamError: @"unsupported-stanza-type" text: nil]; } -- (void)XMPP_handleStream: (OFXMLElement*)element +- (void)XMPP_handleStream: (OFXMLElement *)element { if ([[element name] isEqual: @"features"]) { [self XMPP_handleFeatures: element]; return; } @@ -848,11 +848,11 @@ } assert(0); } -- (void)XMPP_handleTLS: (OFXMLElement*)element +- (void)XMPP_handleTLS: (OFXMLElement *)element { if ([[element name] isEqual: @"proceed"]) { /* FIXME: Catch errors here */ SSLSocket *newSock; @@ -889,11 +889,11 @@ @throw [OFException exception]; assert(0); } -- (void)XMPP_handleSASL: (OFXMLElement*)element +- (void)XMPP_handleSASL: (OFXMLElement *)element { if ([[element name] isEqual: @"challenge"]) { OFXMLElement *responseTag; OFDataArray *challenge = [OFDataArray dataArrayWithBase64EncodedString: [element stringValue]]; @@ -937,11 +937,11 @@ } assert(0); } -- (void)XMPP_handleIQ: (XMPPIQ*)IQ +- (void)XMPP_handleIQ: (XMPPIQ *)IQ { bool handled = false; XMPPCallback *callback; OFString *key; @@ -968,25 +968,25 @@ [self sendStanza: [IQ errorIQWithType: @"cancel" condition: @"service-unavailable"]]; } } -- (void)XMPP_handleMessage: (XMPPMessage*)message +- (void)XMPP_handleMessage: (XMPPMessage *)message { [_delegates broadcastSelector: @selector(connection:didReceiveMessage:) withObject: self withObject: message]; } -- (void)XMPP_handlePresence: (XMPPPresence*)presence +- (void)XMPP_handlePresence: (XMPPPresence *)presence { [_delegates broadcastSelector: @selector(connection:didReceivePresence:) withObject: self withObject: presence]; } -- (void)XMPP_handleFeatures: (OFXMLElement*)element +- (void)XMPP_handleFeatures: (OFXMLElement *)element { OFXMLElement *startTLS = [element elementForName: @"starttls" namespace: XMPP_NS_STARTTLS]; OFXMLElement *bind = [element elementForName: @"bind" namespace: XMPP_NS_BIND]; @@ -1021,11 +1021,11 @@ enumerator = [[mechs children] objectEnumerator]; while ((mech = [enumerator nextObject]) != nil) [mechanisms addObject: [mech stringValue]]; - if (_privateKeyFile && _certificateFile && + if (_privateKeyFile != nil && _certificateFile != nil && [mechanisms containsObject: @"EXTERNAL"]) { _authModule = [[XMPPEXTERNALAuth alloc] init]; [self XMPP_sendAuth: @"EXTERNAL"]; return; } @@ -1061,12 +1061,12 @@ } assert(0); } - if (session != nil && ![session elementForName: @"optional" - namespace: XMPP_NS_SESSION]) + if (session != nil && [session elementForName: @"optional" + namespace: XMPP_NS_SESSION] == nil) _needsSession = true; if (bind != nil) { [self XMPP_sendResourceBind]; return; @@ -1073,11 +1073,11 @@ } assert(0); } -- (void)XMPP_sendAuth: (OFString*)authName +- (void)XMPP_sendAuth: (OFString *)authName { OFXMLElement *authTag; OFDataArray *initialMessage = [_authModule initialMessage]; authTag = [OFXMLElement elementWithName: @"auth" @@ -1117,12 +1117,12 @@ callbackTarget: self selector: @selector(XMPP_handleResourceBindForConnection: IQ:)]; } -- (void)XMPP_sendStreamError: (OFString*)condition - text: (OFString*)text +- (void)XMPP_sendStreamError: (OFString *)condition + text: (OFString *)text { OFXMLElement *error = [OFXMLElement elementWithName: @"error" namespace: XMPP_NS_STREAM]; [error setPrefix: @"stream" @@ -1137,26 +1137,25 @@ [_parser setDelegate: nil]; [self sendStanza: error]; [self close]; } -- (void)XMPP_handleResourceBindForConnection: (XMPPConnection*)connection - IQ: (XMPPIQ*)iq -{ - OFXMLElement *bindElement; - OFXMLElement *jidElement; - - assert([[iq type] isEqual: @"result"]); - - bindElement = [iq elementForName: @"bind" +- (void)XMPP_handleResourceBindForConnection: (XMPPConnection *)connection + IQ: (XMPPIQ *)IQ +{ + OFXMLElement *bindElement, *JIDElement; + + assert([[IQ type] isEqual: @"result"]); + + bindElement = [IQ elementForName: @"bind" namespace: XMPP_NS_BIND]; assert(bindElement != nil); - jidElement = [bindElement elementForName: @"jid" + JIDElement = [bindElement elementForName: @"jid" namespace: XMPP_NS_BIND]; - _JID = [[XMPPJID alloc] initWithString: [jidElement stringValue]]; + _JID = [[XMPPJID alloc] initWithString: [JIDElement stringValue]]; if (_needsSession) { [self XMPP_sendSession]; return; } @@ -1166,33 +1165,33 @@ withObject: _JID]; } - (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; Idna_rc rc; @@ -1234,10 +1233,10 @@ - (void)removeDelegate: (id )delegate { [_delegates removeDelegate: delegate]; } -- (XMPPMulticastDelegate*)XMPP_delegates +- (XMPPMulticastDelegate *)XMPP_delegates { return _delegates; } @end ADDED src/XMPPContact+Private.h Index: src/XMPPContact+Private.h ================================================================== --- src/XMPPContact+Private.h +++ 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 Index: src/XMPPContact.h ================================================================== --- src/XMPPContact.h +++ src/XMPPContact.h @@ -21,10 +21,12 @@ * POSSIBILITY OF SUCH DAMAGE. */ #import +OF_ASSUME_NONNULL_BEGIN + @class XMPPConnection; @class XMPPJID; @class XMPPRosterItem; @class XMPPMessage; @class XMPPPresence; @@ -38,24 +40,20 @@ OFMutableDictionary *_presences; XMPPJID *_lockedOnJID; } /// \brief The XMPPRosterItem corresponding to this contact -@property (readonly) XMPPRosterItem *rosterItem; +@property (readonly, nonatomic) XMPPRosterItem *rosterItem; /// \brief The XMPPPresences of this contact with the resources as keys -@property (readonly) OFDictionary *presences; +@property (readonly, nonatomic) OFDictionary *presences; /** * \brief Sends a message to the contact honoring resource locking * * \param message The message to send * \param connection The connection to use for sending the message */ -- (void)sendMessage: (XMPPMessage*)message - connection: (XMPPConnection*)connection; - -- (void)XMPP_setRosterItem: (XMPPRosterItem*)rosterItem; -- (void)XMPP_setPresence: (XMPPPresence*)presence - resource: (OFString*)resource; -- (void)XMPP_removePresenceForResource: (OFString*)resource; -- (void)XMPP_setLockedOnJID: (XMPPJID*)JID; -@end +- (void)sendMessage: (XMPPMessage *)message + connection: (XMPPConnection *)connection; +@end + +OF_ASSUME_NONNULL_END Index: src/XMPPContact.m ================================================================== --- src/XMPPContact.m +++ src/XMPPContact.m @@ -20,10 +20,11 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #import "XMPPContact.h" +#import "XMPPContact+Private.h" #import "XMPPMessage.h" #import "XMPPConnection.h" @implementation XMPPContact @synthesize rosterItem = _rosterItem; @@ -48,30 +49,30 @@ [_presences release]; [super dealloc]; } -- (void)sendMessage: (XMPPMessage*)message - connection: (XMPPConnection*)connection +- (void)sendMessage: (XMPPMessage *)message + connection: (XMPPConnection *)connection { if (_lockedOnJID == nil) [message setTo: [_rosterItem JID]]; else [message setTo: _lockedOnJID]; [connection sendStanza: message]; } -- (void)XMPP_setRosterItem: (XMPPRosterItem*)rosterItem +- (void)XMPP_setRosterItem: (XMPPRosterItem *)rosterItem { XMPPRosterItem *old = _rosterItem; _rosterItem = [rosterItem retain]; [old release]; } -- (void)XMPP_setPresence: (XMPPPresence*)presence - resource: (OFString*)resource +- (void)XMPP_setPresence: (XMPPPresence *)presence + resource: (OFString *)resource { if (resource != nil) [_presences setObject: presence forKey: resource]; else @@ -79,11 +80,11 @@ forKey: @""]; [self XMPP_setLockedOnJID: nil]; } -- (void)XMPP_removePresenceForResource: (OFString*)resource +- (void)XMPP_removePresenceForResource: (OFString *)resource { if (resource != nil) { [_presences removeObjectForKey: resource]; } else { [_presences release]; @@ -91,12 +92,12 @@ } [self XMPP_setLockedOnJID: nil]; } -- (void)XMPP_setLockedOnJID: (XMPPJID*)JID; +- (void)XMPP_setLockedOnJID: (XMPPJID *)JID; { XMPPJID *old = _lockedOnJID; _lockedOnJID = [JID retain]; [old release]; } @end Index: src/XMPPContactManager.h ================================================================== --- src/XMPPContactManager.h +++ src/XMPPContactManager.h @@ -24,10 +24,12 @@ #import #import "XMPPConnection.h" #import "XMPPRoster.h" +OF_ASSUME_NONNULL_BEGIN + @class XMPPContact; @class XMPPContactManager; @class XMPPMulticastDelegate; @class XMPPPresence; @@ -41,59 +43,59 @@ * \brief This callback is called whenever a new contact enters the users roster * * \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 * the users roster * * \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 * * \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 * roster item * * \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 * * \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 * * \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 /** * \brief A class tracking a XMPPContact instance for each contact in the roster * @@ -108,24 +110,25 @@ XMPPRoster *_roster; XMPPMulticastDelegate *_delegates; } /// \brief The tracked contacts, with their bare JID as key -@property (readonly) OFDictionary *contacts; +@property (readonly, nonatomic) + OFDictionary OF_GENERIC(OFString *, XMPPContact *) *contacts; /*! * @brief Initializes an already allocated XMPPContactManager. * * @param connection The connection to be used to track contacts * @param roster The roster used by the contact manager * @return An initialized XMPPContactManager */ -- initWithConnection: (XMPPConnection*)connection - roster: (XMPPRoster*)roster; +- 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. * * \param delegate The delegate to add @@ -137,5 +140,7 @@ * * \param delegate The delegate to remove */ - (void)removeDelegate: (id )delegate; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPContactManager.m ================================================================== --- src/XMPPContactManager.m +++ src/XMPPContactManager.m @@ -19,22 +19,23 @@ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ -#import "XMPPContact.h" #import "XMPPContactManager.h" +#import "XMPPContact.h" +#import "XMPPContact+Private.h" #import "XMPPJID.h" #import "XMPPMulticastDelegate.h" #import "XMPPPresence.h" #import "XMPPRosterItem.h" @implementation XMPPContactManager @synthesize contacts = _contacts; -- initWithConnection: (XMPPConnection*)connection - roster: (XMPPRoster*)roster +- initWithConnection: (XMPPConnection *)connection + roster: (XMPPRoster *)roster { self = [super init]; @try { _connection = connection; @@ -60,18 +61,18 @@ [super dealloc]; } -- (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"]; [presence setTo: subscriber]; [_connection sendStanza: presence]; @@ -85,11 +86,11 @@ - (void)removeDelegate: (id )delegate { [_delegates removeDelegate: delegate]; } -- (void)rosterWasReceived: (XMPPRoster*)roster +- (void)rosterWasReceived: (XMPPRoster *)roster { OFEnumerator *contactEnumerator; XMPPContact *contact; OFDictionary *rosterItems; OFEnumerator *rosterItemEnumerator; @@ -118,12 +119,12 @@ withObject: self withObject: contact]; } } -- (void)roster: (XMPPRoster*)roster - didReceiveRosterItem: (XMPPRosterItem*)rosterItem +- (void)roster: (XMPPRoster *)roster + didReceiveRosterItem: (XMPPRosterItem *)rosterItem { XMPPContact *contact; OFString *bareJID = [[rosterItem JID] bareJID]; contact = [_contacts objectForKey: bareJID]; @@ -154,12 +155,12 @@ withObject: rosterItem]; [contact XMPP_setRosterItem: rosterItem]; } } -- (void)connection: (XMPPConnection*)connection - didReceivePresence: (XMPPPresence*)presence +- (void)connection: (XMPPConnection *)connection + didReceivePresence: (XMPPPresence *)presence { XMPPContact *contact; XMPPJID *JID = [presence from]; OFString *type = [presence type]; @@ -197,12 +198,12 @@ withObject: presence]; return; } } -- (void)connection: (XMPPConnection*)connection - didReceiveMessage: (XMPPMessage*)message +- (void)connection: (XMPPConnection *)connection + didReceiveMessage: (XMPPMessage *)message { XMPPJID *JID = [message from]; XMPPContact *contact = [_contacts objectForKey: [JID bareJID]]; if (contact == nil) Index: src/XMPPDiscoEntity.h ================================================================== --- src/XMPPDiscoEntity.h +++ src/XMPPDiscoEntity.h @@ -24,10 +24,12 @@ #import #import "XMPPConnection.h" #import "XMPPDiscoNode.h" +OF_ASSUME_NONNULL_BEGIN + @class XMPPJID; /** * \brief A class representing an entity responding to Service Discovery * queries @@ -51,39 +53,51 @@ /** * The node advertised for the entity's capabilites. */ @property (readonly) OFString *capsNode; ++ (instancetype)discoNodeWithJID: (XMPPJID *)JID + node: (nullable OFString *)node OF_UNAVAILABLE; ++ (instancetype)discoNodeWithJID: (XMPPJID *)JID + node: (nullable OFString *)node + name: (nullable OFString *)name OF_UNAVAILABLE; + /** * \brief Creates a new autoreleased XMPPDiscoEntity with the specified * connection. * * \param connection The XMPPConnection to serve responses on. * \return A new autoreleased XMPPDiscoEntity */ -+ (instancetype)discoEntityWithConnection: (XMPPConnection*)connection; ++ (instancetype)discoEntityWithConnection: (XMPPConnection *)connection; /** * \brief Creates a new autoreleased XMPPDiscoEntity with the specified * connection. * * \param connection The XMPPConnection to serve responses on. * \param capsNode The node advertised for the entity's capabilites * \return A new autoreleased XMPPDiscoEntity */ -+ (instancetype)discoEntityWithConnection: (XMPPConnection*)connection - capsNode: (OFString*)capsNode; ++ (instancetype)discoEntityWithConnection: (XMPPConnection *)connection + capsNode: (OFString *)capsNode; + +- initWithJID: (XMPPJID *)JID + node: (nullable OFString *)node OF_UNAVAILABLE; +- initWithJID: (XMPPJID *)JID + node: (nullable OFString *)node + name: (nullable OFString *)name OF_UNAVAILABLE; /** * \brief Initializes an already allocated XMPPDiscoEntity with the specified * connection. * * \param connection The XMPPConnection to serve responses on. * This must already be bound to a resource) * \return An initialized XMPPDiscoEntity */ -- initWithConnection: (XMPPConnection*)connection; +- initWithConnection: (XMPPConnection *)connection; /** * \brief Initializes an already allocated XMPPDiscoEntity with the specified * connection. * @@ -90,22 +104,24 @@ * \param connection The XMPPConnection to serve responses on. * This must already be bound to a resource) * \param capsNode The node advertised for the entity's capabilites * \return An initialized XMPPDiscoEntity */ -- initWithConnection: (XMPPConnection*)connection - capsNode: (OFString*)capsNode; +- 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 Index: src/XMPPDiscoEntity.m ================================================================== --- src/XMPPDiscoEntity.m +++ src/XMPPDiscoEntity.m @@ -20,40 +20,50 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #import "XMPPDiscoEntity.h" +#import "XMPPDiscoNode.h" +#import "XMPPDiscoNode+Private.h" #import "XMPPDiscoIdentity.h" #import "XMPPIQ.h" #import "namespaces.h" @implementation XMPPDiscoEntity @synthesize discoNodes = _discoNodes, capsNode = _capsNode; -+ (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]; _connection = connection; _capsNode = [capsNode copy]; @@ -73,17 +83,17 @@ [_discoNodes release]; [super dealloc]; } -- (void)addDiscoNode: (XMPPDiscoNode*)node +- (void)addDiscoNode: (XMPPDiscoNode *)node { [_discoNodes setObject: node forKey: [node node]]; } -- (OFString*)capsHash +- (OFString *)capsHash { OFEnumerator *enumerator; XMPPDiscoIdentity *identity; OFString *feature; OFMutableString *caps = [OFMutableString string]; @@ -106,18 +116,18 @@ count: [OFSHA1Hash digestSize]]; 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; OFXMLElement *query = [IQ elementForName: @"query" Index: src/XMPPDiscoIdentity.h ================================================================== --- src/XMPPDiscoIdentity.h +++ src/XMPPDiscoIdentity.h @@ -21,24 +21,26 @@ * POSSIBILITY OF SUCH DAMAGE. */ #import +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class describing a Service Discovery Identity */ @interface XMPPDiscoIdentity: OFObject { OFString *_category, *_name, *_type; } /// \brief The category of the identity -@property (readonly) OFString *category; +@property (readonly, nonatomic) OFString *category; /// \brief The name of the identity, might be unset -@property (readonly) OFString *name; +@property (readonly, nonatomic) OFString *name; /// \brief The type of the identity -@property (readonly) OFString *type; +@property (readonly, nonatomic) OFString *type; /** * \brief Creates a new autoreleased XMPPDiscoIdentity with the specified * category, type and name. * @@ -45,24 +47,26 @@ * \param category The category of the identity * \param type The type of the identity * \param name The name of the identity * \return A new autoreleased XMPPDiscoIdentity */ -+ (instancetype)identityWithCategory: (OFString*)category - type: (OFString*)type - name: (OFString*)name; ++ (instancetype)identityWithCategory: (OFString *)category + type: (OFString *)type + name: (nullable OFString *)name; /** * \brief Creates a new autoreleased XMPPDiscoIdentity with the specified * category and type. * * \param category The category of the identity * \param type The type of the identity * \return A new autoreleased XMPPDiscoIdentity */ -+ (instancetype)identityWithCategory: (OFString*)category - type: (OFString*)type; ++ (instancetype)identityWithCategory: (OFString *)category + type: (OFString *)type; + +- init OF_UNAVAILABLE; /** * \brief Initializes an already allocated XMPPDiscoIdentity with the specified * category, type and name. * @@ -69,20 +73,22 @@ * \param category The category of the identity * \param type The type of the identity * \param name The name of the identity * \return An initialized XMPPDiscoIdentity */ -- initWithCategory: (OFString*)category - type: (OFString*)type - name: (OFString*)name; +- initWithCategory: (OFString *)category + type: (OFString *)type + name: (nullable OFString *)name OF_DESIGNATED_INITIALIZER; /** * \brief Initializes an already allocated XMPPDiscoIdentity with the specified * category and type. * * \param category The category of the identity * \param type The type of the identity * \return An initialized XMPPDiscoIdentity */ -- initWithCategory: (OFString*)category - type: (OFString*)type; +- initWithCategory: (OFString *)category + type: (OFString *)type; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPDiscoIdentity.m ================================================================== --- src/XMPPDiscoIdentity.m +++ src/XMPPDiscoIdentity.m @@ -24,29 +24,29 @@ #import "XMPPDiscoIdentity.h" @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]; @try { if (category == nil || type == nil) @@ -61,28 +61,21 @@ } return self; } -- initWithCategory: (OFString*)category - type: (OFString*)type +- initWithCategory: (OFString *)category + type: (OFString *)type { return [self initWithCategory: category type: type name: nil]; } - init { - @try { - [self doesNotRecognizeSelector: _cmd]; - } @catch (id e) { - [self release]; - @throw e; - } - - abort(); + OF_INVALID_INIT_METHOD } - (void)dealloc { [_category release]; @@ -137,11 +130,11 @@ return OF_ORDERED_SAME; if (![object isKindOfClass: [XMPPDiscoIdentity class]]) @throw [OFInvalidArgumentException exception]; - identity = (XMPPDiscoIdentity*)object; + identity = (XMPPDiscoIdentity *)object; categoryResult = [_category compare: identity->_category]; if (categoryResult != OF_ORDERED_SAME) return categoryResult; ADDED src/XMPPDiscoNode+Private.h Index: src/XMPPDiscoNode+Private.h ================================================================== --- src/XMPPDiscoNode+Private.h +++ 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 Index: src/XMPPDiscoNode.h ================================================================== --- src/XMPPDiscoNode.h +++ src/XMPPDiscoNode.h @@ -20,10 +20,12 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #import + +OF_ASSUME_NONNULL_BEGIN @class XMPPDiscoIdentity; @class XMPPJID; /** @@ -38,32 +40,32 @@ OFSortedList *_features; OFMutableDictionary *_childNodes; } /// \brief The JID this node lives on -@property (readonly) XMPPJID *JID; +@property (readonly, nonatomic) XMPPJID *JID; /// \brief The node's opaque name of the node -@property (readonly) OFString *node; +@property (readonly, nonatomic) OFString *node; /// \brief The node's human friendly name (may be unspecified) -@property (readonly) OFString *name; +@property OF_NULLABLE_PROPERTY (readonly, nonatomic) OFString *name; /// \brief The node's list of identities -@property (readonly) OFSortedList *identities; +@property (readonly, nonatomic) OFSortedList *identities; /// \brief The node's list of features -@property (readonly) OFSortedList *features; +@property (readonly, nonatomic) OFSortedList *features; /// \brief The node's children -@property (readonly) OFDictionary *childNodes; +@property (readonly, nonatomic) OFDictionary *childNodes; /** * \brief Creates a new autoreleased XMPPDiscoNode with the specified * JID and node * * \param JID The JID this node lives on * \param node The node's opaque name * \return A new autoreleased XMPPDiscoNode */ -+ (instancetype)discoNodeWithJID: (XMPPJID*)JID - node: (OFString*)node; ++ (instancetype)discoNodeWithJID: (XMPPJID *)JID + node: (nullable OFString *)node; /** * \brief Creates a new autoreleased XMPPDiscoNode with the specified * JID, node and name * @@ -70,24 +72,24 @@ * \param JID The JID this node lives on * \param node The node's opaque name * \param name The node's human friendly name * \return A new autoreleased XMPPDiscoNode */ -+ (instancetype)discoNodeWithJID: (XMPPJID*)JID - node: (OFString*)node - name: (OFString*)name; ++ (instancetype)discoNodeWithJID: (XMPPJID *)JID + node: (nullable OFString *)node + name: (nullable OFString *)name; /** * \brief Initializes an already allocated XMPPDiscoNode with the specified * JID and node * * \param JID The JID this node lives on * \param node The node's opaque name * \return An initialized XMPPDiscoNode */ -- initWithJID: (XMPPJID*)JID - node: (OFString*)node; +- initWithJID: (XMPPJID *)JID + node: (nullable OFString *)node; /** * \brief Initializes an already allocated XMPPDiscoNode with the specified * JID, node and name * @@ -94,35 +96,32 @@ * \param JID The JID this node lives on * \param node The node's opaque name * \param name The node's human friendly name * \return An initialized XMPPDiscoNode */ -- initWithJID: (XMPPJID*)JID - node: (OFString*)node - name: (OFString*)name; +- 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; +- (void)addChildNode: (XMPPDiscoNode *)node; +@end -- (bool)XMPP_handleItemsIQ: (XMPPIQ*)IQ - connection: (XMPPConnection*)connection; -- (bool)XMPP_handleInfoIQ: (XMPPIQ*)IQ - connection: (XMPPConnection*)connection; -@end +OF_ASSUME_NONNULL_END Index: src/XMPPDiscoNode.m ================================================================== --- src/XMPPDiscoNode.m +++ src/XMPPDiscoNode.m @@ -19,50 +19,51 @@ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ +#import "XMPPDiscoNode.h" +#import "XMPPDiscoNode+Private.h" #import "XMPPConnection.h" #import "XMPPIQ.h" #import "XMPPJID.h" #import "XMPPDiscoEntity.h" -#import "XMPPDiscoNode.h" #import "XMPPDiscoIdentity.h" #import "namespaces.h" @implementation XMPPDiscoNode @synthesize JID = _JID, node = _node, name = _name, identities = _identities; @synthesize features = _features, childNodes = _childNodes; -+ (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]; @try { if (JID == nil && @@ -96,28 +97,33 @@ [_childNodes release]; [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; XMPPDiscoNode *child; OFEnumerator *enumerator; @@ -154,12 +160,12 @@ [connection sendStanza: resultIQ]; return true; } -- (bool)XMPP_handleInfoIQ: (XMPPIQ*)IQ - connection: (XMPPConnection*)connection +- (bool)XMPP_handleInfoIQ: (XMPPIQ *)IQ + connection: (XMPPConnection *)connection { XMPPIQ *resultIQ; OFXMLElement *response; OFEnumerator *enumerator; OFString *feature; Index: src/XMPPEXTERNALAuth.h ================================================================== --- src/XMPPEXTERNALAuth.h +++ src/XMPPEXTERNALAuth.h @@ -21,10 +21,12 @@ */ #import #import "XMPPAuthenticator.h" +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class to authenticate using SASL EXTERNAL */ @interface XMPPEXTERNALAuth: XMPPAuthenticator /** @@ -38,7 +40,9 @@ * \brief Creates a new autoreleased XMPPEXTERNALAuth with an authzid. * * \param authzid The authzid to get authorization for * \return A new autoreleased XMPPEXTERNALAuth */ -+ (instancetype)EXTERNALAuthWithAuthzid: (OFString*)authzid; ++ (instancetype)EXTERNALAuthWithAuthzid: (nullable OFString *)authzid; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPEXTERNALAuth.m ================================================================== --- src/XMPPEXTERNALAuth.m +++ src/XMPPEXTERNALAuth.m @@ -31,18 +31,18 @@ { return [[[self alloc] initWithAuthcid: nil 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]; /* authzid */ if (_authzid) Index: src/XMPPExceptions.h ================================================================== --- src/XMPPExceptions.h +++ src/XMPPExceptions.h @@ -21,10 +21,12 @@ * POSSIBILITY OF SUCH DAMAGE. */ #import +OF_ASSUME_NONNULL_BEGIN + @class XMPPConnection; @class XMPPAuthenticator; /** * \brief A base class for XMPP related exceptions @@ -33,29 +35,32 @@ { XMPPConnection *_connection; } /// \brief The connection the exception relates to -@property (readonly, retain) XMPPConnection *connection; +@property OF_NULLABLE_PROPERTY (readonly, nonatomic) XMPPConnection *connection; /** * \brief Creates a new XMPPException. * * \param connection The connection that received the data responsible * for this exception * \return A new XMPPException */ -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection; ++ (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection; + +- init OF_UNAVAILABLE; /** * \brief Initializes an already allocated XMPPException. * * \param connection The connection that received the data responsible * for this exception * \return An initialized XMPPException */ -- initWithConnection: (XMPPConnection*)connection; +- initWithConnection: (nullable XMPPConnection *)connection + OF_DESIGNATED_INITIALIZER; @end /** * \brief An exception indicating a stream error was received */ @@ -63,37 +68,39 @@ { OFString *_condition, *_reason; } /// \brief The defined error condition specified by the stream error -@property (readonly, copy) OFString *condition; +@property (readonly, nonatomic) OFString *condition; /// \brief The descriptive free-form text specified by the stream error -@property (readonly, copy) OFString *reason; +@property (readonly, nonatomic) OFString *reason; /** * \brief Creates a new XMPPStreamErrorException. * * \param connection The connection that received the stream error * \param condition The defined error condition specified by the stream error * \param reason The descriptive free-form text specified by the stream error * \return A new XMPPStreamErrorException */ -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection - 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. * * \param connection The connection that received the stream error * \param condition The defined error condition specified by the stream error * \param reason The descriptive free-form text specified by the stream error * \return An initialized XMPPStreamErrorException */ -- initWithConnection: (XMPPConnection*)connection - condition: (OFString*)condition - reason: (OFString*)reason; +- initWithConnection: (nullable XMPPConnection *)connection + condition: (OFString *)condition + reason: (OFString *)reason OF_DESIGNATED_INITIALIZER; @end /** * \brief An exception indicating a stringprep profile * did not apply to a string @@ -102,37 +109,39 @@ { OFString *_profile, *_string; } /// \brief The name of the stringprep profile that did not apply -@property (readonly, copy) OFString *profile; +@property (readonly, nonatomic) OFString *profile; /// \brief The string that failed the stringprep profile -@property (readonly, copy) OFString *string; +@property (readonly, nonatomic) OFString *string; /** * \brief Creates a new XMPPStringPrepFailedException. * * \param connection The connection the string relates to * \param profile The name of the stringprep profile that did not apply * \param string The string that failed the stringprep profile * \return A new XMPPStringPrepFailedException */ -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection - 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. * * \param connection The connection the string relates to * \param profile The name of the stringprep profile that did not apply * \param string The string that failed the stringprep profile * \return An initialized XMPPStringPrepFailedException */ -- initWithConnection: (XMPPConnection*)connection - profile: (OFString*)profile - string: (OFString*)string; +- initWithConnection: (nullable XMPPConnection *)connection + profile: (OFString *)profile + string: (OFString *)string OF_DESIGNATED_INITIALIZER; @end /** * \brief An exception indicating IDNA translation of a string failed */ @@ -140,37 +149,39 @@ { OFString *_operation, *_string; } /// \brief The IDNA translation operation which failed -@property (readonly, copy) OFString *operation; +@property (readonly, nonatomic) OFString *operation; /// \brief The string that could not be translated -@property (readonly, copy) OFString *string; +@property (readonly, nonatomic) OFString *string; /** * \brief Creates a new XMPPIDNATranslationFailedException. * * \param connection The connection the string relates to * \param operation The name of the stringprep profile that did not apply * \param string The string that could not be translated * \return A new XMPPIDNATranslationFailedException */ -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection - 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. * * \param connection The connection the string relates to * \param operation The name of the stringprep profile that did not apply * \param string The string that could not be translated * \return An initialized XMPPIDNATranslationFailedException */ -- initWithConnection: (XMPPConnection*)connection - operation: (OFString*)operation - string: (OFString*)string; +- initWithConnection: (nullable XMPPConnection *)connection + operation: (OFString *)operation + string: (OFString *)string; @end /** * \brief An exception indicating authentication failed */ @@ -178,27 +189,31 @@ { OFString *_reason; } /// \brief The reason the authentication failed -@property (readonly, copy) OFString *reason; +@property (readonly, nonatomic) OFString *reason; /** * \brief Creates a new XMPPAuthFailedException. * * \param connection The connection that could not be authenticated * \param reason The reason the authentication failed * \return A new XMPPAuthFailedException */ -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection - reason: (OFString*)reason; ++ (instancetype)exceptionWithConnection: (nullable XMPPConnection *)connection + reason: (OFString *)reason; + +- initWithConnection: (nullable XMPPConnection *)connection OF_UNAVAILABLE; /** * \brief Initializes an already allocated XMPPAuthFailedException. * * \param connection The connection that could not be authenticated * \param reason The reason the authentication failed * \return An initialized XMPPAuthFailedException */ -- initWithConnection: (XMPPConnection*)connection - reason: (OFString*)reason; +- initWithConnection: (nullable XMPPConnection *)connection + reason: (OFString *)reason OF_DESIGNATED_INITIALIZER; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPExceptions.m ================================================================== --- src/XMPPExceptions.m +++ src/XMPPExceptions.m @@ -31,21 +31,21 @@ #import "XMPPConnection.h" @implementation XMPPException @synthesize connection = _connection; -+ (instancetype)exceptionWithConnection: (XMPPConnection*)connection ++ (instancetype)exceptionWithConnection: (XMPPConnection *)connection { return [[[self alloc] initWithConnection: connection] autorelease]; } - init { OF_INVALID_INIT_METHOD } -- initWithConnection: (XMPPConnection*)connection +- initWithConnection: (XMPPConnection *)connection { self = [super init]; @try { _connection = [connection retain]; @@ -66,27 +66,27 @@ @end @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]; @try { _condition = [condition copy]; @@ -105,37 +105,37 @@ [_reason release]; [super dealloc]; } -- (OFString*)description +- (OFString *)description { return [OFString stringWithFormat: @"Got stream error: %@. Reason: %@!", _condition, _reason]; } @end @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]; @try { _profile = [profile copy]; @@ -154,11 +154,11 @@ [_string release]; [super dealloc]; } -- (OFString*)description +- (OFString *)description { return [OFString stringWithFormat: @"Stringprep with profile %@ failed on string '%@'!", _profile, _string]; } @@ -165,27 +165,27 @@ @end @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]; @try { _operation = [operation copy]; @@ -204,34 +204,34 @@ [_string release]; [super dealloc]; } -- (OFString*)description +- (OFString *)description { return [OFString stringWithFormat: @"IDNA operation %@ failed on string '%@'!", _operation, _string]; } @end @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]; @try { _reason = [reason copy]; @@ -248,11 +248,11 @@ [_reason release]; [super dealloc]; } -- (OFString*)description +- (OFString *)description { return [OFString stringWithFormat: @"Authentication failed. Reason: %@!", _reason]; } @end Index: src/XMPPFileStorage.h ================================================================== --- src/XMPPFileStorage.h +++ src/XMPPFileStorage.h @@ -21,16 +21,21 @@ */ #import #import "XMPPStorage.h" + +OF_ASSUME_NONNULL_BEGIN @class OFMutableDictionary; @interface XMPPFileStorage: OFObject { OFString *_file; OFMutableDictionary *_data; } -- initWithFile: (OFString*)file; +- init OF_UNAVAILABLE; +- initWithFile: (OFString *)file; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPFileStorage.m ================================================================== --- src/XMPPFileStorage.m +++ src/XMPPFileStorage.m @@ -38,21 +38,14 @@ #import "XMPPFileStorage.h" @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]; @try { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; @@ -86,11 +79,11 @@ { [[_data messagePackRepresentation] writeToFile: _file]; } - (void)XMPP_setObject: (id)object - forPath: (OFString*)path + forPath: (OFString *)path { OFArray *pathComponents = [path componentsSeparatedByString: @"."]; OFMutableDictionary *iter = _data; OFEnumerator *enumerator = [pathComponents objectEnumerator]; OFString *component; @@ -116,35 +109,32 @@ forKey: [pathComponents lastObject]]; else [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]; [self XMPP_setObject: string forPath: path]; [pool release]; } -- (OFString*)stringValueForPath: (OFString*)path +- (OFString *)stringValueForPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFString *string; string = [self XMPP_objectForPath: path]; @@ -153,21 +143,21 @@ return string; } - (void)setBooleanValue: (bool)boolean - forPath: (OFString*)path + forPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; [self XMPP_setObject: [OFNumber numberWithBool: boolean] forPath: path]; [pool release]; } -- (bool)booleanValueForPath: (OFString*)path +- (bool)booleanValueForPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; bool boolean; boolean = [[self XMPP_objectForPath: path] boolValue]; @@ -176,21 +166,21 @@ return boolean; } - (void)setIntegerValue: (intmax_t)integer - forPath: (OFString*)path + forPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; [self XMPP_setObject: [OFNumber numberWithIntMax: integer] forPath: path]; [pool release]; } -- (intmax_t)integerValueForPath: (OFString*)path +- (intmax_t)integerValueForPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; intmax_t integer; integer = [[self XMPP_objectForPath: path] intMaxValue]; @@ -198,22 +188,22 @@ [pool release]; return integer; } -- (void)setArray: (OFArray*)array - forPath: (OFString*)path +- (void)setArray: (OFArray *)array + forPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; [self XMPP_setObject: array forPath: path]; [pool release]; } -- (OFArray*)arrayForPath: (OFString*)path +- (OFArray *)arrayForPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFArray *array; array = [self XMPP_objectForPath: path]; @@ -221,22 +211,22 @@ [pool release]; return array; } -- (void)setDictionary: (OFDictionary*)dictionary - forPath: (OFString*)path +- (void)setDictionary: (OFDictionary *)dictionary + forPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; [self XMPP_setObject: dictionary forPath: path]; [pool release]; } -- (OFDictionary*)dictionaryForPath: (OFString*)path +- (OFDictionary *)dictionaryForPath: (OFString *)path { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFDictionary *dictionary; dictionary = [self XMPP_objectForPath: path]; Index: src/XMPPIQ.h ================================================================== --- src/XMPPIQ.h +++ src/XMPPIQ.h @@ -21,10 +21,12 @@ * POSSIBILITY OF SUCH DAMAGE. */ #import "XMPPStanza.h" +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class describing an IQ stanza. */ @interface XMPPIQ: XMPPStanza /** @@ -32,48 +34,50 @@ * * \param type The value for the stanza's type attribute * \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 * ID. * * \param type The value for the stanza's type attribute * \param ID The value for the stanza's id attribute * \return An initialized XMPPIQ */ -- initWithType: (OFString*)type - ID: (OFString*)ID; +- 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. * * \param type An error type as defined by RFC 6120 * \param condition An error condition as defined by RFC 6120 * \param text A descriptive text * \return A new autoreleased XMPPIQ */ -- (XMPPIQ*)errorIQWithType: (OFString*)type - condition: (OFString*)condition - text: (OFString*)text; +- (XMPPIQ *)errorIQWithType: (OFString *)type + condition: (OFString *)condition + text: (nullable OFString *)text; /** * \brief Generates an error IQ for the receiving object. * * \param type An error type as defined by RFC 6120 * \param condition A defined conditions from RFC 6120 * \return A new autoreleased XMPPIQ */ -- (XMPPIQ*)errorIQWithType: (OFString*)type - condition: (OFString*)condition; +- (XMPPIQ *)errorIQWithType: (OFString *)type + condition: (OFString *)condition; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPIQ.m ================================================================== --- src/XMPPIQ.m +++ src/XMPPIQ.m @@ -27,19 +27,19 @@ #import "namespaces.h" #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 ID: ID]; @@ -53,22 +53,22 @@ } return self; } -- (XMPPIQ*)resultIQ +- (XMPPIQ *)resultIQ { XMPPIQ *ret = [XMPPIQ IQWithType: @"result" ID: [self ID]]; [ret setTo: [self from]]; [ret setFrom: nil]; 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]]; OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFXMLElement *error = [OFXMLElement elementWithName: @"error" @@ -89,13 +89,13 @@ [pool release]; return ret; } -- (XMPPIQ*)errorIQWithType: (OFString*)type - condition: (OFString*)condition +- (XMPPIQ *)errorIQWithType: (OFString *)type + condition: (OFString *)condition { return [self errorIQWithType: type condition: condition text: nil]; } @end Index: src/XMPPJID.h ================================================================== --- src/XMPPJID.h +++ src/XMPPJID.h @@ -21,24 +21,26 @@ * POSSIBILITY OF SUCH DAMAGE. */ #import +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class for easy handling of JIDs. */ @interface XMPPJID: OFObject { OFString *_node, *_domain, *_resource; } /// \brief The JID's localpart -@property (copy) OFString *node; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *node; /// \brief The JID's domainpart -@property (copy) OFString *domain; +@property (nonatomic, copy) OFString *domain; /// \brief The JID's resourcepart -@property (copy) OFString *resource; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *resource; /** * \brief Creates a new autoreleased XMPPJID. * * \return A new autoreleased XMPPJID @@ -49,29 +51,31 @@ * \brief Creates a new autoreleased XMPPJID from a string. * * \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. * * \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 Index: src/XMPPJID.m ================================================================== --- src/XMPPJID.m +++ src/XMPPJID.m @@ -31,21 +31,23 @@ #import "XMPPJID.h" #import "XMPPExceptions.h" @implementation XMPPJID +@synthesize node = _node, domain = _domain, resource = _resource; + + (instancetype)JID { return [[[self alloc] init] autorelease]; } -+ (instancetype)JIDWithString: (OFString*)string ++ (instancetype)JIDWithString: (OFString *)string { return [[[self alloc] initWithString: string] autorelease]; } -- initWithString: (OFString*)string +- initWithString: (OFString *)string { size_t nodesep, resourcesep; self = [super init]; @@ -101,11 +103,11 @@ } return new; } -- (void)setNode: (OFString*)node +- (void)setNode: (OFString *)node { OFString *old = _node; char *nodepart; Stringprep_rc rc; @@ -130,16 +132,11 @@ } [old release]; } -- (OFString*)node -{ - return [[_node copy] autorelease]; -} - -- (void)setDomain: (OFString*)domain +- (void)setDomain: (OFString *)domain { OFString *old = _domain; char *srv; Stringprep_rc rc; @@ -158,16 +155,11 @@ } [old release]; } -- (OFString*)domain -{ - return [[_domain copy] autorelease]; -} - -- (void)setResource: (OFString*)resource +- (void)setResource: (OFString *)resource { OFString *old = _resource; char *res; Stringprep_rc rc; @@ -192,24 +184,19 @@ } [old release]; } -- (OFString*)resource -{ - return [[_resource copy] autorelease]; -} - -- (OFString*)bareJID +- (OFString *)bareJID { if (_node != nil) return [OFString stringWithFormat: @"%@@%@", _node, _domain]; else 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) return [self bareJID]; @@ -219,11 +206,11 @@ else return [OFString stringWithFormat: @"%@/%@", _domain, _resource]; } -- (OFString*)description +- (OFString *)description { return [self fullJID]; } - (bool)isEqual: (id)object Index: src/XMPPMessage.h ================================================================== --- src/XMPPMessage.h +++ src/XMPPMessage.h @@ -21,10 +21,12 @@ * POSSIBILITY OF SUCH DAMAGE. */ #import "XMPPStanza.h" +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class describing a message stanza. */ @interface XMPPMessage: XMPPStanza /** The text content of the body of the message. */ @@ -41,52 +43,54 @@ * \brief Creates a new autoreleased XMPPMessage with the specified ID. * * \param ID The value for the stanza's id attribute * \return A new autoreleased XMPPMessage */ -+ (instancetype)messageWithID: (OFString*)ID; ++ (instancetype)messageWithID: (nullable OFString *)ID; /** * \brief Creates a new autoreleased XMPPMessage with the specified type. * * \param type The value for the stanza's type attribute * \return A new autoreleased XMPPMessage */ -+ (instancetype)messageWithType: (OFString*)type; ++ (instancetype)messageWithType: (nullable OFString *)type; /** * \brief Creates a new autoreleased XMPPMessage with the specified type and ID. * * \param type The value for the stanza's type attribute * \param ID The value for the stanza's id attribute * \return A new autoreleased XMPPMessage */ -+ (instancetype)messageWithType: (OFString*)type - ID: (OFString*)ID; ++ (instancetype)messageWithType: (nullable OFString *)type + ID: (nullable OFString *)ID; /** * \brief Initializes an already allocated XMPPMessage with the specified ID. * * \param ID The value for the stanza's id attribute * \return A initialized XMPPMessage */ -- initWithID: (OFString*)ID; +- initWithID: (nullable OFString *)ID; /** * \brief Initializes an already allocated XMPPMessage with the specified type. * * \param type The value for the stanza's type attribute * \return A initialized XMPPMessage */ -- initWithType: (OFString*)type; +- initWithType: (nullable OFString *)type; /** * \brief Initializes an already allocated XMPPMessage with the specified type * and ID. * * \param type The value for the stanza's type attribute * \param ID The value for the stanza's id attribute * \return A initialized XMPPMessage */ -- initWithType: (OFString*)type - ID: (OFString*)ID; +- initWithType: (nullable OFString *)type + ID: (nullable OFString *)ID OF_DESIGNATED_INITIALIZER; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPMessage.m ================================================================== --- src/XMPPMessage.m +++ src/XMPPMessage.m @@ -32,22 +32,22 @@ + (instancetype)message { 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]; } @@ -55,31 +55,31 @@ { return [self initWithType: nil 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]; if (oldBody != nil) @@ -89,11 +89,11 @@ [self addChild: [OFXMLElement elementWithName: @"body" namespace: XMPP_NS_CLIENT stringValue: body]]; } -- (OFString*)body +- (OFString *)body { return [[self elementForName: @"body" namespace: XMPP_NS_CLIENT] stringValue]; } @end Index: src/XMPPMulticastDelegate.h ================================================================== --- src/XMPPMulticastDelegate.h +++ src/XMPPMulticastDelegate.h @@ -20,10 +20,12 @@ * POSSIBILITY OF SUCH DAMAGE. */ #import +OF_ASSUME_NONNULL_BEGIN + @class OFDataArray; /** * \brief A class to provide multiple delegates in a single class */ @@ -51,18 +53,20 @@ * * \param selector The selector to broadcast * \param object The object to broadcast */ - (bool)broadcastSelector: (SEL)selector - withObject: (id)object; + withObject: (nullable id)object; /** * \brief Broadcasts a selector with two objects to all registered delegates. * * \param selector The selector to broadcast * \param object1 The first object to broadcast * \param object2 The second object to broadcast */ - (bool)broadcastSelector: (SEL)selector - withObject: (id)object1 - withObject: (id)object2; + withObject: (nullable id)object1 + withObject: (nullable id)object2; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPPLAINAuth.h ================================================================== --- src/XMPPPLAINAuth.h +++ src/XMPPPLAINAuth.h @@ -21,10 +21,12 @@ */ #import #import "XMPPAuthenticator.h" +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class to authenticate using SASL PLAIN */ @interface XMPPPLAINAuth: XMPPAuthenticator /** @@ -32,12 +34,12 @@ * * \param authcid The authcid to authenticate with * \param password The password to authenticate with * \return A new autoreleased XMPPPLAINAuth */ -+ (instancetype)PLAINAuthWithAuthcid: (OFString*)authcid - password: (OFString*)password; ++ (instancetype)PLAINAuthWithAuthcid: (nullable OFString *)authcid + password: (nullable OFString *)password; /** * \brief Creates a new autoreleased XMPPPLAINAuth with an authzid, authcid and * password. * @@ -44,9 +46,11 @@ * \param authzid The authzid to get authorization for * \param authcid The authcid to authenticate with * \param password The password to authenticate with * \return A new autoreleased XMPPPLAINAuth */ -+ (instancetype)PLAINAuthWithAuthzid: (OFString*)authzid - authcid: (OFString*)authcid - password: (OFString*)password; ++ (instancetype)PLAINAuthWithAuthzid: (nullable OFString *)authzid + authcid: (nullable OFString *)authcid + password: (nullable OFString *)password; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPPLAINAuth.m ================================================================== --- src/XMPPPLAINAuth.m +++ src/XMPPPLAINAuth.m @@ -26,27 +26,27 @@ #import "XMPPPLAINAuth.h" #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]; /* authzid */ if (_authzid) Index: src/XMPPPresence.h ================================================================== --- src/XMPPPresence.h +++ src/XMPPPresence.h @@ -21,33 +21,40 @@ * POSSIBILITY OF SUCH DAMAGE. */ #import "XMPPStanza.h" +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class describing a presence stanza. */ @interface XMPPPresence: XMPPStanza { OFString *_status, *_show; OFNumber *_priority; } +/** + * The value of the stanza's type attribute. + */ +@property OF_NULL_RESETTABLE_PROPERTY (nonatomic, copy) OFString *type; + /** * The text content of the status element. */ -@property (copy) OFString *status; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *status; /** * The text content of the show element of the presence stanza. */ -@property (copy) OFString *show; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *show; /** * The numeric content of the priority element. */ -@property (copy) OFNumber *priority; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFNumber *priority; /** * \brief Creates a new autoreleased XMPPPresence. * * \return A new autoreleased XMPPPresence @@ -58,53 +65,55 @@ * \brief Creates a new autoreleased XMPPPresence with the specified ID. * * \param ID The value for the stanza's id attribute * \return A new autoreleased XMPPPresence */ -+ (instancetype)presenceWithID: (OFString*)ID; ++ (instancetype)presenceWithID: (nullable OFString *)ID; /** * \brief Creates a new autoreleased XMPPPresence with the specified type. * * \param type The value for the stanza's type attribute * \return A new autoreleased XMPPPresence */ -+ (instancetype)presenceWithType: (OFString*)type; ++ (instancetype)presenceWithType: (nullable OFString *)type; /** * \brief Creates a new autoreleased XMPPPresence with the specified type and * ID. * * \param type The value for the stanza's type attribute * \param ID The value for the stanza's id attribute * \return A new autoreleased XMPPPresence */ -+ (instancetype)presenceWithType: (OFString*)type - ID: (OFString*)ID; ++ (instancetype)presenceWithType: (nullable OFString *)type + ID: (nullable OFString *)ID; /** * \brief Initializes an already allocated XMPPPresence with the specified ID. * * \param ID The value for the stanza's id attribute * \return A initialized XMPPPresence */ -- initWithID: (OFString*)ID; +- initWithID: (nullable OFString *)ID; /** * \brief Initializes an already allocated XMPPPresence with the specified type. * * \param type The value for the stanza's type attribute * \return A initialized XMPPPresence */ -- initWithType: (OFString*)type; +- initWithType: (nullable OFString *)type; /** * \brief Initializes an already allocated XMPPPresence with the specified type * and ID. * * \param type The value for the stanza's type attribute * \param ID The value for the stanza's id attribute * \return A initialized XMPPPresence */ -- initWithType: (OFString*)type - ID: (OFString*)ID; +- initWithType: (nullable OFString *)type + ID: (nullable OFString *)ID; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPPresence.m ================================================================== --- src/XMPPPresence.m +++ src/XMPPPresence.m @@ -47,27 +47,29 @@ OF_ENSURE(0); } @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]; } @@ -75,31 +77,31 @@ { return [self initWithType: nil 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]; @try { OFXMLElement *subElement; @@ -133,19 +135,19 @@ [_priority release]; [super dealloc]; } -- (OFString*)type -{ - if (_type == nil) - return @"available"; - - return [[_type copy] autorelease]; -} - -- (void)setShow: (OFString*)show +- (void)setType: (OFString *)type +{ + if (type == nil) + type = @"available"; + + [super setType: type]; +} + +- (void)setShow: (OFString *)show { OFXMLElement *oldShow = [self elementForName: @"show" namespace: XMPP_NS_CLIENT]; OFString *old; @@ -160,16 +162,11 @@ old = _show; _show = [show copy]; [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]; OFString *old; @@ -184,16 +181,11 @@ old = _status; _status = [status copy]; [old release]; } -- (OFString*)status -{ - return [[_status copy] autorelease]; -} - -- (void)setPriority: (OFNumber*)priority +- (void)setPriority: (OFNumber *)priority { intmax_t prio = [priority intMaxValue]; OFNumber *old; if ((prio < -128) || (prio > 127)) @@ -203,11 +195,11 @@ namespace: XMPP_NS_CLIENT]; 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 stringValue: priority_s]]; @@ -214,15 +206,10 @@ old = _priority; _priority = [priority copy]; [old release]; } -- (OFNumber*)priority -{ - return [[_priority copy] autorelease]; -} - - (of_comparison_result_t)compare: (id )object { XMPPPresence *otherPresence; OFNumber *otherPriority; OFString *otherShow; @@ -232,11 +219,11 @@ return OF_ORDERED_SAME; if (![object isKindOfClass: [XMPPPresence class]]) @throw [OFInvalidArgumentException exception]; - otherPresence = (XMPPPresence*)object; + otherPresence = (XMPPPresence *)object; otherPriority = [otherPresence priority]; if (otherPriority == nil) otherPriority = [OFNumber numberWithInt8: 0]; if (_priority != nil) Index: src/XMPPRoster.h ================================================================== --- src/XMPPRoster.h +++ src/XMPPRoster.h @@ -24,10 +24,12 @@ #import #import "XMPPConnection.h" #import "XMPPStorage.h" +OF_ASSUME_NONNULL_BEGIN + @class XMPPRosterItem; @class XMPPIQ; @class XMPPRoster; @class XMPPMulticastDelegate; @@ -34,30 +36,27 @@ /** * \brief A protocol that should be (partially) implemented by delegates * 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 * calling -requestRoster). * * \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. * * \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 /** * \brief A class implementing roster related functionality. */ @@ -78,26 +77,29 @@ /** * \brief An object for data storage, conforming to the XMPPStorage protocol. * * 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. */ - (void)requestRoster; @@ -105,25 +107,25 @@ /** * \brief Adds a new contact to the roster. * * \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. * * \param delegate The delegate to add @@ -134,14 +136,8 @@ * \brief Removes the specified delegate. * * \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 Index: src/XMPPRoster.m ================================================================== --- src/XMPPRoster.m +++ src/XMPPRoster.m @@ -36,16 +36,32 @@ #import "XMPPConnection.h" #import "XMPPIQ.h" #import "XMPPJID.h" #import "XMPPMulticastDelegate.h" #import "namespaces.h" + +OF_ASSUME_NONNULL_BEGIN + +@interface XMPPRoster () +- (void)XMPP_updateRosterItem: (XMPPRosterItem *)rosterItem; +- (void)XMPP_handleInitialRosterForConnection: (XMPPConnection *)connection + IQ: (XMPPIQ *)IQ; +- (XMPPRosterItem *)XMPP_rosterItemWithXMLElement: (OFXMLElement *)element; +@end + +OF_ASSUME_NONNULL_END @implementation XMPPRoster @synthesize connection = _connection, dataStorage = _dataStorage; @synthesize rosterItems = _rosterItems; -- initWithConnection: (XMPPConnection*)connection +- init +{ + OF_INVALID_INIT_METHOD +} + +- initWithConnection: (XMPPConnection *)connection { self = [super init]; @try { _rosterItems = [[OFMutableDictionary alloc] init]; @@ -100,29 +116,29 @@ callbackTarget: self selector: @selector(XMPP_handleInitialRosterForConnection: 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; element = [rosterElement elementForName: @"item" namespace: XMPP_NS_ROSTER]; @@ -144,21 +160,21 @@ [_dataStorage setStringValue: ver forPath: @"roster.ver"]; [_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]]; OFXMLElement *query = [OFXMLElement elementWithName: @"query" namespace: XMPP_NS_ROSTER]; @@ -183,11 +199,11 @@ [IQ addChild: query]; [_connection sendStanza: IQ]; } -- (void)deleteRosterItem: (XMPPRosterItem*)rosterItem +- (void)deleteRosterItem: (XMPPRosterItem *)rosterItem { XMPPIQ *IQ = [XMPPIQ IQWithType: @"set" ID: [_connection generateStanzaID]]; OFXMLElement *query = [OFXMLElement elementWithName: @"query" namespace: XMPP_NS_ROSTER]; @@ -222,21 +238,11 @@ @throw [OFInvalidArgumentException exception]; _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: @"roster.items"] mutableCopy] autorelease]; @@ -272,11 +278,11 @@ forKey: [[rosterItem JID] bareJID]]; else [_rosterItems removeObjectForKey: [[rosterItem JID] bareJID]]; } -- (XMPPRosterItem*)XMPP_rosterItemWithXMLElement: (OFXMLElement*)element +- (XMPPRosterItem *)XMPP_rosterItemWithXMLElement: (OFXMLElement *)element { OFString *subscription; OFEnumerator *groupEnumerator; OFXMLElement *groupElement; OFMutableArray *groups = [OFMutableArray array]; @@ -308,19 +314,15 @@ [rosterItem setGroups: groups]; return rosterItem; } -- (void)XMPP_handleInitialRosterForConnection: (XMPPConnection*)connection - IQ: (XMPPIQ*)IQ -{ - OFXMLElement *rosterElement; - OFEnumerator *enumerator; - OFXMLElement *element; - - rosterElement = [IQ elementForName: @"query" - namespace: XMPP_NS_ROSTER]; +- (void)XMPP_handleInitialRosterForConnection: (XMPPConnection *)connection + IQ: (XMPPIQ *)IQ +{ + OFXMLElement *rosterElement = [IQ elementForName: @"query" + namespace: XMPP_NS_ROSTER]; if ([connection supportsRosterVersioning]) { if (rosterElement == nil) { OFDictionary *items = [_dataStorage dictionaryForPath: @"roster.items"]; @@ -348,12 +350,11 @@ } else [_dataStorage setDictionary: nil forPath: @"roster.items"]; } - enumerator = [[rosterElement children] objectEnumerator]; - while ((element = [enumerator nextObject]) != nil) { + for (OFXMLElement *element in [rosterElement children]) { OFAutoreleasePool *pool; XMPPRosterItem *rosterItem; if (![[element name] isEqual: @"item"] || ![[element namespace] isEqual: XMPP_NS_ROSTER]) Index: src/XMPPRosterItem.h ================================================================== --- src/XMPPRosterItem.h +++ src/XMPPRosterItem.h @@ -21,10 +21,12 @@ * POSSIBILITY OF SUCH DAMAGE. */ #import +OF_ASSUME_NONNULL_BEGIN + @class XMPPJID; /** * \brief A class for representing an item in the roster. */ @@ -35,20 +37,22 @@ OFString *_subscription; OFArray *_groups; } /// \brief The JID of the roster item -@property (copy) XMPPJID *JID; +@property (nonatomic, copy) XMPPJID *JID; /// \brief The name of the roster item to show to the user -@property (copy) OFString *name; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *name; /// \brief The subscription for the roster item -@property (copy) OFString *subscription; +@property (nonatomic, copy) OFString *subscription; /// \brief An array of groups in which the roster item is -@property (copy) OFArray *groups; +@property (nonatomic, copy) OFArray OF_GENERIC(OFString *) *groups; /** * \brief Creates a new autoreleased roster item. * * \return A new autoreleased roster item. */ + (instancetype)rosterItem; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPRosterItem.m ================================================================== --- src/XMPPRosterItem.m +++ src/XMPPRosterItem.m @@ -64,12 +64,12 @@ } return new; } -- (OFString*)description +- (OFString *)description { return [OFString stringWithFormat: @"", _JID, _name, _subscription, _groups]; } @end Index: src/XMPPSCRAMAuth.h ================================================================== --- src/XMPPSCRAMAuth.h +++ src/XMPPSCRAMAuth.h @@ -22,10 +22,12 @@ #import #import "XMPPAuthenticator.h" #import "XMPPConnection.h" +OF_ASSUME_NONNULL_BEGIN + /** * \brief A class to authenticate using SCRAM */ @interface XMPPSCRAMAuth: XMPPAuthenticator { @@ -47,13 +49,13 @@ * \param connection The connection over which authentication is done * \param hash The class to use for calulating hashes * \param plusAvailable Whether the PLUS variant was offered * \return A new autoreleased XMPPSCRAMAuth */ -+ (instancetype)SCRAMAuthWithAuthcid: (OFString*)authcid - password: (OFString*)password - connection: (XMPPConnection*)connection ++ (instancetype)SCRAMAuthWithAuthcid: (nullable OFString *)authcid + password: (nullable OFString *)password + connection: (XMPPConnection *)connection hash: (Class)hash plusAvailable: (bool)plusAvailable; /** * \brief Creates a new autoreleased XMPPSCRAMAuth with an authzid, authcid and @@ -65,17 +67,23 @@ * \param connection The connection over which authentication is done * \param hash The class to use for calulating hashes * \param plusAvailable Whether the PLUS variant was offered * \return A new autoreleased XMPPSCRAMAuth */ -+ (instancetype)SCRAMAuthWithAuthzid: (OFString*)authzid - authcid: (OFString*)authcid - password: (OFString*)password - 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. * * \param authcid The authcid to authenticate with @@ -83,13 +91,13 @@ * \param connection The connection over which authentication is done * \param hash The class to use for calulating hashes * \param plusAvailable Whether the PLUS variant was offered * \return A initialized XMPPSCRAMAuth */ -- initWithAuthcid: (OFString*)authcid - password: (OFString*)password - connection: (XMPPConnection*)connection +- initWithAuthcid: (nullable OFString *)authcid + password: (nullable OFString *)password + connection: (XMPPConnection *)connection hash: (Class)hash plusAvailable: (bool)plusAvailable; /** * \brief Initializes an already allocated XMPPSCRAMAuth with a authzid, @@ -101,23 +109,14 @@ * \param connection The connection over which authentication is done * \param hash The class to use for calulating hashes * \param plusAvailable Whether the PLUS variant was offered * \return A initialized XMPPSCRAMAuth */ -- initWithAuthzid: (OFString*)authzid - authcid: (OFString*)authcid - password: (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 -@end +- initWithAuthzid: (nullable OFString *)authzid + authcid: (nullable OFString *)authcid + password: (nullable OFString *)password + connection: (XMPPConnection *)connection + hash: (Class)hash + plusAvailable: (bool)plusAvailable OF_DESIGNATED_INITIALIZER; +@end + +OF_ASSUME_NONNULL_END Index: src/XMPPSCRAMAuth.m ================================================================== --- src/XMPPSCRAMAuth.m +++ src/XMPPSCRAMAuth.m @@ -34,15 +34,30 @@ #import "XMPPSCRAMAuth.h" #import "XMPPExceptions.h" #define HMAC_IPAD 0x36 #define HMAC_OPAD 0x5c + +OF_ASSUME_NONNULL_BEGIN + +@interface XMPPSCRAMAuth () +- (OFString *)XMPP_genNonce; +- (const uint8_t *)XMPP_HMACWithKey: (OFDataArray *)key + data: (OFDataArray *)data; +- (OFDataArray *)XMPP_hiWithData: (OFDataArray *)str + salt: (OFDataArray *)salt + iterationCount: (intmax_t)i; +- (OFDataArray *)XMPP_parseServerFirstMessage: (OFDataArray *)data; +- (OFDataArray *)XMPP_parseServerFinalMessage: (OFDataArray *)data; +@end + +OF_ASSUME_NONNULL_END @implementation XMPPSCRAMAuth -+ (instancetype)SCRAMAuthWithAuthcid: (OFString*)authcid - password: (OFString*)password - connection: (XMPPConnection*)connection ++ (instancetype)SCRAMAuthWithAuthcid: (OFString *)authcid + password: (OFString *)password + connection: (XMPPConnection *)connection hash: (Class)hash plusAvailable: (bool)plusAvailable { return [[[self alloc] initWithAuthcid: authcid password: password @@ -49,14 +64,14 @@ connection: connection hash: hash 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 { return [[[self alloc] initWithAuthzid: authzid authcid: authcid @@ -64,13 +79,13 @@ connection: connection hash: hash 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 { return [self initWithAuthzid: nil authcid: authcid @@ -78,14 +93,14 @@ connection: connection hash: hash 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 { self = [super initWithAuthzid: authzid authcid: authcid @@ -107,11 +122,11 @@ [_connection release]; [super dealloc]; } -- (void)setAuthzid: (OFString*)authzid +- (void)setAuthzid: (OFString *)authzid { OFString *old = _authzid; if (authzid) { OFMutableString *new = [[authzid mutableCopy] autorelease]; @@ -124,11 +139,11 @@ _authzid = nil; [old release]; } -- (void)setAuthcid: (OFString*)authcid +- (void)setAuthcid: (OFString *)authcid { OFString *old = _authcid; if (authcid) { OFMutableString *new = [[authcid mutableCopy] autorelease]; @@ -141,11 +156,11 @@ _authcid = nil; [old release]; } -- (OFDataArray*)initialMessage +- (OFDataArray *)initialMessage { OFDataArray *ret = [OFDataArray dataArray]; /* New authentication attempt, reset status */ [_cNonce release]; @@ -178,11 +193,11 @@ count: [_clientFirstMessageBare UTF8StringLength]]; return ret; } -- (OFDataArray*)continueWithData: (OFDataArray*)data +- (OFDataArray *)continueWithData: (OFDataArray *)data { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFDataArray *ret; if (!_serverSignature) @@ -194,11 +209,11 @@ [pool release]; return [ret autorelease]; } -- (OFDataArray*)XMPP_parseServerFirstMessage: (OFDataArray*)data +- (OFDataArray *)XMPP_parseServerFirstMessage: (OFDataArray *)data { size_t i; const uint8_t *clientKey, *serverKey, *clientSignature; intmax_t iterCount = 0; id hash; @@ -251,11 +266,12 @@ // Add c= tmpArray = [OFDataArray dataArray]; [tmpArray addItems: [_GS2Header UTF8String] count: [_GS2Header UTF8StringLength]]; if (_plusAvailable && [_connection encrypted]) { - OFDataArray *channelBinding = [((SSLSocket*)[_connection socket]) + OFDataArray *channelBinding = + [((SSLSocket *)[_connection socket]) channelBindingDataWithType: @"tls-unique"]; [tmpArray addItems: [channelBinding items] count: [channelBinding count]]; } tmpString = [tmpArray stringByBase64Encoding]; @@ -310,11 +326,11 @@ /* * IETF RFC 5802: * StoredKey := H(ClientKey) */ - [hash updateWithBuffer: (void*) clientKey + [hash updateWithBuffer: (void *)clientKey length: [_hashType digestSize]]; tmpArray = [OFDataArray dataArray]; [tmpArray addItems: [hash digest] count: [_hashType digestSize]]; @@ -366,11 +382,11 @@ count: [tmpString UTF8StringLength]]; return ret; } -- (OFDataArray*)XMPP_parseServerFinalMessage: (OFDataArray*)data +- (OFDataArray *)XMPP_parseServerFinalMessage: (OFDataArray *)data { OFString *mess, *value; /* * server-final-message already received, @@ -396,11 +412,11 @@ reason: value]; return nil; } -- (OFString*)XMPP_genNonce +- (OFString *)XMPP_genNonce { uint8_t buf[64]; size_t i; assert(RAND_pseudo_bytes(buf, 64) >= 0); @@ -412,17 +428,17 @@ // ...so we can use it to replace ',' if (buf[i] == ',') 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]; size_t i, kSize, blockSize = [_hashType blockSize]; uint8_t *kI = NULL, *kO = NULL; @@ -451,19 +467,19 @@ kI[i] ^= HMAC_IPAD; kO[i] ^= HMAC_OPAD; } 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]; [self freeMemory: kO]; } @@ -472,13 +488,13 @@ [pool release]; 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]; uint8_t *result = NULL; const uint8_t *u, *uOld; Index: src/XMPPSRVLookup.h ================================================================== --- src/XMPPSRVLookup.h +++ src/XMPPSRVLookup.h @@ -24,10 +24,12 @@ #include #include #include #import + +OF_ASSUME_NONNULL_BEGIN @interface XMPPSRVEntry: OFObject { uint16_t _priority; uint16_t _weight; @@ -38,22 +40,23 @@ @property (readonly) uint16_t priority; @property (readonly) uint16_t weight; @property uint32_t accumulatedWeight; @property (readonly) uint16_t port; -@property (readonly, copy) OFString *target; +@property (readonly, nonatomic) OFString *target; + (instancetype)entryWithPriority: (uint16_t)priority weight: (uint16_t)weight port: (uint16_t)port - target: (OFString*)target; + 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 @interface XMPPSRVLookup: OFObject @@ -61,17 +64,15 @@ OFString *_domain; struct __res_state _resState; 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 { OFList *_list; @@ -78,7 +79,10 @@ of_list_object_t *_listIter; OFList *_subListCopy; bool _done; } -- initWithList: (OFList*)list; +- init OF_UNAVAILABLE; +- initWithList: (OFList *)list; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPSRVLookup.m ================================================================== --- src/XMPPSRVLookup.m +++ src/XMPPSRVLookup.m @@ -37,20 +37,29 @@ #include #import "XMPPSRVLookup.h" #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; @synthesize target = _target; + (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 port: port target: target] autorelease]; @@ -63,24 +72,17 @@ handle: handle] autorelease]; } - 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]; @try { _priority = priority; @@ -102,17 +104,17 @@ @try { 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]]; _target = [[OFString alloc] initWithCString: buffer @@ -130,11 +132,11 @@ [_target release]; [super dealloc]; } -- (OFString*)description +- (OFString *)description { return [OFString stringWithFormat: @"<%@ priority: %" PRIu16 @", weight: %" PRIu16 @", target: %@:%" PRIu16 @">", [self class], _priority, _weight, _target, _port]; } @@ -141,16 +143,21 @@ @end @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]; @try { _list = [[OFList alloc] init]; @@ -229,11 +236,11 @@ } [pool release]; } -- (void)XMPP_addEntry: (XMPPSRVEntry*)entry +- (void)XMPP_addEntry: (XMPPSRVEntry *)entry { OFAutoreleasePool *pool; OFList *subList; of_list_object_t *iter; @@ -271,18 +278,23 @@ [_list appendObject: subList]; [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]; @try { _list = [list copy]; @@ -319,11 +331,11 @@ } 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; iter = iter->next) { if ([iter->object accumulatedWeight] >= randomWeight) { Index: src/XMPPStanza.h ================================================================== --- src/XMPPStanza.h +++ src/XMPPStanza.h @@ -21,10 +21,12 @@ * POSSIBILITY OF SUCH DAMAGE. */ #import +OF_ASSUME_NONNULL_BEGIN + @class XMPPJID; /** * \brief A class describing an XMPP Stanza. */ @@ -33,48 +35,48 @@ XMPPJID *_from, *_to; OFString *_type, *_ID, *_language; } /// \brief The value of the stanza's from attribute -@property (copy) XMPPJID *from; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) XMPPJID *from; /// \brief The value of the stanza's to attribute -@property (copy) XMPPJID *to; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) XMPPJID *to; /// \brief The value of the stanza's type attribute -@property (copy) OFString *type; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *type; /// \brief The value of the stanza's id attribute -@property (copy) OFString *ID; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *ID; /// \brief The stanza's xml:lang -@property (copy) OFString *language; +@property OF_NULLABLE_PROPERTY (nonatomic, copy) OFString *language; /** * \brief Creates a new autoreleased XMPPStanza with the specified name. * * \param name The stanza's name (one of iq, message or presence) * \return A new autoreleased XMPPStanza */ -+ (instancetype)stanzaWithName: (OFString*)name; ++ (instancetype)stanzaWithName: (OFString *)name; /** * \brief Creates a new autoreleased XMPPStanza with the specified name and * type. * * \param name The stanza's name (one of iq, message or presence) * \param type The value for the stanza's type attribute * \return A new autoreleased XMPPStanza */ -+ (instancetype)stanzaWithName: (OFString*)name - type: (OFString*)type; ++ (instancetype)stanzaWithName: (OFString *)name + type: (nullable OFString *)type; /** * \brief Creates a new autoreleased XMPPStanza with the specified name and ID. * * \param name The stanza's name (one of iq, message or presence) * \param ID The value for the stanza's id attribute * \return A new autoreleased XMPPStanza */ -+ (instancetype)stanzaWithName: (OFString*)name - ID: (OFString*)ID; ++ (instancetype)stanzaWithName: (OFString *)name + ID: (nullable OFString *)ID; /** * \brief Creates a new autoreleased XMPPStanza with the specified name, type * and ID. * @@ -81,51 +83,61 @@ * \param name The stanza's name (one of iq, message or presence) * \param type The value for the stanza's type attribute * \param ID The value for the stanza's id attribute * \return A new autoreleased XMPPStanza */ -+ (instancetype)stanzaWithName: (OFString*)name - type: (OFString*)type - ID: (OFString*)ID; ++ (instancetype)stanzaWithName: (OFString *)name + type: (nullable OFString *)type + ID: (nullable OFString *)ID; /** * \brief Creates a new autoreleased XMPPStanza from an OFXMLElement. * * \param element The element to base the XMPPStanza on * \return A new autoreleased XMPPStanza */ -+ (instancetype)stanzaWithElement: (OFXMLElement*)element; ++ (instancetype)stanzaWithElement: (OFXMLElement *)element; + +- initWithName: (OFString *)name + stringValue: (nullable OFString *)stringValue OF_UNAVAILABLE; +- initWithName: (OFString *)name + namespace: (nullable OFString *)namespace OF_UNAVAILABLE; +- initWithName: (OFString *)name + namespace: (nullable OFString *)namespace + stringValue: (nullable OFString *)stringValue OF_UNAVAILABLE; +- initWithXMLString: (OFString *)string OF_UNAVAILABLE; +- initWithFile: (OFString *)path OF_UNAVAILABLE; /** * \brief Initializes an already allocated XMPPStanza with the specified name. * * \param name The stanza's name (one of iq, message or presence) * \return A initialized XMPPStanza */ -- initWithName: (OFString*)name; +- initWithName: (OFString *)name; /** * \brief Initializes an already allocated XMPPStanza with the specified name * and type. * * \param name The stanza's name (one of iq, message or presence) * \param type The value for the stanza's type attribute * \return A initialized XMPPStanza */ -- initWithName: (OFString*)name - type: (OFString*)type; +- initWithName: (OFString *)name + type: (nullable OFString *)type; /** * \brief Initializes an already allocated XMPPStanza with the specified name * and ID. * * \param name The stanza's name (one of iq, message or presence) * \param ID The value for the stanza's id attribute * \return A initialized XMPPStanza */ -- initWithName: (OFString*)name - ID: (OFString*)ID; +- initWithName: (OFString *)name + ID: (nullable OFString *)ID; /** * \brief Initializes an already allocated XMPPStanza with the specified name, * type and ID. * @@ -132,17 +144,19 @@ * \param name The stanza's name (one of iq, message or presence) * \param type The value for the stanza's type attribute * \param ID The value for the stanza's id attribute * \return A initialized XMPPStanza */ -- initWithName: (OFString*)name - type: (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. * * \param element The element to base the XMPPStanza on * \return A initialized XMPPStanza */ -- initWithElement: (OFXMLElement*)element; +- initWithElement: (OFXMLElement *)element; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPStanza.m ================================================================== --- src/XMPPStanza.m +++ src/XMPPStanza.m @@ -28,69 +28,89 @@ #import "XMPPStanza.h" #import "XMPPJID.h" #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]; @try { @@ -113,11 +133,11 @@ } return self; } -- initWithElement: (OFXMLElement*)element +- initWithElement: (OFXMLElement *)element { self = [super initWithElement: element]; @try { OFXMLAttribute *attribute; @@ -151,11 +171,11 @@ [_ID release]; [super dealloc]; } -- (void)setFrom: (XMPPJID*)from +- (void)setFrom: (XMPPJID *)from { XMPPJID *old = _from; _from = [from copy]; [old release]; @@ -164,16 +184,11 @@ if (from != nil) [self addAttributeWithName: @"from" stringValue: [from fullJID]]; } -- (XMPPJID*)from -{ - return [[_from copy] autorelease]; -} - -- (void)setTo: (XMPPJID*)to +- (void)setTo: (XMPPJID *)to { XMPPJID *old = _to; _to = [to copy]; [old release]; @@ -182,16 +197,11 @@ if (to != nil) [self addAttributeWithName: @"to" stringValue: [to fullJID]]; } -- (XMPPJID*)to -{ - return [[_to copy] autorelease]; -} - -- (void)setType: (OFString*)type +- (void)setType: (OFString *)type { OFString *old = _type; _type = [type copy]; [old release]; @@ -200,16 +210,11 @@ if (type != nil) [self addAttributeWithName: @"type" stringValue: type]; } -- (OFString*)type -{ - return [[_type copy] autorelease]; -} - -- (void)setID: (OFString*)ID +- (void)setID: (OFString *)ID { OFString *old = _ID; _ID = [ID copy]; [old release]; @@ -218,16 +223,11 @@ if (ID != nil) [self addAttributeWithName: @"id" stringValue: ID]; } -- (OFString*)ID -{ - return [[_ID copy] autorelease]; -} - -- (void)setLanguage: (OFString*)language +- (void)setLanguage: (OFString *)language { OFString *old = _language; _language = [language copy]; [old release]; @@ -238,11 +238,6 @@ [self addAttributeWithName: @"lang" namespace: @"http://www.w3.org/XML/1998/" @"namespace" stringValue: language]; } - -- (OFString*)language -{ - return [[_language copy] autorelease]; -} @end Index: src/XMPPStorage.h ================================================================== --- src/XMPPStorage.h +++ src/XMPPStorage.h @@ -20,27 +20,31 @@ * POSSIBILITY OF SUCH DAMAGE. */ #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 Index: src/XMPPStreamManagement.h ================================================================== --- src/XMPPStreamManagement.h +++ src/XMPPStreamManagement.h @@ -20,14 +20,19 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #import "XMPPConnection.h" + +OF_ASSUME_NONNULL_BEGIN @interface XMPPStreamManagement: OFObject { XMPPConnection *_connection; uint32_t _receivedCount; } -- initWithConnection: (XMPPConnection*)connection; +- init OF_UNAVAILABLE; +- initWithConnection: (XMPPConnection *)connection; @end + +OF_ASSUME_NONNULL_END Index: src/XMPPStreamManagement.m ================================================================== --- src/XMPPStreamManagement.m +++ src/XMPPStreamManagement.m @@ -24,11 +24,16 @@ #import "XMPPStreamManagement.h" #import "namespaces.h" @implementation XMPPStreamManagement -- initWithConnection: (XMPPConnection*)connection +- init +{ + OF_INVALID_INIT_METHOD +} + +- initWithConnection: (XMPPConnection *)connection { self = [super init]; @try { _connection = connection; @@ -46,12 +51,12 @@ [_connection removeDelegate: self]; [super dealloc]; } -- (void)connection: (XMPPConnection*)connection - didReceiveElement: (OFXMLElement*)element +- (void)connection: (XMPPConnection *)connection + didReceiveElement: (OFXMLElement *)element { OFString *elementName = [element name]; OFString *elementNS = [element namespace]; if ([elementNS isEqual: XMPP_NS_SM]) { @@ -83,20 +88,20 @@ [elementName isEqual: @"message"])) _receivedCount++; } /* 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: [OFXMLElement elementWithName: @"enable" namespace: XMPP_NS_SM]]; } @end Index: src/XMPPXMLElementBuilder.h ================================================================== --- src/XMPPXMLElementBuilder.h +++ src/XMPPXMLElementBuilder.h @@ -19,8 +19,12 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #import + +OF_ASSUME_NONNULL_BEGIN @interface XMPPXMLElementBuilder: OFXMLElementBuilder @end + +OF_ASSUME_NONNULL_END Index: src/XMPPXMLElementBuilder.m ================================================================== --- src/XMPPXMLElementBuilder.m +++ src/XMPPXMLElementBuilder.m @@ -27,17 +27,17 @@ #import "XMPPXMLElementBuilder.h" #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]; } @end Index: tests/test.m ================================================================== --- tests/test.m +++ tests/test.m @@ -36,13 +36,11 @@ #import "XMPPRoster.h" #import "XMPPStreamManagement.h" #import "XMPPFileStorage.h" @interface AppDelegate: OFObject -#ifdef OF_HAVE_OPTIONAL_PROTOCOLS -#endif { XMPPConnection *conn; XMPPRoster *roster; } @end @@ -129,29 +127,29 @@ [conn setResource: @"ObjXMPP"]; [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: %@", [conn_ supportsStreamManagement] ? @"true" : @"false"); @@ -198,11 +196,11 @@ [discoEntity addDiscoNode: nodeChicago]; [roster requestRoster]; } -- (void)rosterWasReceived: (XMPPRoster*)roster_ +- (void)rosterWasReceived: (XMPPRoster *)roster_ { XMPPPresence *pres; of_log(@"Got roster: %@", [roster_ rosterItems]); @@ -222,11 +220,11 @@ of_log(@"Ping response: %@", resp); }]; #endif } -- (void)connectionDidUpgradeToTLS: (XMPPConnection*)conn_ +- (void)connectionDidUpgradeToTLS: (XMPPConnection *)conn_ { OFString *reason; if (![conn_ checkCertificateAndGetReason: &reason]) { [of_stdout writeString: @"Couldn't verify certificate: "]; @@ -236,42 +234,42 @@ if (![[of_stdin readLine] hasPrefix: @"y"]) [OFApplication terminateWithStatus: 1]; } } -- (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!"); } @end