diff --git a/packettypes.h b/packettypes.h index 703d81d..fb7637e 100644 --- a/packettypes.h +++ b/packettypes.h @@ -18,7 +18,7 @@ // Variable size packets + payload #define CIV_SIZE 0x15 -#define TXAUDIO_SIZE 0x15 +#define TXAUDIO_SIZE 0x18 #define DATA_SIZE 0x15 // 0x10 length control packet (connect/disconnect/idle.) @@ -56,7 +56,25 @@ typedef union ping_packet { }; char packet[PING_SIZE]; -} *ping_packet_t, *data_packet_t, data_packet; +} *ping_packet_t, * data_packet_t, data_packet; + + +// 0x18 length txaudio packet +typedef union txaudio_packet { + struct + { + quint32 len; // 0x00 + quint16 type; // 0x04 + quint16 seq; // 0x06 + quint32 sentid; // 0x08 + quint32 rcvdid; // 0x0c + quint16 ident; // 0x10 + quint16 sendseq; // 0x12 + quint16 unused; // 0x14 + quint16 datalen; // 0x16 + }; + char packet[TXAUDIO_SIZE]; +} *txaudio_packet_t; // 0x18 length txaudio packet diff --git a/udphandler.cpp b/udphandler.cpp index f9015cd..c433548 100644 --- a/udphandler.cpp +++ b/udphandler.cpp @@ -648,23 +648,31 @@ void udpAudio::sendTxAudio() if (txaudio->chunkAvailable) { QByteArray audio; txaudio->getNextAudioChunk(audio); - int counter = 0; - while (counter < audio.length()) { - QByteArray partial = audio.mid(counter, 1364); - ping_packet p; + int counter = 1; + int len = 0; + while (len < audio.length()) { + QByteArray partial = audio.mid(len, 1364); + txaudio_packet p; memset(p.packet, 0x0, sizeof(p)); // We can't be sure it is initialized with 0x00! - p.len = sizeof(p); + p.len = sizeof(p)+partial.length(); p.sentid = myId; p.rcvdid = remoteId; - p.reply = (char)0x80; - p.datalen = partial.length(); - p.sendseq = qToBigEndian(sendAudioSeq); // THIS IS BIG ENDIAN! + if (counter % 2 == 0) + { + p.ident = 0x0680; + } + else { + p.ident = 0x0681; + } + p.datalen = (quint16)qToBigEndian((quint16)partial.length()); + p.sendseq = (quint16)qToBigEndian(sendAudioSeq); // THIS IS BIG ENDIAN! QByteArray tx = QByteArray::fromRawData((const char*)p.packet, sizeof(p)); tx.append(partial); - counter = counter + partial.length(); + len = len + partial.length(); //qDebug() << "Sending audio packet length: " << tx.length(); sendTrackedPacket(tx); sendAudioSeq++; + counter++; } } }