rollback The Provider Interface file name.
[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 REMOTE_SERVER_SESSION[50];\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     NSAccept(consumer, true);\r
68 }\r
69 \r
70 void syncCallback(NSSyncInfo *sync)\r
71 {\r
72     printf("sync requested");\r
73 \r
74     printf("NS_APP Sync State: %d\n", sync->state);\r
75 }\r
76 \r
77 OCStackApplicationResult CloudLoginoutCallback(void *ctx,\r
78         OCDoHandle handle, OCClientResponse *clientResponse)\r
79 {\r
80     int CtxValue = 0x99;\r
81     if (ctx != (void *)CtxValue)\r
82     {\r
83         printf("Invalid Cloud Login/out callback received");\r
84     }\r
85 \r
86     printf("Login/out response received");\r
87 \r
88     if (clientResponse->payload != NULL &&\r
89             clientResponse->payload->type == PAYLOAD_TYPE_REPRESENTATION)\r
90     {\r
91         printf("PAYLOAD_TYPE_REPRESENTATION received");\r
92 \r
93         OCRepPayloadValue *val = ((OCRepPayload *)clientResponse->payload)->values;\r
94 \r
95         printf("Get payload values");\r
96         while (val)\r
97         {\r
98             printf("key: %s / Value: %s", val->name, val->str);\r
99             val = val->next;\r
100         }\r
101 \r
102         NSProviderEnableRemoteService(REMOTE_SERVER_ADDRESS);\r
103     }\r
104 \r
105     return OC_STACK_KEEP_TRANSACTION;\r
106 }\r
107 \r
108 FILE* server_fopen(const char *path, const char *mode)\r
109 {\r
110     (void)path;\r
111     return fopen("oic_ns_provider_db.dat", mode);\r
112 }\r
113 \r
114 int main()\r
115 {\r
116     int num;\r
117     pthread_t processThread;\r
118 \r
119     printf("NSStartProvider()");\r
120 \r
121     // open oic_db\r
122     static OCPersistentStorage ps = {server_fopen, fread, fwrite, fclose, unlink};\r
123     OCRegisterPersistentStorageHandler(&ps);\r
124 \r
125     if (OCInit(NULL, 0, OC_CLIENT_SERVER) != OC_STACK_OK)\r
126     {\r
127         printf("OCStack init error");\r
128         return 0;\r
129     }\r
130 \r
131     pthread_create(&processThread, NULL, OCProcessThread, unlink);\r
132 \r
133     while (!isExit)\r
134     {\r
135         char dummy;\r
136 \r
137         printf("1. NSStartProvider(Accepter: Provider) \n");\r
138         printf("2. NSStartProvider(Accepter: Consumer) \n");\r
139         printf("3. NSSendNotification() \n");\r
140         printf("4. NSRead \n");\r
141         printf("5. NSStopProvider() \n");\r
142 \r
143         printf("11. NSCloudLogin \n");\r
144         printf("12. NSCloudLogout \n");\r
145         printf("0. Exit() \n");\r
146 \r
147         printf("input : ");\r
148 \r
149         scanf("%d", &num);\r
150         fflush(stdin);\r
151         scanf("%c", &dummy);\r
152         fflush(stdin);\r
153 \r
154         switch (num)\r
155         {\r
156             case 1:\r
157                 printf("NSStartProvider(Accepter: Provider)");\r
158                 NSStartProvider(NS_ACCESS_ALLOW, subscribeRequestCallback, syncCallback);\r
159                 break;\r
160             case 2:\r
161                 printf("NSStartProvider(Accepter: Consumer)");\r
162                 NSStartProvider(NS_ACCESS_DENY, subscribeRequestCallback, syncCallback);\r
163                 break;\r
164             case 3:\r
165                 printf("NSSendNotification()");\r
166 \r
167                 char title[100];\r
168                 char body[100];\r
169 \r
170                 printf("id : %d\n", ++id);\r
171                 printf("title : ");\r
172 \r
173                 gets(title);\r
174 \r
175                 printf("body : ");\r
176                 gets(body);\r
177 \r
178                 printf("app - mTitle : %s \n", title);\r
179                 printf("app - mContentText : %s \n", body);\r
180 \r
181                 NSMessage * msg = NSCreateMessage();\r
182 \r
183                 msg->title = OICStrdup(title);\r
184                 msg->contentText = OICStrdup(body);\r
185                 msg->sourceName = OICStrdup("OCF");\r
186 \r
187                 NSSendMessage(msg);\r
188 \r
189                 break;\r
190 \r
191             case 4:\r
192                 printf("NSRead");\r
193                 NSSyncInfo * sync = (NSSyncInfo*) OICMalloc(sizeof(NSSyncInfo));\r
194 \r
195                 sync->messageId = OICStrdup("dev_001");\r
196                 sync->state = 1;\r
197 \r
198                 break;\r
199 \r
200             case 5:\r
201                 NSStopProvider();\r
202                 break;\r
203 \r
204             case 11:\r
205                 printf("NSCloudLogin");\r
206 \r
207                 printf("Cloud Address: ");\r
208                 gets(REMOTE_SERVER_ADDRESS);\r
209 \r
210                 printf("Session Code: ");\r
211                 gets(REMOTE_SERVER_SESSION);\r
212 \r
213 \r
214                 NSCloudLogin(REMOTE_SERVER_ADDRESS, REMOTE_SERVER_SESSION, CloudLoginoutCallback);\r
215                 printf("OCCloudLogin requested");\r
216                 break;\r
217             case 12:\r
218                 printf("NSCloudLogout");\r
219 \r
220                 NSCloudLogout(REMOTE_SERVER_ADDRESS, REMOTE_SERVER_SESSION, CloudLoginoutCallback);\r
221                 printf("OCCloudLogout requested");\r
222                 break;\r
223             case 0:\r
224                 NSStopProvider();\r
225                 isExit = true;\r
226                 break;\r
227             default:\r
228                 printf("Under Construction");\r
229                 break;\r
230         }\r
231 \r
232         printf("\n");\r
233     }\r
234 \r
235     return 0;\r
236 }\r