in source/mqtt/MqttClient.cpp [648:696]
uint16_t MqttConnection::Publish(
const char *topic,
QOS qos,
bool retain,
const ByteBuf &payload,
OnOperationCompleteHandler &&onOpComplete) noexcept
{
auto opCompleteCallbackData = Crt::New<OpCompleteCallbackData>(m_owningClient->allocator);
if (!opCompleteCallbackData)
{
return 0;
}
size_t topicLen = strlen(topic) + 1;
char *topicCpy =
reinterpret_cast<char *>(aws_mem_calloc(m_owningClient->allocator, topicLen, sizeof(char)));
if (!topicCpy)
{
Crt::Delete(opCompleteCallbackData, m_owningClient->allocator);
}
memcpy(topicCpy, topic, topicLen);
opCompleteCallbackData->connection = this;
opCompleteCallbackData->allocator = m_owningClient->allocator;
opCompleteCallbackData->onOperationComplete = std::move(onOpComplete);
opCompleteCallbackData->topic = topicCpy;
ByteCursor topicCur = aws_byte_cursor_from_array(topicCpy, topicLen - 1);
ByteCursor payloadCur = aws_byte_cursor_from_buf(&payload);
uint16_t packetId = aws_mqtt_client_connection_publish(
m_underlyingConnection,
&topicCur,
qos,
retain,
&payloadCur,
s_onOpComplete,
opCompleteCallbackData);
if (!packetId)
{
aws_mem_release(m_owningClient->allocator, reinterpret_cast<void *>(topicCpy));
Crt::Delete(opCompleteCallbackData, m_owningClient->allocator);
}
return packetId;
}