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 { | ||||||
|  |           if(Varicode::isValidCallsign(callsign, nullptr)){ | ||||||
|               CallDetail cd = {}; |               CallDetail cd = {}; | ||||||
|               cd.call = callsign; |               cd.call = callsign; | ||||||
|               m_callActivity[callsign] = cd; |               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
	 Jordan Sherer
						Jordan Sherer