blob: 0c543b948ce612e4dc3fb8f4772bbe01b45e0ace [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// no-include-guard-because-multiply-included
// Definitions corresponding to the declarations in
// message_listener_declaration_macros.h. Primarily this emits a large switch
// block to validate messages and deserialize any driver objects they contain,
// before forwarding to the generic OnMessage() -> DispatchMessage(). See
// message_listener_dispatch_macros.h for the generated code that actually
// routes them to specific virtual methods.
#define IPCZ_MSG_BEGIN_INTERFACE(name) \
bool name##MessageListener::OnMessage(Message& message) { \
return DispatchMessage(message); \
} \
bool name##MessageListener::OnTransportMessage( \
const DriverTransport::RawMessage& raw_message, \
const DriverTransport& transport, IpczDriverHandle envelope) { \
if (raw_message.data.size() >= sizeof(internal::MessageHeaderV0)) { \
const auto& header = \
*reinterpret_cast<const internal::MessageHeaderV0*>( \
raw_message.data.data()); \
switch (header.message_id) {
#define IPCZ_MSG_END_INTERFACE() \
default: \
break; \
} \
} \
Message message; \
message.SetEnvelope( \
DriverObject(*transport.driver_object().driver(), envelope)); \
return message.DeserializeUnknownType(raw_message, transport) && \
OnMessage(message); \
}
#define IPCZ_MSG_ID(x)
#define IPCZ_MSG_BEGIN(name, id_decl) \
case name::kId: { \
name message(Message::kIncoming); \
message.SetEnvelope( \
DriverObject(*transport.driver_object().driver(), envelope)); \
if (!message.Deserialize(raw_message, transport)) { \
return false; \
} \
return OnMessage(message); \
}
#define IPCZ_MSG_END()
#define IPCZ_MSG_BEGIN_VERSION(version)
#define IPCZ_MSG_END_VERSION(version)
#define IPCZ_MSG_PARAM(type, name)
#define IPCZ_MSG_PARAM_ARRAY(type, name)
#define IPCZ_MSG_PARAM_DRIVER_OBJECT(name)
#define IPCZ_MSG_PARAM_DRIVER_OBJECT_ARRAY(name)