#ifndef _sec_SOSViews_
#define _sec_SOSViews_
#include <CoreFoundation/CFRuntime.h>
#include <CoreFoundation/CoreFoundation.h>
#include <Security/SecureObjectSync/SOSPeerInfo.h>
#include <xpc/xpc.h>
__BEGIN_DECLS
extern const CFStringRef kSOSViewKeychainV0;
extern const CFStringRef kSOSViewKeychainV0_tomb;
extern const CFStringRef kSOSViewBackupBagV0_tomb;
extern const CFStringRef kSOSViewWiFi_tomb;
extern const CFStringRef kSOSViewAutofillPasswords_tomb;
extern const CFStringRef kSOSViewSafariCreditCards_tomb;
extern const CFStringRef kSOSViewiCloudIdentity_tomb;
extern const CFStringRef kSOSViewOtherSyncable_tomb;
typedef struct __OpaqueSOSView {
CFRuntimeBase _base;
CFStringRef label;
CFMutableDictionaryRef ringnames;
} *SOSViewRef;
typedef enum {
kViewSetAll, kViewSetDefault,
kViewSetInitial,
kViewSetAlwaysOn,
kViewSetV0,
kViewSetRequiredForBackup,
kViewSetCKKS,
} ViewSetKind;
CFMutableSetRef SOSViewCopyViewSet(ViewSetKind setKind);
CFSetRef SOSViewsGetV0ViewSet(void);
CFSetRef SOSViewsGetV0SubviewSet(void);
CFSetRef SOSViewsGetV0BackupViewSet(void);
CFSetRef SOSViewsGetV0BackupBagViewSet(void);
bool SOSViewsIsV0Subview(CFStringRef viewName);
bool SOSViewInSOSSystem(CFStringRef view);
bool SOSViewHintInSOSSystem(CFStringRef viewHint);
bool SOSViewHintInCKKSSystem(CFStringRef viewHint);
SOSViewResultCode SOSViewsEnable(SOSPeerInfoRef pi, CFStringRef viewname, CFErrorRef *error);
bool SOSViewSetEnable(SOSPeerInfoRef pi, CFSetRef viewSet);
SOSViewResultCode SOSViewsDisable(SOSPeerInfoRef pi, CFStringRef viewname, CFErrorRef *error);
bool SOSViewSetDisable(SOSPeerInfoRef pi, CFSetRef viewSet);
SOSViewResultCode SOSViewsQuery(SOSPeerInfoRef pi, CFStringRef viewname, CFErrorRef *error);
CFSetRef SOSViewsGetAllCurrent(void);
void SOSViewsForEachDefaultEnabledViewName(void (^operation)(CFStringRef viewName));
CFSetRef SOSViewCreateSetFromBitmask(uint64_t bitmask);
void SOSViewsSetTestViewsSet(CFSetRef testViewNames);
static inline bool SOSPeerInfoIsViewPermitted(SOSPeerInfoRef peerInfo, CFStringRef viewName) {
SOSViewResultCode viewResult = SOSViewsQuery(peerInfo, viewName, NULL);
return kSOSCCViewMember == viewResult || kSOSCCViewPending == viewResult || kSOSCCViewNotMember == viewResult;
}
const char *SOSViewsXlateAction(SOSViewActionCode action);
xpc_object_t CreateXPCObjectWithCFSetRef(CFSetRef setref, CFErrorRef *error);
__END_DECLS
#endif