--- /dev/null
+//
+// SOSEnginePriv.h
+// sec
+//
+//
+
+#ifndef SOSEnginePriv_h
+#define SOSEnginePriv_h
+
+#include <CoreFoundation/CoreFoundation.h>
+#include <CoreFoundation/CFRuntime.h>
+#include "keychain/SecureObjectSync/SOSEngine.h"
+
+/* SOSEngine implementation. */
+struct __OpaqueSOSEngine {
+ CFRuntimeBase _base;
+ SOSDataSourceRef dataSource;
+ CFStringRef myID; // My peerID in the circle
+ // We need to address the issues of corrupt keychain items
+ SOSManifestRef unreadable; // Possibly by having a set of unreadable items, to which we
+ // add any corrupted items in the db that have yet to be deleted.
+ // This happens if we notce corruption during a (read only) query.
+ // We would also perma-subtract unreadable from manifest whenever
+ // anyone asked for manifest. This result would be cached in
+ // The manifestCache below, so we just need a key into the cache
+ CFDataRef localMinusUnreadableDigest; // or a digest (CFDataRef of the right size).
+
+ CFMutableDictionaryRef manifestCache; // digest -> ( refcount, manifest )
+ CFMutableDictionaryRef peerMap; // peerId -> SOSPeerRef
+ CFDictionaryRef viewNameSet2ChangeTracker; // CFSetRef of CFStringRef -> SOSChangeTrackerRef
+ CFDictionaryRef viewName2ChangeTracker; // CFStringRef -> SOSChangeTrackerRef
+ CFArrayRef peerIDs;
+ CFDateRef lastTraceDate; // Last time we did a CloudKeychainTrace
+ CFMutableDictionaryRef coders;
+ bool haveLoadedCoders;
+
+ bool codersNeedSaving;
+ dispatch_queue_t queue; // Engine queue
+
+ dispatch_source_t save_timer; // Engine state save timer
+ dispatch_queue_t syncCompleteQueue; // Non-retained queue for async notificaion
+ SOSEnginePeerInSyncBlock syncCompleteListener; // Block to call to notify the listener.
+
+ bool save_timer_pending; // Engine state timer running, read/modify on engine queue
+
+};
+
+#endif /* SOSEnginePriv_h */