X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/ce3c8656732c924baf7e88df75eab50891bdc471..fa7225c82381bac4432a6edf16f53b5370238d85:/IDSKeychainSyncingProxy/IDSProxy.h diff --git a/IDSKeychainSyncingProxy/IDSProxy.h b/IDSKeychainSyncingProxy/IDSProxy.h new file mode 100644 index 00000000..61e3228a --- /dev/null +++ b/IDSKeychainSyncingProxy/IDSProxy.h @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2012-2016 Apple Inc. All Rights Reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + +// +// IDSProxy.h +// ids-xpc + +#import +#import +#import +#import +#import "SOSCloudKeychainClient.h" +#import + +typedef enum { + kIDSStartPingTestMessage = 1, + kIDSEndPingTestMessage= 2, + kIDSSendOneMessage = 3, + kIDSSyncMessagesRaw = 4, + kIDSSyncMessagesCompact = 5, + kIDSPeerAvailability = 6, + kIDSPeerAvailabilityDone = 7, + kIDSKeychainSyncIDSFragmentation = 8 +} idsOperation; + +typedef enum { + kSecIDSErrorNoDeviceID = -1, //default case + kSecIDSErrorNotRegistered = -2, + kSecIDSErrorFailedToSend=-3, + kSecIDSErrorCouldNotFindMatchingAuthToken = -4, + kSecIDSErrorDeviceIsLocked = -5, + kSecIDSErrorNoPeersAvailable = -6 + +} idsError; + + +@interface IDSKeychainSyncingProxy : NSObject +{ + IDSService *_service; + NSString *_deviceID; +} + +@property (retain, nonatomic) NSMutableDictionary *unhandledMessageBuffer; +@property (retain, nonatomic) NSMutableDictionary *shadowPendingMessages; +@property (retain, nonatomic) NSMutableDictionary *allFragmentedMessages; +@property (retain, nonatomic) NSMutableDictionary *pingTimers; + +@property (atomic) dispatch_source_t penaltyTimer; +@property (atomic) bool penaltyTimerScheduled; +@property (retain, atomic) NSMutableDictionary *monitor; +@property (retain, atomic) NSDictionary *queuedMessages; + +@property (atomic) bool isIDSInitDone; +@property (atomic) bool isSecDRunningAsRoot; +@property (atomic) bool doesSecDHavePeer; +@property (atomic) dispatch_queue_t calloutQueue; +@property (atomic) bool isLocked; +@property (atomic) bool unlockedSinceBoot; +@property (atomic) dispatch_source_t retryTimer; +@property (atomic) bool retryTimerScheduled; +@property (atomic) bool inCallout; +@property (atomic) bool setIDSDeviceID; +@property (atomic) bool shadowDoSetIDSDeviceID; + +@property (atomic) bool handleAllPendingMessages; +@property (atomic) bool shadowHandleAllPendingMessages; + ++ (IDSKeychainSyncingProxy *) idsProxy; + +- (id)init; + +- (void) importIDSState: (NSMutableDictionary*) state; + +- (void) doSetIDSDeviceID; +- (void) doIDSInitialization; +- (void) calloutWith: (void(^)(NSMutableDictionary *pending, bool handlePendingMesssages, bool doSetDeviceID, dispatch_queue_t queue, void(^done)(NSMutableDictionary *handledMessages, bool handledPendingMessage, bool handledSettingDeviceID))) callout; +- (void) sendKeysCallout: (NSMutableDictionary *(^)(NSMutableDictionary* pending, NSError** error)) handleMessages; +- (void)persistState; + +- (void)scheduleRetryRequestTimer; +@end + +NSString* createErrorString(NSString* format, ...);