1 //******************************************************************
3 // Copyright 2016 Samsung Electronics All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
26 #include "NSProviderInterface.h"
31 #include "oic_string.h"
32 #include "oic_malloc.h"
35 #define TAG "NSProviderExample"
38 #include "cloud_connector.h"
40 // Input the following values to publish resource to cloud
41 char REMOTE_SERVER_ADDRESS[50] = {'\0',};
42 char AUTH_PROVIDER[50] = {'\0',};
43 char AUTH_CODE[50] = {'\0',};
44 char UID[50] = {'\0',};
45 char ACCESS_TOKEN[50] = {'\0',};
48 char mainConsumer[37] = {'\0',};
50 extern char *strdup(const char *s);
56 void* OCProcessThread(void * ptr)
61 if (OCProcess() != OC_STACK_OK)
63 printf("OCStack process error");
71 void subscribeRequestCallback(NSConsumer *consumer)
73 printf("consumer requested to subscribe");
75 printf("NS_APP Consumer Device ID: %s\n", consumer->consumerId);
77 if(mainConsumer[0] == '\0')
79 OICStrcpy(mainConsumer, 37, consumer->consumerId);
82 NSAcceptSubscription(consumer->consumerId, true);
85 void syncCallback(NSSyncInfo *sync)
87 printf("sync requested");
89 printf("NS_APP Sync State: %d\n", sync->state);
92 FILE* server_fopen(const char *path, const char *mode)
95 return fopen("oic_ns_provider_db.dat", mode);
98 void printTopics(NSTopicLL * topics)
102 printf("topics is null\n");
106 NSTopicLL * iter = topics;
110 printf("tName = %s, tState = %d\n", iter->topicName, (int)iter->state);
115 void removeTopics(NSTopicLL * topics)
119 printf("topics is null\n");
123 NSTopicLL * iter = topics;
127 NSTopicLL * del = iter;
130 OICFree(del->topicName);
138 void input(char * buffer)
143 while( (ch = getchar()) != '\n' && i < 100)
152 pthread_t processThread;
154 printf("NSStartProvider()\n\n");
157 static OCPersistentStorage ps = {server_fopen, fread, fwrite, fclose, unlink};
158 OCRegisterPersistentStorageHandler(&ps);
160 if (OCInit(NULL, 0, OC_CLIENT_SERVER) != OC_STACK_OK)
162 printf("OCStack init error");
166 pthread_create(&processThread, NULL, OCProcessThread, unlink);
172 printf("==============================================\n");
173 printf("1. NSStartProvider(Accepter: Provider) \n");
174 printf("2. NSStartProvider(Accepter: Consumer) \n");
175 printf("3. NSSendNotification() \n");
176 printf("4. NSRead() \n");
177 printf("5. NSProviderAddTopic(); \n");
178 printf("6. NSProviderDeleteTopic(); \n");
179 printf("7. NSProviderSelectTopic(); \n");
180 printf("8. NSProviderUnselectTopic(); \n");
181 printf("9. NSProviderGetConsumerTopics(); \n");
182 printf("10. NSProviderGetTopics(); \n");
183 printf("11. NSStopProvider() \n");
185 printf("21. NSProviderEnableRemoteService (after login) \n");
186 printf("22. NSProviderDisableRemoteService (after login) \n");
187 printf("31. Cloud Signup \n");
188 printf("32. Cloud Login \n");
189 printf("33. Cloud Logout \n");
191 printf("0. Exit() \n");
192 printf("==============================================\n");
196 if(scanf("%d", &num) > 0)
199 if(scanf("%c", &dummy) > 0)
210 printf("NSStartProvider(Accepter: Provider)");
211 NSProviderConfig config;
212 config.subControllability = true;
213 config.subRequestCallback = subscribeRequestCallback;
214 config.syncInfoCallback = syncCallback;
215 config.userInfo = OICStrdup("OCF_NOTIFICATION");
216 NSStartProvider(config);
222 printf("NSStartProvider(Accepter: Consumer)");
223 NSProviderConfig config;
224 config.subControllability = false;
225 config.subRequestCallback = subscribeRequestCallback;
226 config.syncInfoCallback = syncCallback;
227 config.userInfo = OICStrdup("OCF_NOTIFICATION");
228 NSStartProvider(config);
234 printf("NSSendNotification()");
235 char title[100] = {'\0',};
236 char body[100] = {'\0',};
237 char topic[100] = {'\0',};
239 printf("id : %d\n", ++id);
249 printf("app - mTitle : %s \n", title);
250 printf("app - mContentText : %s \n", body);
251 printf("app - topic : %s \n", topic);
253 NSMessage * msg = NSCreateMessage();
255 msg->title = OICStrdup(title);
256 msg->contentText = OICStrdup(body);
257 msg->sourceName = OICStrdup("OCF");
261 msg->topic = OICStrdup(topic);
273 printf("NSProviderAddTopic\n");
274 NSProviderRegisterTopic("OCF_TOPIC1");
275 NSProviderRegisterTopic("OCF_TOPIC2");
276 NSProviderRegisterTopic("OCF_TOPIC3");
277 NSProviderRegisterTopic("OCF_TOPIC4");
281 printf("NSProviderDeleteTopic\n");
282 NSProviderUnregisterTopic("OCF_TOPIC2");
286 printf("NSProviderSelectTopic\n");
287 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC1");
288 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC2");
289 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC3");
290 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC4");
294 printf("NSProviderUnSelectTopic\n");
295 NSProviderUnsetConsumerTopic(mainConsumer, "OCF_TOPIC1");
299 printf("NSProviderGetConsumerTopics\n");
301 NSTopicLL * topics = NSProviderGetConsumerTopics(mainConsumer);
303 removeTopics(topics);
308 printf("NSProviderGetConsumerTopics\n");
310 NSTopicLL * topics = NSProviderGetTopics();
312 removeTopics(topics);
321 printf("Enable Remote Service\n");
322 if(!IsCloudLoggedin())
324 printf("Login required\n");
327 NSProviderEnableRemoteService(REMOTE_SERVER_ADDRESS);
331 printf("Disable Remote Service\n");
332 if(!IsCloudLoggedin())
334 printf("Login required\n");
337 NSProviderDisableRemoteService(REMOTE_SERVER_ADDRESS);
341 printf("Remote Server Address: ");
342 input(REMOTE_SERVER_ADDRESS);
344 printf("Auth Provider(eg. github): ");
345 input(AUTH_PROVIDER);
347 printf("Auth Code: ");
350 OCCloudSignup(REMOTE_SERVER_ADDRESS, OCGetServerInstanceIDString(),
351 AUTH_PROVIDER, AUTH_CODE, CloudSignupCallback);
352 printf("OCCloudSignup requested");
355 printf("Remote Server Address: ");
356 input(REMOTE_SERVER_ADDRESS);
361 printf("ACCESS_TOKEN: ");
364 OCCloudLogin(REMOTE_SERVER_ADDRESS, UID, OCGetServerInstanceIDString(),
365 ACCESS_TOKEN, CloudLoginoutCallback);
366 printf("OCCloudLogin requested\n");
369 OCCloudLogout(REMOTE_SERVER_ADDRESS, CloudLoginoutCallback);
370 printf("OCCloudLogin requested\n");