Treat GUID as 16 bytes rather than trying to be clever!

merge-requests/9/merge
Phil Taylor 2022-01-23 17:54:40 +00:00
rodzic 87a36426cf
commit 5ae3549ba5
8 zmienionych plików z 36 dodań i 48 usunięć

Wyświetl plik

@ -1,19 +1,9 @@
#ifndef PACKETTYPES_H
#define PACKETTYPES_H
#include <QObject>
#include <QtCore/quuid.h>
#pragma pack(push, 1)
#ifndef Q_OS_WIN
typedef struct _GUID {
quint32 Data1;
quint16 Data2;
quint16 Data3;
quint8 Data4[8];
} GUID;
#endif
// Various settings used by both client and server
#define PURGE_SECONDS 10
#define TOKEN_RENEWAL 60000
@ -303,7 +293,7 @@ typedef union conninfo_packet {
char unusedh; // 0x29
char macaddress[6]; // 0x2a
};
GUID guid; // 0x20
quint8 guid[16]; // 0x20
};
char unusedab[16]; // 0x30
char name[32]; // 0x40
@ -348,7 +338,7 @@ typedef union radio_cap_packet {
char unused; // 0x0
char macaddress[6]; // 0x0
};
GUID guid; // 0x0
quint8 guid[16]; // 0x0
};
char name[32]; // 0x10
char audio[32]; // 0x30

Wyświetl plik

