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"
34 #define TAG "NSProviderExample"
37 #include "cloud_connector.h"
39 // Input the following values to publish resource to cloud
40 char REMOTE_SERVER_ADDRESS[50];
41 char AUTH_PROVIDER[50];
44 char ACCESS_TOKEN[50];
47 char mainConsumer[37] = {'\0',};
49 extern char *strdup(const char *s);
55 void* OCProcessThread(void * ptr)
60 if (OCProcess() != OC_STACK_OK)
62 printf("OCStack process error");
70 void subscribeRequestCallback(NSConsumer *consumer)
72 printf("consumer requested to subscribe");
74 printf("NS_APP Consumer Device ID: %s\n", consumer->consumerId);
76 if(mainConsumer[0] == '\0')
78 OICStrcpy(mainConsumer, 37, consumer->consumerId);
81 NSAcceptSubscription(consumer, true);
84 void syncCallback(NSSyncInfo *sync)
86 printf("sync requested");
88 printf("NS_APP Sync State: %d\n", sync->state);
91 FILE* server_fopen(const char *path, const char *mode)
94 return fopen("oic_ns_provider_db.dat", mode);
97 void printTopics(NSTopicLL * topics)
101 printf("topics is null\n");
105 NSTopicLL * iter = topics;
109 printf("tName = %s, tState = %d\n", iter->topicName, (int)iter->state);
114 void removeTopics(NSTopicLL * topics)
118 printf("topics is null\n");
122 NSTopicLL * iter = topics;
126 NSTopicLL * del = iter;
129 OICFree(del->topicName);
140 pthread_t processThread;
142 printf("NSStartProvider()\n\n");
145 static OCPersistentStorage ps = {server_fopen, fread, fwrite, fclose, unlink};
146 OCRegisterPersistentStorageHandler(&ps);
148 if (OCInit(NULL, 0, OC_CLIENT_SERVER) != OC_STACK_OK)
150 printf("OCStack init error");
154 pthread_create(&processThread, NULL, OCProcessThread, unlink);
160 printf("==============================================\n");
161 printf("1. NSStartProvider(Accepter: Provider) \n");
162 printf("2. NSStartProvider(Accepter: Consumer) \n");
163 printf("3. NSSendNotification() \n");
164 printf("4. NSRead() \n");
165 printf("5. NSProviderAddTopic(); \n");
166 printf("6. NSProviderDeleteTopic(); \n");
167 printf("7. NSProviderSelectTopic(); \n");
168 printf("8. NSProviderUnselectTopic(); \n");
169 printf("9. NSProviderGetConsumerTopics(); \n");
170 printf("10. NSProviderGetTopics(); \n");
171 printf("11. NSStopProvider() \n");
173 printf("21. NSProviderEnableRemoteService (after login) \n");
174 printf("22. NSProviderDisableRemoteService (after login) \n");
175 printf("31. Cloud Signup \n");
176 printf("32. Cloud Login \n");
177 printf("33. Cloud Logout \n");
179 printf("0. Exit() \n");
180 printf("==============================================\n");
193 printf("NSStartProvider(Accepter: Provider)");
194 NSProviderConfig config;
195 config.policy = true;
196 config.subRequestCallback = subscribeRequestCallback;
197 config.syncInfoCallback = syncCallback;
198 config.userInfo = OICStrdup("OCF_NOTIFICATION");
199 NSStartProvider(config);
205 printf("NSStartProvider(Accepter: Consumer)");
206 NSProviderConfig config;
207 config.policy = false;
208 config.subRequestCallback = subscribeRequestCallback;
209 config.syncInfoCallback = syncCallback;
210 config.userInfo = OICStrdup("OCF_NOTIFICATION");
211 NSStartProvider(config);
217 printf("NSSendNotification()");
222 printf("id : %d\n", ++id);
233 printf("app - mTitle : %s \n", title);
234 printf("app - mContentText : %s \n", body);
235 printf("app - topic : %s \n", topic);
237 NSMessage * msg = NSCreateMessage();
239 msg->title = OICStrdup(title);
240 msg->contentText = OICStrdup(body);
241 msg->sourceName = OICStrdup("OCF");
245 msg->topic = OICStrdup(topic);
257 printf("NSProviderAddTopic\n");
258 NSProviderAddTopic("OCF_TOPIC1");
259 NSProviderAddTopic("OCF_TOPIC2");
260 NSProviderAddTopic("OCF_TOPIC3");
261 NSProviderAddTopic("OCF_TOPIC4");
265 printf("NSProviderDeleteTopic\n");
266 NSProviderDeleteTopic("OCF_TOPIC2");
270 printf("NSProviderSelectTopic\n");
271 NSProviderSelectTopic(mainConsumer, "OCF_TOPIC1");
272 NSProviderSelectTopic(mainConsumer, "OCF_TOPIC2");
273 NSProviderSelectTopic(mainConsumer, "OCF_TOPIC3");
274 NSProviderSelectTopic(mainConsumer, "OCF_TOPIC4");
278 printf("NSProviderUnSelectTopic\n");
279 NSProviderUnselectTopic(mainConsumer, "OCF_TOPIC1");
283 printf("NSProviderGetConsumerTopics\n");
285 NSTopicLL * topics = NSProviderGetConsumerTopics(mainConsumer);
287 removeTopics(topics);
292 printf("NSProviderGetConsumerTopics\n");
294 NSTopicLL * topics = NSProviderGetTopics();
296 removeTopics(topics);
305 printf("Enable Remote Service");
306 if(!IsCloudLoggedin())
308 printf("Login required");
311 NSProviderEnableRemoteService(REMOTE_SERVER_ADDRESS);
315 printf("Disable Remote Service");
316 if(!IsCloudLoggedin())
318 printf("Login required");
321 NSProviderDisableRemoteService(REMOTE_SERVER_ADDRESS);
325 printf("Remote Server Address: ");
326 gets(REMOTE_SERVER_ADDRESS);
328 printf("Auth Provider(eg. github): ");
331 printf("Auth Code: ");
334 OCCloudSignup(REMOTE_SERVER_ADDRESS, OCGetServerInstanceIDString(),
335 AUTH_PROVIDER, AUTH_CODE, CloudSignupCallback);
336 printf("OCCloudSignup requested");
339 printf("Remote Server Address: ");
340 gets(REMOTE_SERVER_ADDRESS);
345 printf("ACCESS_TOKEN: ");
348 OCCloudLogin(REMOTE_SERVER_ADDRESS, UID, OCGetServerInstanceIDString(),
349 ACCESS_TOKEN, CloudLoginoutCallback);
350 printf("OCCloudLogin requested");
353 OCCloudLogout(REMOTE_SERVER_ADDRESS, CloudLoginoutCallback);
354 printf("OCCloudLogin requested");