replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / service / resource-encapsulation / src / resourceCache / src / DataCache.cpp
index ac2f1e2..23ffd30 100644 (file)
@@ -31,6 +31,8 @@
 #include "RCSResourceAttributes.h"
 #include "ExpiryTimer.h"
 
+#include "ocrandom.h"
+
 namespace OIC
 {
     namespace Service
@@ -40,28 +42,28 @@ namespace OIC
         {
             void verifyObserveCB(
                 const HeaderOptions &_hos, const ResponseStatement &_rep,
-                int _result, int _seq, std::weak_ptr<DataCache> rpPtr)
+                int _result, unsigned int _seq, std::weak_ptr<DataCache> rpPtr)
             {
-                std::shared_ptr<DataCache> Ptr = rpPtr.lock();
-                if(Ptr)
+                std::shared_ptr<DataCache> ptr = rpPtr.lock();
+                if (ptr)
                 {
-                    Ptr->onObserve(_hos, _rep, _result, _seq);
+                    ptr->onObserve(_hos, _rep, _result, _seq);
                 }
             }
 
             ObserveCB verifiedObserveCB(std::weak_ptr<DataCache> rpPtr)
             {
                 return std::bind(verifyObserveCB,
-                        std::placeholders::_1, std::placeholders::_2,
-                        std::placeholders::_3, std::placeholders::_4, rpPtr);
+                                 std::placeholders::_1, std::placeholders::_2,
+                                 std::placeholders::_3, std::placeholders::_4, rpPtr);
             }
 
             void verifyGetCB(
-                    const HeaderOptions &_hos, const ResponseStatement &_rep,
-                    int _result, std::weak_ptr<DataCache> rpPtr)
+                const HeaderOptions &_hos, const ResponseStatement &_rep,
+                int _result, std::weak_ptr<DataCache> rpPtr)
             {
                 std::shared_ptr<DataCache> Ptr = rpPtr.lock();
-                if(Ptr)
+                if (Ptr)
                 {
                     Ptr->onGet(_hos, _rep, _result);
                 }
@@ -70,8 +72,8 @@ namespace OIC
             GetCB verifiedGetCB(std::weak_ptr<DataCache> rpPtr)
             {
                 return std::bind(verifyGetCB,
-                        std::placeholders::_1, std::placeholders::_2,
-                        std::placeholders::_3, rpPtr);
+                                 std::placeholders::_1, std::placeholders::_2,
+                                 std::placeholders::_3, rpPtr);
             }
         }
 
@@ -100,12 +102,13 @@ namespace OIC
                 subscriberList.release();
             }
 
-            if(mode == CACHE_MODE::OBSERVE)
+            if (sResource->isObservable())
             {
                 try
                 {
                     sResource->cancelObserve();
-                } catch (...)
+                }
+                catch (...)
                 {
                     // ignore the exception because data cache was released.
                 }
@@ -125,7 +128,7 @@ namespace OIC
             {
                 sResource->requestObserve(pObserveCB);
             }
-            networkTimeOutHandle = networkTimer.postTimer(CACHE_DEFAULT_EXPIRED_MILLITIME, pTimerCB);
+            networkTimeOutHandle = networkTimer.post(CACHE_DEFAULT_EXPIRED_MILLITIME, pTimerCB);
         }
 
         CacheID DataCache::addSubscriber(CacheCB func, REPORT_FREQUENCY rf, long repeatTime)
@@ -183,7 +186,7 @@ namespace OIC
 
         const PrimitiveResourcePtr DataCache::getPrimitiveResource() const
         {
-            return (sResource != nullptr) ? sResource : nullptr;
+            return sResource;
         }
 
         const RCSResourceAttributes DataCache::getCachedData() const
