From 0f799cff7f28fe9476ceaa448d6c1fc7f5b750c4 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Tue, 30 Aug 2016 12:04:50 +0900 Subject: [PATCH] Update: set Max EventQue size to avoid Buffer over flow Signed-off-by: tomoaki --- .cproject | 43 ++++++++++---------- MQTTSNGateway/src/MQTTSNGWBrokerRecvTask.cpp | 5 ++- MQTTSNGateway/src/MQTTSNGWClientRecvTask.cpp | 15 +++++-- MQTTSNGateway/src/MQTTSNGateway.cpp | 15 +++++-- MQTTSNGateway/src/MQTTSNGateway.h | 5 ++- 5 files changed, 52 insertions(+), 31 deletions(-) diff --git a/.cproject b/.cproject index e99b880..7a8dff5 100644 --- a/.cproject +++ b/.cproject @@ -5,28 +5,29 @@ + - - + - - @@ -46,7 +47,7 @@ - - + @@ -72,37 +73,37 @@ + - - + - - - @@ -128,7 +129,7 @@ - + diff --git a/MQTTSNGateway/src/MQTTSNGWBrokerRecvTask.cpp b/MQTTSNGateway/src/MQTTSNGWBrokerRecvTask.cpp index 67ee8d0..cf00553 100644 --- a/MQTTSNGateway/src/MQTTSNGWBrokerRecvTask.cpp +++ b/MQTTSNGateway/src/MQTTSNGWBrokerRecvTask.cpp @@ -117,7 +117,10 @@ void BrokerRecvTask::run(void) /* post a BrokerRecvEvent */ ev = new Event(); ev->setBrokerRecvEvent(client, packet); - _gateway->getPacketEventQue()->post(ev); + if ( _gateway->getPacketEventQue()->post(ev) == 1 ) + { + delete ev; + } } else { diff --git a/MQTTSNGateway/src/MQTTSNGWClientRecvTask.cpp b/MQTTSNGateway/src/MQTTSNGWClientRecvTask.cpp index 980e2fd..01937a5 100644 --- a/MQTTSNGateway/src/MQTTSNGWClientRecvTask.cpp +++ b/MQTTSNGateway/src/MQTTSNGWClientRecvTask.cpp @@ -76,7 +76,10 @@ void ClientRecvTask::run() log(0, packet); ev = new Event(); ev->setBrodcastEvent(packet); - _gateway->getPacketEventQue()->post(ev); + if ( _gateway->getPacketEventQue()->post(ev) == 1 ) + { + delete ev; + } continue; } @@ -89,7 +92,10 @@ void ClientRecvTask::run() log(client, packet); ev = new Event(); ev->setClientRecvEvent(client,packet); - _gateway->getPacketEventQue()->post(ev); + if ( _gateway->getPacketEventQue()->post(ev) == 1 ) + { + delete ev; + } } else { @@ -116,7 +122,10 @@ void ClientRecvTask::run() client->setClientAddress(_sensorNetwork->getSenderAddress()); ev = new Event(); ev->setClientRecvEvent(client, packet); - _gateway->getPacketEventQue()->post(ev); + if ( _gateway->getPacketEventQue()->post(ev) == 1 ) + { + delete ev; + } } else { diff --git a/MQTTSNGateway/src/MQTTSNGateway.cpp b/MQTTSNGateway/src/MQTTSNGateway.cpp index 0590d77..e18a77b 100644 --- a/MQTTSNGateway/src/MQTTSNGateway.cpp +++ b/MQTTSNGateway/src/MQTTSNGateway.cpp @@ -15,8 +15,8 @@ **************************************************************************************/ #include "MQTTSNGateway.h" -#include "MQTTSNGWProcess.h" #include "SensorNetwork.h" +#include "MQTTSNGWProcess.h" using namespace MQTTSNGW; @@ -31,6 +31,7 @@ Gateway::Gateway() theProcess = this; _params.loginId = 0; _params.password = 0; + _packetEventQue.setMaxSize(DEFAULT_INFLIGHTMESSAGE * DEFAULT_MAX_CLIENTS); } Gateway::~Gateway() @@ -197,7 +198,7 @@ GatewayParams* Gateway::getGWParams(void) =====================================*/ EventQue::EventQue() { - + _maxSize = 0; } EventQue::~EventQue() @@ -205,6 +206,11 @@ EventQue::~EventQue() } +void EventQue::setMaxSize(uint16_t maxSize) +{ + _maxSize = maxSize; +} + Event* EventQue::wait(void) { Event* ev; @@ -249,14 +255,15 @@ Event* EventQue::timedwait(uint16_t millsec) int EventQue::post(Event* ev) { - if ( ev ) + if ( ev && ( _maxSize == 0 || size() < _maxSize ) ) { _mutex.lock(); _que.post(ev); _sem.post(); _mutex.unlock(); + return 0; } - return 0; + return 1; } int EventQue::size() diff --git a/MQTTSNGateway/src/MQTTSNGateway.h b/MQTTSNGateway/src/MQTTSNGateway.h index 6ded583..3f7d540 100644 --- a/MQTTSNGateway/src/MQTTSNGateway.h +++ b/MQTTSNGateway/src/MQTTSNGateway.h @@ -16,10 +16,9 @@ #ifndef MQTTSNGATEWAY_H_ #define MQTTSNGATEWAY_H_ -#include "MQTTSNGWProcess.h" #include "MQTTSNGWClient.h" +#include "MQTTSNGWProcess.h" #include "MQTTSNPacket.h" -#include "MQTTGWPacket.h" namespace MQTTSNGW { @@ -133,6 +132,7 @@ public: ~EventQue(); Event* wait(void); Event* timedwait(uint16_t millsec); + void setMaxSize(uint16_t maxSize); int post(Event*); int size(); @@ -140,6 +140,7 @@ private: Que _que; Mutex _mutex; Semaphore _sem; + uint16_t _maxSize; }; /*