diff --git a/cluster.cpp b/cluster.cpp index dbae86b..b3cc76f 100644 --- a/cluster.cpp +++ b/cluster.cpp @@ -72,6 +72,7 @@ void dxClusterClient::enableTcp(bool enable) tcpCleanupTimer->setInterval(1000 * 10); // Run once a minute connect(tcpCleanupTimer, SIGNAL(timeout()), this, SLOT(tcpCleanup())); tcpCleanupTimer->start(); + authenticated = false; } } else { @@ -169,46 +170,52 @@ void dxClusterClient::tcpDataReceived() QString data = QString(tcpSocket->readAll()); emit sendOutput(data); - if (data.contains("login:")) { - sendTcpData(QString("%1\n").arg(tcpUserName)); - return; - } - if (data.contains("password:")) { - sendTcpData(QString("%1\n").arg(tcpPassword)); - return; - } - - QRegularExpressionMatchIterator i = tcpRegex.globalMatch(data); - while (i.hasNext()) { - QRegularExpressionMatch match = i.next(); - if (match.hasMatch()) { - spotData* data = new spotData(); - data->spottercall = match.captured(1); - data->frequency = match.captured(2).toDouble() / 1000.0; - data->dxcall = match.captured(3); - data->comment = match.captured(4).trimmed(); - data->timestamp = QDateTime::currentDateTimeUtc(); - -#ifdef USESQL - database db = database(); - db.query(QString("DELETE from spots where dxcall='%1'").arg(data->dxcall)); - QString query = QString("INSERT INTO spots(type,spottercall,frequency,dxcall,comment,timestamp) VALUES('%1','%2',%3,'%4','%5','%6')\n") - .arg("TCP").arg(data->spottercall).arg(data->frequency).arg(data->dxcall).arg(data->comment).arg(data->timestamp.toString("yyyy-MM-dd hh:mm:ss")); - db.query(query); -#else - bool found = false; - QMap::iterator spot = allSpots.find(data->dxcall); - while (spot != allSpots.end() && spot.key() == data->dxcall && spot.value()->frequency == data->frequency) { - found = true; - ++spot; - } - if (found == false) { - allSpots.insert(data->dxcall, data); - } -#endif + if (!authenticated) { + if (data.contains("login:") || data.contains("call:") || data.contains("callsign:")) { + sendTcpData(QString("%1\n").arg(tcpUserName)); + return; + } + if (data.contains("password:")) { + sendTcpData(QString("%1\n").arg(tcpPassword)); + return; + } + if (data.contains("Hello")) { + authenticated = true; } } - updateSpots(); + else { + QRegularExpressionMatchIterator i = tcpRegex.globalMatch(data); + while (i.hasNext()) { + QRegularExpressionMatch match = i.next(); + if (match.hasMatch()) { + spotData* data = new spotData(); + data->spottercall = match.captured(1); + data->frequency = match.captured(2).toDouble() / 1000.0; + data->dxcall = match.captured(3); + data->comment = match.captured(4).trimmed(); + data->timestamp = QDateTime::currentDateTimeUtc(); + +#ifdef USESQL + database db = database(); + db.query(QString("DELETE from spots where dxcall='%1'").arg(data->dxcall)); + QString query = QString("INSERT INTO spots(type,spottercall,frequency,dxcall,comment,timestamp) VALUES('%1','%2',%3,'%4','%5','%6')\n") + .arg("TCP").arg(data->spottercall).arg(data->frequency).arg(data->dxcall).arg(data->comment).arg(data->timestamp.toString("yyyy-MM-dd hh:mm:ss")); + db.query(query); +#else + bool found = false; + QMap::iterator spot = allSpots.find(data->dxcall); + while (spot != allSpots.end() && spot.key() == data->dxcall && spot.value()->frequency == data->frequency) { + found = true; + ++spot; + } + if (found == false) { + allSpots.insert(data->dxcall, data); + } +#endif + } + } + updateSpots(); + } } diff --git a/rigctld.cpp b/rigctld.cpp index aa2d427..29c3761 100644 --- a/rigctld.cpp +++ b/rigctld.cpp @@ -816,6 +816,9 @@ void rigCtlClient::socketReadyRead() else if (command[1] == "BAL") { resp.append(QString("%1").arg((float)rigState->getChar(BAL) / 255.0)); } + else if (command[1] == "KEYSPD") { + resp.append(QString("%1").arg(rigState->getChar(KEYSPD))); + } else { resp.append(QString("%1").arg(value)); } @@ -906,6 +909,10 @@ void rigCtlClient::socketReadyRead() value = command[2].toFloat() * 255; rigState->set(BAL, quint8(value), true); } + else if (command[1] == "KEYSPD") { + value = command[2].toInt(); + rigState->set(IF, quint8(value), true); + } qInfo(logRigCtlD()) << "Setting:" << command[1] << command[2] << value;