+//-------------------------------------------------------------------------------------------------
+// Local functions
+//-------------------------------------------------------------------------------------------------
+
+/**
+ * Add a server response to the server response list
+ *
+ * @param response initialized server response that is created by this function
+ * @param requestHandle - handle of the response
+ *
+ * @return
+ * OCStackResult
+ */
+static OCStackResult AddServerResponse (OCServerResponse ** response, OCRequestHandle requestHandle)
+{
+ if (!response)
+ {
+ return OC_STACK_INVALID_PARAM;
+ }
+
+ OCServerResponse * serverResponse = NULL;
+
+ serverResponse = (OCServerResponse *) OICCalloc(1, sizeof(OCServerResponse));
+ VERIFY_NON_NULL(serverResponse);
+
+ serverResponse->payload = NULL;
+
+ serverResponse->requestHandle = requestHandle;
+
+ *response = serverResponse;
+ OIC_LOG(INFO, TAG, "Server Response Added!!");
+ LL_APPEND (serverResponseList, serverResponse);
+ return OC_STACK_OK;
+
+exit:
+ if (serverResponse)
+ {
+ OICFree(serverResponse);
+ serverResponse = NULL;
+ }
+ *response = NULL;
+ return OC_STACK_NO_MEMORY;
+}
+
+/**
+ * Delete a server request from the server request list
+ *
+ * @param serverRequest - server request to delete
+ */
+static void DeleteServerRequest(OCServerRequest * serverRequest)
+{
+ if(serverRequest)
+ {
+ LL_DELETE(serverRequestList, serverRequest);
+ OICFree(serverRequest->requestToken);
+ OICFree(serverRequest->rcvdVendorSpecificHeaderOptions);
+ OICFree(serverRequest);
+ serverRequest = NULL;
+ OIC_LOG(INFO, TAG, "Server Request Removed!!");
+ }
+}
+
+/**
+ * Delete a server response from the server response list
+ *
+ * @param serverResponse - server response to delete
+ */
+static void DeleteServerResponse(OCServerResponse * serverResponse)
+{
+ if(serverResponse)
+ {
+ LL_DELETE(serverResponseList, serverResponse);
+ OCPayloadDestroy(serverResponse->payload);
+ OICFree(serverResponse);
+ OIC_LOG(INFO, TAG, "Server Response Removed!!");
+ }
+}
+
+/**
+ * Find a server response and delete it from the server response list
+ *
+ * @param serverResponse - server response to find and delete
+ */
+static void FindAndDeleteServerResponse(OCServerResponse * serverResponse)
+{
+ OCServerResponse* tmp;
+ if(serverResponse)
+ {
+ LL_FOREACH(serverResponseList, tmp)
+ {
+ if (serverResponse == tmp)
+ {
+ DeleteServerResponse(tmp);
+ return;
+ }
+ }
+ }
+}
+
+/**
+ * Ensure no accept header option is included when sending responses and add routing info to
+ * outgoing response.
+ *
+ * @param object CA remote endpoint.
+ * @param requestInfo CA request info.
+ *
+ * @return ::OC_STACK_OK on success, some other value upon failure.
+ */
+static OCStackResult OCSendResponse(const CAEndpoint_t *object, CAResponseInfo_t *responseInfo)