1
2#include <CoreFoundation/CoreFoundation.h>
3#include <SecureObjectSync/SOSTransportCircle.h>
4#include <SecureObjectSync/SOSTransportCircleKVS.h>
5#include <SecureObjectSync/SOSTransport.h>
6#include <SecureObjectSync/SOSKVSKeys.h>
7#include <SecureObjectSync/SOSAccount.h>
8#include <SecureObjectSync/SOSAccountPriv.h>
9
10#include <utilities/SecCFWrappers.h>
11#include <SOSInternal.h>
12#include <SOSCloudKeychainClient.h>
13#include <AssertMacros.h>
14
15CFGiblisWithCompareFor(SOSTransportCircle);
16
17SOSTransportCircleRef SOSTransportCircleCreateForSubclass(size_t size, SOSAccountRef account, CFErrorRef *error)
18{
19    SOSTransportCircleRef tpt = CFTypeAllocateWithSpace(SOSTransportCircle, size, kCFAllocatorDefault);
20    tpt->account = CFRetainSafe(account);
21    return tpt;
22}
23
24static CFStringRef SOSTransportCircleCopyDescription(CFTypeRef aObj) {
25    SOSTransportCircleRef t = (SOSTransportCircleRef) aObj;
26
27    return CFStringCreateWithFormat(NULL, NULL, CFSTR("<SOSTransportCircle@%p\n>"), t);
28}
29
30static void SOSTransportCircleDestroy(CFTypeRef aObj) {
31    SOSTransportCircleRef transport = (SOSTransportCircleRef) aObj;
32    if(transport->destroy)
33        transport->destroy(transport);
34    CFReleaseNull(transport->account);
35}
36
37static CFHashCode SOSTransportCircleHash(CFTypeRef obj)
38{
39    return (intptr_t) obj;
40}
41
42static Boolean SOSTransportCircleCompare(CFTypeRef lhs, CFTypeRef rhs)
43{
44    return SOSTransportCircleHash(lhs) == SOSTransportCircleHash(rhs);
45}
46
47SOSAccountRef SOSTransportCircleGetAccount(SOSTransportCircleRef transport){
48    return transport->account;
49}
50
51bool SOSTransportCircleFlushChanges(SOSTransportCircleRef transport, CFErrorRef *error) {
52    return transport->flushChanges(transport, error);
53}
54
55bool SOSTransportCirclePostCircle(SOSTransportCircleRef transport,  CFStringRef circleName, CFDataRef circle_data, CFErrorRef *error) {
56    return transport->postCircle(transport, circleName, circle_data, error);
57}
58CF_RETURNS_RETAINED
59CFDictionaryRef SOSTransportCircleHandleRetirementMessages(SOSTransportCircleRef transport, CFMutableDictionaryRef circle_retirement_messages_table, CFErrorRef *error) {
60    return transport->handleRetirementMessages(transport, circle_retirement_messages_table, error);
61}
62
63CF_RETURNS_RETAINED
64CFArrayRef SOSTransportCircleHandleCircleMessages(SOSTransportCircleRef transport, CFMutableDictionaryRef circle_circle_messages_table, CFErrorRef *error) {
65    return transport->handleCircleMessages(transport, circle_circle_messages_table, error);
66}
67
68bool SOSTransportCirclePostRetirement(SOSTransportCircleRef transport,  CFStringRef circleName, CFStringRef peer_id, CFDataRef retirement_data, CFErrorRef *error) {
69    return transport->postRetirement(transport, circleName, peer_id, retirement_data, error);
70}
71
72bool SOSTransportCircleExpireRetirementRecords(SOSTransportCircleRef transport, CFDictionaryRef retirements, CFErrorRef *error){
73    return transport->expireRetirementRecords(transport, retirements, error);
74}
75
76
77