if(m_cfg.mode == ModeType::Client)
{
- OCStackResult result = OCInit(m_cfg.ipAddress.c_str(), m_cfg.port, OC_CLIENT);
+ OCTransportFlags serverFlags =
+ static_cast<OCTransportFlags>(m_cfg.serverConnectivity & CT_MASK_FLAGS);
+ OCTransportFlags clientFlags =
+ static_cast<OCTransportFlags>(m_cfg.clientConnectivity & CT_MASK_FLAGS);
+ OCStackResult result = OCInit1(OC_CLIENT, serverFlags, clientFlags);
if(OC_STACK_OK != result)
{
try
{
- ListenOCContainer container(clientWrapper, *clientResponse->addr,
- clientResponse->connType, requestStream);
+ ListenOCContainer container(clientWrapper, clientResponse->devAddr,
+ requestStream);
// loop to ensure valid construction of all resources
for(auto resource : container.Resources())
{
return OC_STACK_KEEP_TRANSACTION;
}
- OCStackResult InProcClientWrapper::ListenForResource(const std::string& serviceUrl,
- const std::string& resourceType, OCConnectivityType connectivityType,
- FindCallback& callback, QualityOfService QoS)
+ OCStackResult InProcClientWrapper::ListenForResource(
+ const std::string& serviceUrl, // unused
+ const std::string& resourceType,
+ OCConnectivityType connectivityType,
+ FindCallback& callback, QualityOfService QoS)
{
if(!callback)
{
if(cLock)
{
std::lock_guard<std::recursive_mutex> lock(*cLock);
- result = OCDoResource(nullptr, OC_REST_GET,
+ result = OCDoResource(nullptr, OC_REST_DISCOVER,
resourceType.c_str(),
nullptr, nullptr, connectivityType,
static_cast<OCQualityOfService>(QoS),
return OC_STACK_KEEP_TRANSACTION;
}
- OCStackResult InProcClientWrapper::ListenForDevice(const std::string& serviceUrl,
- const std::string& deviceURI, OCConnectivityType connectivityType,
- FindDeviceCallback& callback, QualityOfService QoS)
+ OCStackResult InProcClientWrapper::ListenForDevice(
+ const std::string& serviceUrl, // unused
+ const std::string& deviceURI,
+ OCConnectivityType connectivityType,
+ FindDeviceCallback& callback,
+ QualityOfService QoS)
{
if(!callback)
{
if(cLock)
{
std::lock_guard<std::recursive_mutex> lock(*cLock);
- result = OCDoResource(nullptr, OC_REST_GET,
+ result = OCDoResource(nullptr, OC_REST_DISCOVER,
deviceURI.c_str(),
nullptr, nullptr, connectivityType,
static_cast<OCQualityOfService>(QoS),
return OC_STACK_DELETE_TRANSACTION;
}
- OCStackResult InProcClientWrapper::GetResourceRepresentation(const std::string& host,
- const std::string& uri, OCConnectivityType connectivityType,
+ OCStackResult InProcClientWrapper::GetResourceRepresentation(
+ const OCDevAddr& devAddr,
+ const std::string& resourceUri,
const QueryParamsMap& queryParams, const HeaderOptions& headerOptions,
GetCallback& callback, QualityOfService QoS)
{
[](void* c){delete static_cast<ClientCallbackContext::GetContext*>(c);}
);
+ std::string uri = assembleSetResourceUri(resourceUri, queryParams);
+
auto cLock = m_csdkLock.lock();
if(cLock)
{
- std::ostringstream os;
- os << host << assembleSetResourceUri(uri, queryParams).c_str();
-
std::lock_guard<std::recursive_mutex> lock(*cLock);
OCHeaderOption options[MAX_HEADER_OPTIONS];
- result = OCDoResource(nullptr, OC_REST_GET, os.str().c_str(),
- nullptr, nullptr, connectivityType,
+ result = OCDoResource(nullptr, OC_REST_GET,
+ uri.c_str(),
+ &devAddr, nullptr,
+ CT_DEFAULT,
static_cast<OCQualityOfService>(QoS),
&cbdata,
assembleHeaderOptions(options, headerOptions),
return ocInfo.getJSONRepresentation(OCInfoFormat::IncludeOC);
}
- OCStackResult InProcClientWrapper::PostResourceRepresentation(const std::string& host,
- const std::string& uri, OCConnectivityType connectivityType, const OCRepresentation& rep,
+ OCStackResult InProcClientWrapper::PostResourceRepresentation(
+ const OCDevAddr& devAddr,
+ const std::string& uri,
+ const OCRepresentation& rep,
const QueryParamsMap& queryParams, const HeaderOptions& headerOptions,
PostCallback& callback, QualityOfService QoS)
{
[](void* c){delete static_cast<ClientCallbackContext::SetContext*>(c);}
);
- // TODO: in the future the cstack should be combining these two strings!
- ostringstream os;
- os << host << assembleSetResourceUri(uri, queryParams).c_str();
- // TODO: end of above
+ std::string url = assembleSetResourceUri(uri, queryParams);
auto cLock = m_csdkLock.lock();
OCHeaderOption options[MAX_HEADER_OPTIONS];
result = OCDoResource(nullptr, OC_REST_POST,
- os.str().c_str(), nullptr,
- assembleSetResourcePayload(rep).c_str(), connectivityType,
+ url.c_str(), &devAddr,
+ assembleSetResourcePayload(rep).c_str(),
+ CT_DEFAULT,
static_cast<OCQualityOfService>(QoS),
&cbdata,
assembleHeaderOptions(options, headerOptions),
return result;
}
- OCStackResult InProcClientWrapper::PutResourceRepresentation(const std::string& host,
- const std::string& uri, OCConnectivityType connectivityType, const OCRepresentation& rep,
+ OCStackResult InProcClientWrapper::PutResourceRepresentation(
+ const OCDevAddr& devAddr,
+ const std::string& uri,
+ const OCRepresentation& rep,
const QueryParamsMap& queryParams, const HeaderOptions& headerOptions,
PutCallback& callback, QualityOfService QoS)
{
[](void* c){delete static_cast<ClientCallbackContext::SetContext*>(c);}
);
- // TODO: in the future the cstack should be combining these two strings!
- ostringstream os;
- os << host << assembleSetResourceUri(uri, queryParams).c_str();
- // TODO: end of above
+ std::string url = assembleSetResourceUri(uri, queryParams).c_str();
auto cLock = m_csdkLock.lock();
OCHeaderOption options[MAX_HEADER_OPTIONS];
result = OCDoResource(&handle, OC_REST_PUT,
- os.str().c_str(), nullptr,
- assembleSetResourcePayload(rep).c_str(), connectivityType,
+ url.c_str(), &devAddr,
+ assembleSetResourcePayload(rep).c_str(),
+ CT_DEFAULT,
static_cast<OCQualityOfService>(QoS),
&cbdata,
assembleHeaderOptions(options, headerOptions),
return OC_STACK_DELETE_TRANSACTION;
}
- OCStackResult InProcClientWrapper::DeleteResource(const std::string& host,
- const std::string& uri, OCConnectivityType connectivityType,
+ OCStackResult InProcClientWrapper::DeleteResource(
+ const OCDevAddr& devAddr,
+ const std::string& uri,
const HeaderOptions& headerOptions, DeleteCallback& callback, QualityOfService QoS)
{
if(!callback)
[](void* c){delete static_cast<ClientCallbackContext::DeleteContext*>(c);}
);
- ostringstream os;
- os << host << uri;
-
auto cLock = m_csdkLock.lock();
if(cLock)
std::lock_guard<std::recursive_mutex> lock(*cLock);
result = OCDoResource(nullptr, OC_REST_DELETE,
- os.str().c_str(), nullptr,
- nullptr, connectivityType,
+ uri.c_str(), &devAddr,
+ nullptr,
+ CT_DEFAULT,
static_cast<OCQualityOfService>(m_cfg.QoS),
&cbdata,
assembleHeaderOptions(options, headerOptions),
}
OCStackResult InProcClientWrapper::ObserveResource(ObserveType observeType, OCDoHandle* handle,
- const std::string& host, const std::string& uri, OCConnectivityType connectivityType,
+ const OCDevAddr& devAddr,
+ const std::string& uri,
const QueryParamsMap& queryParams, const HeaderOptions& headerOptions,
ObserveCallback& callback, QualityOfService QoS)
{
method = OC_REST_OBSERVE_ALL;
}
+ std::string url = assembleSetResourceUri(uri, queryParams).c_str();
+
auto cLock = m_csdkLock.lock();
if(cLock)
{
- std::ostringstream os;
- os << host << assembleSetResourceUri(uri, queryParams).c_str();
-
std::lock_guard<std::recursive_mutex> lock(*cLock);
OCHeaderOption options[MAX_HEADER_OPTIONS];
result = OCDoResource(handle, method,
- os.str().c_str(), nullptr,
- nullptr, connectivityType,
+ url.c_str(), &devAddr,
+ nullptr,
+ CT_DEFAULT,
static_cast<OCQualityOfService>(QoS),
&cbdata,
assembleHeaderOptions(options, headerOptions),
return result;
}
- OCStackResult InProcClientWrapper::CancelObserveResource(OCDoHandle handle,
- const std::string& host, const std::string& uri, const HeaderOptions& headerOptions,
- QualityOfService QoS)
+ OCStackResult InProcClientWrapper::CancelObserveResource(
+ OCDoHandle handle,
+ const std::string& host, // unused
+ const std::string& uri, // unused
+ const HeaderOptions& headerOptions,
+ QualityOfService QoS)
{
OCStackResult result;
auto cLock = m_csdkLock.lock();
OCStackApplicationResult subscribePresenceCallback(void* ctx, OCDoHandle handle,
OCClientResponse* clientResponse)
{
- ostringstream os;
- uint16_t port;
- uint8_t a;
- uint8_t b;
- uint8_t c;
- uint8_t d;
+ ClientCallbackContext::SubscribePresenceContext* context =
+ static_cast<ClientCallbackContext::SubscribePresenceContext*>(ctx);
- if(OCDevAddrToIPv4Addr(clientResponse->addr, &a, &b, &c, &d) == 0 &&
- OCDevAddrToPort(clientResponse->addr, &port) == 0)
- {
- os<<static_cast<int>(a)<<"."<<static_cast<int>(b)<<"."<<static_cast<int>(c)
- <<"."<<static_cast<int>(d)<<":"<<static_cast<int>(port);
+ /*
+ * This a hack while we rethink presence subscription.
+ */
+ std::string url = clientResponse->devAddr.addr;
- ClientCallbackContext::SubscribePresenceContext* context =
- static_cast<ClientCallbackContext::SubscribePresenceContext*>(ctx);
+ std::thread exec(context->callback, clientResponse->result,
+ clientResponse->sequenceNumber, url);
- std::thread exec(context->callback, clientResponse->result,
- clientResponse->sequenceNumber, os.str());
+ exec.detach();
- exec.detach();
- }
- else
- {
- oclog() << "subscribePresenceCallback(): OCDevAddrToIPv4Addr() or OCDevAddrToPort() "
- <<"failed"<< std::flush;
- }
return OC_STACK_KEEP_TRANSACTION;
}
auto cLock = m_csdkLock.lock();
std::ostringstream os;
- os << host << OC_PRESENCE_URI;
+ os << host << "/oc/presence";
if(!resourceType.empty())
{
return OC_STACK_ERROR;
}
- return OCDoResource(handle, OC_REST_PRESENCE, os.str().c_str(), nullptr, nullptr,
- connectivityType, OC_LOW_QOS, &cbdata, NULL, 0);
+ return OCDoResource(handle, OC_REST_PRESENCE,
+ os.str().c_str(), nullptr,
+ nullptr, connectivityType,
+ OC_LOW_QOS, &cbdata, NULL, 0);
}
OCStackResult InProcClientWrapper::UnsubscribePresence(OCDoHandle handle)