xref: /aosp_15_r20/external/libchrome/ipc/message_router.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker 
5*635a8641SAndroid Build Coastguard Worker #include "ipc/message_router.h"
6*635a8641SAndroid Build Coastguard Worker 
7*635a8641SAndroid Build Coastguard Worker #include "ipc/ipc_message.h"
8*635a8641SAndroid Build Coastguard Worker 
9*635a8641SAndroid Build Coastguard Worker namespace IPC {
10*635a8641SAndroid Build Coastguard Worker 
11*635a8641SAndroid Build Coastguard Worker MessageRouter::MessageRouter() = default;
12*635a8641SAndroid Build Coastguard Worker 
13*635a8641SAndroid Build Coastguard Worker MessageRouter::~MessageRouter() = default;
14*635a8641SAndroid Build Coastguard Worker 
OnControlMessageReceived(const IPC::Message & msg)15*635a8641SAndroid Build Coastguard Worker bool MessageRouter::OnControlMessageReceived(const IPC::Message& msg) {
16*635a8641SAndroid Build Coastguard Worker   NOTREACHED()
17*635a8641SAndroid Build Coastguard Worker       << "should override in subclass if you care about control messages";
18*635a8641SAndroid Build Coastguard Worker   return false;
19*635a8641SAndroid Build Coastguard Worker }
20*635a8641SAndroid Build Coastguard Worker 
Send(IPC::Message * msg)21*635a8641SAndroid Build Coastguard Worker bool MessageRouter::Send(IPC::Message* msg) {
22*635a8641SAndroid Build Coastguard Worker   NOTREACHED()
23*635a8641SAndroid Build Coastguard Worker       << "should override in subclass if you care about sending messages";
24*635a8641SAndroid Build Coastguard Worker   return false;
25*635a8641SAndroid Build Coastguard Worker }
26*635a8641SAndroid Build Coastguard Worker 
AddRoute(int32_t routing_id,IPC::Listener * listener)27*635a8641SAndroid Build Coastguard Worker bool MessageRouter::AddRoute(int32_t routing_id, IPC::Listener* listener) {
28*635a8641SAndroid Build Coastguard Worker   if (routes_.Lookup(routing_id)) {
29*635a8641SAndroid Build Coastguard Worker     DLOG(ERROR) << "duplicate routing ID";
30*635a8641SAndroid Build Coastguard Worker     return false;
31*635a8641SAndroid Build Coastguard Worker   }
32*635a8641SAndroid Build Coastguard Worker   routes_.AddWithID(listener, routing_id);
33*635a8641SAndroid Build Coastguard Worker   return true;
34*635a8641SAndroid Build Coastguard Worker }
35*635a8641SAndroid Build Coastguard Worker 
RemoveRoute(int32_t routing_id)36*635a8641SAndroid Build Coastguard Worker void MessageRouter::RemoveRoute(int32_t routing_id) {
37*635a8641SAndroid Build Coastguard Worker   routes_.Remove(routing_id);
38*635a8641SAndroid Build Coastguard Worker }
39*635a8641SAndroid Build Coastguard Worker 
GetRoute(int32_t routing_id)40*635a8641SAndroid Build Coastguard Worker Listener* MessageRouter::GetRoute(int32_t routing_id) {
41*635a8641SAndroid Build Coastguard Worker   return routes_.Lookup(routing_id);
42*635a8641SAndroid Build Coastguard Worker }
43*635a8641SAndroid Build Coastguard Worker 
OnMessageReceived(const IPC::Message & msg)44*635a8641SAndroid Build Coastguard Worker bool MessageRouter::OnMessageReceived(const IPC::Message& msg) {
45*635a8641SAndroid Build Coastguard Worker   if (msg.routing_id() == MSG_ROUTING_CONTROL)
46*635a8641SAndroid Build Coastguard Worker     return OnControlMessageReceived(msg);
47*635a8641SAndroid Build Coastguard Worker 
48*635a8641SAndroid Build Coastguard Worker   return RouteMessage(msg);
49*635a8641SAndroid Build Coastguard Worker }
50*635a8641SAndroid Build Coastguard Worker 
RouteMessage(const IPC::Message & msg)51*635a8641SAndroid Build Coastguard Worker bool MessageRouter::RouteMessage(const IPC::Message& msg) {
52*635a8641SAndroid Build Coastguard Worker   IPC::Listener* listener = routes_.Lookup(msg.routing_id());
53*635a8641SAndroid Build Coastguard Worker   if (!listener)
54*635a8641SAndroid Build Coastguard Worker     return false;
55*635a8641SAndroid Build Coastguard Worker 
56*635a8641SAndroid Build Coastguard Worker   return listener->OnMessageReceived(msg);
57*635a8641SAndroid Build Coastguard Worker }
58*635a8641SAndroid Build Coastguard Worker 
59*635a8641SAndroid Build Coastguard Worker }  // namespace IPC
60