#ifndef _SEC_SOSMESSAGE_H_
#define _SEC_SOSMESSAGE_H_
#include "keychain/SecureObjectSync/SOSDataSource.h"
#include "keychain/SecureObjectSync/SOSManifest.h"
__BEGIN_DECLS
enum SOSMessageFlags {
kSOSMessageGetObjects = (0),
kSOSMessageJoinRequest = (1),
kSOSMessagePartial = (2),
kSOSMessageDigestTypesProposed = (3),
kSOSMessageClearGetObjects = (4),
kSOSMessageDidClearGetObjectsSinceLastDelta = (5),
kSOSMessageSkipHello = (6),
};
typedef uint64_t SOSMessageFlags;
enum SOSDigestTypes {
kSOSDigestTypeSHA1 = (0),
kSOSDigestTypeDefault = kSOSDigestTypeSHA1,
kSOSDigestTypeSHA224 = (1),
kSOSDigestTypeSHA256 = (2),
kSOSDigestTypeSHA384 = (3),
kSOSDigestTypeSHA512 = (4),
};
typedef uint64_t SOSDigestTypes;
typedef struct __OpaqueSOSMessage *SOSMessageRef;
#define kSOSMessageMaxObjectsSize (64000)
#define kSOSBackupMaxFileSize (64000)
#define kEngineMessageProtocolVersion 2
SOSMessageRef SOSMessageCreate(CFAllocatorRef allocator, uint64_t version, CFErrorRef *error);
SOSMessageRef SOSMessageCreateWithManifests(CFAllocatorRef allocator, SOSManifestRef sender,
SOSManifestRef base, SOSManifestRef proposed,
bool includeManifestDeltas, CFErrorRef *error);
bool SOSMessageSetManifests(SOSMessageRef message, SOSManifestRef sender,
SOSManifestRef base, SOSManifestRef proposed,
bool includeManifestDeltas, SOSManifestRef objectsSent,
CFErrorRef *error);
void SOSMessageAddExtension(SOSMessageRef message, CFDataRef oid, bool isCritical, CFDataRef extension);
bool SOSMessageAppendObject(SOSMessageRef message, CFDataRef object, CFErrorRef *error);
void SOSMessageSetFlags(SOSMessageRef message, SOSMessageFlags flags);
CFDataRef SOSMessageCreateData(SOSMessageRef message, uint64_t sequenceNumber, CFErrorRef *error);
SOSMessageRef SOSMessageCreateWithData(CFAllocatorRef allocator, CFDataRef derData, CFErrorRef *error);
CFDataRef SOSMessageGetBaseDigest(SOSMessageRef message);
CFDataRef SOSMessageGetProposedDigest(SOSMessageRef message);
CFDataRef SOSMessageGetSenderDigest(SOSMessageRef message);
SOSMessageFlags SOSMessageGetFlags(SOSMessageRef message);
uint64_t SOSMessageGetSequenceNumber(SOSMessageRef message);
SOSManifestRef SOSMessageGetRemovals(SOSMessageRef message);
SOSManifestRef SOSMessageGetAdditions(SOSMessageRef message);
void SOSMessageWithExtensions(SOSMessageRef message, bool criticalOnly,
void(^withExtension)(CFDataRef oid, bool isCritical,
CFDataRef extension, bool *stop));
size_t SOSMessageCountObjects(SOSMessageRef message);
bool SOSMessageWithObjects(SOSMessageRef message, CFErrorRef *error,
void(^withObject)(CFDataRef object, bool *stop));
bool SOSMessageWithSOSObjects(SOSMessageRef message, SOSDataSourceRef dataSource, CFErrorRef *error,
void(^withObject)(SOSObjectRef object, bool *stop));
__END_DECLS
#endif