1/* 2 * Copyright (c) 2012 Apple Computer, Inc. All Rights Reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24 25/* 26 * SOSCloudKeychainClient.h - Implementation of the transport layer from CKBridge to SOSAccount/SOSCircle 27 */ 28 29/*! 30 @header SOSCloudKeychainClient 31 The functions provided in SOSCloudTransport.h provide an interface 32 from CKBridge to SOSAccount/SOSCircle 33 */ 34 35#ifndef _SOSCLOUDKEYCHAINCLIENT_H_ 36#define _SOSCLOUDKEYCHAINCLIENT_H_ 37 38#include <CoreFoundation/CFArray.h> 39#include <CoreFoundation/CFDictionary.h> 40#include <CoreFoundation/CFError.h> 41#include <dispatch/dispatch.h> 42 43__BEGIN_DECLS 44 45 46// MARK: ---------- SOSCloudTransport ---------- 47 48enum 49{ 50 kSOSObjectMallocFailed = 1, 51 kAddDuplicateEntry, 52 kSOSObjectNotFoundError = 1, 53 kSOSObjectCantBeConvertedToXPCObject, 54 kSOSOUnexpectedConnectionEvent, 55 kSOSOXPCErrorEvent, 56 kSOSOUnexpectedXPCEvent, 57 kSOSConnectionNotOpen 58}; 59 60typedef void (^CloudItemsChangedBlock)(CFDictionaryRef values); 61typedef void (^CloudKeychainReplyBlock)(CFDictionaryRef returnedValues, CFErrorRef error); 62 63/* SOSCloudTransport protocol. */ 64typedef struct SOSCloudTransport *SOSCloudTransportRef; 65struct SOSCloudTransport 66{ 67 void (*put)(SOSCloudTransportRef transport, CFDictionaryRef valuesToPut, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 68 void (*registerKeys)(SOSCloudTransportRef transport, CFArrayRef keysToGet, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock, CloudItemsChangedBlock notificationBlock); 69 bool (*updateKeys)(SOSCloudTransportRef transport, bool getNewKeysOnly, CFArrayRef alwaysKeys, CFArrayRef afterFirstUnlockKeys, CFArrayRef unlockedKeys, CFErrorRef *error); 70 71 void (*unregisterKeys)(SOSCloudTransportRef transport, CFArrayRef keysToUnregister, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 72 73 // Debug calls 74 void (*get)(SOSCloudTransportRef transport, CFArrayRef keysToGet, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 75 void (*getAll)(SOSCloudTransportRef transport, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 76 void (*synchronize)(SOSCloudTransportRef transport, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 77 void (*synchronizeAndWait)(SOSCloudTransportRef transport, CFArrayRef keysToGet, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 78 79 void (*clearAll)(SOSCloudTransportRef transport, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 80 void (*removeObjectForKey)(SOSCloudTransportRef transport, CFStringRef keyToRemove, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 81 void (*localNotification)(SOSCloudTransportRef transport, CFStringRef messageToUser, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 82 void (*setParams)(SOSCloudTransportRef transport, CFDictionaryRef paramsDict, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 83 void (*requestSyncWithAllPeers)(SOSCloudTransportRef transport, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 84 85 const void *itemsChangedBlock; 86}; 87 88/* Call this function before calling any other function in this header to provide 89 an alternate transport, the default transport talks to CloudKeychainProxy via xpc. */ 90void SOSCloudKeychainSetTransport(SOSCloudTransportRef transport); 91 92 93/*! 94 @function SOSCloudKeychainRegisterKeysAndGet 95 @abstract Register a set of keys-of-interest and optionally return their current values 96 @param keysToGet An array of CFStringRef keys to get/register 97 @param processQueue The replyBlock will be called via dispatch_async on this queue 98 @param replyBlock This will be called via dispatch_async 99 @discussion The replyBlock will be called asynchronously with the current values of 100 the registered keys. If an error occured, the error parameter to the replyBlock will 101 be filled in with an error. The caller should call CFRetain on the returned dictionary. 102 */ 103void SOSCloudKeychainRegisterKeysAndGet(CFArrayRef keysToGet, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock, CloudItemsChangedBlock notificationBlock); 104bool SOSCloudKeychainUpdateKeys(bool getNewKeysOnly, 105 CFArrayRef alwaysKeys, 106 CFArrayRef afterFirstUnlockKeys, 107 CFArrayRef unlockedKeys, 108 CFErrorRef *error); 109void SOSCloudKeychainUnRegisterKeys(CFArrayRef keysToUnregister, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 110 111void SOSCloudKeychainPutObjectsInCloud(CFDictionaryRef objects, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 112 113void SOSCloudKeychainSetItemsChangedBlock(CloudItemsChangedBlock itemsChangedBlock); 114 115void SOSCloudKeychainUserNotification(CFStringRef messageToUser, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 116 117void SOSCloudKeychainHandleUpdate(CFDictionaryRef update); 118void SOSCloudKeychainSynchronizeAndWait(CFArrayRef keysToGet, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 119 120// Debug only? 121 122void SOSCloudKeychainGetObjectsFromCloud(CFArrayRef keysToGet, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 123void SOSCloudKeychainSynchronize(dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 124void SOSCloudKeychainClearAll(dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 125void SOSCloudKeychainRemoveObjectForKey(CFStringRef keyToRemove, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 126void SOSCloudKeychainGetAllObjectsFromCloud(dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 127 128void SOSCloudKeychainSetParams(CFDictionaryRef paramsDict, dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 129void SOSCloudKeychainRequestSyncWithAllPeers(dispatch_queue_t processQueue, CloudKeychainReplyBlock replyBlock); 130 131void SOSCloudKeychainSetCallbackMethodXPC(void); 132 133__END_DECLS 134 135#endif /* !_SOSCLOUDKEYCHAINCLIENT_H_ */ 136 137