Files
soft_bus_edge/src/message_bus/ingress/EdgeTcpUplinkPort.cpp
flower_linux 90ad86b4d0 init
2026-05-13 16:46:07 +08:00

54 lines
2.1 KiB
C++

#include "message_bus/ingress/EdgeTcpUplinkPort.h"
#include <cstring>
#include <QByteArray>
#include <QDebug>
#include "message_bus/ingress/EdgeUplinkWire.h"
namespace softbus::message_bus::ingress
{
EdgeTcpUplinkPort::EdgeTcpUplinkPort(FrameWriter writer)
: m_writer(std::move(writer))
{
}
bool EdgeTcpUplinkPort::push(softbus::core::models::RawBusMessage ctx)
{
if (!m_writer || !ctx.payload.valid()) {
return false;
}
std::uint64_t protocolHeaderRaw = 0;
std::memcpy(&protocolHeaderRaw, &ctx.header, sizeof(protocolHeaderRaw));
const auto* bytes = ctx.payload.bytes();
const QByteArray busPayload(reinterpret_cast<const char*>(bytes), static_cast<int>(ctx.payload.length));
const QByteArray inner = edge_uplink::encodeDataRawBusPayload(ctx.deviceId,
ctx.endpointHash,
static_cast<std::uint16_t>(ctx.protocol),
ctx.logicalAddress,
ctx.routingKey,
protocolHeaderRaw,
ctx.timestampMs,
static_cast<std::int8_t>(ctx.direction),
ctx.traceId.isEmpty() ? QStringLiteral("edge")
: ctx.traceId,
busPayload);
if (inner.isEmpty()) {
return false;
}
const QByteArray outer =
edge_uplink::encodeOuterFrame(edge_uplink::FrameKind::DataRawBus, inner);
return m_writer(outer);
}
void EdgeTcpUplinkPort::reportError(const QString& endpoint, const QString& error)
{
qWarning() << "EdgeTcpUplinkPort" << endpoint << error;
}
} // namespace softbus::message_bus::ingress