2016-02-24 16:56:39 +01:00

132 lines
4.0 KiB
Objective-C

#import <Foundation/Foundation.h>
#import "XMPPModule.h"
#if TARGET_OS_IPHONE
#import "DDXML.h"
#endif
#define _XMPP_BLOCKING_H
@class XMPPIQ;
extern NSString *const XMPPBlockingErrorDomain;
typedef enum XMPPBlockingErrorCode
{
XMPPBlockingQueryTimeout, // No response from server
XMPPBlockingDisconnect, // XMPP disconnection
} XMPPBlockingErrorCode;
@interface XMPPBlocking : XMPPModule
{
BOOL autoRetrieveBlockingListItems;
BOOL autoClearBlockingListInfo;
NSMutableDictionary *blockingDict;
NSMutableDictionary *pendingQueries;
}
/**
* Whether or not the module should automatically retrieve the blocking list rules.
* If this property is enabled, then the rules for each blocking list are automatically fetched.
*
* In other words, if the blocking list names are fetched (either automatically, or via retrieveListItems),
* then the module will automatically fetch the associated rules.
*
* The default value is YES.
**/
@property (readwrite, assign) BOOL autoRetrieveBlockingListItems;
/**
* Whether the module should automatically clear the blocking list info when the client disconnects.
*
* As per the XEP, if there are multiple resources signed in for the user,
* and one resource makes changes to a blocking list, all other resources are "pushed" a notification.
* However, if our client is disconnected when another resource makes the changes,
* then the only way we can find out about the changes are to redownload the blocking lists.
*
* It is recommended to clear the blocking list to assure we have the correct info.
* However, there may be specific situations in which an xmpp client can be sure the blocking list won't change.
*
* The default value is YES.
**/
@property (readwrite, assign) BOOL autoClearBlockingListInfo;
/**
* Blocking dict
*/
@property (readonly, strong) NSMutableDictionary *blockingDict;
/**
* Manual fetch of list names and rules, and manual control over when to clear stored info.
**/
- (void)retrieveBlockingListItems;
- (void)clearBlockingListInfo;
/**
* Returns the blocking list.
*
* The result is an array or blocking items (NSXMLElement's).
**/
- (NSArray*)blockingList;
/**
* Block JID.
*/
- (void)blockJID:(XMPPJID*)xmppJID;
/**
* Unblock JID.
*/
- (void)unblockJID:(XMPPJID*)xmppJID;
/**
* Return whether a jid is in blocking list or not.
*/
- (BOOL)containsJID:(XMPPJID*)xmppJID;
/**
* Unblock all.
*/
- (void)unblockAll;
@end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark -
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@protocol XMPPBlockingDelegate
@optional
/**
* The following delegate methods correspond almost exactly with the action methods of the class.
* There are a few possible ways in which an action could fail:
*
* 1. We receive an error response from the server.
* 2. We receive no response from the server, and the query times out.
* 3. We get disconnected before we receive the response.
*
* In case number 1, the error will be an XMPPIQ of type='error'.
*
* In case number 2 or 3, the error will be an NSError
* with domain=XMPPPrivacyErrorDomain and code from the XMPPBlockingErrorCode enumeration.
**/
- (void)xmppBlocking:(XMPPBlocking *)sender didReceivedBlockingList:(NSArray*)blockingList;
- (void)xmppBlocking:(XMPPBlocking *)sender didNotReceivedBlockingListDueToError:(id)error;
- (void)xmppBlocking:(XMPPBlocking *)sender didReceivePushWithBlockingList:(NSString *)name;
- (void)xmppBlocking:(XMPPBlocking *)sender didBlockJID:(XMPPJID*)xmppJID;
- (void)xmppBlocking:(XMPPBlocking *)sender didNotBlockJID:(XMPPJID*)xmppJID error:(id)error;
- (void)xmppBlocking:(XMPPBlocking *)sender didUnblockJID:(XMPPJID*)xmppJID;
- (void)xmppBlocking:(XMPPBlocking *)sender didNotUnblockJID:(XMPPJID*)xmppJID error:(id)error;
- (void)xmppBlocking:(XMPPBlocking *)sender didUnblockAllWithError:(id)error;
- (void)xmppBlocking:(XMPPBlocking *)sender didNotUnblockAllDueToError:(id)error;
@end