1// Copyright 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 MOJO_SYSTEM_LOCAL_MESSAGE_PIPE_ENDPOINT_H_
6#define MOJO_SYSTEM_LOCAL_MESSAGE_PIPE_ENDPOINT_H_
7
8#include "base/compiler_specific.h"
9#include "base/macros.h"
10#include "mojo/system/handle_signals_state.h"
11#include "mojo/system/message_in_transit_queue.h"
12#include "mojo/system/message_pipe_endpoint.h"
13#include "mojo/system/system_impl_export.h"
14#include "mojo/system/waiter_list.h"
15
16namespace mojo {
17namespace system {
18
19class MOJO_SYSTEM_IMPL_EXPORT LocalMessagePipeEndpoint
20    : public MessagePipeEndpoint {
21 public:
22  LocalMessagePipeEndpoint();
23  virtual ~LocalMessagePipeEndpoint();
24
25  // |MessagePipeEndpoint| implementation:
26  virtual Type GetType() const OVERRIDE;
27  virtual bool OnPeerClose() OVERRIDE;
28  virtual void EnqueueMessage(scoped_ptr<MessageInTransit> message) OVERRIDE;
29
30  // There's a dispatcher for |LocalMessagePipeEndpoint|s, so we have to
31  // implement/override these:
32  virtual void Close() OVERRIDE;
33  virtual void CancelAllWaiters() OVERRIDE;
34  virtual MojoResult ReadMessage(UserPointer<void> bytes,
35                                 UserPointer<uint32_t> num_bytes,
36                                 DispatcherVector* dispatchers,
37                                 uint32_t* num_dispatchers,
38                                 MojoReadMessageFlags flags) OVERRIDE;
39  virtual HandleSignalsState GetHandleSignalsState() const OVERRIDE;
40  virtual MojoResult AddWaiter(Waiter* waiter,
41                               MojoHandleSignals signals,
42                               uint32_t context,
43                               HandleSignalsState* signals_state) OVERRIDE;
44  virtual void RemoveWaiter(Waiter* waiter,
45                            HandleSignalsState* signals_state) OVERRIDE;
46
47  // This is only to be used by |MessagePipe|:
48  MessageInTransitQueue* message_queue() { return &message_queue_; }
49
50 private:
51  bool is_open_;
52  bool is_peer_open_;
53
54  // Queue of incoming messages.
55  MessageInTransitQueue message_queue_;
56  WaiterList waiter_list_;
57
58  DISALLOW_COPY_AND_ASSIGN(LocalMessagePipeEndpoint);
59};
60
61}  // namespace system
62}  // namespace mojo
63
64#endif  // MOJO_SYSTEM_LOCAL_MESSAGE_PIPE_ENDPOINT_H_
65