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