SOSChangeTracker.h [plain text]
#ifndef _SEC_SOSCHANGETRACKER_H_
#define _SEC_SOSCHANGETRACKER_H_
#include "keychain/SecureObjectSync/SOSDataSource.h"
#include "utilities/simulatecrash_assert.h"
__BEGIN_DECLS
enum {
kSOSErrorNotConcreteError = 1042,
};
typedef CFTypeRef SOSChangeRef;
static inline void SOSChangesAppendDelete(CFMutableArrayRef changes, CFTypeRef object) {
const void *values[] = { object };
SOSChangeRef change = CFArrayCreate(kCFAllocatorDefault, values, array_size(values), &kCFTypeArrayCallBacks);
CFArrayAppendValue(changes, change);
CFReleaseSafe(change);
}
static inline void SOSChangesAppendAdd(CFMutableArrayRef changes, CFTypeRef object) {
CFArrayAppendValue(changes, object);
}
static inline bool SOSChangeGetObject(SOSChangeRef change, CFTypeRef *object) {
if (CFGetTypeID(change) == CFArrayGetTypeID()) {
assert(CFArrayGetCount(change) == 1);
*object = CFArrayGetValueAtIndex(change, 0);
return false;
} else {
*object = change;
return true;
}
}
CFDataRef SOSChangeCopyDigest(SOSDataSourceRef dataSource, SOSChangeRef change, bool *isDel, SOSObjectRef *object, CFErrorRef *error);
CFStringRef SOSChangeCopyDescription(SOSChangeRef change);
CFStringRef SOSChangesCopyDescription(CFArrayRef changes);
typedef struct __OpaqueSOSChangeTracker *SOSChangeTrackerRef;
SOSChangeTrackerRef SOSChangeTrackerCreate(CFAllocatorRef allocator, bool isConcrete, CFArrayRef children, CFErrorRef *error);
void SOSChangeTrackerSetConcrete(SOSChangeTrackerRef ct, bool isConcrete);
typedef bool(^SOSChangeTrackerUpdatesChanges)(SOSChangeTrackerRef ct, SOSEngineRef engine, SOSTransactionRef txn, SOSDataSourceTransactionSource source, SOSDataSourceTransactionPhase phase, CFArrayRef changes, CFErrorRef *error);
void SOSChangeTrackerRegisterChangeUpdate(SOSChangeTrackerRef ct, SOSChangeTrackerUpdatesChanges child);
typedef bool(^SOSChangeTrackerUpdatesManifests)(SOSChangeTrackerRef ct, SOSEngineRef engine, SOSTransactionRef txn, SOSDataSourceTransactionSource source, SOSDataSourceTransactionPhase phase, SOSManifestRef removals, SOSManifestRef additions, CFErrorRef *error);
void SOSChangeTrackerRegisterManifestUpdate(SOSChangeTrackerRef ct, SOSChangeTrackerUpdatesManifests child);
void SOSChangeTrackerResetRegistration(SOSChangeTrackerRef ct);
void SOSChangeTrackerSetManifest(SOSChangeTrackerRef ct, SOSManifestRef manifest);
SOSManifestRef SOSChangeTrackerCopyManifest(SOSChangeTrackerRef ct, CFErrorRef *error);
bool SOSChangeTrackerTrackChanges(SOSChangeTrackerRef ct, SOSEngineRef engine, SOSTransactionRef txn, SOSDataSourceTransactionSource source, SOSDataSourceTransactionPhase phase, CFArrayRef changes, CFErrorRef *error);
__END_DECLS
#endif