Cloud interface and APIs are modified according to cloud module changes.
And configurations related to the interface are changed.
Conflicts:
service/notification/examples/linux/notificationconsumer.c
Change-Id: I0c7cb16dd19596cda90c0eef2a6332cc6a5532ae
Signed-off-by: cc <ch79.cho@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/10717
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Hun-je Yeon <hunje.yeon@samsung.com>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
notification_env.AppendUnique(CCFLAGS = ['--coverage'])
if 'CLIENT' in notification_env.get('RD_MODE'):
- notification_env.AppendUnique(CPPDEFINES = ['RD_CLIENT'])
+ notification_env.AppendUnique(CPPDEFINES = ['RD_CLIENT'])
if env.get('WITH_CLOUD') == True:
notification_env.AppendUnique(CPPDEFINES = ['WITH_CLOUD'])
notification_sample_env.AppendUnique(LIBS = ['log'])
notification_sample_consumer_src = 'notificationconsumer.c'
+notification_sample_provider_src = 'notificationprovider.c'
if env.get('WITH_CLOUD') == True:
notification_sample_env.AppendUnique(CPPPATH = ['../../src/consumer'])
+ notification_sample_env.AppendUnique(CPPPATH = ['../../src/provider'])
notification_sample_env.AppendUnique(CPPDEFINES = ['WITH_CLOUD'])
+
CONSUMER_CLOUD = File('cloud_connector.c')
notification_sample_consumer_src = ['notificationconsumer.c', CONSUMER_CLOUD]
+ PROVIDER_CLOUD = File('cloud_connector.c')
+ notification_sample_provider_src = ['notificationprovider.c', PROVIDER_CLOUD]
if env.get('WITH_TCP') == True:
notification_sample_env.AppendUnique(CPPDEFINES = ['WITH_TCP'])
if env.get('SECURED') == '1':
notification_sample_env.AppendUnique(LIBS = ['mbedtls', 'mbedx509', 'mbedcrypto'])
-
-
####################################################################
# Source files and Targets
######################################################################
notification_sample_provider_env = notification_sample_env.Clone()
-
notification_sample_provider_env.AppendUnique(LIBS = 'libnotification_provider')
-notificationprovider = notification_sample_provider_env.Program('notificationprovider', 'notificationprovider.c')
+notificationprovider = notification_sample_provider_env.Program('notificationprovider', notification_sample_provider_src)
i_notificationprovider = notification_sample_provider_env.Install(env.get('BUILD_DIR'), notificationprovider)
notification_sample_consumer_env = notification_sample_env.Clone()
// limitations under the License.
//
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-#include "cloud_connector.h"
-
-#include <stdarg.h>
-#include <stdlib.h>
-#include "oic_string.h"
-#include "oic_malloc.h"
+/// This sample provides the way to create cloud sample
+#include "ocstack.h"
#include "ocpayload.h"
+#include "oicresourcedirectory.h"
+#include "cloud_connector.h"
-#include "rdpayload.h"
+static bool isCloudLoggedin = false;
-#define OC_RD_PUBLISH_TTL 86400
-#define DEFAULT_CONTEXT_VALUE 0x99
+OCStackResult OCCloudSignup(const char *host, const char *deviceId,
+ const char *authprovider,
+ const char *authcode, OCClientResponseHandler response)
+{
+ char targetUri[MAX_URI_LENGTH * 2] = { 0, };
+ snprintf(targetUri, MAX_URI_LENGTH * 2, "%s%s", host, DEFAULT_AUTH_SIGNUP);
+
+ OCCallbackData cbData;
+ memset(&cbData, 0, sizeof(OCCallbackData));
+ cbData.cb = response;
+ cbData.cd = NULL;
+ cbData.context = (void *)DEFAULT_CONTEXT_VALUE;
-#define DEFAULT_COAP_TCP_HOST "coap+tcp://"
-#define DEFAULT_COAP_TCP_PORT 5683
+ printf("Host: %s\n", targetUri);
+ printf("Dev id: %s\n", deviceId);
+ printf("Auth Provider: %s\n", authprovider);
+ printf("Auth Code: %s\n", authcode);
-#define DEFAULT_COAP_TCP_SECURE_HOST "coaps+tcp://"
-#define DEFAULT_COAP_TCP_SECURE_PORT 5864
+ OCRepPayload *registerPayload = OCRepPayloadCreate();
-#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"
+ OCRepPayloadSetPropString(registerPayload, "di", deviceId);
+ OCRepPayloadSetPropString(registerPayload, "authprovider", authprovider);
+ OCRepPayloadSetPropString(registerPayload, "authcode", authcode);
-static OCStackResult createStringLL(uint8_t numElements, OCResourceHandle handle,
- const char *(*getValue)(OCResourceHandle handle, uint8_t i), OCStringLL **stringLL)
+ return OCDoResource(NULL, OC_REST_POST, targetUri, NULL, (OCPayload *)registerPayload,
+ CT_ADAPTER_TCP, OC_LOW_QOS, &cbData, NULL, 0);
+}
+
+OCStackResult OCCloudSession(const char *host, const char *query, const char *uId,
+ const char *deviceId,
+ const char *accesstoken,
+ bool isLogin, OCClientResponseHandler response)
{
- for (uint8_t i = 0; i < numElements; ++i)
- {
- const char *value = getValue(handle, i);
- if (!*stringLL)
+ 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 (uId != NULL)
{
- *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;
- }
+ OCRepPayloadSetPropString(loginoutPayload, "uid", uId);
}
- else
+
+ if (deviceId != NULL)
{
- 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;
- }
+ OCRepPayloadSetPropString(loginoutPayload, "di", deviceId);
}
- }
- return OC_STACK_OK;
+
+ if (accesstoken != NULL)
+ {
+ OCRepPayloadSetPropString(loginoutPayload, "accesstoken", accesstoken);
+ }
+ OCRepPayloadSetPropBool(loginoutPayload, "login", isLogin);
+
+ return OCDoResource(NULL, OC_REST_POST, targetUri, NULL, (OCPayload *)loginoutPayload,
+ CT_ADAPTER_TCP, OC_LOW_QOS, &cbData, NULL, 0);
}
-OCStackResult OCCloudRegisterLogin(const char *host, const char *auth_provider,
- const char *auth_code, OCClientResponseHandler response)
+//Client should call refresh before expiresin or when receive 4.01 during sign-in
+OCStackResult OCCloudRefresh(const char *host, const char *query, const char *uId,
+ const char *deviceId, const char *refreshtoken, OCClientResponseHandler response)
{
- char targetUri[MAX_URI_LENGTH * 2] = { 0, };
- snprintf(targetUri, MAX_URI_LENGTH * 2, "%s%s", host, DEFAULT_AUTH_REGISTER_LOGIN);
+ 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;
+ 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;
- }
+ OCRepPayload *refreshPayload = OCRepPayloadCreate();
- OCRepPayloadSetPropString(registerPayload, "authprovider", auth_provider);
- OCRepPayloadSetPropString(registerPayload, "authcode", auth_code);
+ OCRepPayloadSetPropString(refreshPayload, "uid", uId);
+ OCRepPayloadSetPropString(refreshPayload, "di", deviceId);
+ OCRepPayloadSetPropString(refreshPayload, "granttype", "refresh_token");
+ OCRepPayloadSetPropString(refreshPayload, "refreshtoken", refreshtoken);
- return OCDoResource(NULL, OC_REST_POST, targetUri, NULL, (OCPayload *)registerPayload,
- CT_ADAPTER_TCP, OC_LOW_QOS, &cbData, NULL, 0);
+ return OCDoResource(NULL, OC_REST_POST, targetUri, NULL, (OCPayload *)refreshPayload,
+ CT_ADAPTER_TCP, OC_LOW_QOS, &cbData, NULL, 0);
+}
-no_memory:
- OCRepPayloadDestroy(registerPayload);
- return OC_STACK_NO_MEMORY;
+OCStackResult OCCloudLogin(const char *host, const char *uId, const char *deviceId,
+ const char *accesstoken, OCClientResponseHandler response)
+{
+ return OCCloudSession(host, DEFAULT_AUTH_SESSION, uId, deviceId, accesstoken, true, response);
}
-OCStackResult OCCloudLoginout(const char *host, const char *query, const char *auth_session,
- OCClientResponseHandler response)
+OCStackResult OCCloudLogout(const char *host, OCClientResponseHandler response)
{
- char targetUri[MAX_URI_LENGTH * 2] = { 0, };
- snprintf(targetUri, MAX_URI_LENGTH * 2, "%s%s", host, query);
+ return OCCloudSession(host, DEFAULT_AUTH_SESSION, NULL, NULL, NULL, false, response);
+}
- OCCallbackData cbData;
- memset(&cbData, 0, sizeof(OCCallbackData));
- cbData.cb = response;
- cbData.cd = NULL;
- cbData.context = (void *)DEFAULT_CONTEXT_VALUE;
+void printRepresentation(OCRepPayloadValue *value)
+{
+ while (value)
+ {
+ printf("Key: %s / ", value->name);
+ switch (value->type)
+ {
+ case OCREP_PROP_NULL:
+ printf("Value: None\n");
+ break;
+ case OCREP_PROP_INT:
+ printf("Value: %d\n", value->i);
+ break;
+ case OCREP_PROP_DOUBLE:
+ printf("Value: %f\n", value->d);
+ break;
+ case OCREP_PROP_BOOL:
+ printf("Value: %d\n", value->b);
+ break;
+ case OCREP_PROP_STRING:
+ printf("Value: %s\n", value->str);
+ break;
+ case OCREP_PROP_BYTE_STRING:
+ printf("Value: Byte String\n");
+ break;
+ case OCREP_PROP_OBJECT:
+ printf("Value: Object\n");
+ break;
+ case OCREP_PROP_ARRAY:
+ printf("Value: Array\n");
+ break;
+ default:
+ break;
+ }
+ value = value->next;
+ }
+}
- OCRepPayload *loginoutPayload = OCRepPayloadCreate();
- if (!loginoutPayload)
+// callback for sign-up and sign-in
+OCStackApplicationResult CloudSignupCallback(void *ctx,
+ OCDoHandle handle, OCClientResponse *clientResponse)
+{
+ if (ctx != (void *)DEFAULT_CONTEXT_VALUE)
{
- goto no_memory;
+ printf("Invalid Cloud Login/out callback received\n");
}
- OCRepPayloadSetPropString(loginoutPayload, "session", auth_session);
+ printf("Signup response received: %d\n", clientResponse->result);
- return OCDoResource(NULL, OC_REST_POST, targetUri, NULL, (OCPayload *)loginoutPayload,
- CT_ADAPTER_TCP, OC_LOW_QOS, &cbData, NULL, 0);
+ if (clientResponse->payload != NULL &&
+ clientResponse->payload->type == PAYLOAD_TYPE_REPRESENTATION)
+ {
+ printf("PAYLOAD_TYPE_REPRESENTATION received\n");
+ printf("Sign-in using retrieved accesstoken when disconnected or reboot\n");
-no_memory:
- OCRepPayloadDestroy(loginoutPayload);
- return OC_STACK_NO_MEMORY;
-}
+ OCRepPayloadValue *val = ((OCRepPayload *)clientResponse->payload)->values;
+ printf("Get payload values\n");
+ printRepresentation(val);
+ }
+ return OC_STACK_KEEP_TRANSACTION;
+}
-OCStackResult OCCloudLogin(const char *host, const char *auth_session,
- OCClientResponseHandler response)
+OCStackApplicationResult CloudLoginoutCallback(void *ctx,
+ OCDoHandle handle, OCClientResponse *clientResponse)
{
- return OCCloudLoginout(host, DEFAULT_AUTH_LOGIN, auth_session, response);
+ if (ctx != (void *)DEFAULT_CONTEXT_VALUE)
+ {
+ printf("Invalid Cloud Login/out callback received\n");
+ }
+
+ printf("Login/out response received: %d\n", clientResponse->result);
+
+ if (clientResponse->payload != NULL &&
+ clientResponse->payload->type == PAYLOAD_TYPE_REPRESENTATION)
+ {
+ printf("PAYLOAD_TYPE_REPRESENTATION received\n");
+
+ OCRepPayloadValue *val = ((OCRepPayload *)clientResponse->payload)->values;
+
+ printf("Get payload values\n");
+ printRepresentation(val);
+
+ if(clientResponse->result < 5)
+ {
+ isCloudLoggedin = true;
+ }
+ }
+
+ return OC_STACK_KEEP_TRANSACTION;
}
-OCStackResult OCCloudLogout(const char *host, const char *auth_session,
- OCClientResponseHandler response)
+bool IsCloudLoggedin()
{
- return OCCloudLoginout(host, DEFAULT_AUTH_LOGOUT, auth_session, response);
+ return isCloudLoggedin;
}
+
-//******************************************************************
-//
-// Copyright 2016 Samsung Electronics All Rights Reserved.
-//
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//
// Licensed under the Apache License, Version 2.0 (the "License");
//
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
#include "ocstack.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
-OCStackResult OCCloudRegisterLogin(const char *host, const char *auth_provider,
- const char *auth_code, OCClientResponseHandler response);
-OCStackResult OCCloudLogin(const char *host, const char *auth_session,
- OCClientResponseHandler response);
-OCStackResult OCCloudLogout(const char *host, const char *auth_session,
- OCClientResponseHandler response);
-OCStackResult OCCloudPublish(const char *host, const char *query,
- OCClientResponseHandler response, int numArg, ...);
+#define DEFAULT_CONTEXT_VALUE 0x99
+#define DEFAULT_AUTH_SIGNUP "/.well-known/ocf/account"
+#define DEFAULT_AUTH_SESSION "/.well-known/ocf/account/session"
+#define DEFAULT_AUTH_REFRESH "/.well-known/ocf/account/tokenrefresh"
+
+OCStackResult OCCloudSignup(const char *host, const char *deviceId,
+ const char *authprovider, const char *authcode,
+ OCClientResponseHandler response);
+
+OCStackResult OCCloudSession(const char *host, const char *query, const char *uId,
+ const char *deviceId, const char *accesstoken, bool isLogin,
+ OCClientResponseHandler response);
+
+OCStackResult OCCloudRefresh(const char *host, const char *query, const char *uId,
+ const char *deviceId, const char *refreshtoken, OCClientResponseHandler response);
+
+OCStackResult OCCloudLogin(const char *host, const char *uId, const char *deviceId,
+ const char *accesstoken, OCClientResponseHandler response);
+
+OCStackResult OCCloudLogout(const char *host, OCClientResponseHandler response);
+
+OCStackApplicationResult CloudLoginoutCallback(void *ctx,
+ OCDoHandle handle, OCClientResponse *clientResponse);
+
+OCStackApplicationResult CloudSignupCallback(void *ctx,
+ OCDoHandle handle, OCClientResponse *clientResponse);
+
+bool IsCloudLoggedin();
#ifdef __cplusplus
}
#ifdef WITH_CLOUD
#include "NSConstants.h"
-#include "NSConsumerCommon.h"
#include "oic_malloc.h"
+#include "cloud_connector.h"
#define CLOUD_CONTEXT_VALUE 0x99
-#define CLOUD_PRESENCE_SUBSCRIBE_QUERY "" // refer to IoTivity Cloud Module Sample
-#define CLOUD_HOST_ADDRESS "" // refer to IoTivity Cloud Module Sample
-#define CLOUD_IOTIVITYNS_SESSION "" // refer to IoTivity Cloud Module Sample
+char CLOUD_ADDRESS[50];
+char CLOUD_AUTH_PROVIDER[50];
+char CLOUD_AUTH_CODE[50];
+char CLOUD_UID[50];
+char CLOUD_ACCESS_TOKEN[50];
#endif
+
NSProvider * g_provider = NULL;
+FILE* server_fopen(const char *path, const char *mode)
+{
+ (void)path;
+ return fopen("oic_ns_provider_db.dat", mode);
+}
+
void onDiscoverNotification(NSProvider * provider)
{
printf("notification resource discovered\n");
printf("Sync STATE : %d\n", sync->state);
}
-#ifdef WITH_CLOUD
-OCStackApplicationResult handleLoginoutCB(void *ctx,
- OCDoHandle handle,
- OCClientResponse *clientResponse)
-{
- (void)handle;
- if (ctx != (void *)CLOUD_CONTEXT_VALUE)
- {
- NS_LOG(DEBUG, "Invalid Login/out callback received");
- }
-
- NS_LOG(DEBUG, "Login/out response received");
-
- if (clientResponse->payload != NULL &&
- clientResponse->payload->type == PAYLOAD_TYPE_REPRESENTATION)
- {
- NS_LOG(DEBUG, "PAYLOAD_TYPE_REPRESENTATION received");
-
- OCRepPayloadValue *val = ((OCRepPayload *)clientResponse->payload)->values;
-
- while (val)
- {
- val = val->next;
- }
- NS_LOG(DEBUG, "Get payload values");
-
- OCDevAddr * addr = NULL;
- addr = (OCDevAddr *) OICMalloc(sizeof(OCDevAddr));
- memcpy(addr, clientResponse->addr, sizeof(OCDevAddr));
-
- NSTask * task = NSMakeTask(TASK_EVENT_CONNECTED_TCP, addr);
-
- NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(task, OC_STACK_KEEP_TRANSACTION, NSOICFree(addr));
- NSConsumerPushEvent(task);
- }
-
- return OC_STACK_KEEP_TRANSACTION;
-}
-#endif
-
void* OCProcessThread(void * ptr)
{
(void) ptr;
pthread_t OCThread = NULL;
printf("start Iotivity\n");
- if (OCInit1(OC_CLIENT, OC_DEFAULT_FLAGS, OC_DEFAULT_FLAGS) != OC_STACK_OK)
+
+ // open oic_db
+ static OCPersistentStorage ps = {server_fopen, fread, fwrite, fclose, unlink};
+ OCRegisterPersistentStorageHandler(&ps);
+
+ if (OCInit1(OC_CLIENT_SERVER, OC_DEFAULT_FLAGS, OC_DEFAULT_FLAGS) != OC_STACK_OK)
{
printf("OCInit fail\n");
return 0;
cfg.messageCb = onNotificationPosted;
cfg.syncInfoCb = onNotificationSync;
-#ifdef WITH_CLOUD
- NS_LOG(DEBUG, "process OCCloudLogin...");
- NS_LOG(DEBUG, "OCCloudLogin return");
-#endif
-
pthread_create(&OCThread, NULL, OCProcessThread, NULL);
printf("start notification consumer service\n");
printf("3. Get Topics\n");
printf("4. Select Topics\n");
printf("5. Exit\n");
+#ifdef WITH_CLOUD
+ printf("21. Enable Remote Service (after login)\n");
+ printf("31. Cloud Signup\n");
+ printf("32. Cloud Login\n");
+ printf("33. Cloud Logout\n");
+#endif
printf("Input: ");
printf("5. Exit");
isExit = true;
break;
+#ifdef WITH_CLOUD
+ case 21:
+ printf("Enable Remote Service");
+ if(!IsCloudLoggedin())
+ {
+ printf("Cloud Login required");
+ break;
+ }
+ NSConsumerEnableRemoteService(CLOUD_ADDRESS);
+ break;
+ case 31:
+ printf("Remote Server Address: ");
+ gets(CLOUD_ADDRESS);
+
+ printf("Auth Provider(eg. github): ");
+ gets(CLOUD_AUTH_PROVIDER);
+
+ printf("Auth Code: ");
+ gets(CLOUD_AUTH_CODE);
+
+ OCCloudSignup(CLOUD_ADDRESS, OCGetServerInstanceIDString(),
+ CLOUD_AUTH_PROVIDER, CLOUD_AUTH_CODE, CloudSignupCallback);
+ printf("OCCloudSignup requested");
+ break;
+ case 32:
+ printf("Remote Server Address: ");
+ gets(CLOUD_ADDRESS);
+
+ printf("UID: ");
+ gets(CLOUD_UID);
+
+ printf("ACCESS_TOKEN: ");
+ gets(CLOUD_ACCESS_TOKEN);
+
+ OCCloudLogin(CLOUD_ADDRESS, CLOUD_UID, OCGetServerInstanceIDString(),
+ CLOUD_ACCESS_TOKEN, CloudLoginoutCallback);
+ printf("OCCloudLogin requested");
+ break;
+ case 33:
+ OCCloudLogout(CLOUD_ADDRESS, CloudLoginoutCallback);
+ printf("OCCloudLogin requested");
+ break;
+#endif
default:
break;
}
-//******************************************************************\r
-//\r
-// Copyright 2016 Samsung Electronics All Rights Reserved.\r
-//\r
-//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
-//\r
-// Licensed under the Apache License, Version 2.0 (the "License");\r
-// you may not use this file except in compliance with the License.\r
-// You may obtain a copy of the License at\r
-//\r
-// http://www.apache.org/licenses/LICENSE-2.0\r
-//\r
-// Unless required by applicable law or agreed to in writing, software\r
-// distributed under the License is distributed on an "AS IS" BASIS,\r
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-// See the License for the specific language governing permissions and\r
-// limitations under the License.\r
-//\r
-//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
-\r
-#include <stdio.h>\r
-#include <stdbool.h>\r
-#include <stdlib.h>\r
-#include <unistd.h>\r
-\r
-#include "NSProviderInterface.h"\r
-#include "NSCommon.h"\r
-#include "logger.h"\r
-#include "octypes.h"\r
-#include "pthread.h"\r
-#include "oic_string.h"\r
-#include "oic_malloc.h"\r
-\r
-#define TAG "NSProviderExample"\r
-\r
-// Input the following values to publish resource to cloud\r
-char REMOTE_SERVER_ADDRESS[50];\r
-char mainConsumer[37] = {'\0',};\r
-\r
-extern char *strdup(const char *s);\r
-\r
-bool isExit = false;\r
-\r
-int id;\r
-\r
-void* OCProcessThread(void * ptr)\r
-{\r
- (void) ptr;\r
- while (!isExit)\r
- {\r
- if (OCProcess() != OC_STACK_OK)\r
- {\r
- printf("OCStack process error");\r
- return NULL;\r
- }\r
- }\r
-\r
- return NULL;\r
-}\r
-\r
-void subscribeRequestCallback(NSConsumer *consumer)\r
-{\r
- printf("consumer requested to subscribe");\r
-\r
- printf("NS_APP Consumer Device ID: %s\n", consumer->consumerId);\r
-\r
- if(mainConsumer[0] == '\0')\r
- {\r
- OICStrcpy(mainConsumer, 37, consumer->consumerId);\r
- }\r
-\r
- NSAcceptSubscription(consumer, true);\r
-}\r
-\r
-void syncCallback(NSSyncInfo *sync)\r
-{\r
- printf("sync requested");\r
-\r
- printf("NS_APP Sync State: %d\n", sync->state);\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
-void printTopics(NSTopicLL * topics)\r
-{\r
- if(!topics)\r
- {\r
- printf("topics is null\n");\r
- return;\r
- }\r
-\r
- NSTopicLL * iter = topics;\r
-\r
- while(iter)\r
- {\r
- printf("tName = %s, tState = %d\n", iter->topicName, (int)iter->state);\r
- iter = iter->next;\r
- }\r
-}\r
-\r
-void removeTopics(NSTopicLL * topics)\r
-{\r
- if(!topics)\r
- {\r
- printf("topics is null\n");\r
- return;\r
- }\r
-\r
- NSTopicLL * iter = topics;\r
-\r
- while(iter)\r
- {\r
- NSTopicLL * del = iter;\r
- if(del->topicName)\r
- {\r
- OICFree(del->topicName);\r
- }\r
- iter = iter->next;\r
-\r
- OICFree(del);\r
- }\r
-}\r
-\r
-int main()\r
-{\r
- int num;\r
- pthread_t processThread;\r
-\r
- printf("NSStartProvider()\n\n");\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
- printf("OCStack init error");\r
- return 0;\r
- }\r
-\r
- pthread_create(&processThread, NULL, OCProcessThread, unlink);\r
-\r
- while (!isExit)\r
- {\r
- char dummy;\r
-\r
- printf("==============================================\n");\r
- printf("1. NSStartProvider(Accepter: Provider) \n");\r
- printf("2. NSStartProvider(Accepter: Consumer) \n");\r
- printf("3. NSSendNotification() \n");\r
- printf("4. NSRead() \n");\r
- printf("5. NSProviderAddTopic(); \n");\r
- printf("6. NSProviderDeleteTopic(); \n");\r
- printf("7. NSProviderSelectTopic(); \n");\r
- printf("8. NSProviderUnselectTopic(); \n");\r
- printf("9. NSProviderGetConsumerTopics(); \n");\r
- printf("10. NSProviderGetTopics(); \n");\r
- printf("11. NSStopProvider() \n");\r
- printf("12. NSProviderEnableRemoteService \n");\r
- printf("0. Exit() \n");\r
- printf("==============================================\n");\r
-\r
- printf("input : ");\r
-\r
- scanf("%d", &num);\r
- fflush(stdin);\r
- scanf("%c", &dummy);\r
- fflush(stdin);\r
-\r
- switch (num)\r
- {\r
- case 1:\r
- {\r
- printf("NSStartProvider(Accepter: Provider)");\r
- NSProviderConfig config;\r
- config.policy = true;\r
- config.subRequestCallback = subscribeRequestCallback;\r
- config.syncInfoCallback = syncCallback;\r
- config.userInfo = OICStrdup("OCF_NOTIFICATION");\r
- NSStartProvider(config);\r
- }\r
- break;\r
-\r
- case 2:\r
- {\r
- printf("NSStartProvider(Accepter: Consumer)");\r
- NSProviderConfig config;\r
- config.policy = false;\r
- config.subRequestCallback = subscribeRequestCallback;\r
- config.syncInfoCallback = syncCallback;\r
- config.userInfo = OICStrdup("OCF_NOTIFICATION");\r
- NSStartProvider(config);\r
- }\r
- break;\r
-\r
- case 3:\r
- {\r
- printf("NSSendNotification()");\r
- char title[100];\r
- char body[100];\r
- char topic[100];\r
-\r
- printf("id : %d\n", ++id);\r
- printf("title : ");\r
-\r
- gets(title);\r
-\r
- printf("body : ");\r
- gets(body);\r
-\r
- printf("topic : ");\r
- gets(topic);\r
-\r
- printf("app - mTitle : %s \n", title);\r
- printf("app - mContentText : %s \n", body);\r
- printf("app - topic : %s \n", topic);\r
-\r
- NSMessage * msg = NSCreateMessage();\r
-\r
- msg->title = OICStrdup(title);\r
- msg->contentText = OICStrdup(body);\r
- msg->sourceName = OICStrdup("OCF");\r
-\r
- if(topic[0] != '\0')\r
- {\r
- msg->topic = OICStrdup(topic);\r
- }\r
-\r
- NSSendMessage(msg);\r
- }\r
- break;\r
-\r
- case 4:\r
- printf("NSRead\n");\r
- break;\r
-\r
- case 5:\r
- printf("NSProviderAddTopic\n");\r
- NSProviderAddTopic("OCF_TOPIC1");\r
- NSProviderAddTopic("OCF_TOPIC2");\r
- NSProviderAddTopic("OCF_TOPIC3");\r
- NSProviderAddTopic("OCF_TOPIC4");\r
- break;\r
-\r
- case 6:\r
- printf("NSProviderDeleteTopic\n");\r
- NSProviderDeleteTopic("OCF_TOPIC2");\r
- break;\r
-\r
- case 7:\r
- printf("NSProviderSelectTopic\n");\r
- NSProviderSelectTopic(mainConsumer, "OCF_TOPIC1");\r
- NSProviderSelectTopic(mainConsumer, "OCF_TOPIC2");\r
- NSProviderSelectTopic(mainConsumer, "OCF_TOPIC3");\r
- NSProviderSelectTopic(mainConsumer, "OCF_TOPIC4");\r
- break;\r
-\r
- case 8:\r
- printf("NSProviderUnSelectTopic\n");\r
- NSProviderUnselectTopic(mainConsumer, "OCF_TOPIC1");\r
- break;\r
-\r
- case 9:\r
- printf("NSProviderGetConsumerTopics\n");\r
- {\r
- NSTopicLL * topics = NSProviderGetConsumerTopics(mainConsumer);\r
- printTopics(topics);\r
- removeTopics(topics);\r
- }\r
- break;\r
-\r
- case 10:\r
- printf("NSProviderGetConsumerTopics\n");\r
- {\r
- NSTopicLL * topics = NSProviderGetTopics();\r
- printTopics(topics);\r
- removeTopics(topics);\r
- }\r
- break;\r
-\r
- case 11:\r
- NSStopProvider();\r
- break;\r
-\r
- case 12:\r
- printf("Remote Server Address: ");\r
- gets(REMOTE_SERVER_ADDRESS);\r
-\r
- NSProviderEnableRemoteService(REMOTE_SERVER_ADDRESS);\r
- break;\r
- case 0:\r
- NSStopProvider();\r
- isExit = true;\r
- break;\r
- default:\r
- printf("Under Construction\n");\r
- break;\r
- }\r
-\r
- printf("\n");\r
- }\r
-\r
- return 0;\r
-}\r
+//******************************************************************
+//
+// 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 <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "NSProviderInterface.h"
+#include "NSCommon.h"
+#include "logger.h"
+#include "octypes.h"
+#include "pthread.h"
+#include "oic_string.h"
+#include "oic_malloc.h"
+
+#define TAG "NSProviderExample"
+
+#ifdef WITH_CLOUD
+#include "cloud_connector.h"
+
+// Input the following values to publish resource to cloud
+char REMOTE_SERVER_ADDRESS[50];
+char AUTH_PROVIDER[50];
+char AUTH_CODE[50];
+char UID[50];
+char ACCESS_TOKEN[50];
+#endif
+
+char mainConsumer[37] = {'\0',};
+
+extern char *strdup(const char *s);
+
+bool isExit = false;
+
+int id;
+
+void* OCProcessThread(void * ptr)
+{
+ (void) ptr;
+ while (!isExit)
+ {
+ if (OCProcess() != OC_STACK_OK)
+ {
+ printf("OCStack process error");
+ return NULL;
+ }
+ }
+
+ return NULL;
+}
+
+void subscribeRequestCallback(NSConsumer *consumer)
+{
+ printf("consumer requested to subscribe");
+
+ printf("NS_APP Consumer Device ID: %s\n", consumer->consumerId);
+
+ if(mainConsumer[0] == '\0')
+ {
+ OICStrcpy(mainConsumer, 37, consumer->consumerId);
+ }
+
+ NSAcceptSubscription(consumer, true);
+}
+
+void syncCallback(NSSyncInfo *sync)
+{
+ printf("sync requested");
+
+ printf("NS_APP Sync State: %d\n", sync->state);
+}
+
+FILE* server_fopen(const char *path, const char *mode)
+{
+ (void)path;
+ return fopen("oic_ns_provider_db.dat", mode);
+}
+
+void printTopics(NSTopicLL * topics)
+{
+ if(!topics)
+ {
+ printf("topics is null\n");
+ return;
+ }
+
+ NSTopicLL * iter = topics;
+
+ while(iter)
+ {
+ printf("tName = %s, tState = %d\n", iter->topicName, (int)iter->state);
+ iter = iter->next;
+ }
+}
+
+void removeTopics(NSTopicLL * topics)
+{
+ if(!topics)
+ {
+ printf("topics is null\n");
+ return;
+ }
+
+ NSTopicLL * iter = topics;
+
+ while(iter)
+ {
+ NSTopicLL * del = iter;
+ if(del->topicName)
+ {
+ OICFree(del->topicName);
+ }
+ iter = iter->next;
+
+ OICFree(del);
+ }
+}
+
+int main()
+{
+ int num;
+ pthread_t processThread;
+
+ printf("NSStartProvider()\n\n");
+
+ // open oic_db
+ static OCPersistentStorage ps = {server_fopen, fread, fwrite, fclose, unlink};
+ OCRegisterPersistentStorageHandler(&ps);
+
+ if (OCInit(NULL, 0, OC_CLIENT_SERVER) != OC_STACK_OK)
+ {
+ printf("OCStack init error");
+ return 0;
+ }
+
+ pthread_create(&processThread, NULL, OCProcessThread, unlink);
+
+ while (!isExit)
+ {
+ char dummy;
+
+ printf("==============================================\n");
+ printf("1. NSStartProvider(Accepter: Provider) \n");
+ printf("2. NSStartProvider(Accepter: Consumer) \n");
+ printf("3. NSSendNotification() \n");
+ printf("4. NSRead() \n");
+ printf("5. NSProviderAddTopic(); \n");
+ printf("6. NSProviderDeleteTopic(); \n");
+ printf("7. NSProviderSelectTopic(); \n");
+ printf("8. NSProviderUnselectTopic(); \n");
+ printf("9. NSProviderGetConsumerTopics(); \n");
+ printf("10. NSProviderGetTopics(); \n");
+ printf("11. NSStopProvider() \n");
+#ifdef WITH_CLOUD
+ printf("21. NSProviderEnableRemoteService (after login) \n");
+ printf("22. NSProviderDisableRemoteService (after login) \n");
+ printf("31. Cloud Signup \n");
+ printf("32. Cloud Login \n");
+ printf("33. Cloud Logout \n");
+#endif
+ printf("0. Exit() \n");
+ printf("==============================================\n");
+
+ printf("input : ");
+
+ scanf("%d", &num);
+ fflush(stdin);
+ scanf("%c", &dummy);
+ fflush(stdin);
+
+ switch (num)
+ {
+ case 1:
+ {
+ printf("NSStartProvider(Accepter: Provider)");
+ NSProviderConfig config;
+ config.policy = true;
+ config.subRequestCallback = subscribeRequestCallback;
+ config.syncInfoCallback = syncCallback;
+ config.userInfo = OICStrdup("OCF_NOTIFICATION");
+ NSStartProvider(config);
+ }
+ break;
+
+ case 2:
+ {
+ printf("NSStartProvider(Accepter: Consumer)");
+ NSProviderConfig config;
+ config.policy = false;
+ config.subRequestCallback = subscribeRequestCallback;
+ config.syncInfoCallback = syncCallback;
+ config.userInfo = OICStrdup("OCF_NOTIFICATION");
+ NSStartProvider(config);
+ }
+ break;
+
+ case 3:
+ {
+ printf("NSSendNotification()");
+ char title[100];
+ char body[100];
+ char topic[100];
+
+ printf("id : %d\n", ++id);
+ printf("title : ");
+
+ gets(title);
+
+ printf("body : ");
+ gets(body);
+
+ printf("topic : ");
+ gets(topic);
+
+ printf("app - mTitle : %s \n", title);
+ printf("app - mContentText : %s \n", body);
+ printf("app - topic : %s \n", topic);
+
+ NSMessage * msg = NSCreateMessage();
+
+ msg->title = OICStrdup(title);
+ msg->contentText = OICStrdup(body);
+ msg->sourceName = OICStrdup("OCF");
+
+ if(topic[0] != '\0')
+ {
+ msg->topic = OICStrdup(topic);
+ }
+
+ NSSendMessage(msg);
+ }
+ break;
+
+ case 4:
+ printf("NSRead\n");
+ break;
+
+ case 5:
+ printf("NSProviderAddTopic\n");
+ NSProviderAddTopic("OCF_TOPIC1");
+ NSProviderAddTopic("OCF_TOPIC2");
+ NSProviderAddTopic("OCF_TOPIC3");
+ NSProviderAddTopic("OCF_TOPIC4");
+ break;
+
+ case 6:
+ printf("NSProviderDeleteTopic\n");
+ NSProviderDeleteTopic("OCF_TOPIC2");
+ break;
+
+ case 7:
+ printf("NSProviderSelectTopic\n");
+ NSProviderSelectTopic(mainConsumer, "OCF_TOPIC1");
+ NSProviderSelectTopic(mainConsumer, "OCF_TOPIC2");
+ NSProviderSelectTopic(mainConsumer, "OCF_TOPIC3");
+ NSProviderSelectTopic(mainConsumer, "OCF_TOPIC4");
+ break;
+
+ case 8:
+ printf("NSProviderUnSelectTopic\n");
+ NSProviderUnselectTopic(mainConsumer, "OCF_TOPIC1");
+ break;
+
+ case 9:
+ printf("NSProviderGetConsumerTopics\n");
+ {
+ NSTopicLL * topics = NSProviderGetConsumerTopics(mainConsumer);
+ printTopics(topics);
+ removeTopics(topics);
+ }
+ break;
+
+ case 10:
+ printf("NSProviderGetConsumerTopics\n");
+ {
+ NSTopicLL * topics = NSProviderGetTopics();
+ printTopics(topics);
+ removeTopics(topics);
+ }
+ break;
+
+ case 11:
+ NSStopProvider();
+ break;
+#ifdef WITH_CLOUD
+ case 21:
+ printf("Enable Remote Service");
+ if(!IsCloudLoggedin())
+ {
+ printf("Login required");
+ break;
+ }
+ NSProviderEnableRemoteService(REMOTE_SERVER_ADDRESS);
+ break;
+
+ case 22:
+ printf("Disable Remote Service");
+ if(!IsCloudLoggedin())
+ {
+ printf("Login required");
+ break;
+ }
+ NSProviderDisableRemoteService(REMOTE_SERVER_ADDRESS);
+ break;
+
+ case 31:
+ printf("Remote Server Address: ");
+ gets(REMOTE_SERVER_ADDRESS);
+
+ printf("Auth Provider(eg. github): ");
+ gets(AUTH_PROVIDER);
+
+ printf("Auth Code: ");
+ gets(AUTH_CODE);
+
+ OCCloudSignup(REMOTE_SERVER_ADDRESS, OCGetServerInstanceIDString(),
+ AUTH_PROVIDER, AUTH_CODE, CloudSignupCallback);
+ printf("OCCloudSignup requested");
+ break;
+ case 32:
+ printf("Remote Server Address: ");
+ gets(REMOTE_SERVER_ADDRESS);
+
+ printf("UID: ");
+ gets(UID);
+
+ printf("ACCESS_TOKEN: ");
+ gets(ACCESS_TOKEN);
+
+ OCCloudLogin(REMOTE_SERVER_ADDRESS, UID, OCGetServerInstanceIDString(),
+ ACCESS_TOKEN, CloudLoginoutCallback);
+ printf("OCCloudLogin requested");
+ break;
+ case 33:
+ OCCloudLogout(REMOTE_SERVER_ADDRESS, CloudLoginoutCallback);
+ printf("OCCloudLogin requested");
+ break;
+#endif
+ case 0:
+ NSStopProvider();
+ isExit = true;
+ break;
+ default:
+ break;
+ }
+
+ printf("\n");
+ }
+
+ return 0;
+}
+++ /dev/null
-//******************************************************************
-//
-// 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, 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)
- {
- /* Need to update with Cloud Interface Implementation.
- *
- 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;
- }
- /* Need to update with Cloud Interface Implementation.
- *
- 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;
-}
+++ /dev/null
-//******************************************************************
-//
-// 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
bool isStartedConsumer = NSIsStartedConsumer();
NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
- NSTask * discoverTask = NSMakeTask(TASK_CONSUMER_REQ_DISCOVER, (void *)serverAddress);
+ char * queryAddr = OICStrdup(serverAddress);
+ NS_VERIFY_NOT_NULL(queryAddr, NS_ERROR);
+
+ NSTask * discoverTask = NSMakeTask(TASK_CONSUMER_REQ_DISCOVER, (void *)queryAddr);
NS_VERIFY_NOT_NULL(discoverTask, NS_ERROR);
return NSConsumerPushEvent(discoverTask);
NS_LOG(DEBUG, "NSProviderEnableRemoteService - IN");\r
pthread_mutex_lock(&nsInitMutex);\r
\r
-if(!initProvider)\r
+ if(!initProvider)\r
{\r
NS_LOG(DEBUG, "Provider service has not been started yet");\r
pthread_mutex_unlock(&nsInitMutex);\r
#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
NSTopicResource NotificationTopicResource;
#ifdef RD_CLIENT
+#define DEFAULT_CONTEXT_VALUE 0x99
+
OCStackApplicationResult NSHandlePublishCb(void *ctx, OCDoHandle handle,
OCClientResponse *clientResponse)
{
(void) handle;
- (void) ctx;
+ 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);
NS_LOG(DEBUG, "NSPublishResourceToCloud - IN");
NS_LOG_V(DEBUG, "Remote Server Address: %s", serverAddress);
+ OCCallbackData cbData;
+ cbData.cb = NSHandlePublishCb;
+ cbData.context = (void *)DEFAULT_CONTEXT_VALUE;
+ cbData.cd = NULL;
+
OCResourceHandle resourceHandles[1] = {NotificationResource.handle};
OCStackResult res = OCRDPublish(serverAddress, CT_ADAPTER_TCP, resourceHandles, 1,
- &NSHandlePublishCb, OC_LOW_QOS);
+ &cbData, OC_LOW_QOS);
if (res != OC_STACK_OK)
{
- NS_LOG(DEBUG, "Unable to publish resources to cloud");
+ NS_LOG_V(DEBUG, "Unable to publish resources to cloud: %d", res);
}
NS_LOG(DEBUG, "NSPublishResourceToCloud - OUT");
}
#endif
+
NSResult NSCreateResource(char *uri)
{
NS_LOG(DEBUG, "NSCreateResource - IN");