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 Workerbool 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 Workerbool 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 Workerbool 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 Workervoid 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 WorkerListener* 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 Workerbool 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 Workerbool 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