OCStackResult InProcClientWrapper::PutResourceRepresentation( const OCDevAddr& devAddr, const std::string& uri, const OCRepresentation& rep, const QueryParamsMap& queryParams, const HeaderOptions& headerOptions, PutCallback& callback, QualityOfService QoS) { if(!callback) { return OC_STACK_INVALID_PARAM; } OCStackResult result; ClientCallbackContext::SetContext* ctx = new ClientCallbackContext::SetContext(callback); OCCallbackData cbdata( static_cast<void*>(ctx), setResourceCallback, [](void* c){delete static_cast<ClientCallbackContext::SetContext*>(c);} ); std::string url = assembleSetResourceUri(uri, queryParams).c_str(); auto cLock = m_csdkLock.lock(); if(cLock) { std::lock_guard<std::recursive_mutex> lock(*cLock); OCDoHandle handle; OCHeaderOption options[MAX_HEADER_OPTIONS]; result = OCDoResource(&handle, OC_REST_PUT, url.c_str(), &devAddr, assembleSetResourcePayload(rep), CT_DEFAULT, static_cast<OCQualityOfService>(QoS), &cbdata, assembleHeaderOptions(options, headerOptions), headerOptions.size()); } else { delete ctx; result = OC_STACK_ERROR; } return result; }
OCStackResult InProcClientWrapper::PutMQTopicRepresentation( const OCDevAddr& devAddr, const std::string& uri, const OCRepresentation& rep, const QueryParamsMap& queryParams, const HeaderOptions& headerOptions, MQCreateTopicCallback& callback, QualityOfService QoS) { if (!callback) { return OC_STACK_INVALID_PARAM; } OCStackResult result; ClientCallbackContext::CreateMQTopicContext* ctx = new ClientCallbackContext::CreateMQTopicContext(callback, shared_from_this()); OCCallbackData cbdata; cbdata.context = static_cast<void*>(ctx), cbdata.cb = createMQTopicCallback; cbdata.cd = [](void* c){delete (ClientCallbackContext::CreateMQTopicContext*)c;}; std::string url = assembleSetResourceUri(uri, queryParams); auto cLock = m_csdkLock.lock(); if (cLock) { std::lock_guard<std::recursive_mutex> lock(*cLock); OCHeaderOption options[MAX_HEADER_OPTIONS]; result = OCDoResource(nullptr, OC_REST_PUT, url.c_str(), &devAddr, assembleSetResourcePayload(rep), CT_DEFAULT, static_cast<OCQualityOfService>(QoS), &cbdata, assembleHeaderOptions(options, headerOptions), headerOptions.size()); } else { delete ctx; result = OC_STACK_ERROR; } return result; }
OCStackResult InProcClientWrapper::PutResourceRepresentation(const std::string& host, const std::string& uri, const OCRepresentation& rep, const QueryParamsMap& queryParams, const HeaderOptions& headerOptions, PutCallback& callback, QualityOfService QoS) { OCStackResult result; OCCallbackData cbdata = {0}; ClientCallbackContext::SetContext* ctx = new ClientCallbackContext::SetContext(); ctx->callback = callback; cbdata.cb = &setResourceCallback; cbdata.cd = [](void* c) { delete static_cast<ClientCallbackContext::SetContext*>(c); }; cbdata.context = static_cast<void*>(ctx); // 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 auto cLock = m_csdkLock.lock(); if(cLock) { std::lock_guard<std::recursive_mutex> lock(*cLock); OCDoHandle handle; OCHeaderOption options[MAX_HEADER_OPTIONS]; assembleHeaderOptions(options, headerOptions); result = OCDoResource(&handle, OC_REST_PUT, os.str().c_str(), nullptr, assembleSetResourcePayload(rep).c_str(), static_cast<OCQualityOfService>(QoS), &cbdata, options, headerOptions.size()); } else { delete ctx; result = OC_STACK_ERROR; } return result; }