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];
42 char AUTH_PROVIDER[50];
45 char ACCESS_TOKEN[50];
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);
141 pthread_t processThread;
143 printf("NSStartProvider()\n\n");
146 static OCPersistentStorage ps = {server_fopen, fread, fwrite, fclose, unlink};
147 OCRegisterPersistentStorageHandler(&ps);
149 if (OCInit(NULL, 0, OC_CLIENT_SERVER) != OC_STACK_OK)
151 printf("OCStack init error");
155 pthread_create(&processThread, NULL, OCProcessThread, unlink);
161 printf("==============================================\n");
162 printf("1. NSStartProvider(Accepter: Provider) \n");
163 printf("2. NSStartProvider(Accepter: Consumer) \n");
164 printf("3. NSSendNotification() \n");
165 printf("4. NSRead() \n");
166 printf("5. NSProviderAddTopic(); \n");
167 printf("6. NSProviderDeleteTopic(); \n");
168 printf("7. NSProviderSelectTopic(); \n");
169 printf("8. NSProviderUnselectTopic(); \n");
170 printf("9. NSProviderGetConsumerTopics(); \n");
171 printf("10. NSProviderGetTopics(); \n");
172 printf("11. NSStopProvider() \n");
174 printf("21. NSProviderEnableRemoteService (after login) \n");
175 printf("22. NSProviderDisableRemoteService (after login) \n");
176 printf("31. Cloud Signup \n");
177 printf("32. Cloud Login \n");
178 printf("33. Cloud Logout \n");
180 printf("0. Exit() \n");
181 printf("==============================================\n");
194 printf("NSStartProvider(Accepter: Provider)");
195 NSProviderConfig config;
196 config.policy = true;
197 config.subRequestCallback = subscribeRequestCallback;
198 config.syncInfoCallback = syncCallback;
199 config.userInfo = OICStrdup("OCF_NOTIFICATION");
200 NSStartProvider(config);
206 printf("NSStartProvider(Accepter: Consumer)");
207 NSProviderConfig config;
208 config.policy = false;
209 config.subRequestCallback = subscribeRequestCallback;
210 config.syncInfoCallback = syncCallback;
211 config.userInfo = OICStrdup("OCF_NOTIFICATION");
212 NSStartProvider(config);
218 printf("NSSendNotification()");
223 printf("id : %d\n", ++id);
225 fgets(title, sizeof(title), stdin);
228 fgets(body, sizeof(body), stdin);
231 fgets(topic, sizeof(topic), stdin);
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 NSProviderRegisterTopic("OCF_TOPIC1");
259 NSProviderRegisterTopic("OCF_TOPIC2");
260 NSProviderRegisterTopic("OCF_TOPIC3");
261 NSProviderRegisterTopic("OCF_TOPIC4");
265 printf("NSProviderDeleteTopic\n");
266 NSProviderUnregisterTopic("OCF_TOPIC2");
270 printf("NSProviderSelectTopic\n");
271 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC1");
272 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC2");
273 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC3");
274 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC4");
278 printf("NSProviderUnSelectTopic\n");
279 NSProviderUnsetConsumerTopic(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");