87 lines
2.4 KiB
C++
87 lines
2.4 KiB
C++
// Copyright 2014 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 MOJO_PUBLIC_CPP_BINDINGS_LIB_MESSAGE_INTERNAL_H_
|
|
#define MOJO_PUBLIC_CPP_BINDINGS_LIB_MESSAGE_INTERNAL_H_
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <string>
|
|
|
|
#include "base/callback.h"
|
|
#include "base/component_export.h"
|
|
#include "base/macros.h"
|
|
#include "mojo/public/cpp/bindings/lib/bindings_internal.h"
|
|
|
|
namespace mojo {
|
|
|
|
class Message;
|
|
|
|
namespace internal {
|
|
|
|
template <typename T>
|
|
class Array_Data;
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
struct MessageHeader : internal::StructHeader {
|
|
// Interface ID for identifying multiple interfaces running on the same
|
|
// message pipe.
|
|
uint32_t interface_id;
|
|
// Message name, which is scoped to the interface that the message belongs to.
|
|
uint32_t name;
|
|
// 0 or either of the enum values defined above.
|
|
uint32_t flags;
|
|
// Unused padding to make the struct size a multiple of 8 bytes.
|
|
uint32_t padding;
|
|
};
|
|
static_assert(sizeof(MessageHeader) == 24, "Bad sizeof(MessageHeader)");
|
|
|
|
struct MessageHeaderV1 : MessageHeader {
|
|
// Only used if either kFlagExpectsResponse or kFlagIsResponse is set in
|
|
// order to match responses with corresponding requests.
|
|
uint64_t request_id;
|
|
};
|
|
static_assert(sizeof(MessageHeaderV1) == 32, "Bad sizeof(MessageHeaderV1)");
|
|
|
|
struct MessageHeaderV2 : MessageHeaderV1 {
|
|
MessageHeaderV2();
|
|
GenericPointer payload;
|
|
Pointer<Array_Data<uint32_t>> payload_interface_ids;
|
|
};
|
|
static_assert(sizeof(MessageHeaderV2) == 48, "Bad sizeof(MessageHeaderV2)");
|
|
|
|
#pragma pack(pop)
|
|
|
|
class COMPONENT_EXPORT(MOJO_CPP_BINDINGS_BASE) MessageDispatchContext {
|
|
public:
|
|
explicit MessageDispatchContext(Message* message);
|
|
~MessageDispatchContext();
|
|
|
|
static MessageDispatchContext* current();
|
|
|
|
base::OnceCallback<void(const std::string&)> GetBadMessageCallback();
|
|
|
|
private:
|
|
MessageDispatchContext* outer_context_;
|
|
Message* message_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(MessageDispatchContext);
|
|
};
|
|
|
|
class COMPONENT_EXPORT(MOJO_CPP_BINDINGS_BASE) SyncMessageResponseSetup {
|
|
public:
|
|
static void SetCurrentSyncResponseMessage(Message* message);
|
|
};
|
|
|
|
COMPONENT_EXPORT(MOJO_CPP_BINDINGS_BASE)
|
|
size_t ComputeSerializedMessageSize(uint32_t flags,
|
|
size_t payload_size,
|
|
size_t payload_interface_id_count);
|
|
|
|
} // namespace internal
|
|
} // namespace mojo
|
|
|
|
#endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_MESSAGE_INTERNAL_H_
|