| Index: native_client_sdk/src/libraries/nacl_io/socket/unix_event_emitter.cc
|
| diff --git a/native_client_sdk/src/libraries/nacl_io/socket/unix_event_emitter.cc b/native_client_sdk/src/libraries/nacl_io/socket/unix_event_emitter.cc
|
| index 1c3a523bbf8ba0a537be46332f88b84616bc03c5..b0a7bf3fc91f9258c32a63e8603a18f526db93e4 100644
|
| --- a/native_client_sdk/src/libraries/nacl_io/socket/unix_event_emitter.cc
|
| +++ b/native_client_sdk/src/libraries/nacl_io/socket/unix_event_emitter.cc
|
| @@ -5,8 +5,10 @@
|
| #include "nacl_io/socket/unix_event_emitter.h"
|
|
|
| #include <stdlib.h>
|
| +#include <sys/socket.h>
|
|
|
| #include "nacl_io/fifo_char.h"
|
| +#include "nacl_io/socket/fifo_packet.h"
|
| #include "sdk_util/scoped_ref.h"
|
|
|
| namespace nacl_io {
|
| @@ -19,24 +21,33 @@ typedef sdk_util::ScopedRef<UnixMasterEventEmitter>
|
|
|
| class UnixMasterEventEmitter : public UnixEventEmitter {
|
| public:
|
| - explicit UnixMasterEventEmitter(size_t size)
|
| - : in_fifo_(size),
|
| - out_fifo_(size),
|
| - child_emitter_created_(false),
|
| - child_emitter_(NULL) {
|
| + explicit UnixMasterEventEmitter(size_t size, int type)
|
| + : child_emitter_created_(false), child_emitter_(NULL) {
|
| + if (type == SOCK_STREAM) {
|
| + in_fifo_ = new FIFOChar(size);
|
| + out_fifo_ = new FIFOChar(size);
|
| + } else {
|
| + in_fifo_ = new FIFOPacket(size);
|
| + out_fifo_ = new FIFOPacket(size);
|
| + }
|
| UpdateStatus_Locked();
|
| }
|
|
|
| + ~UnixMasterEventEmitter() {
|
| + delete in_fifo_;
|
| + delete out_fifo_;
|
| + }
|
| +
|
| virtual ScopedUnixEventEmitter GetPeerEmitter();
|
|
|
| protected:
|
| - virtual FIFOChar* in_fifoc() { return &in_fifo_; }
|
| - virtual FIFOChar* out_fifoc() { return &out_fifo_; }
|
| + virtual FIFOInterface* in_fifo() { return in_fifo_; }
|
| + virtual FIFOInterface* out_fifo() { return out_fifo_; }
|
| virtual const sdk_util::SimpleLock& GetFifoLock() { return fifo_lock_; }
|
|
|
| private:
|
| - FIFOChar in_fifo_;
|
| - FIFOChar out_fifo_;
|
| + FIFOInterface* in_fifo_;
|
| + FIFOInterface* out_fifo_;
|
| sdk_util::SimpleLock fifo_lock_;
|
| bool child_emitter_created_;
|
| UnixChildEventEmitter* child_emitter_;
|
| @@ -55,8 +66,8 @@ class UnixChildEventEmitter : public UnixEventEmitter {
|
| protected:
|
| virtual void Destroy() { parent_emitter_->child_emitter_ = NULL; }
|
|
|
| - virtual FIFOChar* in_fifoc() { return parent_emitter_->out_fifoc(); }
|
| - virtual FIFOChar* out_fifoc() { return parent_emitter_->in_fifoc(); }
|
| + virtual FIFOInterface* in_fifo() { return parent_emitter_->out_fifo(); }
|
| + virtual FIFOInterface* out_fifo() { return parent_emitter_->in_fifo(); }
|
| virtual const sdk_util::SimpleLock& GetFifoLock() {
|
| return parent_emitter_->GetFifoLock();
|
| }
|
| @@ -75,7 +86,7 @@ ScopedUnixEventEmitter UnixMasterEventEmitter::GetPeerEmitter() {
|
|
|
| uint32_t UnixEventEmitter::ReadIn_Locked(char* data, uint32_t len) {
|
| AUTO_LOCK(GetFifoLock());
|
| - uint32_t count = in_fifoc()->Read(data, len);
|
| + uint32_t count = in_fifo()->Read(data, len);
|
| ScopedUnixEventEmitter peer = GetPeerEmitter();
|
| if (peer) {
|
| peer->UpdateStatus_Locked();
|
| @@ -86,7 +97,7 @@ uint32_t UnixEventEmitter::ReadIn_Locked(char* data, uint32_t len) {
|
|
|
| uint32_t UnixEventEmitter::WriteOut_Locked(const char* data, uint32_t len) {
|
| AUTO_LOCK(GetFifoLock());
|
| - uint32_t count = out_fifoc()->Write(data, len);
|
| + uint32_t count = out_fifo()->Write(data, len);
|
| ScopedUnixEventEmitter peer = GetPeerEmitter();
|
| if (peer) {
|
| peer->UpdateStatus_Locked();
|
| @@ -95,8 +106,9 @@ uint32_t UnixEventEmitter::WriteOut_Locked(const char* data, uint32_t len) {
|
| return count;
|
| }
|
|
|
| -ScopedUnixEventEmitter UnixEventEmitter::MakeUnixEventEmitter(size_t size) {
|
| - return ScopedUnixEventEmitter(new UnixMasterEventEmitter(size));
|
| +ScopedUnixEventEmitter UnixEventEmitter::MakeUnixEventEmitter(size_t size,
|
| + int type) {
|
| + return ScopedUnixEventEmitter(new UnixMasterEventEmitter(size, type));
|
| }
|
|
|
| } // namespace nacl_io
|
|
|