1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef LIBRARIES_NACL_IO_MOUNT_NODE_STREAM_H_ 6 #define LIBRARIES_NACL_IO_MOUNT_NODE_STREAM_H_ 7 8 #include <map> 9 #include <string> 10 11 #include "nacl_io/event_emitter_pipe.h" 12 #include "nacl_io/mount_node.h" 13 #include "sdk_util/atomicops.h" 14 15 namespace nacl_io { 16 17 class MountNodeStream; 18 class MountStream; 19 20 typedef sdk_util::ScopedRef<MountNodeStream> ScopedMountNodeStream; 21 22 enum StreamStateFlags { 23 SSF_CONNECTING = 0x0001, 24 SSF_SENDING = 0x0002, 25 SSF_RECVING = 0x0004, 26 SSF_CLOSING = 0x0008, 27 SSF_LISTENING = 0x000f, 28 SSF_CAN_SEND = 0x0020, 29 SSF_CAN_RECV = 0x0040, 30 SSF_CAN_ACCEPT = 0x0080, 31 SSF_CAN_CONNECT = 0x00f0, 32 SSF_NON_BLOCK = 0x1000, 33 SSF_ERROR = 0x4000, 34 SSF_CLOSED = 0x8000 35 }; 36 37 38 class MountNodeStream : public MountNode { 39 public: 40 explicit MountNodeStream(Mount* mnt); 41 42 virtual Error Init(int open_flags); 43 44 // Attempts to pump input and output 45 virtual void QueueInput(); 46 virtual void QueueOutput(); 47 48 void SetStreamFlags(uint32_t bits); 49 void ClearStreamFlags(uint32_t bits); 50 uint32_t GetStreamFlags(); 51 bool TestStreamFlags(uint32_t bits); 52 53 MountStream* mount_stream(); 54 55 protected: 56 int read_timeout_; 57 int write_timeout_; 58 59 private: 60 sdk_util::Atomic32 stream_state_flags_; 61 }; 62 63 } // namespace nacl_io 64 65 #endif // LIBRARIES_NACL_IO_MOUNT_NODE_STREAM_H_ 66