void InProcClientWrapper::assembleHeaderOptions(OCHeaderOption options[], const HeaderOptions& headerOptions) { int i = 0; for (auto it=headerOptions.begin(); it != headerOptions.end(); ++it) { options[i].protocolID = OC_COAP_ID; options[i].optionID = static_cast<uint16_t>(it->getOptionID()); options[i].optionLength = (it->getOptionData()).length() + 1; memcpy(options[i].optionData, (it->getOptionData()).c_str(), (it->getOptionData()).length() + 1); i++; } }
OCHeaderOption* InProcClientWrapper::assembleHeaderOptions(OCHeaderOption options[], const HeaderOptions& headerOptions) { int i = 0; if( headerOptions.size() == 0) { return nullptr; } for (auto it=headerOptions.begin(); it != headerOptions.end(); ++it) { options[i] = OCHeaderOption(OC_COAP_ID, it->getOptionID(), it->getOptionData().length() + 1, reinterpret_cast<const uint8_t*>(it->getOptionData().c_str())); i++; } return options; }
OCHeaderOption* InProcClientWrapper::assembleHeaderOptions(OCHeaderOption options[], const HeaderOptions& headerOptions) { int i = 0; if ( headerOptions.size() == 0) { return nullptr; } for (auto it=headerOptions.begin(); it != headerOptions.end(); ++it) { options[i] = OCHeaderOption(); options[i].protocolID = OC_COAP_ID; options[i].optionID = it->getOptionID(); options[i].optionLength = it->getOptionData().length() + 1; strcpy((char*)options[i].optionData, (it->getOptionData().c_str())); i++; } return options; }
OCStackResult InProcServerWrapper::sendResponse( const std::shared_ptr<OCResourceResponse> pResponse) { auto cLock = m_csdkLock.lock(); OCStackResult result = OC_STACK_ERROR; if(!pResponse) { result = OC_STACK_MALFORMED_RESPONSE; throw OCException(OC::Exception::STR_NULL_RESPONSE, OC_STACK_MALFORMED_RESPONSE); } else { OCEntityHandlerResponse response; // OCRepPayload* payLoad = pResponse->getPayload(); HeaderOptions serverHeaderOptions = pResponse->getHeaderOptions(); response.requestHandle = pResponse->getRequestHandle(); response.resourceHandle = pResponse->getResourceHandle(); response.ehResult = pResponse->getResponseResult(); response.payload = reinterpret_cast<OCPayload*>(pResponse->getPayload()); response.persistentBufferFlag = 0; response.numSendVendorSpecificHeaderOptions = serverHeaderOptions.size(); int i = 0; for (auto it=serverHeaderOptions.begin(); it != serverHeaderOptions.end(); ++it) { response.sendVendorSpecificHeaderOptions[i].protocolID = OC_COAP_ID; response.sendVendorSpecificHeaderOptions[i].optionID = static_cast<uint16_t>(it->getOptionID()); response.sendVendorSpecificHeaderOptions[i].optionLength = (it->getOptionData()).length() + 1; std::string optionData = it->getOptionData(); std::copy(optionData.begin(), optionData.end(), response.sendVendorSpecificHeaderOptions[i].optionData); response.sendVendorSpecificHeaderOptions[i].optionData[it->getOptionData().length()] = '\0'; i++; } if(OC_EH_RESOURCE_CREATED == response.ehResult) { pResponse->getNewResourceUri().copy(response.resourceUri, sizeof (response.resourceUri) - 1); response.resourceUri[pResponse->getNewResourceUri().length()] = '\0'; } if(cLock) { std::lock_guard<std::recursive_mutex> lock(*cLock); result = OCDoResponse(&response); } else { OICFree(response.payload); result = OC_STACK_ERROR; } if(result != OC_STACK_OK) { oclog() << "Error sending response\n"; } return result; } }