]> git.saurik.com Git - apple/security.git/blob - sec/SOSCircle/SecureObjectSync/SOSPeer.h
Security-55471.14.8.tar.gz
[apple/security.git] / sec / SOSCircle / SecureObjectSync / SOSPeer.h
1 /*
2 * Created by Michael Brouwer on 6/22/12.
3 * Copyright 2012 Apple Inc. All Rights Reserved.
4 */
5
6 /*!
7 @header SOSPeer
8 The functions provided in SOSPeer provide an interface to a
9 secure object syncing peer in a circle
10 */
11
12 #ifndef _SOSPEER_H_
13 #define _SOSPEER_H_
14
15 #include <SecureObjectSync/SOSEngine.h>
16 // #include <SecureObjectSync/SOSCoder.h>
17 #include <SecureObjectSync/SOSFullPeerInfo.h>
18 #include <SecureObjectSync/SOSPeerInfo.h>
19
20 __BEGIN_DECLS
21
22 enum {
23 kSOSPeerHasNoManifest = 1,
24 kSOSPeerDigestFailure = 2,
25 };
26
27 enum {
28 kSOSPeerCoderDataReturned = 0,
29 kSOSPeerCoderNegotiating = 1,
30 kSOSPeerCoderNegotiationCompleted = 2,
31 kSOSPeerCoderFailure = 3,
32 kSOSPeerCoderStaleEvent = 4,
33 };
34 typedef uint32_t SOSPeerCoderStatus;
35
36 typedef bool (^SOSPeerSendBlock)(CFDataRef message, CFErrorRef *error);
37
38
39 /* Constructor */
40 SOSPeerRef SOSPeerCreate(SOSFullPeerInfoRef myPeerInfo, SOSPeerInfoRef peerInfo, CFErrorRef *error,
41 SOSPeerSendBlock sendBlock);
42
43 // Permanently forgetting stored information (e.g. keys on keychain)
44 void SOSPeerPurge(SOSPeerRef);
45 void SOSPeerPurgeAllFor(CFStringRef my_id);
46
47 // Dispose of a peer when it's no longer needed.
48 void SOSPeerDispose(SOSPeerRef peer);
49
50 SOSPeerCoderStatus SOSPeerStartSync(SOSPeerRef peer, SOSEngineRef engine, CFErrorRef *error);
51
52 // Handle an incoming message and pass it to the engine.
53 SOSPeerCoderStatus SOSPeerHandleMessage(SOSPeerRef peer, SOSEngineRef engine, CFDataRef message, CFErrorRef *error);
54
55 // Called by engine to send message to our tranport.
56 bool SOSPeerSendMessage(SOSPeerRef peer, CFDataRef message, CFErrorRef *error);
57
58 // Return true if the peer is ready to transmit data.
59 bool SOSPeerCanSendMessage(SOSPeerRef peer);
60
61 CFIndex SOSPeerGetVersion(SOSPeerRef peer);
62
63 CFStringRef SOSPeerGetID(SOSPeerRef peer);
64 bool SOSPeersEqual(SOSPeerRef peerA, SOSPeerRef peerB);
65
66 bool SOSPeerSetManifest(SOSPeerRef peer, SOSManifestRef manifest, CFErrorRef *error);
67
68 SOSManifestRef SOSPeerCopyManifest(SOSPeerRef peer, CFErrorRef *error);
69 CFDataRef SOSPeerCopyManifestDigest(SOSPeerRef peer, CFErrorRef *error);
70
71 /* For testing, doesn't OTR encode and uses static ID for self */
72 SOSPeerRef SOSPeerCreateSimple(CFStringRef peer_id, CFIndex version, CFErrorRef *error,
73 SOSPeerSendBlock sendBlock);
74
75 __END_DECLS
76
77 #endif /* !_SOSPEER_H_ */