From 59cd3b963bd1da53d5638d2ccb830ca81e50886f Mon Sep 17 00:00:00 2001 From: leechul Date: Thu, 27 Aug 2015 16:07:31 +0900 Subject: [PATCH] Updated provisioning API to cater different connectivity type. - PMGenerateQuery() will make a proper query based on connectivity type of endpoint. [Patch #1] Intial upload [Patch #2] Update according to comments. [Patch #3] Modify the buffer size which is request query is stored. [Patch #4] Update according to comments. [Patch #5] Update according to Jon's comment. Fixed a buffer size for writing queries. Change-Id: I996888faec20614736907dc7c17300eb8d1550cf Signed-off-by: leechul Reviewed-on: https://gerrit.iotivity.org/gerrit/2300 Reviewed-by: Jon A. Cruz Tested-by: jenkins-iotivity Reviewed-by: Sachin Agrawal Tested-by: Sachin Agrawal (cherry picked from commit 60c7a3bf0e1c2f034d11096af422a19fb8fd8740) Reviewed-on: https://gerrit.iotivity.org/gerrit/2324 --- .../csdk/security/provisioning/include/pmtypes.h | 1 + .../csdk/security/provisioning/include/pmutility.h | 19 ++++ .../provisioning/src/ownershiptransfermanager.c | 121 +++++++++++++-------- .../csdk/security/provisioning/src/pmutility.c | 88 ++++++++++++--- .../provisioning/src/secureresourceprovider.c | 47 ++++---- 5 files changed, 195 insertions(+), 81 deletions(-) diff --git a/resource/csdk/security/provisioning/include/pmtypes.h b/resource/csdk/security/provisioning/include/pmtypes.h index 377ce2b..08f21c3 100644 --- a/resource/csdk/security/provisioning/include/pmtypes.h +++ b/resource/csdk/security/provisioning/include/pmtypes.h @@ -36,6 +36,7 @@ typedef struct OCProvisionDev OCDevAddr endpoint; /**< target address **/ OicSecPstat_t *pstat; /**< Pointer to target's pstat resource. **/ OicSecDoxm_t *doxm; /**< Pointer to target's doxm resource. **/ + OCConnectivityType connType; /**< Connectivity type of endpoint */ uint16_t securePort; /**< secure port **/ struct OCProvisionDev *next; /**< Next pointer. **/ }OCProvisionDev_t; diff --git a/resource/csdk/security/provisioning/include/pmutility.h b/resource/csdk/security/provisioning/include/pmutility.h index 79f98b5..ce2f69d 100644 --- a/resource/csdk/security/provisioning/include/pmutility.h +++ b/resource/csdk/security/provisioning/include/pmutility.h @@ -55,6 +55,25 @@ OCStackResult PMDeviceDiscovery(unsigned short waittime, bool isOwned, OCProvisi */ void DeleteDeviceList(OCProvisionDev_t **pList); + +/** + * Function to generate qurey for coap/coaps request. + * + * @param[in] isSeucre Choose whether to encrypt the payload. + * @param[in] address Network address of remote device + * @param[in] port Port number + * @param[in] connType Connectivity type of remote device + * @param[in,out] buffer A buffer to save the query. + * @param[in] bufferSize Size of buffer + * @param[in] uri The resource URI + * + * @return true on success + */ +bool PMGenerateQuery(bool isSecure, + const char* address, uint16_t port, + OCConnectivityType connType, + char* buffer, size_t bufferSize, const char* uri); + #ifdef __cplusplus } #endif diff --git a/resource/csdk/security/provisioning/src/ownershiptransfermanager.c b/resource/csdk/security/provisioning/src/ownershiptransfermanager.c index e1f69f0..b80710c 100644 --- a/resource/csdk/security/provisioning/src/ownershiptransfermanager.c +++ b/resource/csdk/security/provisioning/src/ownershiptransfermanager.c @@ -655,10 +655,17 @@ static OCStackResult PutOwnerTransferModeToResource(OTMContext_t* otmCtx) OCProvisionDev_t* deviceInfo = otmCtx->selectedDeviceInfo; OicSecOxm_t selectedOxm = deviceInfo->doxm->oxmSel; - char query[MAX_QUERY_LENGTH] = {}; - sprintf(query, "%s%s:%d%s", COAP_PREFIX, - deviceInfo->endpoint.addr, deviceInfo->endpoint.port, - OIC_RSRC_DOXM_URI); + char query[MAX_URI_LENGTH + MAX_QUERY_LENGTH] = {0}; + + if(!PMGenerateQuery(false, + deviceInfo->endpoint.addr, deviceInfo->endpoint.port, + deviceInfo->connType, + query, sizeof(query), OIC_RSRC_DOXM_URI)) + { + OC_LOG(ERROR, TAG, "DeviceDiscoveryHandler : Failed to generate query"); + return OC_STACK_ERROR; + } + OC_LOG_V(DEBUG, TAG, "Query=%s", query); OCSecurityPayload* secPayload = (OCSecurityPayload*)OICCalloc(1, sizeof(OCSecurityPayload)); if(!secPayload) { @@ -679,11 +686,9 @@ static OCStackResult PutOwnerTransferModeToResource(OTMContext_t* otmCtx) cbData.cb = &OwnerTransferModeHandler; cbData.context = (void *)otmCtx; cbData.cd = NULL; - - // TODO: 6th argument need to be changed, if we have to use CT_FLAG_SECURE OCStackResult res = OCDoResource(NULL, OC_REST_PUT, query, &deviceInfo->endpoint, (OCPayload*)secPayload, - CT_ADAPTER_IP, OC_LOW_QOS, &cbData, NULL, 0); + deviceInfo->connType, OC_LOW_QOS, &cbData, NULL, 0); if (res != OC_STACK_OK) { OC_LOG(ERROR, TAG, "OCStack resource error"); @@ -705,18 +710,23 @@ static OCStackResult GetProvisioningStatusResource(OTMContext_t* otmCtx) } OCProvisionDev_t* deviceInfo = otmCtx->selectedDeviceInfo; - char query[MAX_QUERY_LENGTH] = {}; - sprintf(query, "%s%s:%d%s", COAP_PREFIX, - deviceInfo->endpoint.addr, deviceInfo->endpoint.port, - OIC_RSRC_PSTAT_URI); + char query[MAX_URI_LENGTH + MAX_QUERY_LENGTH] = {0}; + if(!PMGenerateQuery(false, + deviceInfo->endpoint.addr, deviceInfo->endpoint.port, + deviceInfo->connType, + query, sizeof(query), OIC_RSRC_PSTAT_URI)) + { + OC_LOG(ERROR, TAG, "DeviceDiscoveryHandler : Failed to generate query"); + return OC_STACK_ERROR; + } + OC_LOG_V(DEBUG, TAG, "Query=%s", query); + OCCallbackData cbData; cbData.cb = &ListMethodsHandler; cbData.context = (void *)otmCtx; cbData.cd = NULL; - - // TODO: 6th argument need to be changed, if we have to use CT_FLAG_SECURE OCStackResult res = OCDoResource(NULL, OC_REST_GET, query, NULL, NULL, - CT_ADAPTER_IP, OC_LOW_QOS, &cbData, NULL, 0); + deviceInfo->connType, OC_LOW_QOS, &cbData, NULL, 0); if (res != OC_STACK_OK) { OC_LOG(ERROR, TAG, "OCStack resource error"); @@ -739,10 +749,17 @@ static OCStackResult PutOwnershipInformation(OTMContext_t* otmCtx) } OCProvisionDev_t* deviceInfo = otmCtx->selectedDeviceInfo; - char query[MAX_QUERY_LENGTH] = {}; - sprintf(query, "%s%s:%d%s", COAPS_PREFIX, - deviceInfo->endpoint.addr, deviceInfo->securePort, - OIC_RSRC_DOXM_URI); + char query[MAX_URI_LENGTH + MAX_QUERY_LENGTH] = {0}; + if(!PMGenerateQuery(true, + deviceInfo->endpoint.addr, deviceInfo->securePort, + deviceInfo->connType, + query, sizeof(query), OIC_RSRC_DOXM_URI)) + { + OC_LOG(ERROR, TAG, "DeviceDiscoveryHandler : Failed to generate query"); + return OC_STACK_ERROR; + } + OC_LOG_V(DEBUG, TAG, "Query=%s", query); + //OwnershipInformationHandler OicSecOxm_t selOxm = deviceInfo->doxm->oxmSel; OCSecurityPayload* secPayload = (OCSecurityPayload*)OICCalloc(1, sizeof(OCSecurityPayload)); @@ -764,9 +781,8 @@ static OCStackResult PutOwnershipInformation(OTMContext_t* otmCtx) cbData.cb = &OwnershipInformationHandler; cbData.context = (void *)otmCtx; cbData.cd = NULL; - // TODO: 6th argument need to be changed, if we have to use CT_FLAG_SECURE OCStackResult res = OCDoResource(NULL, OC_REST_PUT, query, 0, (OCPayload*)secPayload, - CT_ADAPTER_IP, OC_LOW_QOS, &cbData, NULL, 0); + deviceInfo->connType, OC_LOW_QOS, &cbData, NULL, 0); if (res != OC_STACK_OK) { OC_LOG(ERROR, TAG, "OCStack resource error"); @@ -788,10 +804,17 @@ static OCStackResult PutUpdateOperationMode(OTMContext_t* otmCtx, } OCProvisionDev_t* deviceInfo = otmCtx->selectedDeviceInfo; - char query[MAX_QUERY_LENGTH] = {}; - sprintf(query, "%s%s:%d%s", COAP_PREFIX, - deviceInfo->endpoint.addr, deviceInfo->endpoint.port, - OIC_RSRC_PSTAT_URI); + char query[MAX_URI_LENGTH + MAX_QUERY_LENGTH] = {0}; + if(!PMGenerateQuery(false, + deviceInfo->endpoint.addr, deviceInfo->endpoint.port, + deviceInfo->connType, + query, sizeof(query), OIC_RSRC_PSTAT_URI)) + { + OC_LOG(ERROR, TAG, "DeviceDiscoveryHandler : Failed to generate query"); + return OC_STACK_ERROR; + } + OC_LOG_V(DEBUG, TAG, "Query=%s", query); + deviceInfo->pstat->om = selectedOperationMode; OCSecurityPayload* secPayload = (OCSecurityPayload*)OICCalloc(1, sizeof(OCSecurityPayload)); @@ -813,9 +836,8 @@ static OCStackResult PutUpdateOperationMode(OTMContext_t* otmCtx, cbData.cb = &OperationModeUpdateHandler; cbData.context = (void *)otmCtx; cbData.cd = NULL; - OCStackResult res = OCDoResource(NULL, OC_REST_PUT, query, 0, (OCPayload*)secPayload, - CT_ADAPTER_IP, OC_LOW_QOS, &cbData, NULL, 0); + deviceInfo->connType, OC_LOW_QOS, &cbData, NULL, 0); if (res != OC_STACK_OK) { OC_LOG(ERROR, TAG, "OCStack resource error"); @@ -1017,20 +1039,24 @@ static OCStackApplicationResult ProvisionDefaultACLCB(void *ctx, OCDoHandle UNUS } OC_LOG_V(INFO, TAG, "Created payload for commit hash: %s",secPayload->securityData); - char uri[MAX_QUERY_LENGTH] = { 0 }; - size_t uriLen = sizeof(uri); + char query[MAX_URI_LENGTH + MAX_QUERY_LENGTH] = {0}; + if(!PMGenerateQuery(true, + otmCtx->selectedDeviceInfo->endpoint.addr, + otmCtx->selectedDeviceInfo->securePort, + otmCtx->selectedDeviceInfo->connType, + query, sizeof(query), OIC_RSRC_PSTAT_URI)) + { + OC_LOG(ERROR, TAG, "DeviceDiscoveryHandler : Failed to generate query"); + return OC_STACK_ERROR; + } + OC_LOG_V(DEBUG, TAG, "Query=%s", query); - snprintf(uri, uriLen - 1, COAPS_QUERY, otmCtx->selectedDeviceInfo->endpoint.addr, - otmCtx->selectedDeviceInfo->securePort, OIC_RSRC_PSTAT_URI); - uri[uriLen - 1] = '\0'; OCCallbackData cbData = {.context=NULL, .cb=NULL, .cd=NULL}; cbData.cb = &FinalizeProvisioningCB; - cbData.context = (void*)otmCtx; // forward context to SRPFinalizeProvisioningCB + cbData.context = (void*)otmCtx; cbData.cd = NULL; - - // TODO change value of CT_ADAPTER_IP with val from discovery - OCStackResult ret = OCDoResource(NULL, OC_REST_PUT, uri, 0, (OCPayload*)secPayload, - CT_ADAPTER_IP, OC_HIGH_QOS, &cbData, NULL, 0); + OCStackResult ret = OCDoResource(NULL, OC_REST_PUT, query, 0, (OCPayload*)secPayload, + otmCtx->selectedDeviceInfo->connType, OC_HIGH_QOS, &cbData, NULL, 0); OC_LOG_V(INFO, TAG, "OCDoResource returned: %d",ret); if (ret != OC_STACK_OK) { @@ -1118,22 +1144,27 @@ OCStackResult FinalizeProvisioning(OTMContext_t* otmCtx) } OC_LOG_V(INFO, TAG, "Provisioning default ACL : %s",secPayload->securityData); - char uri[MAX_QUERY_LENGTH] = { 0 }; + char query[MAX_URI_LENGTH + MAX_QUERY_LENGTH] = {0}; + if(!PMGenerateQuery(true, + otmCtx->selectedDeviceInfo->endpoint.addr, + otmCtx->selectedDeviceInfo->securePort, + otmCtx->selectedDeviceInfo->connType, + query, sizeof(query), OIC_RSRC_ACL_URI)) + { + OC_LOG(ERROR, TAG, "DeviceDiscoveryHandler : Failed to generate query"); + return OC_STACK_ERROR; + } + OC_LOG_V(DEBUG, TAG, "Query=%s", query); - size_t uriLen = sizeof(uri); - snprintf(uri, uriLen - 1, COAPS_QUERY, otmCtx->selectedDeviceInfo->endpoint.addr, - otmCtx->selectedDeviceInfo->securePort, OIC_RSRC_ACL_URI); - uri[uriLen - 1] = '\0'; - OC_LOG_V(INFO, TAG, "Request URI for Provisioning default ACL : %s",uri); + OC_LOG_V(INFO, TAG, "Request URI for Provisioning default ACL : %s", query); OCCallbackData cbData = {.context=NULL, .cb=NULL, .cd=NULL}; cbData.cb = &ProvisionDefaultACLCB; cbData.context = (void *)otmCtx; cbData.cd = NULL; - - OCStackResult ret = OCDoResource(NULL, OC_REST_POST, uri, + OCStackResult ret = OCDoResource(NULL, OC_REST_POST, query, &otmCtx->selectedDeviceInfo->endpoint, (OCPayload*)secPayload, - CT_ADAPTER_IP, OC_HIGH_QOS, &cbData, NULL, 0); + otmCtx->selectedDeviceInfo->connType, OC_HIGH_QOS, &cbData, NULL, 0); if (OC_STACK_OK != ret) { SetResult(otmCtx, ret); diff --git a/resource/csdk/security/provisioning/src/pmutility.c b/resource/csdk/security/provisioning/src/pmutility.c index 0f46c36..eac476a 100644 --- a/resource/csdk/security/provisioning/src/pmutility.c +++ b/resource/csdk/security/provisioning/src/pmutility.c @@ -82,11 +82,12 @@ OCProvisionDev_t* GetDevice(OCProvisionDev_t **ppDevicesList, const char* addr, * @param[in] port port of remote server. * @param[in] adapter adapter type of endpoint. * @param[in] doxm pointer to doxm instance. + * @param[in] connType connectivity type of endpoint * * @return OC_STACK_OK for success and errorcode otherwise. */ OCStackResult AddDevice(OCProvisionDev_t **ppDevicesList, const char* addr, const uint16_t port, - OCTransportAdapter adapter, OicSecDoxm_t *doxm) + OCTransportAdapter adapter, OCConnectivityType connType, OicSecDoxm_t *doxm) { if (NULL == addr) { @@ -109,6 +110,7 @@ OCStackResult AddDevice(OCProvisionDev_t **ppDevicesList, const char* addr, cons ptr->securePort = DEFAULT_SECURE_PORT; ptr->endpoint.adapter = adapter; ptr->next = NULL; + ptr->connType = connType; LL_PREPEND(*ppDevicesList, ptr); } @@ -256,6 +258,56 @@ uint16_t GetSecurePortFromJSON(char* jsonStr) return (uint16_t)jsonPort->valueint; } +bool PMGenerateQuery(bool isSecure, + const char* address, const uint16_t port, + const OCConnectivityType connType, + char* buffer, size_t bufferSize, const char* uri) +{ + if(!address || !buffer || !uri) + { + OC_LOG(ERROR, TAG, "PMGenerateQuery : Invalid parameters."); + return false; + } + + int snRet = 0; + char* prefix = (isSecure == true) ? COAPS_PREFIX : COAP_PREFIX; + + switch(connType & CT_MASK_ADAPTER) + { + case CT_ADAPTER_IP: + switch(connType & CT_MASK_FLAGS) + { + case CT_IP_USE_V4: + snRet = snprintf(buffer, bufferSize, "%s%s:%d%s", + prefix, address, port, uri); + break; + case CT_IP_USE_V6: + snRet = snprintf(buffer, bufferSize, "%s[%s]:%d%s", + prefix, address, port, uri); + break; + default: + OC_LOG(ERROR, ERROR, "Unknown address format."); + return false; + } + if(snRet >= bufferSize) + { + OC_LOG(ERROR, INFO, "PMGenerateQuery : URI is too long"); + return false; + } + break; + // TODO: We need to verify tinyDTLS in below cases + case CT_ADAPTER_GATT_BTLE: + case CT_ADAPTER_RFCOMM_BTEDR: + OC_LOG(ERROR, ERROR, "Not supported connectivity adapter."); + return false; + break; + default: + OC_LOG(ERROR, ERROR, "Unknown connectivity adapter."); + return false; + } + + return true; +} /** * Callback handler for getting secure port information using /oic/res discovery. @@ -290,16 +342,16 @@ static OCStackApplicationResult SecurePortDiscoveryHandler(void *ctx, OCDoHandle return OC_STACK_KEEP_TRANSACTION; } - OCDiscoveryPayload* discover = (OCDiscoveryPayload*) clientResponse->payload; uint16_t securePort = 0; + OCResourcePayload* resPayload = ((OCDiscoveryPayload*)clientResponse->payload)->resources; - if (discover && discover->resources && discover->resources->secure) + if (resPayload && resPayload->secure) { - securePort = discover->resources->port; + securePort = resPayload->port; } else { - OC_LOG(INFO, TAG, "Secure Port info is missing"); + OC_LOG(INFO, TAG, "Can not find secure port information."); return OC_STACK_KEEP_TRANSACTION; } @@ -376,7 +428,8 @@ static OCStackApplicationResult DeviceDiscoveryHandler(void *ctx, OCDoHandle UNU OCStackResult res = AddDevice(ppDevicesList, clientResponse->devAddr.addr, clientResponse->devAddr.port, - clientResponse->devAddr.adapter, ptrDoxm); + clientResponse->devAddr.adapter, + clientResponse->connType, ptrDoxm); if (OC_STACK_OK != res) { OC_LOG(ERROR, TAG, "Error while adding data to linkedlist."); @@ -385,27 +438,32 @@ static OCStackApplicationResult DeviceDiscoveryHandler(void *ctx, OCDoHandle UNU } //Try to the unicast discovery to getting secure port - char query[MAX_QUERY_LENGTH] = { 0, }; - sprintf(query, "%s%s:%d%s", - COAP_PREFIX, - clientResponse->devAddr.addr, clientResponse->devAddr.port, - OC_RSRVD_WELL_KNOWN_URI); + char query[MAX_URI_LENGTH + MAX_QUERY_LENGTH] = { 0, }; + if(!PMGenerateQuery(false, + clientResponse->devAddr.addr, clientResponse->devAddr.port, + clientResponse->connType, + query, sizeof(query), OC_RSRVD_WELL_KNOWN_URI)) + { + OC_LOG(ERROR, TAG, "DeviceDiscoveryHandler : Failed to generate query"); + return OC_STACK_ERROR; + } + OC_LOG_V(DEBUG, TAG, "Query=%s", query); OCCallbackData cbData; cbData.cb = &SecurePortDiscoveryHandler; cbData.context = ctx; cbData.cd = NULL; OCStackResult ret = OCDoResource(NULL, OC_REST_GET, query, 0, 0, - CT_ADAPTER_IP, OC_LOW_QOS, &cbData, NULL, 0); + clientResponse->connType, OC_LOW_QOS, &cbData, NULL, 0); // TODO: Should we use the default secure port in case of error? if(OC_STACK_OK != ret) { - UpdateSecurePortOfDevice(ppDevicesList, clientResponse->devAddr.addr, - clientResponse->devAddr.port, DEFAULT_SECURE_PORT); + OC_LOG(ERROR, TAG, "Failed to Secure Port Discovery"); + return OC_STACK_DELETE_TRANSACTION; } else { - OC_LOG_V(ERROR, TAG, "OCDoResource with [%s] Success", query); + OC_LOG_V(INFO, TAG, "OCDoResource with [%s] Success", query); } OC_LOG(INFO, TAG, "Exiting ProvisionDiscoveryHandler."); } diff --git a/resource/csdk/security/provisioning/src/secureresourceprovider.c b/resource/csdk/security/provisioning/src/secureresourceprovider.c index 4ac8e32..f7ebcea 100644 --- a/resource/csdk/security/provisioning/src/secureresourceprovider.c +++ b/resource/csdk/security/provisioning/src/secureresourceprovider.c @@ -250,14 +250,18 @@ static OCStackResult provisionCredentials(const OicSecCred_t *cred, } OC_LOG_V(INFO, TAG, "Credential for provisioning : %s",secPayload->securityData); - char uri[SRP_MAX_URI_LENGTH] = { 0 }; - - size_t uriLen = sizeof(uri); - snprintf(uri, uriLen - 1, COAPS_QUERY, deviceInfo->endpoint.addr, deviceInfo->securePort, - OIC_RSRC_CRED_URI); + char query[MAX_URI_LENGTH + MAX_QUERY_LENGTH] = {0}; + if(!PMGenerateQuery(true, + deviceInfo->endpoint.addr, + deviceInfo->securePort, + deviceInfo->connType, + query, sizeof(query), OIC_RSRC_CRED_URI)) + { + OC_LOG(ERROR, TAG, "DeviceDiscoveryHandler : Failed to generate query"); + return OC_STACK_ERROR; + } + OC_LOG_V(DEBUG, TAG, "Query=%s", query); - uri[uriLen - 1] = '\0'; - OC_LOG_V(INFO, TAG, "URI for Credential provisioning : %s",uri); OCCallbackData cbData = {.context=NULL, .cb=NULL, .cd=NULL}; cbData.cb = responseHandler; cbData.context = (void *) credData; @@ -265,9 +269,8 @@ static OCStackResult provisionCredentials(const OicSecCred_t *cred, OCDoHandle handle = NULL; OCMethod method = OC_REST_POST; - // TODO replace CT_ADAPTER_IP with value from discovery - OCStackResult ret = OCDoResource(&handle, method, uri, 0, (OCPayload*)secPayload, - CT_ADAPTER_IP, OC_HIGH_QOS, &cbData, NULL, 0); + OCStackResult ret = OCDoResource(&handle, method, query, 0, (OCPayload*)secPayload, + deviceInfo->connType, OC_HIGH_QOS, &cbData, NULL, 0); OC_LOG_V(INFO, TAG, "OCDoResource::Credential provisioning returned : %d",ret); if (ret != OC_STACK_OK) { @@ -439,14 +442,18 @@ OCStackResult SRPProvisionACL(void *ctx, const OCProvisionDev_t *selectedDeviceI } OC_LOG_V(INFO, TAG, "ACL : %s", secPayload->securityData); - char uri[SRP_MAX_URI_LENGTH] = {0}; - size_t uriLen = sizeof(uri); - - snprintf(uri, uriLen - 1, COAPS_QUERY, selectedDeviceInfo->endpoint.addr, - selectedDeviceInfo->securePort, OIC_RSRC_ACL_URI); - uri[uriLen - 1] = '\0'; + char query[MAX_URI_LENGTH + MAX_QUERY_LENGTH] = {0}; + if(!PMGenerateQuery(true, + selectedDeviceInfo->endpoint.addr, + selectedDeviceInfo->securePort, + selectedDeviceInfo->connType, + query, sizeof(query), OIC_RSRC_ACL_URI)) + { + OC_LOG(ERROR, TAG, "DeviceDiscoveryHandler : Failed to generate query"); + return OC_STACK_ERROR; + } + OC_LOG_V(DEBUG, TAG, "Query=%s", query); - OC_LOG_V(INFO, TAG, "URI : %s", uri); OCCallbackData cbData = {.context=NULL, .cb=NULL, .cd=NULL}; cbData.cb = &SRPProvisionACLCB; ACLData_t *aclData = (ACLData_t *) OICMalloc(sizeof(ACLData_t)); @@ -476,11 +483,9 @@ OCStackResult SRPProvisionACL(void *ctx, const OCProvisionDev_t *selectedDeviceI OCMethod method = OC_REST_POST; OCDoHandle handle = NULL; OC_LOG(DEBUG, TAG, "Sending ACL info to resource server"); - // TODO replace CT_ADAPTER_IP with value from discovery - - OCStackResult ret = OCDoResource(&handle, method, uri, + OCStackResult ret = OCDoResource(&handle, method, query, &selectedDeviceInfo->endpoint, (OCPayload*)secPayload, - CT_ADAPTER_IP, OC_HIGH_QOS, &cbData, NULL, 0); + selectedDeviceInfo->connType, OC_HIGH_QOS, &cbData, NULL, 0); if (ret != OC_STACK_OK) { OICFree(aclData->resArr); -- 2.7.4