@@ -202,17 +205,10 @@ namespace OIC
         }
 
         void DataCache::onObserve(const HeaderOptions & /*_hos*/,
-                const ResponseStatement & _rep, int _result, int _seq)
+                                  const ResponseStatement &_rep, int _result, unsigned int _seq)
         {
 
-            if (_result != OC_STACK_OK || _rep.getAttributes().empty() || lastSequenceNum > _seq)
-            {
-                return;
-            }
-            else
-            {
-                lastSequenceNum = _seq;
-            }
+            lastSequenceNum = _seq;
 
             if (state != CACHE_STATE::READY)
             {
@@ -225,10 +221,10 @@ namespace OIC
                 mode = CACHE_MODE::OBSERVE;
             }
 
-            networkTimer.cancelTimer(networkTimeOutHandle);
-            networkTimeOutHandle = networkTimer.postTimer(CACHE_DEFAULT_EXPIRED_MILLITIME, pTimerCB);
+            networkTimer.cancel(networkTimeOutHandle);
+            networkTimeOutHandle = networkTimer.post(CACHE_DEFAULT_EXPIRED_MILLITIME, pTimerCB);
 
-            notifyObservers(_rep.getAttributes());
+            notifyObservers(_rep.getAttributes(), _result);
         }
 
         void DataCache::onGet(const HeaderOptions & /*_hos*/,
@@ -247,17 +243,17 @@ namespace OIC
 
             if (mode != CACHE_MODE::OBSERVE)
             {
-                networkTimer.cancelTimer(networkTimeOutHandle);
-                networkTimeOutHandle = networkTimer.postTimer(
+                networkTimer.cancel(networkTimeOutHandle);
+                networkTimeOutHandle = networkTimer.post(
                                            CACHE_DEFAULT_EXPIRED_MILLITIME, pTimerCB);
 
-                pollingHandle = pollingTimer.postTimer(CACHE_DEFAULT_REPORT_MILLITIME, pPollingCB);
+                pollingHandle = pollingTimer.post(CACHE_DEFAULT_REPORT_MILLITIME, pPollingCB);
             }
 
-            notifyObservers(_rep.getAttributes());
+            notifyObservers(_rep.getAttributes(), _result);
         }
 
-        void DataCache::notifyObservers(const RCSResourceAttributes Att)
+        void DataCache::notifyObservers(const RCSResourceAttributes Att, int eCode)
         {
             {
                 std::lock_guard<std::mutex> lock(att_mutex);
@@ -273,7 +269,7 @@ namespace OIC
             {
                 if (i.second.first.rf == REPORT_FREQUENCY::UPTODATE)
                 {
-                    i.second.second(this->sResource, Att);
+                    i.second.second(this->sResource, Att, eCode);
                 }
             }
         }
@@ -285,16 +281,16 @@ namespace OIC
 
         void DataCache::onTimeOut(unsigned int /*timerID*/)
         {
-            if(mode == CACHE_MODE::OBSERVE)
+            if (mode == CACHE_MODE::OBSERVE)
             {
                 sResource->cancelObserve();
                 mode = CACHE_MODE::FREQUENCY;
 
-                networkTimer.cancelTimer(networkTimeOutHandle);
-                networkTimeOutHandle = networkTimer.postTimer(
-                        CACHE_DEFAULT_EXPIRED_MILLITIME, pTimerCB);
+                networkTimer.cancel(networkTimeOutHandle);
+                networkTimeOutHandle = networkTimer.post(
+                                           CACHE_DEFAULT_EXPIRED_MILLITIME, pTimerCB);
 
-                pollingHandle = pollingTimer.postTimer(CACHE_DEFAULT_REPORT_MILLITIME, pPollingCB);
+                pollingHandle = pollingTimer.post(CACHE_DEFAULT_REPORT_MILLITIME, pPollingCB);
                 return;
             }
 
@@ -313,17 +309,15 @@ namespace OIC
         CacheID DataCache::generateCacheID()
         {
             CacheID retID = 0;
-            srand(time(NULL));
-
             while (1)
             {
                 if (findSubscriber(retID).first == 0 && retID != 0)
                 {
                     break;
                 }
-                retID = rand();
-            }
 
+                retID = OCGetRandom();
+            }
             return retID;
         }