forked from xiaozhi/xiaozhi-esp32
Add timestamp to MQTT UDP packet
This commit is contained in:
@@ -129,6 +129,7 @@ void MqttProtocol::SendAudio(const AudioStreamPacket& packet) {
|
|||||||
|
|
||||||
std::string nonce(aes_nonce_);
|
std::string nonce(aes_nonce_);
|
||||||
*(uint16_t*)&nonce[2] = htons(packet.payload.size());
|
*(uint16_t*)&nonce[2] = htons(packet.payload.size());
|
||||||
|
*(uint32_t*)&nonce[8] = htonl(packet.timestamp);
|
||||||
*(uint32_t*)&nonce[12] = htonl(++local_sequence_);
|
*(uint32_t*)&nonce[12] = htonl(++local_sequence_);
|
||||||
|
|
||||||
std::string encrypted;
|
std::string encrypted;
|
||||||
@@ -220,6 +221,7 @@ bool MqttProtocol::OpenAudioChannel() {
|
|||||||
ESP_LOGE(TAG, "Invalid audio packet type: %x", data[0]);
|
ESP_LOGE(TAG, "Invalid audio packet type: %x", data[0]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
uint32_t timestamp = ntohl(*(uint32_t*)&data[8]);
|
||||||
uint32_t sequence = ntohl(*(uint32_t*)&data[12]);
|
uint32_t sequence = ntohl(*(uint32_t*)&data[12]);
|
||||||
if (sequence < remote_sequence_) {
|
if (sequence < remote_sequence_) {
|
||||||
ESP_LOGW(TAG, "Received audio packet with old sequence: %lu, expected: %lu", sequence, remote_sequence_);
|
ESP_LOGW(TAG, "Received audio packet with old sequence: %lu, expected: %lu", sequence, remote_sequence_);
|
||||||
@@ -235,6 +237,7 @@ bool MqttProtocol::OpenAudioChannel() {
|
|||||||
auto nonce = (uint8_t*)data.data();
|
auto nonce = (uint8_t*)data.data();
|
||||||
auto encrypted = (uint8_t*)data.data() + aes_nonce_.size();
|
auto encrypted = (uint8_t*)data.data() + aes_nonce_.size();
|
||||||
AudioStreamPacket packet;
|
AudioStreamPacket packet;
|
||||||
|
packet.timestamp = timestamp;
|
||||||
packet.payload.resize(decrypted_size);
|
packet.payload.resize(decrypted_size);
|
||||||
int ret = mbedtls_aes_crypt_ctr(&aes_ctx_, decrypted_size, &nc_off, nonce, stream_block, encrypted, (uint8_t*)packet.payload.data());
|
int ret = mbedtls_aes_crypt_ctr(&aes_ctx_, decrypted_size, &nc_off, nonce, stream_block, encrypted, (uint8_t*)packet.payload.data());
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user