//
//*********************************************************************
+#include "OCPlatform_impl.h"
+
#include <random>
#include <utility>
#include <functional>
#include "OCApi.h"
#include "OCException.h"
#include "OCUtilities.h"
+#include "ocpayload.h"
#include "oc_logger.hpp"
void OCPlatform_impl::Configure(const PlatformConfig& config)
{
+ OCRegisterPersistentStorageHandler(config.ps);
globalConfig() = config;
}
switch(config.mode)
{
case ModeType::Server:
- m_server = m_WrapperInstance->CreateServerWrapper(*this, m_csdkLock, config);
+ m_server = m_WrapperInstance->CreateServerWrapper(m_csdkLock, config);
break;
case ModeType::Client:
- m_client = m_WrapperInstance->CreateClientWrapper(*this, m_csdkLock, config);
+ m_client = m_WrapperInstance->CreateClientWrapper(m_csdkLock, config);
break;
case ModeType::Both:
- m_server = m_WrapperInstance->CreateServerWrapper(*this, m_csdkLock, config);
- m_client = m_WrapperInstance->CreateClientWrapper(*this, m_csdkLock, config);
+ case ModeType::Gateway:
+ m_server = m_WrapperInstance->CreateServerWrapper(m_csdkLock, config);
+ m_client = m_WrapperInstance->CreateClientWrapper(m_csdkLock, config);
break;
}
}
OCPlatform_impl::OCPlatform_impl(const PlatformConfig& config)
: m_cfg { config },
m_WrapperInstance { make_unique<WrapperFactory>() },
- m_csdkLock { make_shared<std::recursive_mutex>() }
+ m_csdkLock { std::make_shared<std::recursive_mutex>() }
{
init(m_cfg);
}
}
OCStackResult OCPlatform_impl::notifyListOfObservers(OCResourceHandle resourceHandle,
- ObservationIds& observationIds,
- const std::shared_ptr<OCResourceResponse> pResponse)
+ ObservationIds& observationIds,
+ const std::shared_ptr<OCResourceResponse> pResponse)
{
return notifyListOfObservers(resourceHandle, observationIds, pResponse, m_cfg.QoS);
}
OCStackResult OCPlatform_impl::notifyListOfObservers(OCResourceHandle resourceHandle,
- ObservationIds& observationIds,
- const std::shared_ptr<OCResourceResponse> pResponse,
- QualityOfService QoS)
+ ObservationIds& observationIds,
+ const std::shared_ptr<OCResourceResponse> pResponse,
+ QualityOfService QoS)
{
if(!pResponse)
{
return result_guard(OC_STACK_ERROR);
}
- std::string payload(pResponse->getPayload());
-
- return result_guard(
+ OCRepPayload* pl = pResponse->getResourceRepresentation().getPayload();
+ OCStackResult result =
OCNotifyListOfObservers(resourceHandle,
&observationIds[0], observationIds.size(),
- reinterpret_cast<unsigned char *>(const_cast<char *>(payload.c_str())),
- static_cast<OCQualityOfService>(QoS)));
+ pl,
+ static_cast<OCQualityOfService>(QoS));
+ OCRepPayloadDestroy(pl);
+ return result_guard(result);
}
OCResource::Ptr OCPlatform_impl::constructResourceObject(const std::string& host,
const std::string& uri,
+ OCConnectivityType connectivityType,
bool isObservable,
const std::vector<std::string>& resourceTypes,
const std::vector<std::string>& interfaces)
return std::shared_ptr<OCResource>(new OCResource(m_client,
host,
- uri,
+ uri, "", connectivityType,
isObservable,
resourceTypes,
interfaces));
OCStackResult OCPlatform_impl::findResource(const std::string& host,
const std::string& resourceName,
+ OCConnectivityType connectivityType,
FindCallback resourceHandler)
{
- return findResource(host, resourceName, resourceHandler, m_cfg.QoS);
+ return findResource(host, resourceName, connectivityType, resourceHandler, m_cfg.QoS);
}
OCStackResult OCPlatform_impl::findResource(const std::string& host,
const std::string& resourceName,
- FindCallback resourceHandler, QualityOfService QoS)
+ OCConnectivityType connectivityType,
+ FindCallback resourceHandler,
+ QualityOfService QoS)
{
return checked_guard(m_client, &IClientWrapper::ListenForResource,
- host, resourceName, resourceHandler, QoS);
+ host, resourceName, connectivityType, resourceHandler, QoS);
+ }
+
+ OCStackResult OCPlatform_impl::getDeviceInfo(const std::string& host,
+ const std::string& deviceURI,
+ OCConnectivityType connectivityType,
+ FindDeviceCallback deviceInfoHandler)
+ {
+ return result_guard(getDeviceInfo(host, deviceURI, connectivityType,
+ deviceInfoHandler, m_cfg.QoS));
}
+ OCStackResult OCPlatform_impl::getDeviceInfo(const std::string& host,
+ const std::string& deviceURI,
+ OCConnectivityType connectivityType,
+ FindDeviceCallback deviceInfoHandler,
+ QualityOfService QoS)
+ {
+ return checked_guard(m_client, &IClientWrapper::ListenForDevice,
+ host, deviceURI, connectivityType, deviceInfoHandler, QoS);
+ }
+
+ OCStackResult OCPlatform_impl::getPlatformInfo(const std::string& host,
+ const std::string& platformURI,
+ OCConnectivityType connectivityType,
+ FindPlatformCallback platformInfoHandler)
+ {
+ return result_guard(getPlatformInfo(host, platformURI, connectivityType,
+ platformInfoHandler, m_cfg.QoS));
+ }
+
+ OCStackResult OCPlatform_impl::getPlatformInfo(const std::string& host,
+ const std::string& platformURI,
+ OCConnectivityType connectivityType,
+ FindPlatformCallback platformInfoHandler,
+ QualityOfService QoS)
+ {
+ return checked_guard(m_client, &IClientWrapper::ListenForDevice,
+ host, platformURI, connectivityType, platformInfoHandler, QoS);
+ }
OCStackResult OCPlatform_impl::registerResource(OCResourceHandle& resourceHandle,
std::string& resourceURI,
uint8_t resourceProperty)
{
return checked_guard(m_server, &IServerWrapper::registerResource,
- ref(resourceHandle), resourceURI, resourceTypeName,
+ std::ref(resourceHandle), resourceURI, resourceTypeName,
resourceInterface, entityHandler, resourceProperty);
}
+ OCStackResult OCPlatform_impl::registerDeviceInfo(const OCDeviceInfo deviceInfo)
+ {
+ return checked_guard(m_server, &IServerWrapper::registerDeviceInfo, deviceInfo);
+ }
+
+ OCStackResult OCPlatform_impl::registerPlatformInfo(const OCPlatformInfo platformInfo)
+ {
+ return checked_guard(m_server, &IServerWrapper::registerPlatformInfo, platformInfo);
+ }
- OCStackResult OCPlatform_impl::registerResource(OCResourceHandle& resourceHandle,
+ OCStackResult OCPlatform_impl::registerResource(OCResourceHandle& resourceHandle,
const std::shared_ptr< OCResource > resource)
{
uint8_t resourceProperty = OC_DISCOVERABLE | OC_OBSERVABLE;
+ std::vector<std::string> resourceTypes = resource->getResourceTypes();
- return checked_guard(m_server, &IServerWrapper::registerResourceWithHost,
- ref(resourceHandle), resource->host(), resource->uri(), "core.remote", "oc.mi.def",
+ return checked_guard(m_server, &IServerWrapper::registerResource,
+ std::ref(resourceHandle), resource->host() + resource->uri(),
+ resourceTypes[0]/*"core.remote"*/, DEFAULT_INTERFACE,
(EntityHandler) nullptr, resourceProperty);
-
}
+
OCStackResult OCPlatform_impl::unregisterResource(const OCResourceHandle& resourceHandle) const
{
return checked_guard(m_server, &IServerWrapper::unregisterResource,
OCStackResult OCPlatform_impl::unbindResource(OCResourceHandle collectionHandle,
OCResourceHandle resourceHandle)
{
- return result_guard(OCUnBindResource(ref(collectionHandle), ref(resourceHandle)));
+ return result_guard(OCUnBindResource(std::ref(collectionHandle), std::ref(resourceHandle)));
}
OCStackResult OCPlatform_impl::unbindResources(const OCResourceHandle collectionHandle,
OCStackResult OCPlatform_impl::subscribePresence(OCPresenceHandle& presenceHandle,
const std::string& host,
+ OCConnectivityType connectivityType,
SubscribeCallback presenceHandler)
{
- return subscribePresence(presenceHandle, host, "", presenceHandler);
+ return subscribePresence(presenceHandle, host, "", connectivityType, presenceHandler);
}
+
OCStackResult OCPlatform_impl::subscribePresence(OCPresenceHandle& presenceHandle,
const std::string& host,
const std::string& resourceType,
+ OCConnectivityType connectivityType,
SubscribeCallback presenceHandler)
{
return checked_guard(m_client, &IClientWrapper::SubscribePresence,
- &presenceHandle, host, resourceType, presenceHandler);
+ &presenceHandle, host, resourceType, connectivityType,
+ presenceHandler);
}
OCStackResult OCPlatform_impl::unsubscribePresence(OCPresenceHandle presenceHandle)
{
return checked_guard(m_client, &IClientWrapper::UnsubscribePresence,
- ref(presenceHandle));
+ std::ref(presenceHandle));
+ }
+
+ OCStackResult OCPlatform_impl::sendResponse(const std::shared_ptr<OCResourceResponse> pResponse)
+ {
+ return checked_guard(m_server, &IServerWrapper::sendResponse,
+ pResponse);
}
+ std::weak_ptr<std::recursive_mutex> OCPlatform_impl::csdkLock()
+ {
+ return m_csdkLock;
+ }
} //namespace OC
+