1 //******************************************************************
3 // Copyright 2015 Samsung Electronics All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21 #include "BrokerTypes.h"
22 #include "ResourceBroker.h"
24 #define OIC_COAP "coap://"
25 #define DEFAULT_CONTEXT_VALUE 0x99
27 ResourceBroker * ResourceBroker::s_instance = NULL;
28 std::list< DevicePresence * > ResourceBroker::s_presenceList = NULL;
30 ResourceBroker::ResourceBroker()
32 // TODO Auto-generated constructor stub
33 if(s_presenceList.empty())
35 s_presenceList = new std::list< DevicePresence * >();
39 ResourceBroker::~ResourceBroker()
41 // TODO Auto-generated destructor stub
42 if(!s_presenceList.empty())
44 s_presenceList.clear();
46 delete s_presenceList;
49 ResourceBroker * ResourceBroker::getInstance()
53 s_mutexForCreation.lock();
56 s_instance = new ResourceBroker();
58 s_mutexForCreation.unlock();
63 OCStackResult ResourceBroker::hostResource(PrimitiveResource & pResource, BrokerCB cb)
65 OCStackResult ret = OC_STACK_INVALID_PARAM;
66 if (pResource.getUri().empty() || pResource.getHost().empty())
72 ret = OC_STACK_INVALID_CALLBACK;
76 DevicePresence * presenceItem = findDevicePresence(pResource, cb);
77 if(presenceItem == NULL)
79 DevicePresence *newItem = new DevicePresence(pResource, cb);
80 s_presenceList.push_back(newItem);
84 presenceItem->addPresenceResource(pResource, cb);
90 DevicePresence * ResourceBroker::findDevicePresence(PrimitiveResource& pResource, BrokerCB cb)
92 DevicePresence * retDevice = NULL;
93 if (s_presenceList.empty() || pResource.isEmpty())
99 std::list<DevicePresence *>::iterator it;
101 DevicePresence * temp = new DevicePresence(pResource, cb);
102 it = std::find(s_presenceList.begin(), s_presenceList.end(), temp);
105 if(it == s_presenceList.end())
118 ResourcePresence * ResourceBroker::findResourcePresence(PrimitiveResource & pResource, BrokerCB cb)
120 ResourcePresence * retResource = NULL;
121 if (s_presenceList.empty() || pResource.isEmpty())
127 DevicePresence * foundDevice = findDevicePresence(pResource, cb);
128 retResource = foundDevice->findResourcePresence(pResource, cb);