From 0e6372464f119de0d6b1d35895899dc3466efb5b Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Thu, 23 Aug 2018 20:02:40 +0000 Subject: [PATCH] 2018-06-23 Fred Gleason * Fixed a bug in ripcd(8) that caused process of the 'Air Gate' ['AG'] RML to fail. --- ChangeLog | 3 +++ ripcd/local_macros.cpp | 25 +++++++++++++++++++++++++ ripcd/ripcd.cpp | 21 +++++---------------- ripcd/ripcd.h | 1 + 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3d8d034a..c5fc73f3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16666,3 +16666,6 @@ 2018-06-22 Fred Gleason * Added GPIO support for HPI devices to the 'Local Audio Adapter' switcher/gpio driver. +2018-06-23 Fred Gleason + * Fixed a bug in ripcd(8) that caused process of the 'Air Gate' ['AG'] + RML to fail. diff --git a/ripcd/local_macros.cpp b/ripcd/local_macros.cpp index f4c8b362..5215f388 100644 --- a/ripcd/local_macros.cpp +++ b/ripcd/local_macros.cpp @@ -908,6 +908,31 @@ void MainObject::RunLocalMacros(RDMacro *rml) } +bool MainObject::CheckAirGate(RDMacro *rml) +{ + char buffer[RD_RML_MAX_LENGTH]; + + if(rml->command()==RDMacro::AG) { + if(ripc_onair_flag) { + rml->generateString(buffer,RD_RML_MAX_LENGTH-1); + QStringList f0=f0.split(" ",buffer); + f0.pop_front(); + QString rmlstr=f0.join(" "); + if(!rml->parseString(rmlstr,rmlstr.length())) { + return false; + } + } + else { + LogLine(RDConfig::LogDebug, + QString("rejected rml: \"")+buffer+ + "\": on-air flag not active"); + return false; + } + } + return true; +} + + void MainObject::ForwardConvert(RDMacro *rml) const { // diff --git a/ripcd/ripcd.cpp b/ripcd/ripcd.cpp index 759fdb56..a5ba35f4 100644 --- a/ripcd/ripcd.cpp +++ b/ripcd/ripcd.cpp @@ -565,7 +565,9 @@ void MainObject::DispatchCommand(int ch) } sprintf(cmd,"MS %s %d %s",(const char *)macro.address().toString(), echo,buffer); - RunLocalMacros(¯o); + if(CheckAirGate(¯o)) { + RunLocalMacros(¯o); + } BroadcastCommand(cmd); } else { @@ -703,21 +705,8 @@ void MainObject::ReadRmlSocket(QSocketDevice *dev,RDMacro::Role role, while((n=dev->readBlock(buffer,RD_RML_MAX_LENGTH))>0) { buffer[n]=0; if(macro.parseString(buffer,n)) { - if(macro.command()==RDMacro::AG) { - if(ripc_onair_flag) { - QStringList f0=f0.split(" ",buffer); - f0.pop_front(); - QString rmlstr=f0.join(" "); - if(!macro.parseString(rmlstr,rmlstr.length())) { - break; - } - } - else { - LogLine(RDConfig::LogDebug, - QString("rejected rml: \"")+buffer+ - "\": on-air flag not active"); - break; - } + if(!CheckAirGate(¯o)) { + break; } macro.setRole(role); macro.setAddress(dev->peerAddress()); diff --git a/ripcd/ripcd.h b/ripcd/ripcd.h index d6aee281..ed998cfc 100644 --- a/ripcd/ripcd.h +++ b/ripcd/ripcd.h @@ -93,6 +93,7 @@ class MainObject : public QObject QString StripPoint(QString); void LoadLocalMacros(); void RunLocalMacros(RDMacro *rml); + bool CheckAirGate(RDMacro *rml); void LoadGpiTable(); void SendGpi(int ch,int matrix); void SendGpo(int ch,int matrix);