1
2#ifndef SOSTransportMessage_h
3#define SOSTransportMessage_h
4
5#include <SecureObjectSync/SOSAccount.h>
6#include <CoreFoundation/CFRuntime.h>
7
8typedef struct __OpaqueSOSTransportMessage *SOSTransportMessageRef;
9
10struct __OpaqueSOSTransportMessage {
11    CFRuntimeBase   _base;
12    SOSEngineRef    engine;
13    SOSAccountRef   account;
14
15    /* Connections from CF land to vtable land */
16    CFStringRef             (*copyDescription)(SOSTransportMessageRef object);
17    void                    (*destroy)(SOSTransportMessageRef object);
18
19    /* send message operations */
20    bool                    (*syncWithPeers)(SOSTransportMessageRef transport, CFDictionaryRef circleToPeerIDs, CFErrorRef *error);
21    bool                    (*cleanupAfterPeerMessages)(SOSTransportMessageRef transport, CFDictionaryRef circleToPeerIDs, CFErrorRef* error);
22    bool                    (*sendMessages)(SOSTransportMessageRef transport, CFDictionaryRef circle_messages, CFErrorRef *error);
23    bool                    (*flushChanges)(SOSTransportMessageRef transport, CFErrorRef *error);
24    CFDictionaryRef         (*handleMessages)(SOSTransportMessageRef transport, CFMutableDictionaryRef circle_peer_messages_table, CFErrorRef *error);
25};
26
27SOSTransportMessageRef SOSTransportMessageCreateForSubclass(size_t size,SOSAccountRef account, CFStringRef circleName, CFErrorRef *error);
28bool SOSTransportMessageHandlePeerMessage(SOSTransportMessageRef transport, CFStringRef peer_id, CFDataRef codedMessage, CFErrorRef *error);
29
30typedef bool (^SOSTransportSendToPeerBlock)(SOSTransportMessageRef transport, CFStringRef peerID, CFDataRef message, SOSEnginePeerMessageSentBlock sentBlock);
31
32SOSEngineRef SOSTransportMessageGetEngine(SOSTransportMessageRef transport);
33
34SOSAccountRef SOSTransportMessageGetAccount(SOSTransportMessageRef transport);
35
36bool SOSTransportMessageCleanupAfterPeerMessages(SOSTransportMessageRef transport, CFDictionaryRef circleToPeerIDs, CFErrorRef* error);
37
38bool SOSTransportMessageSendMessagesIfNeeded(SOSTransportMessageRef transport, CFStringRef circle_id, CFArrayRef handledPeers, CFErrorRef *error);
39
40bool SOSTransportMessageSendMessages(SOSTransportMessageRef transport, CFDictionaryRef circle_messages, CFErrorRef *error);
41bool SOSTransportMessageFlushChanges(SOSTransportMessageRef transport, CFErrorRef *error);
42
43
44SOSTransportMessageRef SOSTransportMessageCreateForSubclass(size_t size,
45                                                            SOSAccountRef account, CFStringRef circleName,
46                                                            CFErrorRef *error);
47CF_RETURNS_RETAINED
48CFDictionaryRef SOSTransportMessageHandleMessages(SOSTransportMessageRef transport, CFMutableDictionaryRef circle_peer_messages_table, CFErrorRef *error);
49
50
51#endif
52