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 #ifndef PACKETTYPES_H
#define PACKETTYPES_H #define PACKETTYPES_H
#include <QObject> #include <QObject>
#include <QtCore/quuid.h>
#pragma pack(push, 1) #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 // Various settings used by both client and server
#define PURGE_SECONDS 10 #define PURGE_SECONDS 10
#define TOKEN_RENEWAL 60000 #define TOKEN_RENEWAL 60000
@ -303,7 +293,7 @@ typedef union conninfo_packet {
char unusedh; // 0x29 char unusedh; // 0x29
char macaddress[6]; // 0x2a char macaddress[6]; // 0x2a
}; };
GUID guid; // 0x20 quint8 guid[16]; // 0x20
}; };
char unusedab[16]; // 0x30 char unusedab[16]; // 0x30
char name[32]; // 0x40 char name[32]; // 0x40
@ -348,7 +338,7 @@ typedef union radio_cap_packet {
char unused; // 0x0 char unused; // 0x0
char macaddress[6]; // 0x0 char macaddress[6]; // 0x0
}; };
GUID guid; // 0x0 quint8 guid[16]; // 0x0
}; };
char name[32]; // 0x10 char name[32]; // 0x10
char audio[32]; // 0x30 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(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(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(udp, SIGNAL(setRadioUsage(quint8, quint8, QString, QString)), this, SLOT(radioUsage(quint8, quint8, QString, QString)));
connect(this, SIGNAL(selectedRadio(int)), udp, SLOT(setCurrentRadio(int))); connect(this, SIGNAL(selectedRadio(quint8)), udp, SLOT(setCurrentRadio(quint8)));
emit haveAfGain(rxSetup.localAFgain); emit haveAfGain(rxSetup.localAFgain);
localVolume = rxSetup.localAFgain; localVolume = rxSetup.localAFgain;
} }
@ -4281,11 +4281,11 @@ void rigCommander::radioSelection(QList<radio_cap_packet> radios)
emit requestRadioSelection(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); emit setRadioUsage(radio, busy, user, ip);
} }
void rigCommander::setCurrentRadio(int radio) { void rigCommander::setCurrentRadio(quint8 radio) {
emit selectedRadio(radio); emit selectedRadio(radio);
} }

Wyświetl plik

