keepalive for coap over tcp
[platform/upstream/iotivity.git] / resource / csdk / stack / src / ocstack.c
index 992819e..857667f 100644 (file)
 #endif
 #endif
 
+#ifdef TCP_ADAPTER
+#include "oickeepalive.h"
+#endif
+
 #ifdef WITH_ARDUINO
 #include "Time.h"
 #else
@@ -608,6 +612,7 @@ OCStackResult CAToOCStackResult(CAResponseResult_t caCode)
             break;
         case CA_CHANGED:
         case CA_CONTENT:
+        case CA_VALID:
             ret = OC_STACK_OK;
             break;
         case CA_BAD_REQ:
@@ -1187,6 +1192,12 @@ void HandleCAResponses(const CAEndpoint_t* endPoint, const CAResponseInfo_t* res
                     {
                         type = PAYLOAD_TYPE_RD;
                     }
+#ifdef TCP_ADAPTER
+                    else if (strcmp(cbNode->requestUri, KEEPALIVE_RESOURCE_URI) == 0)
+                    {
+                        type = PAYLOAD_TYPE_REPRESENTATION;
+                    }
+#endif
                     else
                     {
                         OIC_LOG_V(ERROR, TAG, "Unknown Payload type in Discovery: %d %s",
@@ -1504,6 +1515,15 @@ void HandleCARequests(const CAEndpoint_t* endPoint, const CARequestInfo_t* reque
                  (CAEndpoint_t *) endPoint);
 #endif
 
+#ifdef TCP_ADAPTER
+    if (requestInfo->info.resourceUri &&
+            strcmp(requestInfo->info.resourceUri, KEEPALIVE_RESOURCE_URI) == 0)
+    {
+        HandleKeepAliveRequest(endPoint, requestInfo);
+        return;
+    }
+#endif
+
     OCStackResult requestResult = OC_STACK_ERROR;
 
     if(myStackMode == OC_CLIENT)
@@ -1916,6 +1936,10 @@ OCStackResult OCInit1(OCMode mode, OCTransportFlags serverFlags, OCTransportFlag
     }
     VERIFY_SUCCESS(result, OC_STACK_OK);
 
+#ifdef TCP_ADAPTER
+    CARegisterKeepAliveHandler(HandleKeepAliveConnCB, HandleKeepAliveDisconnCB);
+#endif
+
 #ifdef WITH_PRESENCE
     PresenceTimeOutSize = sizeof (PresenceTimeOut) / sizeof (PresenceTimeOut[0]) - 1;
 #endif // WITH_PRESENCE
@@ -1943,6 +1967,13 @@ OCStackResult OCInit1(OCMode mode, OCTransportFlags serverFlags, OCTransportFlag
     }
 #endif
 
+#ifdef TCP_ADAPTER
+    if(result == OC_STACK_OK)
+    {
+        result = InitializeKeepAlive();
+    }
+#endif
+
 exit:
     if(result != OC_STACK_OK)
     {
@@ -1984,6 +2015,10 @@ OCStackResult OCStop()
     }
 #endif
 
+#ifdef TCP_ADAPTER
+    TerminateKeepAlive();
+#endif
+
     // Free memory dynamically allocated for resources
     deleteAllResources();
     DeleteDeviceInfo();
@@ -2786,6 +2821,10 @@ OCStackResult OCProcess()
 #ifdef ROUTING_GATEWAY
     RMProcess();
 #endif
+
+#ifdef TCP_ADAPTER
+    ProcessKeepAlive();
+#endif
     return OC_STACK_OK;
 }