#ifndef SOSTransportMessage_h
#define SOSTransportMessage_h
-#include <Security/SecureObjectSync/SOSAccount.h>
-#include <Security/SecureObjectSync/SOSEnginePriv.h>
-#include <CoreFoundation/CFRuntime.h>
-#include <CoreFoundation/CoreFoundation.h>
-
-typedef struct __OpaqueSOSTransportMessage *SOSTransportMessageRef;
-
-
-struct __OpaqueSOSTransportMessage {
- CFRuntimeBase _base;
- SOSEngineRef engine;
- SOSAccountRef account;
- CFStringRef circleName;
- /* Connections from CF land to vtable land */
- CFStringRef (*copyDescription)(SOSTransportMessageRef object);
- void (*destroy)(SOSTransportMessageRef object);
- CFStringRef (*getName)(SOSTransportMessageRef object);
-
- /* send message operations */
- bool (*syncWithPeers)(SOSTransportMessageRef transport, CFSetRef peers, CFErrorRef *error);
- bool (*cleanupAfterPeerMessages)(SOSTransportMessageRef transport, CFDictionaryRef circleToPeerIDs, CFErrorRef* error);
- bool (*sendMessages)(SOSTransportMessageRef transport, CFDictionaryRef circle_messages, CFErrorRef *error);
- bool (*flushChanges)(SOSTransportMessageRef transport, CFErrorRef *error);
- CFIndex (*getTransportType)(SOSTransportMessageRef transport, CFErrorRef *error);
- CFDictionaryRef (*handleMessages)(SOSTransportMessageRef transport, CFMutableDictionaryRef circle_peer_messages_table, CFErrorRef *error);
-
-};
-
-CFStringRef SOSTransportMessageGetCircleName(SOSTransportMessageRef transport);
+#import <Foundation/Foundation.h>
+#import <Security/SecureObjectSync/SOSAccountPriv.h>
-SOSTransportMessageRef SOSTransportMessageCreateForSubclass(size_t size,SOSAccountRef account, CFStringRef circleName, CFErrorRef *error);
-bool SOSTransportMessageHandlePeerMessage(SOSTransportMessageRef transport, CFStringRef peer_id, CFDataRef codedMessage, CFErrorRef *error);
+@interface SOSMessage : NSObject
+{
+ CFTypeRef engine;
+ SOSAccount *account;
+ NSString *circleName;
+}
+@property (atomic) CFTypeRef engine;
+@property (atomic) SOSAccount* account;
+@property (strong, atomic) NSString *circleName;
-typedef bool (^SOSTransportSendToPeerBlock)(SOSTransportMessageRef transport, CFStringRef peerID, CFDataRef message, SOSEnginePeerMessageSentBlock sentBlock);
+-(id) initWithAccount:(SOSAccount*)acct andName:(NSString*)name;
-SOSEngineRef SOSTransportMessageGetEngine(SOSTransportMessageRef transport);
+-(CFIndex) SOSTransportMessageGetTransportType;
+-(CFStringRef) SOSTransportMessageGetCircleName;
+-(CFTypeRef) SOSTransportMessageGetEngine;
+-(SOSAccount*) SOSTransportMessageGetAccount;
-SOSAccountRef SOSTransportMessageGetAccount(SOSTransportMessageRef transport);
-
-bool SOSTransportMessageCleanupAfterPeerMessages(SOSTransportMessageRef transport, CFDictionaryRef peers, CFErrorRef* error);
-
-bool SOSTransportMessageSendMessage(SOSTransportMessageRef transport, CFStringRef peerID, CFDataRef message, CFErrorRef *error);
-bool SOSTransportMessageSendMessages(SOSTransportMessageRef transport, CFDictionaryRef peer_messages, CFErrorRef *error);
-bool SOSTransportMessageFlushChanges(SOSTransportMessageRef transport, CFErrorRef *error);
+-(bool) SOSTransportMessageCleanupAfterPeerMessages:(SOSMessage*) transport peers:(CFDictionaryRef) peers err:(CFErrorRef*) error;
-bool SOSTransportMessageSyncWithPeers(SOSTransportMessageRef transport, CFSetRef peers, CFErrorRef *error);
+-(bool) SOSTransportMessageSendMessage:(SOSMessage*) transport id:(CFStringRef) peerID messageToSend:(CFDataRef) message err:(CFErrorRef *)error;
+-(bool) SOSTransportMessageSendMessages:(SOSMessage*) transport pm:(CFDictionaryRef) peer_messages err:(CFErrorRef *)error;
+-(bool) SOSTransportMessageFlushChanges:(SOSMessage*) transport err:(CFErrorRef *)error;
-SOSTransportMessageRef SOSTransportMessageCreateForSubclass(size_t size,
- SOSAccountRef account, CFStringRef circleName,
- CFErrorRef *error);
-CF_RETURNS_RETAINED
-CFDictionaryRef SOSTransportMessageHandleMessages(SOSTransportMessageRef transport, CFMutableDictionaryRef circle_peer_messages_table, CFErrorRef *error);
+-(bool) SOSTransportMessageSyncWithPeers:(SOSMessage*) transport p:(CFSetRef) peers err:(CFErrorRef *)error;
-CFTypeID SOSTransportMessageGetTypeID(void);
+-(CFDictionaryRef)CF_RETURNS_RETAINED SOSTransportMessageHandlePeerMessageReturnsHandledCopy:(SOSMessage*) transport peerMessages:(CFMutableDictionaryRef) circle_peer_messages_table err:(CFErrorRef *)error;
-CFIndex SOSTransportMessageGetTransportType(SOSTransportMessageRef transport, CFErrorRef *error);
+-(bool) SOSTransportMessageHandlePeerMessage:(SOSMessage*) transport id:(CFStringRef) peer_id cm:(CFDataRef) codedMessage err:(CFErrorRef *)error;
+-(bool) SOSTransportMessageSendMessageIfNeeded:(SOSMessage*) transport id:(CFStringRef) circle_id pID:(CFStringRef) peer_id err:(CFErrorRef *)error;
+//for testing
+bool SOSEngineHandleCodedMessage(SOSAccount* account, SOSEngineRef engine, CFStringRef peerID, CFDataRef codedMessage, CFErrorRef*error);
+
+@end
#endif