Added ability to relay MSG and MSG TO commands
This commit is contained in:
parent
ccd10aea89
commit
368f14cc07
@ -1351,9 +1351,13 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
CallDetail cd = {};
|
if(Varicode::isValidCallsign(callsign, nullptr)){
|
||||||
cd.call = callsign;
|
CallDetail cd = {};
|
||||||
m_callActivity[callsign] = cd;
|
cd.call = callsign;
|
||||||
|
m_callActivity[callsign] = cd;
|
||||||
|
} else {
|
||||||
|
MessageBox::critical_message (this, QString("%1 is not a valid callsign or group").arg(callsign));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
displayActivity(true);
|
displayActivity(true);
|
||||||
@ -9731,8 +9735,11 @@ void MainWindow::processCommandActivity() {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// and mark the offset as a directed offset so future free text is displayed
|
|
||||||
// markOffsetDirected(ad.freq, isAllCall);
|
// HACK: if this is an autoreply cmd and relay path is populated and cmd is not MSG or MSG TO:, then swap out the relay path
|
||||||
|
if(Varicode::isCommandAutoreply(d.cmd) && !d.relayPath.isEmpty() && !d.cmd.startsWith(" MSG")){
|
||||||
|
d.from = d.relayPath;
|
||||||
|
}
|
||||||
|
|
||||||
// construct a reply, if needed
|
// construct a reply, if needed
|
||||||
QString reply;
|
QString reply;
|
||||||
@ -9852,7 +9859,7 @@ void MainWindow::processCommandActivity() {
|
|||||||
reply = QString("%1 ACK").arg(d.relayPath);
|
reply = QString("%1 ACK").arg(d.relayPath);
|
||||||
|
|
||||||
// check to see if the relay text contains a command that should be replied to instead of an ack.
|
// check to see if the relay text contains a command that should be replied to instead of an ack.
|
||||||
auto relayedCmds = d.text.split(" ");
|
QStringList relayedCmds = d.text.split(" ");
|
||||||
if(!relayedCmds.isEmpty()){
|
if(!relayedCmds.isEmpty()){
|
||||||
auto first = relayedCmds.first();
|
auto first = relayedCmds.first();
|
||||||
|
|
||||||
@ -9860,6 +9867,21 @@ void MainWindow::processCommandActivity() {
|
|||||||
if(!valid){
|
if(!valid){
|
||||||
first = " " + first;
|
first = " " + first;
|
||||||
valid = Varicode::isCommandAllowed(first);
|
valid = Varicode::isCommandAllowed(first);
|
||||||
|
if(valid){
|
||||||
|
relayedCmds.removeFirst();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// HACK: "MSG TO:" should be supported but contains a space :(
|
||||||
|
if(!relayedCmds.isEmpty() && first == " MSG"){
|
||||||
|
auto second = relayedCmds.first();
|
||||||
|
if(second == "TO:"){
|
||||||
|
first = " MSG TO:";
|
||||||
|
relayedCmds.removeFirst();
|
||||||
|
} else if(second.startsWith("TO:")){
|
||||||
|
first = " MSG TO:";
|
||||||
|
relayedCmds.replace(0, second.mid(3));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(valid && Varicode::isCommandAutoreply(first)){
|
if(valid && Varicode::isCommandAutoreply(first)){
|
||||||
@ -9867,8 +9889,9 @@ void MainWindow::processCommandActivity() {
|
|||||||
rd.bits = d.bits;
|
rd.bits = d.bits;
|
||||||
rd.cmd = first;
|
rd.cmd = first;
|
||||||
rd.freq = d.freq;
|
rd.freq = d.freq;
|
||||||
rd.from = d.relayPath; // is this correct?
|
rd.from = d.from;
|
||||||
rd.text = d.text;
|
rd.relayPath = d.relayPath;
|
||||||
|
rd.text = relayedCmds.join(" "); //d.text;
|
||||||
rd.to = d.to;
|
rd.to = d.to;
|
||||||
rd.utcTimestamp = d.utcTimestamp;
|
rd.utcTimestamp = d.utcTimestamp;
|
||||||
|
|
||||||
@ -9900,7 +9923,12 @@ void MainWindow::processCommandActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto to = segs.first();
|
auto to = segs.first();
|
||||||
auto text = d.text.mid(to.length()).trimmed();
|
segs.removeFirst();
|
||||||
|
|
||||||
|
auto text = segs.join(" ").trimmed();
|
||||||
|
|
||||||
|
auto calls = parseRelayPathCallsigns(d.from, text);
|
||||||
|
d.relayPath = calls.join(">");
|
||||||
|
|
||||||
CommandDetail cd = {};
|
CommandDetail cd = {};
|
||||||
cd.bits = d.bits;
|
cd.bits = d.bits;
|
||||||
@ -9920,7 +9948,8 @@ void MainWindow::processCommandActivity() {
|
|||||||
|
|
||||||
addCommandToInboxStorage("STORE", cd);
|
addCommandToInboxStorage("STORE", cd);
|
||||||
|
|
||||||
reply = QString("%1 ACK").arg(d.from);
|
// we haven't replaced the from with the relay path, so we have to use it for the ack if there is one
|
||||||
|
reply = QString("%1 ACK").arg(calls.length() > 1 ? d.relayPath : d.from);
|
||||||
}
|
}
|
||||||
|
|
||||||
// PROCESS AGN
|
// PROCESS AGN
|
||||||
@ -9950,27 +9979,11 @@ void MainWindow::processCommandActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PROCESS MSG
|
// PROCESS MSG
|
||||||
else if (d.cmd == " MSG"){
|
else if (d.cmd == " MSG" && !isAllCall){
|
||||||
|
|
||||||
auto segs = d.text.split(" ");
|
auto text = d.text;
|
||||||
if(segs.isEmpty()){
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ok = false;
|
qDebug() << "adding message to inbox" << text;
|
||||||
auto mid = segs.first().toInt(&ok);
|
|
||||||
if(!ok){
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
segs.removeFirst();
|
|
||||||
if(segs.isEmpty()){
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto text = segs.join(" ");
|
|
||||||
|
|
||||||
qDebug() << "adding message" << mid << "to inbox" << text;
|
|
||||||
|
|
||||||
auto calls = parseRelayPathCallsigns(d.from, text);
|
auto calls = parseRelayPathCallsigns(d.from, text);
|
||||||
|
|
||||||
@ -9980,12 +9993,12 @@ void MainWindow::processCommandActivity() {
|
|||||||
|
|
||||||
addCommandToMyInbox(d);
|
addCommandToMyInbox(d);
|
||||||
|
|
||||||
// make sure this is explicit
|
// we haven't replaced the from with the relay path, so we have to use it for the ack if there is one
|
||||||
continue;
|
reply = QString("%1 ACK").arg(calls.length() > 1 ? d.relayPath : d.from);
|
||||||
}
|
}
|
||||||
|
|
||||||
// PROCESS ACKS
|
// PROCESS ACKS
|
||||||
else if (d.cmd == " ACK"){
|
else if (d.cmd == " ACK" && !isAllCall){
|
||||||
qDebug() << "skipping incoming ack" << d.text;
|
qDebug() << "skipping incoming ack" << d.text;
|
||||||
|
|
||||||
// make sure this is explicit
|
// make sure this is explicit
|
||||||
@ -9993,7 +10006,7 @@ void MainWindow::processCommandActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PROCESS BUFFERED CMD
|
// PROCESS BUFFERED CMD
|
||||||
else if (d.cmd == " CMD"){
|
else if (d.cmd == " CMD" && !isAllCall){
|
||||||
qDebug() << "skipping incoming command" << d.text;
|
qDebug() << "skipping incoming command" << d.text;
|
||||||
|
|
||||||
// make sure this is explicit
|
// make sure this is explicit
|
||||||
@ -10001,7 +10014,7 @@ void MainWindow::processCommandActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PROCESS BUFFERED QUERY
|
// PROCESS BUFFERED QUERY
|
||||||
else if (d.cmd == " QUERY"){
|
else if (d.cmd == " QUERY" && !isAllCall){
|
||||||
auto who = d.from;
|
auto who = d.from;
|
||||||
|
|
||||||
QStringList segs = d.text.split(" ");
|
QStringList segs = d.text.split(" ");
|
||||||
@ -10031,7 +10044,9 @@ void MainWindow::processCommandActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto from = params.value("FROM").toString().trimmed();
|
auto from = params.value("FROM").toString().trimmed();
|
||||||
if(from != who){
|
|
||||||
|
auto to = params.value("TO").toString().trimmed();
|
||||||
|
if(to != who){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10045,9 +10060,8 @@ void MainWindow::processCommandActivity() {
|
|||||||
inbox.set(mid, msg);
|
inbox.set(mid, msg);
|
||||||
|
|
||||||
// and reply
|
// and reply
|
||||||
reply = QString("%1 MSG %2 %3 DE %4");
|
reply = QString("%1 MSG %2 DE %3");
|
||||||
reply = reply.arg(who);
|
reply = reply.arg(who);
|
||||||
reply = reply.arg(mid);
|
|
||||||
reply = reply.arg(text);
|
reply = reply.arg(text);
|
||||||
reply = reply.arg(from);
|
reply = reply.arg(from);
|
||||||
}
|
}
|
||||||
@ -10119,7 +10133,7 @@ void MainWindow::processCommandActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PROCESS BUFFERED HEARING
|
// PROCESS BUFFERED HEARING
|
||||||
else if (d.cmd == " HEARING"){
|
else if (d.cmd == " HEARING" && !isAllCall){
|
||||||
auto calls = Varicode::parseCallsigns(d.text);
|
auto calls = Varicode::parseCallsigns(d.text);
|
||||||
foreach(auto call, calls){
|
foreach(auto call, calls){
|
||||||
logHeardGraph(d.from, call);
|
logHeardGraph(d.from, call);
|
||||||
|
@ -106,7 +106,7 @@ QMap<QString, int> directed_cmds = {
|
|||||||
QSet<int> allowed_cmds = {-1, 0, /*1,*/ /*2,*/ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
|
QSet<int> allowed_cmds = {-1, 0, /*1,*/ /*2,*/ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
|
||||||
|
|
||||||
// commands that result in an autoreply (which can be relayed)
|
// commands that result in an autoreply (which can be relayed)
|
||||||
QSet<int> autoreply_cmds = {0, 3, 4, 6, 11, 12, 13, 16, 30};
|
QSet<int> autoreply_cmds = {0, 3, 4, 6, 9, 10, 11, 12, 13, 16, 30};
|
||||||
|
|
||||||
// commands that should be buffered
|
// commands that should be buffered
|
||||||
QSet<int> buffered_cmds = {5, 9, 10, 11, 12, 13, 14, 15, 24};
|
QSet<int> buffered_cmds = {5, 9, 10, 11, 12, 13, 14, 15, 24};
|
||||||
|
Loading…
Reference in New Issue
Block a user