// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IPC_MESSAGE_ROUTER_H_
#define IPC_MESSAGE_ROUTER_H_

#include <stdint.h>

#include "base/id_map.h"
#include "base/macros.h"
#include "ipc/ipc_export.h"
#include "ipc/ipc_listener.h"
#include "ipc/ipc_sender.h"

// The MessageRouter handles all incoming messages sent to it by routing them
// to the correct listener.  Routing is based on the Message's routing ID.
// Since routing IDs are typically assigned asynchronously by the browser
// process, the MessageRouter has the notion of pending IDs for listeners that
// have not yet been assigned a routing ID.
//
// When a message arrives, the routing ID is used to index the set of routes to
// find a listener.  If a listener is found, then the message is passed to it.
// Otherwise, the message is ignored if its routing ID is not equal to
// MSG_ROUTING_CONTROL.
//
// The MessageRouter supports the IPC::Sender interface for outgoing messages,
// but does not define a meaningful implementation of it.  The subclass of
// MessageRouter is intended to provide that if appropriate.
//
// The MessageRouter can be used as a concrete class provided its Send method
// is not called and it does not receive any control messages.

namespace IPC {

class IPC_EXPORT MessageRouter : public Listener, public Sender {
 public:
  MessageRouter();
  ~MessageRouter() override;

  // Implemented by subclasses to handle control messages
  virtual bool OnControlMessageReceived(const Message& msg);

  // Listener implementation:
  bool OnMessageReceived(const Message& msg) override;

  // Like OnMessageReceived, except it only handles routed messages.  Returns
  // true if the message was dispatched, or false if there was no listener for
  // that route id.
  virtual bool RouteMessage(const Message& msg);

  // Sender implementation:
  bool Send(Message* msg) override;

  // Called to add a listener for a particular message routing ID.
  // Returns true if succeeded.
  bool AddRoute(int32_t routing_id, Listener* listener);

  // Called to remove a listener for a particular message routing ID.
  void RemoveRoute(int32_t routing_id);

 private:
  // A list of all listeners with assigned routing IDs.
  IDMap<Listener> routes_;

  DISALLOW_COPY_AND_ASSIGN(MessageRouter);
};

}  // namespace IPC

#endif  // IPC_MESSAGE_ROUTER_H_
