Publish resource to cloud
authorch79.cho <ch79.cho@samsung.com>
Thu, 7 Jul 2016 09:37:46 +0000 (18:37 +0900)
committerUze Choi <uzchoi@samsung.com>
Fri, 15 Jul 2016 05:58:15 +0000 (05:58 +0000)
The changes are about cloud notification service on provider side.
The provider service publishes its resource through cloud interface.
An application is required to call NSEnableRemoteSerivce(..) API
to publish it after login process.

Change-Id: I271c81858f2d1e63bc49ef0fa0012dde48a9c11a
Signed-off-by: ch79.cho <ch79.cho@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/9213
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
Tested-by: Uze Choi <uzchoi@samsung.com>
12 files changed:
service/notification/examples/linux/notificationprovider.c
service/notification/include/NSProviderInterface.h
service/notification/src/common/NSCloudConnector.c [new file with mode: 0644]
service/notification/src/common/NSCloudConnector.h [new file with mode: 0644]
service/notification/src/common/NSConstants.h
service/notification/src/provider/NSProviderDiscovery.c
service/notification/src/provider/NSProviderInterface.c
service/notification/src/provider/NSProviderListener.c
service/notification/src/provider/NSProviderListener.h
service/notification/src/provider/NSProviderResource.c
service/notification/src/provider/NSProviderResource.h
service/notification/src/provider/NSProviderSystem.c

index baa9ada..f4313e1 100644 (file)
@@ -21,6 +21,7 @@
 #include <stdio.h>\r
 #include <stdbool.h>\r
 #include <stdlib.h>\r
+#include <unistd.h>\r
 #include "NSCommon.h"\r
 #include "NSProviderInterface.h"\r
 #include "logger.h"\r
@@ -29,7 +30,7 @@
 #include "oic_string.h"\r
 #include "oic_malloc.h"\r
 \r
-#define TAG "notiProviderExample"\r
+#define TAG "NSProviderExample"\r
 \r
 extern char *strdup(const char *s);\r
 \r
@@ -68,20 +69,68 @@ void syncCallback(NSSyncInfo *sync)
     printf("NS_APP Sync State: %d\n", sync->state);\r
 }\r
 \r