@ -139,8 +139,8 @@ void rigCommander::commSetup(unsigned char rigCivAddr, udpPreferences prefs, aud
connect(this, SIGNAL(discoveredRigID(rigCapabilities)), ptty, SLOT(receiveFoundRigID(rigCapabilities)));
connect(udp, SIGNAL(requestRadioSelection(QList<radio_cap_packet>)), this, SLOT(radioSelection(QList<radio_cap_packet>)));
connect(udp, SIGNAL(setRadioUsage(int, bool, QString, QString)), this, SLOT(radioUsage(int, bool, QString, QString)));
connect(this, SIGNAL(selectedRadio(int)), udp, SLOT(setCurrentRadio(int)));
connect(udp, SIGNAL(setRadioUsage(quint8, quint8, QString, QString)), this, SLOT(radioUsage(quint8, quint8, QString, QString)));
connect(this, SIGNAL(selectedRadio(quint8)), udp, SLOT(setCurrentRadio(quint8)));
emit haveAfGain(rxSetup.localAFgain);
localVolume = rxSetup.localAFgain;
}
@ -4281,11 +4281,11 @@ void rigCommander::radioSelection(QList<radio_cap_packet> radios)
emit requestRadioSelection(radios);
}
void rigCommander::radioUsage(int radio, bool busy, QString user, QString ip) {
void rigCommander::radioUsage(quint8 radio, quint8 busy, QString user, QString ip) {
emit setRadioUsage(radio, busy, user, ip);
}
void rigCommander::setCurrentRadio(int radio) {
void rigCommander::setCurrentRadio(quint8 radio) {
emit selectedRadio(radio);
}

Wyświetl plik

@ -274,8 +274,8 @@ public slots:
// Housekeeping:
void handleStatusUpdate(const networkStatus status);
void radioSelection(QList<radio_cap_packet> radios);
void radioUsage(int radio, bool busy, QString name, QString ip);
void setCurrentRadio(int radio);
void radioUsage(quint8 radio, quint8 busy, QString name, QString ip);
void setCurrentRadio(quint8 radio);
void sendState();
void getDebug();
@ -369,8 +369,8 @@ signals:
// Housekeeping:
void requestRadioSelection(QList<radio_cap_packet> radios);
void setRadioUsage(int radio, bool busy, QString user, QString ip);
void selectedRadio(int radio);
void setRadioUsage(quint8 radio, quint8 busy, QString user, QString ip);
void selectedRadio(quint8 radio);
void getMoreDebug();
void finished();

Wyświetl plik

@ -33,7 +33,7 @@ void selectRadio::populate(QList<radio_cap_packet> radios)
}
}
void selectRadio::setInUse(int radio, bool busy, QString user, QString ip)
void selectRadio::setInUse(quint8 radio, quint8 busy, QString user, QString ip)
{
if ((radio > 0)&& !this->isVisible()) {
qInfo() << "setInUse: radio:" << radio <<"busy" << busy << "user" << user << "ip"<<ip;
@ -41,6 +41,15 @@ void selectRadio::setInUse(int radio, bool busy, QString user, QString ip)
}
ui->table->setItem(radio, 3, new QTableWidgetItem(user));
ui->table->setItem(radio, 4, new QTableWidgetItem(ip));
for (int f = 0; f < 5; f++) {
if (busy == 1)
ui->table->item(radio, f)->setBackground(Qt::darkGreen);
else if (busy == 2)
ui->table->item(radio, f)->setBackground(Qt::red);
else
ui->table->item(radio, f)->setBackground(Qt::black);
}
}
void selectRadio::on_table_cellClicked(int row, int col) {

Wyświetl plik

@ -24,11 +24,11 @@ public:
public slots:
void on_table_cellClicked(int row, int col);
void setInUse(int radio, bool busy, QString user, QString ip);
void setInUse(quint8 radio, quint8 busy, QString user, QString ip);
void on_cancelButton_clicked();
signals:
void selectedRadio(int radio);
void selectedRadio(quint8 radio);
private:
Ui::selectRadio* ui;

Wyświetl plik

@ -361,7 +361,7 @@ void udpHandler::dataReceived()
qInfo(logUdp()) << "Got Connection status for:" << in->name << "Busy:" << in->busy << "Computer" << in->computer << "IP" << ip.toString();
// First we need to find this radio in our capabilities packet, there aren't many so just step through
for (int f = 0; f < radios.length(); f++)
for (unsigned char f = 0; f < radios.length(); f++)
{
if ((radios[f].commoncap == 0x8010 &&
radios[f].macaddress[0] == in->macaddress[0] &&
@ -370,12 +370,9 @@ void udpHandler::dataReceived()
radios[f].macaddress[3] == in->macaddress[3] &&
radios[f].macaddress[4] == in->macaddress[4] &&
radios[f].macaddress[5] == in->macaddress[5]) ||
(radios[f].guid.Data1 == in->guid.Data1 &&
radios[f].guid.Data2 == in->guid.Data2 &&
radios[f].guid.Data3 == in->guid.Data3 &&
radios[f].guid.Data4 == in->guid.Data4))
!memcmp(radios[f].guid,in->guid,sizeof(in->guid)))
{
emit setRadioUsage(f, (bool)in->busy, QString(in->computer), ip.toString());
emit setRadioUsage(f, in->busy, QString(in->computer), ip.toString());
}
}
if (in->type != 0x01 && !streamOpened) {
@ -431,14 +428,6 @@ void udpHandler::dataReceived()
radio.name << " Audio:" <<
radio.audio << "CIV:" << hex << (unsigned char)radio.civ <<
"CAPF" << radio.capf;
if (radio.txsample < 2)
{
// TX not supported
qInfo(logUdp()) << this->metaObject()->className() << "TX audio is disabled";
}
if (radio.commoncap != 0x8010) {
useGuid = true;
}
}
emit requestRadioSelection(radios);
break;
@ -453,7 +442,7 @@ void udpHandler::dataReceived()
}
void udpHandler::setCurrentRadio(int radio) {
void udpHandler::setCurrentRadio(quint8 radio) {
qInfo(logUdp()) << "Got Radio" << radio;
qInfo(logUdp()) << "Find available local ports";
@ -474,12 +463,12 @@ void udpHandler::setCurrentRadio(int radio) {
emit haveBaudRate(baudrate);
if (radios[radio].commoncap == 0x8010) {
memcpy(macaddress, radios[radio].macaddress, 6);
memcpy(&macaddress, radios[radio].macaddress, sizeof(macaddress));
useGuid = false;
}
else {
useGuid = true;
guid = radios[radio].guid;
memcpy(&guid, radios[radio].guid, sizeof(guid));
}
devName =radios[radio].name;
@ -507,10 +496,10 @@ void udpHandler::sendRequestStream()
p.res = 0x03;
if (!useGuid) {
p.commoncap = 0x8010;
memcpy(p.macaddress, macaddress, 6);
memcpy(&p.macaddress, macaddress, 6);
}
else {
p.guid = guid;
memcpy(&p.guid, guid, sizeof(p.guid));
}
p.innerseq = authSeq++;
p.tokrequest = tokRequest;

Wyświetl plik

@ -11,6 +11,7 @@
#include <QByteArray>
#include <QVector>
#include <QMap>
#include <QUuid>
// Allow easy endian-ness conversions
#include <QtEndian>
@ -237,7 +238,7 @@ public slots:
void changeLatency(quint16 value);
void setVolume(unsigned char value);
void init();
void setCurrentRadio(int radio);
void setCurrentRadio(quint8 radio);
signals:
@ -249,7 +250,7 @@ signals:
void haveNetworkStatus(networkStatus);
void haveBaudRate(quint32 baudrate);
void requestRadioSelection(QList<radio_cap_packet> radios);
void setRadioUsage(int, bool busy, QString name, QString mac);
void setRadioUsage(quint8, quint8 busy, QString name, QString mac);
private:
void sendAreYouThere();
@ -288,7 +289,7 @@ private:
quint32 token;
// These are for stream ident info.
quint8 macaddress[8];
GUID guid;
quint8 guid[16];
bool useGuid = false;
QByteArray usernameEncoded;
QByteArray passwordEncoded;

Wyświetl plik

@ -423,8 +423,8 @@ void wfmain::makeRig()
connect(rig, SIGNAL(haveSerialPortError(QString, QString)), this, SLOT(receiveSerialPortError(QString, QString)));
connect(rig, SIGNAL(haveStatusUpdate(networkStatus)), this, SLOT(receiveStatusUpdate(networkStatus)));
connect(rig, SIGNAL(requestRadioSelection(QList<radio_cap_packet>)), this, SLOT(radioSelection(QList<radio_cap_packet>)));
connect(rig, SIGNAL(setRadioUsage(int, bool, QString, QString)), selRad, SLOT(setInUse(int, bool, QString, QString)));
connect(selRad, SIGNAL(selectedRadio(int)), rig, SLOT(setCurrentRadio(int)));
connect(rig, SIGNAL(setRadioUsage(quint8, quint8, QString, QString)), selRad, SLOT(setInUse(quint8, quint8, QString, QString)));
connect(selRad, SIGNAL(selectedRadio(quint8)), rig, SLOT(setCurrentRadio(quint8)));
// Rig comm setup:
connect(this, SIGNAL(sendCommSetup(unsigned char, udpPreferences, audioSetup, audioSetup, QString)), rig, SLOT(commSetup(unsigned char, udpPreferences, audioSetup, audioSetup, QString)));
connect(this, SIGNAL(sendCommSetup(unsigned char, QString, quint32,QString)), rig, SLOT(commSetup(unsigned char, QString, quint32,QString)));
@ -1422,7 +1422,6 @@ void wfmain::loadSettings()
prefs.colorScheme.Light_TuningLine = QColor::fromRgba(settings->value("Light_TuningLine", defaultColors.Light_TuningLine.rgba()).toUInt());
settings->endGroup();
// Radio and Comms: C-IV addr, port to use
settings->beginGroup("Radio");
prefs.radioCIVAddr = (unsigned char)settings->value("RigCIVuInt", defPrefs.radioCIVAddr).toInt();