Home | History | Annotate | Download | only in nacl_io
      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