+OCStackApplicationResult CloudLoginoutCallback(void *ctx,\r
+        OCDoHandle handle, OCClientResponse *clientResponse)\r
+{\r
+    int CtxValue = 0x99;\r
+    if (ctx != (void *)CtxValue)\r
+    {\r
+        OIC_LOG(INFO, TAG, "Invalid Cloud Login/out callback received");\r
+    }\r
+\r
+    OIC_LOG(INFO, TAG, "Login/out response received");\r
+\r
+    if (clientResponse->payload != NULL &&\r
+            clientResponse->payload->type == PAYLOAD_TYPE_REPRESENTATION)\r
+    {\r
+        OIC_LOG(INFO, TAG, "PAYLOAD_TYPE_REPRESENTATION received");\r
+\r
+        OCRepPayloadValue *val = ((OCRepPayload *)clientResponse->payload)->values;\r
+\r
+        OIC_LOG(INFO, TAG, "Get payload values");\r
+        while (val)\r
+        {\r
+            OIC_LOG_V(INFO, TAG, "key: %s / Value: %s", val->name, val->str);\r
+            val = val->next;\r
+        }\r
+\r
+        char *serverAddress = "coap+tcp://52.69.149.85:5683";\r
+        NSProviderEnableRemoteService(serverAddress);\r
+    }\r
+\r
+    return OC_STACK_KEEP_TRANSACTION;\r
+}\r
+\r
+FILE* server_fopen(const char *path, const char *mode)\r
+{\r
+    (void)path;\r
+    return fopen("oic_ns_provider_db.dat", mode);\r
+}\r
+\r
 int main()\r
 {\r
     int num;\r
     pthread_t processThread;\r
 \r
+    // cloud host address\r
+    const char *host = "coap+tcp://52.69.149.85:5683";\r
+    // cloud auth session\r
+    const char *auth_session = "gZDRuDyYapZXIcrs";\r
+\r
+\r
     OIC_LOG(INFO, TAG, "NSStartProvider()");\r
 \r
+    // open oic_db\r
+    static OCPersistentStorage ps = {server_fopen, fread, fwrite, fclose, unlink};\r
+    OCRegisterPersistentStorageHandler(&ps);\r
+\r
     if (OCInit(NULL, 0, OC_CLIENT_SERVER) != OC_STACK_OK)\r
     {\r
         OIC_LOG(INFO, TAG, "OCStack init error");\r
         return 0;\r
     }\r
 \r
-    pthread_create(&processThread, NULL, OCProcessThread, NULL);\r
+    pthread_create(&processThread, NULL, OCProcessThread, unlink);\r
 \r
     while (!isExit)\r
     {\r
@@ -93,8 +142,8 @@ int main()
         printf("4. NSRead \n");\r
         printf("5. NSStopProvider() \n");\r
         printf("6. NSGetConsumerList \n");\r
-        //printf("7. startPresence \n");\r
-        //printf("8. stopPresence \n");\r
+        printf("11. NSCloudLogin \n");\r
+        printf("12. NSCloudLogout \n");\r
         printf("0. Exit() \n");\r
 \r
         printf("input : ");\r
@@ -156,13 +205,17 @@ int main()
             case 6:\r
                 OIC_LOG(INFO, TAG, "NSGetConsumerList");\r
                 break;\r
-            case 7:\r
-                OIC_LOG(INFO, TAG, "NSStartPresence - not working");\r
-                //NSTestStartPresence();\r
+            case 11:\r
+                OIC_LOG(INFO, TAG, "NSCloudLogin");\r
+\r
+                NSCloudLogin(host, auth_session, CloudLoginoutCallback);\r
+                OIC_LOG(INFO, TAG, "OCCloudLogin requested");\r
                 break;\r
-            case 8:\r
-                OIC_LOG(INFO, TAG, "NSStopPresence- not working");\r
-                //NSTestStopPresence();\r
+            case 12:\r
+                OIC_LOG(INFO, TAG, "NSCloudLogout");\r
+\r
+                NSCloudLogout(host, auth_session, CloudLoginoutCallback);\r
+                OIC_LOG(INFO, TAG, "OCCloudLogout requested");\r
                 break;\r
             case 0:\r
                 NSStopProvider();\r
index 33c0aff..ebe6091 100644 (file)
@@ -67,6 +67,20 @@ NSResult NSStartProvider(NSAccessPolicy policy, NSSubscribeRequestCallback subsc
 NSResult NSStopProvider();\r
 \r
 /**\r
+ * Request to publish resource to cloud server\r
+ * @param[in]  server address combined with IP address and port number using delimiter :\r
+ * @return ::NS_OK or result code of NSResult\r
+ */\r
+NSResult NSProviderEnableRemoteService(char *serverAddress);\r
+\r
+/**\r
+ * Request to cancel remote service using cloud server\r
+ * @param[in]  server address combined with IP address and port number using delimiter :\r
+ * @return ::NS_OK or result code of NSResult\r
+ */\r
+NSResult NSProviderDisableRemoteService(char *serverAddress);\r
+\r
+/**\r
  * Send notification message to all subscribers\r
  * @param[in]  message  Notification message including id, title, contentText\r
  * @return ::NS_OK or result code of NSResult\r
diff --git a/service/notification/src/common/NSCloudConnector.c b/service/notification/src/common/NSCloudConnector.c
new file mode 100644 (file)
index 0000000..34c122c
--- /dev/null
@@ -0,0 +1,296 @@
+//******************************************************************
+//
+// Copyright 2016 Samsung Electronics All Rights Reserved.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#include "NSCloudConnector.h"
+#include "NSUtil.h"
+
+#include <stdarg.h>
+#include <stdlib.h>
+
+#include "oic_string.h"
+#include "oic_malloc.h"
+
+#include "ocpayload.h"
+
+#include "rdpayload.h"
+/*
+#define OC_RD_PUBLISH_TTL 86400
+#define DEFAULT_CONTEXT_VALUE 0x99
+
+#define DEFAULT_COAP_TCP_HOST "coap+tcp://"
+#define DEFAULT_COAP_TCP_PORT 5683
+
+#define DEFAULT_COAP_TCP_SECURE_HOST "coaps+tcp://"
+#define DEFAULT_COAP_TCP_SECURE_PORT 5864
+
+#define DEFAULT_AUTH_REGISTER_LOGIN "/oic/auth/?reqtype=register"
+#define DEFAULT_AUTH_LOGIN "/oic/auth/?reqtype=login"
+#define DEFAULT_AUTH_LOGOUT "/oic/auth/?reqtype=logout"
+*/
+static OCStackResult createStringLL(uint8_t numElements, OCResourceHandle handle,
+                                    const char *(*getValue)(OCResourceHandle handle, uint8_t i), OCStringLL **stringLL)
+{
+    for (uint8_t i = 0; i < numElements; ++i)
+    {
+        const char *value = getValue(handle, i);
+        if (!*stringLL)
+        {
+            *stringLL = (OCStringLL *)OICCalloc(1, sizeof(OCStringLL));
+            if (!*stringLL)
+            {
+                return OC_STACK_NO_MEMORY;
+            }
+            (*stringLL)->value = OICStrdup(value);
+            if (!(*stringLL)->value)
+            {
+                return OC_STACK_NO_MEMORY;
+            }
+        }
+        else
+        {
+            OCStringLL *cur = *stringLL;
+            while (cur->next)
+            {
+                cur = cur->next;
+            }
+            cur->next = (OCStringLL *)OICCalloc(1, sizeof(OCStringLL));
+            if (!cur->next)
+            {
+                return OC_STACK_NO_MEMORY;
+            }
+            cur->next->value = OICStrdup(value);
+            if (!cur->next->value)
+            {
+                return OC_STACK_NO_MEMORY;
+            }
+        }
+    }
+    return OC_STACK_OK;
+}
+
+OCStackResult NSCloudRegisterLogin(const char *host, const char *auth_provider,
+                                   const char *auth_code, OCClientResponseHandler response)
+{
+    char    targetUri[MAX_URI_LENGTH * 2] = { 0, };
+    snprintf(targetUri, MAX_URI_LENGTH * 2, "%s%s", host, DEFAULT_AUTH_REGISTER_LOGIN);
+
+    OCCallbackData cbData;
+    memset(&cbData, 0, sizeof(OCCallbackData));
+    cbData.cb = response;
+    cbData.cd = NULL;
+    cbData.context = (void *)DEFAULT_CONTEXT_VALUE;
+
+    OCRepPayload *registerPayload = OCRepPayloadCreate();
+    if (!registerPayload)
+    {
+        goto no_memory;
+    }
+
+    OCRepPayloadSetPropString(registerPayload, "authprovider", auth_provider);
+    OCRepPayloadSetPropString(registerPayload, "authcode", auth_code);
+
+    return OCDoResource(NULL, OC_REST_POST, targetUri, NULL, (OCPayload *)registerPayload,
+                        CT_ADAPTER_TCP, OC_LOW_QOS, &cbData, NULL, 0);
+
+no_memory:
+    OCRepPayloadDestroy(registerPayload);
+    return OC_STACK_NO_MEMORY;
+}
+
+OCStackResult NSCloudLoginout(const char *host, const char *query, const char *auth_session,
+                              OCClientResponseHandler response)
+{
+    char    targetUri[MAX_URI_LENGTH * 2] = { 0, };
+    snprintf(targetUri, MAX_URI_LENGTH * 2, "%s%s", host, query);
+
+    OCCallbackData cbData;
+    memset(&cbData, 0, sizeof(OCCallbackData));
+    cbData.cb = response;
+    cbData.cd = NULL;
+    cbData.context = (void *)DEFAULT_CONTEXT_VALUE;
+
+    OCRepPayload *loginoutPayload = OCRepPayloadCreate();
+    if (!loginoutPayload)
+    {
+        goto no_memory;
+    }
+
+    OCRepPayloadSetPropString(loginoutPayload, "session", auth_session);
+
+    return OCDoResource(NULL, OC_REST_POST, targetUri, NULL, (OCPayload *)loginoutPayload,
+                        CT_ADAPTER_TCP, OC_LOW_QOS, &cbData, NULL, 0);
+
+no_memory:
+    OCRepPayloadDestroy(loginoutPayload);
+    return OC_STACK_NO_MEMORY;
+}
+
+
+OCStackResult NSCloudLogin(const char *host, const char *auth_session,
+                           OCClientResponseHandler response)
+{
+    return NSCloudLoginout(host, DEFAULT_AUTH_LOGIN, auth_session, response);
+}
+
+OCStackResult NSCloudLogout(const char *host, const char *auth_session,
+                            OCClientResponseHandler response)
+{
+    return NSCloudLoginout(host, DEFAULT_AUTH_LOGOUT, auth_session, response);
+}
+
+
+static unsigned char gInstanceId[37] = {0, };
+OCStackResult NSCloudPublish(const char *host, const char *query,
+                             OCClientResponseHandler response, int numArg, ...)
+{
+    char    targetUri[MAX_URI_LENGTH * 2] = { 0, };
+    snprintf(targetUri, MAX_URI_LENGTH * 2, "%s%s", host, query);
+
+    // Gather all resources locally and do publish
+    OCCallbackData cbData;
+    memset(&cbData, 0, sizeof(OCCallbackData));
+    cbData.cb = response;
+    cbData.cd = NULL;
+    cbData.context = (void *)DEFAULT_CONTEXT_VALUE;
+
+    OCTagsPayload *tagsPayload = NULL;
+    OCLinksPayload *linksPayload = NULL;
+    OCStringLL *rt = NULL;
+    OCStringLL *itf = NULL;
+    OCStringLL *mt = NULL;
+
+    OCRDPayload *rdPayload = OCRDPayloadCreate();
+    if (!rdPayload)
+    {
+        goto no_memory;
+    }
+
+    const unsigned char *id = (unsigned char *)OCGetServerInstanceIDString();
+    NS_LOG_V(DEBUG, "DeviceID: %s", id);
+    tagsPayload = OCCopyTagsResources(NULL, id,
+                                      NULL, OC_DISCOVERABLE, 0, 0, NULL, NULL, OC_RD_PUBLISH_TTL);
+    if (!tagsPayload)
+    {
+        goto no_memory;
+    }
+
+    va_list arguments;
+    va_start(arguments, numArg);
+
+    for (int j = 0; j < numArg; j++)
+    {
+        OCResourceHandle handle = va_arg(arguments, OCResourceHandle);
+        if (handle)
+        {
+            rt = itf = mt = NULL;
+            const char *uri = OCGetResourceUri(handle);
+            uint8_t numElement;
+            if (OC_STACK_OK == OCGetNumberOfResourceTypes(handle, &numElement))
+            {
+                OCStackResult res = createStringLL(numElement, handle, OCGetResourceTypeName, &rt);
+                if (res != OC_STACK_OK || !rt)
+                {
+                    goto no_memory;
+                }
+            }
+
+            if (OC_STACK_OK == OCGetNumberOfResourceInterfaces(handle, &numElement))
+            {
+                OCStackResult res = createStringLL(numElement, handle, OCGetResourceInterfaceName, &itf);
+                if (res != OC_STACK_OK || !itf)
+                {
+                    goto no_memory;
+                }
+            }
+
+            mt = (OCStringLL *)OICCalloc(1, sizeof(OCStringLL));
+            if (!mt)
+            {
+                goto no_memory;
+            }
+            mt->value = OICStrdup("application/cbor");
+            if (!mt->value)
+            {
+                goto no_memory;
+            }
+
+            if (!linksPayload)
+            {
+                linksPayload = OCCopyLinksResources(uri, rt, itf, NULL, 0, NULL,
+                                                    NULL, j, mt);;
+                if (!linksPayload)
+                {
+                    goto no_memory;
+                }
+            }
+            else
+            {
+                OCLinksPayload *temp = linksPayload;
+                while (temp->next)
+                {
+                    temp = temp->next;
+                }
+                temp->next = OCCopyLinksResources(uri, rt, itf, NULL, 0, NULL,
+                                                  NULL, j, mt);
+                if (!temp->next)
+                {
+                    goto no_memory;
+                }
+            }
+            OCFreeOCStringLL(rt);
+            OCFreeOCStringLL(itf);
+            OCFreeOCStringLL(mt);
+        }
+    }
+    va_end(arguments);
+
+    rdPayload->rdPublish = OCCopyCollectionResource(tagsPayload, linksPayload);
+    if (!rdPayload->rdPublish)
+    {
+        goto no_memory;
+    }
+
+    return OCDoResource(NULL, OC_REST_POST, targetUri, NULL, (OCPayload *)rdPayload,
+                        CT_ADAPTER_TCP, OC_LOW_QOS, &cbData, NULL, 0);
+
+no_memory:
+    va_end(arguments);
+    if (rt)
+    {
+        OCFreeOCStringLL(rt);
+    }
+    if (itf)
+    {
+        OCFreeOCStringLL(itf);
+    }
+    if (mt)
+    {
+        OCFreeOCStringLL(mt);
+    }
+    if (tagsPayload)
+    {
+        OCFreeTagsResource(tagsPayload);
+    }
+    if (linksPayload)
+    {
+        OCFreeLinksResource(linksPayload);
+    }
+    OCRDPayloadDestroy(rdPayload);
+    return OC_STACK_NO_MEMORY;
+}
diff --git a/service/notification/src/common/NSCloudConnector.h b/service/notification/src/common/NSCloudConnector.h
new file mode 100644 (file)
index 0000000..8988f76
--- /dev/null
@@ -0,0 +1,59 @@
+//******************************************************************
+//
+// Copyright 2016 Samsung Electronics All Rights Reserved.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+#ifndef _CLOUD_CONNECTOR_H_
+#define _CLOUD_CONNECTOR_H_
+
+#include "ocstack.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+#define CLOUD_IP "52.69.149.85"
+#define CLOUD_PORT "5683"
+
+#define OC_RD_PUBLISH_TTL 86400
+#define DEFAULT_CONTEXT_VALUE 0x99
+
+#define DEFAULT_COAP_TCP_HOST "coap+tcp://"
+#define DEFAULT_COAP_TCP_PORT 5683
+
+#define DEFAULT_COAP_TCP_SECURE_HOST "coaps+tcp://"
+#define DEFAULT_COAP_TCP_SECURE_PORT 5864
+
+#define DEFAULT_AUTH_REGISTER_LOGIN "/oic/auth/?reqtype=register"
+#define DEFAULT_AUTH_LOGIN "/oic/auth/?reqtype=login"
+#define DEFAULT_AUTH_LOGOUT "/oic/auth/?reqtype=logout"
+
+OCStackResult NSCloudRegisterLogin(const char *host, const char *auth_provider,
+                                   const char *auth_code, OCClientResponseHandler response);
+OCStackResult NSCloudLogin(const char *host, const char *auth_session,
+                           OCClientResponseHandler response);
+OCStackResult NSCloudLogout(const char *host, const char *auth_session,
+                            OCClientResponseHandler response);
+OCStackResult NSCloudPublish(const char *host, const char *query,
+                             OCClientResponseHandler response, int numArg, ...);
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#endif
index 551d792..fc1f04a 100644 (file)
@@ -102,6 +102,7 @@ typedef enum eSchedulerType
 typedef enum eTaskType
 {
     TASK_REGISTER_RESOURCE = 1000,
+    TASK_PUBLISH_RESOURCE = 1001,
 
     TASK_START_PRESENCE = 2000,
     TASK_STOP_PRESENCE = 2001,
index ce10822..37855be 100644 (file)
@@ -79,6 +79,10 @@ void * NSDiscoverySchedule(void * ptr)
                     NS_LOG(DEBUG, "CASE TASK_REGISTER_RESOURCE : ");\r
                     NSRegisterResource();\r
                     break;\r
+                case TASK_PUBLISH_RESOURCE:\r
+                    NS_LOG(DEBUG, "CASE TASK_PUBLISH_PESOURCE : ");\r
+                    NSPublishResourceToCloud((char*)node->taskData);\r
+                    break;\r
                 default:\r
                     break;\r
             }\r
index 53fc193..6fa5967 100644 (file)
@@ -140,6 +140,42 @@ NSResult NSStopProvider()
     return NS_OK;\r
 }\r
 \r
+NSResult NSProviderEnableRemoteService(char *serverAddress)\r
+{\r
+    NS_LOG(DEBUG, "NSProviderEnableRemoteService - IN");\r
+    pthread_mutex_lock(&nsInitMutex);\r
\r
+    if(!initProvider)\r
+    {\r
+        NS_LOG(DEBUG, "Provider service has not been started yet");\r
+        return NS_FAIL;\r
+    }\r
+\r
+    NS_LOG_V(DEBUG, "Remote server address: %s", serverAddress);\r
+    NSPushQueue(DISCOVERY_SCHEDULER, TASK_PUBLISH_RESOURCE, serverAddress);\r
+\r
+    pthread_mutex_unlock(&nsInitMutex);\r
+    NS_LOG(DEBUG, "NSProviderEnableRemoteService - OUT");\r
+    return NS_OK;\r
+}\r
+\r
+NSResult NSProviderDisableRemoteService(char *serverAddress)\r
+{\r
+    NS_LOG(DEBUG, "NSProviderDisableRemoteService - IN");\r
+    pthread_mutex_lock(&nsInitMutex);\r
+\r
+    if(!initProvider)\r
+    {\r
+        NS_LOG(DEBUG, "Provider service has not been started yet");\r
+        return NS_FAIL;\r
+    }\r
+    NS_LOG_V(DEBUG, "Remote server address: %s", serverAddress);\r
+\r
+    pthread_mutex_unlock(&nsInitMutex);\r
+    NS_LOG(DEBUG, "NSProviderDisableRemoteService - OUT");\r
+    return NS_OK;\r
+}\r
+\r
 NSResult NSSendMessage(NSMessage *msg)\r
 {\r
     NS_LOG(DEBUG, "NSSendNotification - IN");\r
index cb76c94..28bec3d 100644 (file)
@@ -398,7 +398,6 @@ void NSProviderConnectionStateListener(CATransportAdapter_t adapter, const char
         bool connected)\r
 {\r
 \r
-    // should be implementation\r
     (void)adapter;\r
     (void)remote_address;\r
 \r
@@ -413,6 +412,24 @@ void NSProviderConnectionStateListener(CATransportAdapter_t adapter, const char
 \r
         // Start Presence\r
         NSPushQueue(DISCOVERY_SCHEDULER, TASK_START_PRESENCE, NULL);\r
+\r
+        if(adapter == CA_ADAPTER_TCP)\r
+        {\r
+            NS_LOG_V(DEBUG, "TCP Connected remote address: %s", remote_address);\r
+        }\r
+    }\r
+    else\r
+    {\r
+\r
+        NS_LOG(DEBUG, "DISCONNECTED");\r
+\r
+        // Set Connection State\r
+        NSSetProviderConnectionState(DISCONNECTED);\r
+\r
+        if(adapter == CA_ADAPTER_TCP)\r
+        {\r
+            NS_LOG_V(DEBUG, "TCP Disconnected remote address: %s", remote_address);\r
+        }\r
     }\r
 \r
     NS_LOG(DEBUG, "NSProviderConnectionStateListener - OUT");\r
@@ -420,7 +437,6 @@ void NSProviderConnectionStateListener(CATransportAdapter_t adapter, const char
 \r
 void NSProviderAdapterStateListener(CATransportAdapter_t adapter, bool enabled)\r
 {\r
-    // should be implementation\r
     (void)adapter;\r
 \r
     NS_LOG(DEBUG, "NSProviderAdapterStateListener - IN");\r
@@ -435,6 +451,14 @@ void NSProviderAdapterStateListener(CATransportAdapter_t adapter, bool enabled)
         // Start Presence\r
         NSPushQueue(DISCOVERY_SCHEDULER, TASK_START_PRESENCE, NULL);\r
     }\r
+    else\r
+    {\r
+\r
+        NS_LOG(DEBUG, "DISCONNECTED");\r
+\r
+        // Set Connection State\r
+        NSSetProviderConnectionState(DISCONNECTED);\r
+    }\r
 \r
     NS_LOG(DEBUG, "NSProviderAdapterStateListener - OUT");\r
 }\r
index a4a0c45..75c9d92 100644 (file)
@@ -34,6 +34,7 @@
 #include "oic_malloc.h"\r
 #include "NSUtil.h"\r
 #include "NSStorageAdapter.h"\r
+#include "NSCloudConnector.h"\r
 \r
 OCEntityHandlerResult NSEntityHandlerNotificationCb(OCEntityHandlerFlag flag,\r
         OCEntityHandlerRequest *entityHandlerRequest, void* callback);\r
index 01ef948..8da8796 100644 (file)
@@ -24,6 +24,37 @@ NSNotificationResource NotificationResource;
 NSMessageResource NotificationMessageResource;
 NSSyncResource NotificationSyncResource;
 
+OCStackApplicationResult NSHandlePublishCb(void *ctx, OCDoHandle handle,
+    OCClientResponse *clientResponse)
+{
+    if (ctx != (void *)DEFAULT_CONTEXT_VALUE)
+    {
+        NS_LOG(DEBUG, "Invalid publish callback received");
+    }
+
+    NS_LOG_V(DEBUG, "Publish resource response received code: %d", clientResponse->result);
+
+    return OC_STACK_KEEP_TRANSACTION;
+}
+
+NSResult NSPublishResourceToCloud(char *serverAddress)
+{
+
+    NS_LOG(DEBUG, "NSPublishResourceToCloud - IN");
+    NS_LOG_V(DEBUG, "Cloud address: %s", serverAddress);
+
+    const char * publishQuery = "/oic/rd?rt=oic.wk.rdpub";
+
+    if (NSCloudPublish(serverAddress, publishQuery, &NSHandlePublishCb, 1,
+            NotificationResource.handle) != OC_STACK_OK)
+    {
+        NS_LOG(DEBUG, "Unable to publish resources to cloud");
+    }
+
+    NS_LOG(DEBUG, "NSPublishResourceToCloud - OUT");
+    return NS_OK;
+}
+
 NSResult NSCreateResource(char *uri)
 {
     NS_LOG(DEBUG, "NSCreateResource - IN");
index 1927652..4ee6621 100644 (file)
@@ -30,6 +30,8 @@
 
 NSResult NSCreateResource(char *uri);
 
+NSResult NSPublishResourceToCloud(char *host);
+
 NSResult NSRegisterResource();
 
 NSResult NSUnRegisterResource();
index 2190978..a9a69aa 100644 (file)
@@ -41,7 +41,10 @@ void NSInitProviderInfo()
     NS_LOG(DEBUG, "NSInitProviderInfo");\r
 \r
     providerInfo = (NSProviderInfo *) OICMalloc(sizeof(NSProviderInfo));\r
-    NSGenerateUUIDStr(providerInfo->providerId);\r
+    const char * generatedUuid = (char *)OCGetServerInstanceIDString();\r
+    NS_LOG_V(DEBUG, "Generate Provider ID: %s", generatedUuid);\r
+    OICStrcpy(providerInfo->providerId, strlen(generatedUuid), generatedUuid);\r
+\r
     providerInfo->providerName = NULL;\r
 }\r
 \r
@@ -67,7 +70,7 @@ void NSDeinitProviderInfo()
 \r
 NSProviderInfo * NSGetProviderInfo()\r
 {\r
-    NS_LOG(DEBUG, "Change Connection State");\r
+    NS_LOG_V(DEBUG, "ProviderInfo: %s", providerInfo->providerId);\r
 \r
     return providerInfo;\r
 }\r