Merge branch 'master' into notification-service
[platform/upstream/iotivity.git] / service / notification / examples / linux / notificationprovider.c
1 /******************************************************************\r
2  *\r
3  * Copyright 2015 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 "NSCommon.h"\r
25 #include "NSProviderInterface.h"\r
26 #include "logger.h"\r
27 #include "octypes.h"\r
28 #include "pthread.h"\r
29 #include "oic_string.h"\r
30 #include "oic_malloc.h"\r
31 \r
32 #define TAG "notiProviderExample"\r
33 \r
34 extern char *strdup(const char *s);\r
35 \r
36 bool isExit = false;\r
37 \r
38 int id;\r
39 \r
40 void* OCProcessThread(void * ptr)\r
41 {\r
42     (void) ptr;\r
43     while (!isExit)\r
44     {\r
45         if (OCProcess() != OC_STACK_OK)\r
46         {\r
47             OIC_LOG(ERROR, TAG, "OCStack process error");\r
48             return NULL;\r
49         }\r
50     }\r
51 \r
52     return NULL;\r
53 }\r
54 \r
55 void subscribeRequestCallback(NSConsumer *consumer)\r
56 {\r
57     OIC_LOG(INFO, TAG, "consumer requested to subscribe");\r
58 \r
59     printf("NS_APP Consumer Device ID: %s\n", consumer->consumerId);\r
60 \r
61     NSAccept(consumer, true);\r
62 }\r
63 \r
64 void syncCallback(NSSyncInfo *sync)\r
65 {\r
66     OIC_LOG(INFO, TAG, "sync requested");\r
67 \r
68     printf("NS_APP Sync State: %d\n", sync->state);\r
69 }\r
70 \r
71 int main()\r
72 {\r
73     int num;\r
74     pthread_t processThread;\r
75 \r
76     OIC_LOG(INFO, TAG, "NSStartProvider()");\r
77 \r
78     if (OCInit(NULL, 0, OC_CLIENT_SERVER) != OC_STACK_OK)\r
79     {\r
80         OIC_LOG(INFO, TAG, "OCStack init error");\r
81         return 0;\r
82     }\r
83 \r
84     pthread_create(&processThread, NULL, OCProcessThread, NULL);\r
85 \r
86     while (!isExit)\r
87     {\r
88         char dummy;\r
89 \r
90         printf("1. NSStartProvider(Accepter: Provider) \n");\r
91         printf("2. NSStartProvider(Accepter: Consumer) \n");\r
92         printf("3. NSSendNotification() \n");\r
93         printf("4. NSRead \n");\r
94         printf("5. NSStopProvider() \n");\r
95         printf("6. NSGetConsumerList \n");\r
96         //printf("7. startPresence \n");\r
97         //printf("8. stopPresence \n");\r
98         printf("0. Exit() \n");\r
99 \r
100         printf("input : ");\r
101 \r
102         scanf("%d", &num);\r
103         fflush(stdin);\r
104         scanf("%c", &dummy);\r
105         fflush(stdin);\r
106 \r
107         switch (num)\r
108         {\r
109             case 1:\r
110                 OIC_LOG(INFO, TAG, "NSStartProvider(Accepter: Provider)");\r
111                 NSStartProvider(NS_ACCESS_ALLOW, subscribeRequestCallback, syncCallback);\r
112                 break;\r
113             case 2:\r
114                 OIC_LOG(INFO, TAG, "NSStartProvider(Accepter: Consumer)");\r
115                 NSStartProvider(NS_ACCESS_DENY, subscribeRequestCallback, syncCallback);\r
116                 break;\r
117             case 3:\r
118                 OIC_LOG(INFO, TAG, "NSSendNotification()");\r
119 \r
120                 char title[100];\r
121                 char body[100];\r
122 \r
123                 printf("id : %d\n", ++id);\r
124                 printf("title : ");\r
125 \r
126                 gets(title);\r
127 \r
128                 printf("body : ");\r
129                 gets(body);\r
130 \r
131                 printf("app - mTitle : %s \n", title);\r
132                 printf("app - mContentText : %s \n", body);\r
133 \r
134                 NSMessage * msg = NSCreateMessage();\r
135 \r
136                 msg->title = OICStrdup(title);\r
137                 msg->contentText = OICStrdup(body);\r
138                 msg->sourceName = OICStrdup("OCF");\r
139 \r
140                 NSSendMessage(msg);\r
141 \r
142                 break;\r
143 \r
144             case 4:\r
145                 OIC_LOG(INFO, TAG, "NSRead");\r
146                 NSSyncInfo * sync = (NSSyncInfo*) OICMalloc(sizeof(NSSyncInfo));\r
147 \r
148                 sync->messageId = OICStrdup("dev_001");\r
149                 sync->state = 1;\r
150 \r
151                 break;\r
152 \r
153             case 5:\r
154                 NSStopProvider();\r
155                 break;\r
156             case 6:\r
157                 OIC_LOG(INFO, TAG, "NSGetConsumerList");\r
158                 break;\r
159             case 7:\r
160                 OIC_LOG(INFO, TAG, "NSStartPresence - not working");\r
161                 //NSTestStartPresence();\r
162                 break;\r
163             case 8:\r
164                 OIC_LOG(INFO, TAG, "NSStopPresence- not working");\r
165                 //NSTestStopPresence();\r
166                 break;\r
167             case 0:\r
168                 NSStopProvider();\r
169                 isExit = true;\r
170                 break;\r
171             default:\r
172                 OIC_LOG(INFO, TAG, "Under Construction");\r
173                 break;\r
174         }\r
175 \r
176         printf("\n");\r
177     }\r
178 \r
179     return 0;\r
180 }\r