+++ /dev/null
-/*
- * Created by Michael Brouwer on 7/17/12.
- * Copyright 2012 Apple Inc. All Rights Reserved.
- */
-
-/*!
- @header SOSEngine.h
- The functions provided in SOSEngine.h provide an interface to a
- secure object syncing engine
- */
-
-#ifndef _SEC_SOSENGINE_H_
-#define _SEC_SOSENGINE_H_
-
-#include <SecureObjectSync/SOSTransport.h>
-#include <CoreFoundation/CFRuntime.h>
-
-__BEGIN_DECLS
-
-enum {
- kSOSEngineInvalidMessageError = 1,
- kSOSEngineInternalError = 2,
-};
-
-typedef struct __OpaqueSOSEngine *SOSEngineRef;
-typedef struct __OpaqueSOSPeer *SOSPeerRef;
-
-/* SOSDataSource protocol (non opaque). */
-typedef struct SOSDataSource *SOSDataSourceRef;
-
-typedef struct __OpaqueSOSObject *SOSObjectRef;
-
-/* Implement this if you want to create a new type of sync client.
- Currently we support keychains, but the engine should scale to
- entire filesystems. */
-enum SOSMergeResult {
- kSOSMergeFailure = 0, // CFErrorRef returned, no error returned in any other case
- kSOSMergeLocalObject, // We choose the current object in the dataSource the manifest is still valid.
- kSOSMergePeersObject, // We chose the peers object over our own, manifest is now dirty.
- kSOSMergeCreatedObject, // *createdObject is returned and should be released
-};
-typedef CFIndex SOSMergeResult;
-
-struct SOSDataSource {
- bool (*get_manifest_digest)(SOSDataSourceRef ds, uint8_t *out_digest, CFErrorRef *error);
- SOSManifestRef (*copy_manifest)(SOSDataSourceRef ds, CFErrorRef *error);
- bool (*foreach_object)(SOSDataSourceRef ds, SOSManifestRef manifest, CFErrorRef *error, bool (^handle_object)(SOSObjectRef object, CFErrorRef *error));
- SOSMergeResult (*add)(SOSDataSourceRef ds, SOSObjectRef object, CFErrorRef *error);
- void (*release)(SOSDataSourceRef ds);
-
- SOSObjectRef (*createWithPropertyList)(SOSDataSourceRef ds, CFDictionaryRef plist, CFErrorRef *error);
- CFDataRef (*copyDigest)(SOSObjectRef object, CFErrorRef *error);
- CFDataRef (*copyPrimaryKey)(SOSObjectRef object, CFErrorRef *error);
- CFDictionaryRef (*copyPropertyList)(SOSObjectRef object, CFErrorRef *error);
- SOSObjectRef (*copyMergedObject)(SOSObjectRef object1, SOSObjectRef object2, CFErrorRef *error);
- CFDictionaryRef (*backupObject)(SOSObjectRef object, uint64_t handle, CFErrorRef *error);
- bool (*restoreObject)(SOSDataSourceRef ds, uint64_t handle, CFDictionaryRef item, CFErrorRef *error);
-};
-
-// Create a new engine instance for a given datasource.
-SOSEngineRef SOSEngineCreate(SOSDataSourceRef dataSource, CFErrorRef *error);
-
-// Dispose of an engine when it's no longer needed.
-void SOSEngineDispose(SOSEngineRef engine);
-
-// Handle incoming message from a remote peer.
-bool SOSEngineHandleMessage(SOSEngineRef engine, SOSPeerRef peer,
- CFDataRef message, CFErrorRef *error);
-
-// Initiate a sync with the providied peer by sending it a message.
-bool SOSEngineSyncWithPeer(SOSEngineRef engine, SOSPeerRef peer, bool force,
- CFErrorRef *error);
-
-/* Internal functions exposed for testability. */
-CFDataRef SOSEngineCreateManifestDigestMessage(SOSEngineRef engine, SOSPeerRef peer, CFErrorRef *error);
-CFDataRef SOSEngineCreateManifestMessage(SOSEngineRef engine, SOSPeerRef peer, CFErrorRef *error);
-CFDataRef SOSEngineCreateManifestAndObjectsMessage(SOSEngineRef engine, SOSPeerRef peer, CFErrorRef *error);
-
-CFStringRef SOSMessageCopyDescription(CFDataRef message);
-
-__END_DECLS
-
-#endif /* !_SEC_SOSENGINE_H_ */