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',};
49 char CLOUD_ADDRESS[100] = "10.113.64.52:5686";
50 char CLOUD_TOPIC[100] = "/oic/ps/notification";
53 char mainConsumer[37] = {'\0',};
55 extern char *strdup(const char *s);
61 void* OCProcessThread(void * ptr)
66 if (OCProcess() != OC_STACK_OK)
68 printf("OCStack process error");
76 void subscribeRequestCallback(NSConsumer *consumer)
78 printf("consumer requested to subscribe");
80 printf("NS_APP Consumer Device ID: %s\n", consumer->consumerId);
82 if(mainConsumer[0] == '\0')
84 OICStrcpy(mainConsumer, 37, consumer->consumerId);
87 NSAcceptSubscription(consumer->consumerId, true);
90 void syncCallback(NSSyncInfo *sync)
92 printf("sync requested");
94 printf("NS_APP Sync State: %d\n", sync->state);
97 FILE* server_fopen(const char *path, const char *mode)
100 return fopen("oic_ns_provider_db.dat", mode);
103 void printTopics(NSTopicLL * topics)
107 printf("topics is null\n");
111 NSTopicLL * iter = topics;
115 printf("tName = %s, tState = %d\n", iter->topicName, (int)iter->state);
120 void removeTopics(NSTopicLL * topics)
124 printf("topics is null\n");
128 NSTopicLL * iter = topics;
132 NSTopicLL * del = iter;
135 OICFree(del->topicName);
143 void input(char * buffer)
148 while( (ch = getchar()) != '\n' && i < 100)
157 pthread_t processThread;
159 printf("NSStartProvider()\n\n");
162 static OCPersistentStorage ps = {server_fopen, fread, fwrite, fclose, unlink};
163 OCRegisterPersistentStorageHandler(&ps);
165 if (OCInit(NULL, 0, OC_CLIENT_SERVER) != OC_STACK_OK)
167 printf("OCStack init error");
171 pthread_create(&processThread, NULL, OCProcessThread, unlink);
177 printf("==============================================\n");
178 printf("1. NSStartProvider(Accepter: Provider) \n");
179 printf("2. NSStartProvider(Accepter: Consumer) \n");
180 printf("3. NSSendNotification() \n");
181 printf("4. NSRead() \n");
182 printf("5. NSProviderAddTopic(); \n");
183 printf("6. NSProviderDeleteTopic(); \n");
184 printf("7. NSProviderSelectTopic(); \n");
185 printf("8. NSProviderUnselectTopic(); \n");
186 printf("9. NSProviderGetConsumerTopics(); \n");
187 printf("10. NSProviderGetTopics(); \n");
188 printf("11. NSProviderSubscribeMQService() \n");
189 printf("0. NSStopProvider() \n");
191 printf("21. NSProviderEnableRemoteService (after login) \n");
192 printf("22. NSProviderDisableRemoteService (after login) \n");
193 printf("31. Cloud Signup \n");
194 printf("32. Cloud Login \n");
195 printf("33. Cloud Logout \n");
197 printf("0. Exit() \n");
198 printf("==============================================\n");
202 if(scanf("%d", &num) > 0)
204 if(scanf("%c", &dummy) > 0)
212 printf("invalid input \n");
220 printf("NSStartProvider(Accepter: Provider)");
221 NSProviderConfig config;
222 config.subControllability = true;
223 config.subRequestCallback = subscribeRequestCallback;
224 config.syncInfoCallback = syncCallback;
225 config.userInfo = OICStrdup("OCF_NOTIFICATION");
226 NSStartProvider(config);
232 printf("NSStartProvider(Accepter: Consumer)");
233 NSProviderConfig config;
234 config.subControllability = false;
235 config.subRequestCallback = subscribeRequestCallback;
236 config.syncInfoCallback = syncCallback;
237 config.userInfo = OICStrdup("OCF_NOTIFICATION");
238 NSStartProvider(config);
244 printf("NSSendNotification()");
245 char title[100] = {'\0',};
246 char body[100] = {'\0',};
247 char topic[100] = {'\0',};
249 printf("id : %d\n", ++id);
260 printf("app - mTitle : %s \n", title);
261 printf("app - mContentText : %s \n", body);
262 printf("app - topic : %s \n", topic);
264 NSMessage * msg = NSCreateMessage();
268 msg->title = OICStrdup(title);
269 msg->contentText = OICStrdup(body);
270 msg->sourceName = OICStrdup("OCF");
274 msg->topic = OICStrdup(topic);
287 printf("NSProviderAddTopic\n");
288 NSProviderRegisterTopic("OCF_TOPIC1");
289 NSProviderRegisterTopic("OCF_TOPIC2");
290 NSProviderRegisterTopic("OCF_TOPIC3");
291 NSProviderRegisterTopic("OCF_TOPIC4");
295 printf("NSProviderDeleteTopic\n");
296 NSProviderUnregisterTopic("OCF_TOPIC2");
300 printf("NSProviderSelectTopic\n");
301 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC1");
302 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC2");
303 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC3");
304 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC4");
308 printf("NSProviderUnSelectTopic\n");
309 NSProviderUnsetConsumerTopic(mainConsumer, "OCF_TOPIC1");
313 printf("NSProviderGetConsumerTopics\n");
315 NSTopicLL * topics = NSProviderGetConsumerTopics(mainConsumer);
317 removeTopics(topics);
322 printf("NSProviderGetTopics\n");
324 NSTopicLL * topics = NSProviderGetTopics();
326 removeTopics(topics);
332 printf("11. Subscribe MQ Service\n");
334 printf("Remote Server Address: ");
335 //input(CLOUD_ADDRESS);
337 printf("Topic[notificationtest]: ");
338 //input(CLOUD_TOPIC);
340 NSProviderSubscribeMQService(CLOUD_ADDRESS, CLOUD_TOPIC);
346 printf("Enable Remote Service\n");
347 if(!IsCloudLoggedin())
349 printf("Login required\n");
352 NSProviderEnableRemoteService(REMOTE_SERVER_ADDRESS);
356 printf("Disable Remote Service\n");
357 if(!IsCloudLoggedin())
359 printf("Login required\n");
362 NSProviderDisableRemoteService(REMOTE_SERVER_ADDRESS);
366 printf("Remote Server Address: ");
367 input(REMOTE_SERVER_ADDRESS);
369 printf("Auth Provider(eg. github): ");
370 input(AUTH_PROVIDER);
372 printf("Auth Code: ");
375 OCCloudSignup(REMOTE_SERVER_ADDRESS, OCGetServerInstanceIDString(),
376 AUTH_PROVIDER, AUTH_CODE, CloudSignupCallback);
377 printf("OCCloudSignup requested");
380 printf("Remote Server Address: ");
381 input(REMOTE_SERVER_ADDRESS);
386 printf("ACCESS_TOKEN: ");
389 OCCloudLogin(REMOTE_SERVER_ADDRESS, UID, OCGetServerInstanceIDString(),
390 ACCESS_TOKEN, CloudLoginoutCallback);
391 printf("OCCloudLogin requested\n");
394 OCCloudLogout(REMOTE_SERVER_ADDRESS, CloudLoginoutCallback);
395 printf("OCCloudLogin requested\n");