@ -274,8 +274,8 @@ public slots:
// Housekeeping: // Housekeeping:
void handleStatusUpdate(const networkStatus status); void handleStatusUpdate(const networkStatus status);
void radioSelection(QList<radio_cap_packet> radios); void radioSelection(QList<radio_cap_packet> radios);
void radioUsage(int radio, bool busy, QString name, QString ip); void radioUsage(quint8 radio, quint8 busy, QString name, QString ip);
void setCurrentRadio(int radio); void setCurrentRadio(quint8 radio);
void sendState(); void sendState();
void getDebug(); void getDebug();
@ -369,8 +369,8 @@ signals:
// Housekeeping: // Housekeeping:
void requestRadioSelection(QList<radio_cap_packet> radios); void requestRadioSelection(QList<radio_cap_packet> radios);
void setRadioUsage(int radio, bool busy, QString user, QString ip); void setRadioUsage(quint8 radio, quint8 busy, QString user, QString ip);
void selectedRadio(int radio); void selectedRadio(quint8 radio);
void getMoreDebug(); void getMoreDebug();
void finished(); 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()) { if ((radio > 0)&& !this->isVisible()) {
qInfo() << "setInUse: radio:" << radio <<"busy" << busy << "user" << user << "ip"<<ip; 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, 3, new QTableWidgetItem(user));
ui->table->setItem(radio, 4, new QTableWidgetItem(ip)); 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) { void selectRadio::on_table_cellClicked(int row, int col) {

Wyświetl plik

@ -24,11 +24,11 @@ public:
public slots: public slots:
void on_table_cellClicked(int row, int col); 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(); void on_cancelButton_clicked();
signals: signals:
void selectedRadio(int radio); void selectedRadio(quint8 radio);
private: private:
Ui::selectRadio* ui; 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(); 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 // 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 && if ((radios[f].commoncap == 0x8010 &&
radios[f].macaddress[0] == in->macaddress[0] && radios[f].macaddress[0] == in->macaddress[0] &&
@ -370,12 +370,9 @@ void udpHandler::dataReceived()
radios[f].macaddress[3] == in->macaddress[3] && radios[f].macaddress[3] == in->macaddress[3] &&
radios[f].macaddress[4] == in->macaddress[4] && radios[f].macaddress[4] == in->macaddress[4] &&
radios[f].macaddress[5] == in->macaddress[5]) || radios[f].macaddress[5] == in->macaddress[5]) ||
(radios[f].guid.Data1 == in->guid.Data1 && !memcmp(radios[f].guid,in->guid,sizeof(in->guid)))
radios[f].guid.Data2 == in->guid.Data2 &&
radios[f].guid.Data3 == in->guid.Data3 &&
radios[f].guid.Data4 == in->guid.Data4))
{ {
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) { if (in->type != 0x01 && !streamOpened) {
@ -431,14 +428,6 @@ void udpHandler::dataReceived()
radio.name << " Audio:" << radio.name << " Audio:" <<
radio.audio << "CIV:" << hex << (unsigned char)radio.civ << radio.audio << "CIV:" << hex << (unsigned char)radio.civ <<
"CAPF" << radio.capf; "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); emit requestRadioSelection(radios);
break; 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()) << "Got Radio" << radio;
qInfo(logUdp()) << "Find available local ports"; qInfo(logUdp()) << "Find available local ports";
@ -474,12 +463,12 @@ void udpHandler::setCurrentRadio(int radio) {
emit haveBaudRate(baudrate); emit haveBaudRate(baudrate);
if (radios[radio].commoncap == 0x8010) { if (radios[radio].commoncap == 0x8010) {
memcpy(macaddress, radios[radio].macaddress, 6); memcpy(&macaddress, radios[radio].macaddress, sizeof(macaddress));
useGuid = false; useGuid = false;
} }
else { else {
useGuid = true; useGuid = true;
guid = radios[radio].guid; memcpy(&guid, radios[radio].guid, sizeof(guid));
} }
devName =radios[radio].name; devName =radios[radio].name;
@ -507,10 +496,10 @@ void udpHandler::sendRequestStream()
p.res = 0x03; p.res = 0x03;
if (!useGuid) { if (!useGuid) {
p.commoncap = 0x8010; p.commoncap = 0x8010;
memcpy(p.macaddress, macaddress, 6); memcpy(&p.macaddress, macaddress, 6);
} }
else { else {
p.guid = guid; memcpy(&p.guid, guid, sizeof(p.guid));
} }
p.innerseq = authSeq++; p.innerseq = authSeq++;
p.tokrequest = tokRequest; p.tokrequest = tokRequest;

Wyświetl plik

@ -11,6 +11,7 @@
#include <QByteArray> #include <QByteArray>
#include <QVector> #include <QVector>
#include <QMap> #include <QMap>
#include <QUuid>
// Allow easy endian-ness conversions // Allow easy endian-ness conversions
#include <QtEndian> #include <QtEndian>
@ -237,7 +238,7 @@ public slots:
void changeLatency(quint16 value); void changeLatency(quint16 value);
void setVolume(unsigned char value); void setVolume(unsigned char value);
void init(); void init();
void setCurrentRadio(int radio); void setCurrentRadio(quint8 radio);
signals: signals:
@ -249,7 +250,7 @@ signals:
void haveNetworkStatus(networkStatus); void haveNetworkStatus(networkStatus);
void haveBaudRate(quint32 baudrate); void haveBaudRate(quint32 baudrate);
void requestRadioSelection(QList<radio_cap_packet> radios); 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: private:
void sendAreYouThere(); void sendAreYouThere();
@ -288,7 +289,7 @@ private:
quint32 token; quint32 token;
// These are for stream ident info. // These are for stream ident info.
quint8 macaddress[8]; quint8 macaddress[8];
GUID guid; quint8 guid[16];
bool useGuid = false; bool useGuid = false;
QByteArray usernameEncoded; QByteArray usernameEncoded;
QByteArray passwordEncoded; 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(haveSerialPortError(QString, QString)), this, SLOT(receiveSerialPortError(QString, QString)));
connect(rig, SIGNAL(haveStatusUpdate(networkStatus)), this, SLOT(receiveStatusUpdate(networkStatus))); 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(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(rig, SIGNAL(setRadioUsage(quint8, quint8, QString, QString)), selRad, SLOT(setInUse(quint8, quint8, QString, QString)));
connect(selRad, SIGNAL(selectedRadio(int)), rig, SLOT(setCurrentRadio(int))); connect(selRad, SIGNAL(selectedRadio(quint8)), rig, SLOT(setCurrentRadio(quint8)));
// Rig comm setup: // 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, 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))); 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()); prefs.colorScheme.Light_TuningLine = QColor::fromRgba(settings->value("Light_TuningLine", defaultColors.Light_TuningLine.rgba()).toUInt());
settings->endGroup(); settings->endGroup();
// Radio and Comms: C-IV addr, port to use // Radio and Comms: C-IV addr, port to use
settings->beginGroup("Radio"); settings->beginGroup("Radio");
prefs.radioCIVAddr = (unsigned char)settings->value("RigCIVuInt", defPrefs.radioCIVAddr).toInt(); prefs.radioCIVAddr = (unsigned char)settings->value("RigCIVuInt", defPrefs.radioCIVAddr).toInt();