X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/80e2389990082500d76eb566d4946be3e786c3ef..d8f41ccd20de16f8ebe2ccc84d47bf1cb2b26bbb:/Security/libsecurityd/lib/SharedMemoryClient.h diff --git a/Security/libsecurityd/lib/SharedMemoryClient.h b/Security/libsecurityd/lib/SharedMemoryClient.h new file mode 100644 index 00000000..b24b73bf --- /dev/null +++ b/Security/libsecurityd/lib/SharedMemoryClient.h @@ -0,0 +1,46 @@ +#ifndef __SHAREDMEMORYCLIENT__ +#define __SHAREDMEMORYCLIENT__ + + + +#include +#include +#include +#include + +namespace Security +{ + +enum UnavailableReason {kURNone, kURMessageDropped, kURMessagePending, kURNoMessage, kURBufferCorrupt}; + +class SharedMemoryClient +{ +protected: + std::string mSegmentName; + size_t mSegmentSize; + Mutex mMutex; + + u_int8_t* mSegment; + u_int8_t* mDataArea; + u_int8_t* mDataPtr; + u_int8_t* mDataMax; + + SegmentOffsetType GetProducerCount (); + + void ReadData (void* buffer, SegmentOffsetType bytesToRead); + SegmentOffsetType ReadOffset (); + +public: + SharedMemoryClient (const char* segmentName, SegmentOffsetType segmentSize); + virtual ~SharedMemoryClient (); + + bool ReadMessage (void* message, SegmentOffsetType &length, UnavailableReason &ur); + + const char* GetSegmentName (); + size_t GetSegmentSize (); +}; + +}; + + +#endif