Remove warning code in Provider Side.
[platform/upstream/iotivity.git] / service / notification / examples / linux / notificationprovider.c
1 //******************************************************************
2 //
3 // Copyright 2016 Samsung Electronics All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
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
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
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.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20
21 #include <stdio.h>
22 #include <stdbool.h>
23 #include <stdlib.h>
24 #include <unistd.h>
25
26 #include "NSProviderInterface.h"
27 #include "NSCommon.h"
28 #include "logger.h"
29 #include "octypes.h"
30 #include "pthread.h"
31 #include "oic_string.h"
32 #include "oic_malloc.h"
33 #include "ocstack.h"
34
35 #define TAG "NSProviderExample"
36
37 #ifdef WITH_CLOUD
38 #include "cloud_connector.h"
39
40 // Input the following values to publish resource to cloud
41 char REMOTE_SERVER_ADDRESS[50];
42 char AUTH_PROVIDER[50];
43 char AUTH_CODE[50];
44 char UID[50];
45 char ACCESS_TOKEN[50];
46 #endif
47
48 char mainConsumer[37] = {'\0',};
49
50 extern char *strdup(const char *s);
51
52 bool isExit = false;
53
54 int id;
55
56 void* OCProcessThread(void * ptr)
57 {
58     (void) ptr;
59     while (!isExit)
60     {
61         if (OCProcess() != OC_STACK_OK)
62         {
63             printf("OCStack process error");
64             return NULL;
65         }
66     }
67
68     return NULL;
69 }
70
71 void subscribeRequestCallback(NSConsumer *consumer)
72 {
73     printf("consumer requested to subscribe");
74
75     printf("NS_APP Consumer Device ID: %s\n", consumer->consumerId);
76
77     if(mainConsumer[0] == '\0')
78     {
79         OICStrcpy(mainConsumer, 37, consumer->consumerId);
80     }
81
82     NSAcceptSubscription(consumer->consumerId, true);
83 }
84
85 void syncCallback(NSSyncInfo *sync)
86 {
87     printf("sync requested");
88
89     printf("NS_APP Sync State: %d\n", sync->state);
90 }
91
92 FILE* server_fopen(const char *path, const char *mode)
93 {
94     (void)path;
95     return fopen("oic_ns_provider_db.dat", mode);
96 }
97
98 void printTopics(NSTopicLL * topics)
99 {
100     if(!topics)
101     {
102         printf("topics is null\n");
103         return;
104     }
105
106     NSTopicLL * iter = topics;
107
108     while(iter)
109     {
110         printf("tName = %s, tState = %d\n", iter->topicName, (int)iter->state);
111         iter = iter->next;
112     }
113 }
114
115 void removeTopics(NSTopicLL * topics)
116 {
117     if(!topics)
118     {
119         printf("topics is null\n");
120         return;
121     }
122
123     NSTopicLL * iter = topics;
124
125     while(iter)
126     {
127         NSTopicLL * del = iter;
128         if(del->topicName)
129         {
130             OICFree(del->topicName);
131         }
132         iter = iter->next;
133
134         OICFree(del);
135     }
136 }
137
138 int main()
139 {
140     int num;
141     pthread_t processThread;
142
143     printf("NSStartProvider()\n\n");
144
145     // open oic_db
146     static OCPersistentStorage ps = {server_fopen, fread, fwrite, fclose, unlink};
147     OCRegisterPersistentStorageHandler(&ps);
148
149     if (OCInit(NULL, 0, OC_CLIENT_SERVER) != OC_STACK_OK)
150     {
151         printf("OCStack init error");
152         return 0;
153     }
154
155     pthread_create(&processThread, NULL, OCProcessThread, unlink);
156
157     while (!isExit)
158     {
159         char dummy;
160
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");
173 #ifdef WITH_CLOUD
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");
179 #endif
180         printf("0. Exit() \n");
181         printf("==============================================\n");
182
183         printf("input : ");
184
185         scanf("%d", &num);
186         fflush(stdin);
187         scanf("%c", &dummy);
188         fflush(stdin);
189
190         switch (num)
191         {
192             case 1:
193             {
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);
201             }
202                 break;
203
204             case 2:
205             {
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);
213             }
214                 break;
215
216             case 3:
217             {
218                 printf("NSSendNotification()");
219                 char title[100];
220                 char body[100];
221                 char topic[100];
222
223                 printf("id : %d\n", ++id);
224                 printf("title : ");
225                 fgets(title, sizeof(title), stdin);
226
227                 printf("body : ");
228                 fgets(body, sizeof(body), stdin);
229
230                 printf("topic : ");
231                 fgets(topic, sizeof(topic), stdin);
232
233                 printf("app - mTitle : %s \n", title);
234                 printf("app - mContentText : %s \n", body);
235                 printf("app - topic : %s \n", topic);
236
237                 NSMessage * msg = NSCreateMessage();
238
239                 msg->title = OICStrdup(title);
240                 msg->contentText = OICStrdup(body);
241                 msg->sourceName = OICStrdup("OCF");
242
243                 if(topic[0] != '\0')
244                 {
245                     msg->topic = OICStrdup(topic);
246                 }
247
248                 NSSendMessage(msg);
249             }
250                 break;
251
252             case 4:
253                 printf("NSRead\n");
254                 break;
255
256             case 5:
257                 printf("NSProviderAddTopic\n");
258                 NSProviderRegisterTopic("OCF_TOPIC1");
259                 NSProviderRegisterTopic("OCF_TOPIC2");
260                 NSProviderRegisterTopic("OCF_TOPIC3");
261                 NSProviderRegisterTopic("OCF_TOPIC4");
262                 break;
263
264             case 6:
265                 printf("NSProviderDeleteTopic\n");
266                 NSProviderUnregisterTopic("OCF_TOPIC2");
267                 break;
268
269             case 7:
270                 printf("NSProviderSelectTopic\n");
271                 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC1");
272                 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC2");
273                 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC3");
274                 NSProviderSetConsumerTopic(mainConsumer, "OCF_TOPIC4");
275                 break;
276
277             case 8:
278                 printf("NSProviderUnSelectTopic\n");
279                 NSProviderUnsetConsumerTopic(mainConsumer, "OCF_TOPIC1");
280                 break;
281
282             case 9:
283                 printf("NSProviderGetConsumerTopics\n");
284                 {
285                     NSTopicLL * topics = NSProviderGetConsumerTopics(mainConsumer);
286                     printTopics(topics);
287                     removeTopics(topics);
288                 }
289                 break;
290
291             case 10:
292                 printf("NSProviderGetConsumerTopics\n");
293                 {
294                     NSTopicLL * topics = NSProviderGetTopics();
295                     printTopics(topics);
296                     removeTopics(topics);
297                 }
298                 break;
299
300             case 11:
301                 NSStopProvider();
302                 break;
303 #ifdef WITH_CLOUD
304             case 21:
305                 printf("Enable Remote Service");
306                 if(!IsCloudLoggedin())
307                 {
308                     printf("Login required");
309                     break;
310                 }
311                 NSProviderEnableRemoteService(REMOTE_SERVER_ADDRESS);                
312                 break;
313
314             case 22:
315                 printf("Disable Remote Service");
316                 if(!IsCloudLoggedin())
317                 {
318                     printf("Login required");
319                     break;
320                 }
321                 NSProviderDisableRemoteService(REMOTE_SERVER_ADDRESS);
322                 break;
323
324             case 31:
325                 printf("Remote Server Address: ");
326                 gets(REMOTE_SERVER_ADDRESS);
327
328                 printf("Auth Provider(eg. github): ");
329                 gets(AUTH_PROVIDER);
330
331                 printf("Auth Code: ");
332                 gets(AUTH_CODE);
333
334                 OCCloudSignup(REMOTE_SERVER_ADDRESS, OCGetServerInstanceIDString(),
335                     AUTH_PROVIDER, AUTH_CODE, CloudSignupCallback);
336                 printf("OCCloudSignup requested");
337                 break;
338             case 32:
339                 printf("Remote Server Address: ");
340                 gets(REMOTE_SERVER_ADDRESS);
341
342                 printf("UID: ");
343                 gets(UID);
344
345                 printf("ACCESS_TOKEN: ");
346                 gets(ACCESS_TOKEN);
347
348                 OCCloudLogin(REMOTE_SERVER_ADDRESS, UID, OCGetServerInstanceIDString(),
349                     ACCESS_TOKEN, CloudLoginoutCallback);
350                 printf("OCCloudLogin requested");
351                 break;
352             case 33:
353                 OCCloudLogout(REMOTE_SERVER_ADDRESS, CloudLoginoutCallback);
354                 printf("OCCloudLogin requested");
355                 break;
356 #endif
357             case 0:
358                 NSStopProvider();
359                 isExit = true;
360                 break;
361             default:
362                 break;
363         }
364
365         printf("\n");
366     }
367
368     return 0;
369 }