Modify cloud interface
[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
34 #define TAG "NSProviderExample"
35
36 #ifdef WITH_CLOUD
37 #include "cloud_connector.h"
38
39 // Input the following values to publish resource to cloud
40 char REMOTE_SERVER_ADDRESS[50];
41 char AUTH_PROVIDER[50];
42 char AUTH_CODE[50];
43 char UID[50];
44 char ACCESS_TOKEN[50];
45 #endif
46
47 char mainConsumer[37] = {'\0',};
48
49 extern char *strdup(const char *s);
50
51 bool isExit = false;
52
53 int id;
54
55 void* OCProcessThread(void * ptr)
56 {
57     (void) ptr;
58     while (!isExit)
59     {
60         if (OCProcess() != OC_STACK_OK)
61         {
62             printf("OCStack process error");
63             return NULL;
64         }
65     }
66
67     return NULL;
68 }
69
70 void subscribeRequestCallback(NSConsumer *consumer)
71 {
72     printf("consumer requested to subscribe");
73
74     printf("NS_APP Consumer Device ID: %s\n", consumer->consumerId);
75
76     if(mainConsumer[0] == '\0')
77     {
78         OICStrcpy(mainConsumer, 37, consumer->consumerId);
79     }
80
81     NSAcceptSubscription(consumer, true);
82 }
83
84 void syncCallback(NSSyncInfo *sync)
85 {
86     printf("sync requested");
87
88     printf("NS_APP Sync State: %d\n", sync->state);
89 }
90
91 FILE* server_fopen(const char *path, const char *mode)
92 {
93     (void)path;
94     return fopen("oic_ns_provider_db.dat", mode);
95 }
96
97 void printTopics(NSTopicLL * topics)
98 {
99     if(!topics)
100     {
101         printf("topics is null\n");
102         return;
103     }
104
105     NSTopicLL * iter = topics;
106
107     while(iter)
108     {
109         printf("tName = %s, tState = %d\n", iter->topicName, (int)iter->state);
110         iter = iter->next;
111     }
112 }
113
114 void removeTopics(NSTopicLL * topics)
115 {
116     if(!topics)
117     {
118         printf("topics is null\n");
119         return;
120     }
121
122     NSTopicLL * iter = topics;
123
124     while(iter)
125     {
126         NSTopicLL * del = iter;
127         if(del->topicName)
128         {
129             OICFree(del->topicName);
130         }
131         iter = iter->next;
132
133         OICFree(del);
134     }
135 }
136
137 int main()
138 {
139     int num;
140     pthread_t processThread;
141
142     printf("NSStartProvider()\n\n");
143
144     // open oic_db
145     static OCPersistentStorage ps = {server_fopen, fread, fwrite, fclose, unlink};
146     OCRegisterPersistentStorageHandler(&ps);
147
148     if (OCInit(NULL, 0, OC_CLIENT_SERVER) != OC_STACK_OK)
149     {
150         printf("OCStack init error");
151         return 0;
152     }
153
154     pthread_create(&processThread, NULL, OCProcessThread, unlink);
155
156     while (!isExit)
157     {
158         char dummy;
159
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");
172 #ifdef WITH_CLOUD
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");
178 #endif
179         printf("0. Exit() \n");
180         printf("==============================================\n");
181
182         printf("input : ");
183
184         scanf("%d", &num);
185         fflush(stdin);
186         scanf("%c", &dummy);
187         fflush(stdin);
188
189         switch (num)
190         {
191             case 1:
192             {
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);
200             }
201                 break;
202
203             case 2:
204             {
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);
212             }
213                 break;
214
215             case 3:
216             {
217                 printf("NSSendNotification()");
218                 char title[100];
219                 char body[100];
220                 char topic[100];
221
222                 printf("id : %d\n", ++id);
223                 printf("title : ");
224
225                 gets(title);
226
227                 printf("body : ");
228                 gets(body);
229
230                 printf("topic : ");
231                 gets(topic);
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                 NSProviderAddTopic("OCF_TOPIC1");
259                 NSProviderAddTopic("OCF_TOPIC2");
260                 NSProviderAddTopic("OCF_TOPIC3");
261                 NSProviderAddTopic("OCF_TOPIC4");
262                 break;
263
264             case 6:
265                 printf("NSProviderDeleteTopic\n");
266                 NSProviderDeleteTopic("OCF_TOPIC2");
267                 break;
268
269             case 7:
270                 printf("NSProviderSelectTopic\n");
271                 NSProviderSelectTopic(mainConsumer, "OCF_TOPIC1");
272                 NSProviderSelectTopic(mainConsumer, "OCF_TOPIC2");
273                 NSProviderSelectTopic(mainConsumer, "OCF_TOPIC3");
274                 NSProviderSelectTopic(mainConsumer, "OCF_TOPIC4");
275                 break;
276
277             case 8:
278                 printf("NSProviderUnSelectTopic\n");
279                 NSProviderUnselectTopic(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 }