Merge branch 'cloud-interface'
[platform/upstream/iotivity.git] / service / notification / examples / linux / notificationprovider.c
1 //******************************************************************\r
2 //\r
3 // Copyright 2016 Samsung Electronics All Rights Reserved.\r
4 //\r
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
6 //\r
7 // Licensed under the Apache License, Version 2.0 (the "License");\r
8 // you may not use this file except in compliance with the License.\r
9 // You may obtain a copy of the License at\r
10 //\r
11 //      http://www.apache.org/licenses/LICENSE-2.0\r
12 //\r
13 // Unless required by applicable law or agreed to in writing, software\r
14 // distributed under the License is distributed on an "AS IS" BASIS,\r
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16 // See the License for the specific language governing permissions and\r
17 // limitations under the License.\r
18 //\r
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
20 \r
21 #include <stdio.h>\r
22 #include <stdbool.h>\r
23 #include <stdlib.h>\r
24 #include <unistd.h>\r
25 \r
26 #include "NSProviderInterface.h"\r
27 #include "NSCommon.h"\r
28 #include "logger.h"\r
29 #include "octypes.h"\r
30 #include "pthread.h"\r
31 #include "oic_string.h"\r
32 #include "oic_malloc.h"\r
33 \r
34 #define TAG "NSProviderExample"\r
35 \r
36 // Input the following values to publish resource to cloud\r
37 char REMOTE_SERVER_ADDRESS[50];\r
38 char mainConsumer[37] = {'\0',};\r
39 \r
40 extern char *strdup(const char *s);\r
41 \r
42 bool isExit = false;\r
43 \r
44 int id;\r
45 \r
46 void* OCProcessThread(void * ptr)\r
47 {\r
48     (void) ptr;\r
49     while (!isExit)\r
50     {\r
51         if (OCProcess() != OC_STACK_OK)\r
52         {\r
53             printf("OCStack process error");\r
54             return NULL;\r
55         }\r
56     }\r
57 \r
58     return NULL;\r
59 }\r
60 \r
61 void subscribeRequestCallback(NSConsumer *consumer)\r
62 {\r
63     printf("consumer requested to subscribe");\r
64 \r
65     printf("NS_APP Consumer Device ID: %s\n", consumer->consumerId);\r
66 \r
67     if(mainConsumer[0] == '\0')\r
68     {\r
69         OICStrcpy(mainConsumer, 37, consumer->consumerId);\r
70     }\r
71 \r
72     NSAcceptSubscription(consumer, true);\r
73 }\r
74 \r
75 void syncCallback(NSSyncInfo *sync)\r
76 {\r
77     printf("sync requested");\r
78 \r
79     printf("NS_APP Sync State: %d\n", sync->state);\r
80 }\r
81 \r
82 FILE* server_fopen(const char *path, const char *mode)\r
83 {\r
84     (void)path;\r
85     return fopen("oic_ns_provider_db.dat", mode);\r
86 }\r
87 \r
88 void printTopics(NSTopicLL * topics)\r
89 {\r
90     if(!topics)\r
91     {\r
92         printf("topics is null\n");\r
93         return;\r
94     }\r
95 \r
96     NSTopicLL * iter = topics;\r
97 \r
98     while(iter)\r
99     {\r
100         printf("tName = %s, tState = %d\n", iter->topicName, (int)iter->state);\r
101         iter = iter->next;\r
102     }\r
103 }\r
104 \r
105 void removeTopics(NSTopicLL * topics)\r
106 {\r
107     if(!topics)\r
108     {\r
109         printf("topics is null\n");\r
110         return;\r
111     }\r
112 \r
113     NSTopicLL * iter = topics;\r
114 \r
115     while(iter)\r
116     {\r
117         NSTopicLL * del = iter;\r
118         if(del->topicName)\r
119         {\r
120             OICFree(del->topicName);\r
121         }\r
122         iter = iter->next;\r
123 \r
124         OICFree(del);\r
125     }\r
126 }\r
127 \r
128 int main()\r
129 {\r
130     int num;\r
131     pthread_t processThread;\r
132 \r
133     printf("NSStartProvider()\n\n");\r
134 \r
135     // open oic_db\r
136     static OCPersistentStorage ps = {server_fopen, fread, fwrite, fclose, unlink};\r
137     OCRegisterPersistentStorageHandler(&ps);\r
138 \r
139     if (OCInit(NULL, 0, OC_CLIENT_SERVER) != OC_STACK_OK)\r
140     {\r
141         printf("OCStack init error");\r
142         return 0;\r
143     }\r
144 \r
145     pthread_create(&processThread, NULL, OCProcessThread, unlink);\r
146 \r
147     while (!isExit)\r
148     {\r
149         char dummy;\r
150 \r
151         printf("==============================================\n");\r
152         printf("1.  NSStartProvider(Accepter: Provider) \n");\r
153         printf("2.  NSStartProvider(Accepter: Consumer) \n");\r
154         printf("3.  NSSendNotification() \n");\r
155         printf("4.  NSRead() \n");\r
156         printf("5.  NSProviderAddTopic(); \n");\r
157         printf("6.  NSProviderDeleteTopic(); \n");\r
158         printf("7.  NSProviderSelectTopic(); \n");\r
159         printf("8.  NSProviderUnselectTopic(); \n");\r
160         printf("9.  NSProviderGetConsumerTopics(); \n");\r
161         printf("10. NSProviderGetTopics(); \n");\r
162         printf("11. NSStopProvider() \n");\r
163         printf("12. NSProviderEnableRemoteService \n");\r
164         printf("0. Exit() \n");\r
165         printf("==============================================\n");\r
166 \r
167         printf("input : ");\r
168 \r
169         scanf("%d", &num);\r
170         fflush(stdin);\r
171         scanf("%c", &dummy);\r
172         fflush(stdin);\r
173 \r
174         switch (num)\r
175         {\r
176             case 1:\r
177             {\r
178                 printf("NSStartProvider(Accepter: Provider)");\r
179                 NSProviderConfig config;\r
180                 config.policy = true;\r
181                 config.subRequestCallback = subscribeRequestCallback;\r
182                 config.syncInfoCallback = syncCallback;\r
183                 config.userInfo = OICStrdup("OCF_NOTIFICATION");\r
184                 NSStartProvider(config);\r
185             }\r
186                 break;\r
187 \r
188             case 2:\r
189             {\r
190                 printf("NSStartProvider(Accepter: Consumer)");\r
191                 NSProviderConfig config;\r
192                 config.policy = false;\r
193                 config.subRequestCallback = subscribeRequestCallback;\r
194                 config.syncInfoCallback = syncCallback;\r
195                 config.userInfo = OICStrdup("OCF_NOTIFICATION");\r
196                 NSStartProvider(config);\r
197             }\r
198                 break;\r
199 \r
200             case 3:\r
201             {\r
202                 printf("NSSendNotification()");\r
203                 char title[100];\r
204                 char body[100];\r
205                 char topic[100];\r
206 \r
207                 printf("id : %d\n", ++id);\r
208                 printf("title : ");\r
209 \r
210                 gets(title);\r
211 \r
212                 printf("body : ");\r
213                 gets(body);\r
214 \r
215                 printf("topic : ");\r
216                 gets(topic);\r
217 \r
218                 printf("app - mTitle : %s \n", title);\r
219                 printf("app - mContentText : %s \n", body);\r
220                 printf("app - topic : %s \n", topic);\r
221 \r
222                 NSMessage * msg = NSCreateMessage();\r
223 \r
224                 msg->title = OICStrdup(title);\r
225                 msg->contentText = OICStrdup(body);\r
226                 msg->sourceName = OICStrdup("OCF");\r
227 \r
228                 if(topic[0] != '\0')\r
229                 {\r
230                     msg->topic = OICStrdup(topic);\r
231                 }\r
232 \r
233                 NSSendMessage(msg);\r
234             }\r
235                 break;\r
236 \r
237             case 4:\r
238                 printf("NSRead\n");\r
239                 break;\r
240 \r
241             case 5:\r
242                 printf("NSProviderAddTopic\n");\r
243                 NSProviderAddTopic("OCF_TOPIC1");\r
244                 NSProviderAddTopic("OCF_TOPIC2");\r
245                 NSProviderAddTopic("OCF_TOPIC3");\r
246                 NSProviderAddTopic("OCF_TOPIC4");\r
247                 break;\r
248 \r
249             case 6:\r
250                 printf("NSProviderDeleteTopic\n");\r
251                 NSProviderDeleteTopic("OCF_TOPIC2");\r
252                 break;\r
253 \r
254             case 7:\r
255                 printf("NSProviderSelectTopic\n");\r
256                 NSProviderSelectTopic(mainConsumer, "OCF_TOPIC1");\r
257                 NSProviderSelectTopic(mainConsumer, "OCF_TOPIC2");\r
258                 NSProviderSelectTopic(mainConsumer, "OCF_TOPIC3");\r
259                 NSProviderSelectTopic(mainConsumer, "OCF_TOPIC4");\r
260                 break;\r
261 \r
262             case 8:\r
263                 printf("NSProviderUnSelectTopic\n");\r
264                 NSProviderUnselectTopic(mainConsumer, "OCF_TOPIC1");\r
265                 break;\r
266 \r
267             case 9:\r
268                 printf("NSProviderGetConsumerTopics\n");\r
269                 {\r
270                     NSTopicLL * topics = NSProviderGetConsumerTopics(mainConsumer);\r
271                     printTopics(topics);\r
272                     removeTopics(topics);\r
273                 }\r
274                 break;\r
275 \r
276             case 10:\r
277                 printf("NSProviderGetConsumerTopics\n");\r
278                 {\r
279                     NSTopicLL * topics = NSProviderGetTopics();\r
280                     printTopics(topics);\r
281                     removeTopics(topics);\r
282                 }\r
283                 break;\r
284 \r
285             case 11:\r
286                 NSStopProvider();\r
287                 break;\r
288 \r
289             case 12:\r
290                 printf("Remote Server Address: ");\r
291                 gets(REMOTE_SERVER_ADDRESS);\r
292 \r
293                 NSProviderEnableRemoteService(REMOTE_SERVER_ADDRESS);\r
294                 break;\r
295             case 0:\r
296                 NSStopProvider();\r
297                 isExit = true;\r
298                 break;\r
299             default:\r
300                 printf("Under Construction\n");\r
301                 break;\r
302         }\r
303 \r
304         printf("\n");\r
305     }\r
306 \r
307     return 0;\r
308 }\r