+ CAInfo_t requestData = { .tokenLength = pdu->transport_hdr->udp.token_length };
+ requestData.token = (CAToken_t) OICMalloc(requestData.tokenLength);
+ if (!requestData.token)
+ {
+ OIC_LOG(ERROR, TAG, "out of memory");
+ return NULL;
+ }
+ memcpy(requestData.token, pdu->transport_hdr->udp.token, requestData.tokenLength);
+
+ requestInfo = (CARequestInfo_t*) OICCalloc(1, sizeof(CARequestInfo_t));
+ if (!requestInfo)
+ {
+ OIC_LOG(ERROR, TAG, "out of memory");
+ OICFree(requestData.token);
+ return NULL;
+ }
+ requestInfo->info = requestData;
+
+ // get resource uri information from received response message
+ // to send next request message to remote device
+ CAResponseInfo_t* resInfo = (CAResponseInfo_t*)OICCalloc(1, sizeof(*resInfo));
+ if (!resInfo)
+ {
+ OIC_LOG(ERROR, TAG, "memory allocation failed");
+ OICFree(requestData.token);
+ return NULL;
+ }
+
+ CAGetResponseInfoFromPDU(pdu, resInfo, endpoint);
+ requestInfo->method = CA_GET;
+ requestInfo->info.messageId = CAGetMessageIdFromPduBinaryData(pdu->transport_hdr, pdu->length);
+ requestInfo->info.resourceUri = OICStrdup(resInfo->info.resourceUri);
+
+ // after copying the resource uri, destroy response info.
+ CADestroyResponseInfoInternal(resInfo);