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