return OC_MQ_BROKER_URI;
}
#endif //MQ_BROKER
+
+#ifdef TCP_ADAPTER
+ else if (strcmp(uriInRequest, OC_RSRVD_KEEPALIVE_URI) == 0)
+ {
+ return OC_KEEPALIVE_RESOURCE_URI;
+ }
+#endif
+
return OC_UNKNOWN_URI;
}
}
#endif
-
+#ifdef TCP_ADAPTER
+ else if (OC_KEEPALIVE_RESOURCE_URI == virtualUriInRequest)
+ {
+ // Received request for a keepalive
+ OIC_LOG(INFO, TAG, "Request is for KeepAlive Request");
+ discoveryResult = HandleKeepAliveRequest(request, resource);
+ }
+#endif
/**
* Step 2: Send the discovery response
*
SendPresenceNotification(resource->rsrcType, OC_PRESENCE_TRIGGER_CHANGE);
}
else
- #endif
-#ifdef ROUTING_GATEWAY
+#endif
+#if ROUTING_GATEWAY
// Gateway uses the RMHandleGatewayRequest to respond to the request.
if (OC_GATEWAY_URI != virtualUriInRequest)
#endif
{
- if(discoveryResult == OC_STACK_OK)
- {
- SendNonPersistantDiscoveryResponse(request, resource, payload, OC_EH_OK);
- }
- else if(((request->devAddr.flags & OC_MULTICAST) == false) &&
- (request->devAddr.adapter != OC_ADAPTER_RFCOMM_BTEDR) &&
- (request->devAddr.adapter != OC_ADAPTER_GATT_BTLE))
- {
- OIC_LOG_V(ERROR, TAG, "Sending a (%d) error to (%d) discovery request",
- discoveryResult, virtualUriInRequest);
- SendNonPersistantDiscoveryResponse(request, resource, NULL,
- (discoveryResult == OC_STACK_NO_RESOURCE) ? OC_EH_RESOURCE_NOT_FOUND : OC_EH_ERROR);
- }
- else
+#if TCP_ADAPTER
+ // KeepAlive uses the HandleKeepAliveRequest to respond to the request.
+ if (OC_KEEPALIVE_RESOURCE_URI != virtualUriInRequest)
+#endif
{
- // Ignoring the discovery request as per RFC 7252, Section #8.2
- OIC_LOG(INFO, TAG, "Silently ignoring the request since no useful data to send. ");
- // the request should be removed. since it never remove and causes a big memory waste.
- FindAndDeleteServerRequest(request);
+ if(discoveryResult == OC_STACK_OK)
+ {
+ SendNonPersistantDiscoveryResponse(request, resource, payload, OC_EH_OK);
+ }
+ else if(((request->devAddr.flags & OC_MULTICAST) == false) &&
+ (request->devAddr.adapter != OC_ADAPTER_RFCOMM_BTEDR) &&
+ (request->devAddr.adapter != OC_ADAPTER_GATT_BTLE))
+ {
+ OIC_LOG_V(ERROR, TAG, "Sending a (%d) error to (%d) discovery request",
+ discoveryResult, virtualUriInRequest);
+ SendNonPersistantDiscoveryResponse(request, resource, NULL,
+ (discoveryResult == OC_STACK_NO_RESOURCE) ?
+ OC_EH_RESOURCE_NOT_FOUND : OC_EH_ERROR);
+ }
+ else
+ {
+ // Ignoring the discovery request as per RFC 7252, Section #8.2
+ OIC_LOG(INFO, TAG, "Silently ignoring the request since no useful data to send.");
+ // the request should be removed.
+ // since it never remove and causes a big memory waste.
+ FindAndDeleteServerRequest(request);
+ }
}
}
/**
* API to handle the GET request received for a KeepAlive resource.
- * @param[in] endPoint RemoteEndpoint which sent the packet.
- * @param[in] requestInfo Received coap packet.
+ * @param[in] request Request Received.
+ * @param[in] resource Resource handle used for sending the response.
* @return ::OC_STACK_OK or Appropriate error code.
*/
-static OCStackResult HandleKeepAliveGETRequest(const CAEndpoint_t* endPoint,
- const CARequestInfo_t* requestInfo);
+static OCStackResult HandleKeepAliveGETRequest(OCServerRequest *request,
+ const OCResource *resource);
/**
* API to handle the PUT request received for a KeepAlive resource.
- * @param[in] endPoint RemoteEndpoint which sent the packet.
- * @param[in] requestInfo Received coap packet.
+ * @param[in] request Request Received.
+ * @param[in] resource Resource handle used for sending the response.
* @return ::OC_STACK_OK or Appropriate error code.
*/
-static OCStackResult HandleKeepAlivePUTRequest(const CAEndpoint_t* endPoint,
- const CARequestInfo_t* requestInfo);
+static OCStackResult HandleKeepAlivePUTRequest(OCServerRequest *request,
+ const OCResource *resource);
/**
* API to handle the Response payload.
return result;
}
-OCStackResult HandleKeepAliveRequest(const CAEndpoint_t* endPoint,
- const CARequestInfo_t* requestInfo)
+OCStackResult HandleKeepAliveRequest(OCServerRequest *request,
+ const OCResource *resource)
{
- VERIFY_NON_NULL(endPoint, FATAL, OC_STACK_INVALID_PARAM);
- VERIFY_NON_NULL(requestInfo, FATAL, OC_STACK_INVALID_PARAM);
+ VERIFY_NON_NULL(request, FATAL, OC_STACK_INVALID_PARAM);
+ VERIFY_NON_NULL(resource, FATAL, OC_STACK_INVALID_PARAM);
OIC_LOG(DEBUG, TAG, "HandleKeepAliveRequest IN");
- OCStackResult result = OC_STACK_OK;
- if (CA_PUT == requestInfo->method)
+ OCStackResult result = OC_STACK_ERROR;
+ if (OC_REST_GET == request->method)
{
- result = HandleKeepAlivePUTRequest(endPoint, requestInfo);
+ switch ((OCObserveAction)request->observationOption)
+ {
+ case OC_OBSERVE_NO_OPTION:
+ OIC_LOG(DEBUG, TAG, "Received GET request");
+ result = HandleKeepAliveGETRequest(request, resource);
+ break;
+ default:
+ OIC_LOG(DEBUG, TAG, "Not Supported by KeepAlive");
+ result = OC_STACK_UNAUTHORIZED_REQ;
+ }
}
- else if (CA_GET == requestInfo->method)
+ else if (OC_REST_PUT == request->method)
{
- result = HandleKeepAliveGETRequest(endPoint, requestInfo);
+ OIC_LOG(DEBUG, TAG, "Received PUT request");
+ result = HandleKeepAlivePUTRequest(request, resource);
}
+ else
+ {
+ OIC_LOG(DEBUG, TAG, "Not Supported by KeepAlive");
+ result = OC_STACK_UNAUTHORIZED_REQ;
+ }
+
+ // convert OCStackResult to CAResponseResult_t.
+ CAResponseResult_t caResult = OCToCAStackResult(result, request->method);
+ CAEndpoint_t endpoint = {.adapter = CA_DEFAULT_ADAPTER};
+ CopyDevAddrToEndpoint(&request->devAddr, &endpoint);
+
+ // Send response message.
+ SendDirectStackResponse(&endpoint, request->coapID, caResult,
+ qualityOfServiceToMessageType(request->qos),
+ request->numRcvdVendorSpecificHeaderOptions,
+ request->rcvdVendorSpecificHeaderOptions,
+ request->requestToken, request->tokenLength,
+ request->resourceUrl, CA_RESPONSE_DATA);
OIC_LOG(DEBUG, TAG, "HandleKeepAliveRequest OUT");
- return result;
+ return OC_STACK_OK;
}
-OCStackResult HandleKeepAliveGETRequest(const CAEndpoint_t* endPoint,
- const CARequestInfo_t* requestInfo)
+OCStackResult HandleKeepAliveGETRequest(OCServerRequest *request,
+ const OCResource *resource)
{
- VERIFY_NON_NULL(endPoint, FATAL, OC_STACK_INVALID_PARAM);
- VERIFY_NON_NULL(requestInfo, FATAL, OC_STACK_INVALID_PARAM);
+ VERIFY_NON_NULL(request, FATAL, OC_STACK_INVALID_PARAM);
+ VERIFY_NON_NULL(resource, FATAL, OC_STACK_INVALID_PARAM);
- OIC_LOG_V(DEBUG, TAG, "Find Ping resource [%s]", requestInfo->info.resourceUri);
+ OIC_LOG_V(DEBUG, TAG, "Find Ping resource [%s]", request->resourceUrl);
CAResponseResult_t result = CA_CONTENT;
- OCResource *resourcePtr = FindResourceByUri(requestInfo->info.resourceUri);
+ OCResource *resourcePtr = FindResourceByUri(request->resourceUrl);
if (!resourcePtr)
{
// Resource URL not specified
- OIC_LOG_V(DEBUG, TAG, "There is no Ping resource [%s]", requestInfo->info.resourceUri);
- result = CA_NOT_FOUND;
+ OIC_LOG_V(DEBUG, TAG, "There is no Ping resource [%s]", request->resourceUrl);
+ return OC_STACK_NO_RESOURCE;
}
- SendDirectStackResponse(endPoint, requestInfo->info.messageId, result, requestInfo->info.type,
- requestInfo->info.numOptions, requestInfo->info.options,
- requestInfo->info.token, requestInfo->info.tokenLength,
- requestInfo->info.resourceUri, CA_RESPONSE_DATA);
-
return OC_STACK_OK;
}
-OCStackResult HandleKeepAlivePUTRequest(const CAEndpoint_t* endPoint,
- const CARequestInfo_t* requestInfo)
+OCStackResult HandleKeepAlivePUTRequest(OCServerRequest *request,
+ const OCResource *resource)
{
- VERIFY_NON_NULL(endPoint, FATAL, OC_STACK_INVALID_PARAM);
- VERIFY_NON_NULL(requestInfo, FATAL, OC_STACK_INVALID_PARAM);
+ VERIFY_NON_NULL(request, FATAL, OC_STACK_INVALID_PARAM);
+ VERIFY_NON_NULL(resource, FATAL, OC_STACK_INVALID_PARAM);
// Get entry from KeepAlive table.
+ CAEndpoint_t endpoint = { .adapter = CA_DEFAULT_ADAPTER };
+ CopyDevAddrToEndpoint(&request->devAddr, &endpoint);
+
uint32_t index = 0;
- KeepAliveEntry_t *entry = GetEntryFromEndpoint(endPoint, &index);
+ KeepAliveEntry_t *entry = GetEntryFromEndpoint(&endpoint, &index);
if (!entry)
{
OIC_LOG(ERROR, TAG, "Received the first keepalive message from client");
- entry = AddKeepAliveEntry(endPoint, OC_SERVER, NULL);
+ entry = AddKeepAliveEntry(&endpoint, OC_SERVER, NULL);
if (!entry)
{
OIC_LOG(ERROR, TAG, "Failed to add new keepalive entry");
OCPayload *ocPayload = NULL;
OCParsePayload(&ocPayload, PAYLOAD_TYPE_REPRESENTATION,
- requestInfo->info.payload, requestInfo->info.payloadSize);
+ request->payload, request->payloadSize);
OCRepPayload *repPayload = (OCRepPayload *)ocPayload;
int64_t interval = 0;
OCPayloadDestroy(ocPayload);
- // Send response message.
- return SendDirectStackResponse(endPoint, requestInfo->info.messageId, CA_CHANGED,
- requestInfo->info.type, requestInfo->info.numOptions,
- requestInfo->info.options, requestInfo->info.token,
- requestInfo->info.tokenLength, requestInfo->info.resourceUri,
- CA_RESPONSE_DATA);
+ return OC_STACK_OK;
}
OCStackResult HandleKeepAliveResponse(const CAEndpoint_t *endPoint,
if (NULL == clientResponse)
{
OIC_LOG(ERROR, TAG, "clientResponse is NULL");
- return OC_STACK_KEEP_TRANSACTION;
+ return OC_STACK_DELETE_TRANSACTION;
}
CAEndpoint_t endpoint = { .adapter = CA_ADAPTER_TCP };
(OCRepPayload *)clientResponse->payload);
OIC_LOG(DEBUG, TAG, "PingRequestCallback OUT");
- return OC_STACK_KEEP_TRANSACTION;
+ return OC_STACK_DELETE_TRANSACTION;
}
KeepAliveEntry_t *GetEntryFromEndpoint(const CAEndpoint_t *endpoint, uint32_t *index)