예제 #1
0
std::unique_ptr<MessageRecorder::MessageProcessingToken> MessageRecorder::recordOutgoingMessage(Connection& connection, Encoder& encoder)
{
    if (!isEnabled() || !connection.isValid())
        return nullptr;

    WebKitMessageRecord record;
    record.sourceProcessType = static_cast<uint64_t>(connection.client()->localProcessType());
    record.destinationProcessType = static_cast<uint64_t>(connection.client()->remoteProcessType());
    record.destinationID = encoder.destinationID();
    record.isSyncMessage = encoder.isSyncMessage();
    record.shouldDispatchMessageWhenWaitingForSyncReply = encoder.shouldDispatchMessageWhenWaitingForSyncReply();
    record.sourceProcessID = getpid();
    record.destinationProcessID = connection.remoteProcessID();
    record.isIncoming = false;

    record.messageReceiverName = MallocPtr<char>::malloc(sizeof(char) * (encoder.messageReceiverName().size() + 1));
    strncpy(record.messageReceiverName.get(), encoder.messageReceiverName().data(), encoder.messageReceiverName().size());
    record.messageReceiverName.get()[encoder.messageReceiverName().size()] = 0;

    record.messageName = MallocPtr<char>::malloc(sizeof(char) * (encoder.messageName().size() + 1));
    strncpy(record.messageName.get(), encoder.messageName().data(), encoder.messageName().size());
    record.messageName.get()[encoder.messageName().size()] = 0;

    uuid_copy(record.UUID, encoder.UUID());

    return std::make_unique<MessageProcessingToken>(WTFMove(record));
}