Renamed submodule of Consumer.
[platform/upstream/iotivity.git] / service / notification / src / consumer / NSConsumerCommon.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 "NSConsumerCommon.h"
22 #include "NSConstants.h"
23 #include "NSThread.h"
24 #include "oic_malloc.h"
25 #include "oic_string.h"
26
27 bool * NSGetBoneIsStartedConsumer()
28 {
29     static bool g_isStartedConsumer = false;
30
31     return & g_isStartedConsumer;
32 }
33
34 void NSSetIsStartedConsumer(bool setValue)
35 {
36     * NSGetBoneIsStartedConsumer() = setValue;
37 }
38
39 bool NSIsStartedConsumer()
40 {
41     return * NSGetBoneIsStartedConsumer();
42 }
43
44 NSProviderDiscoveredCallback * NSGetBoneDiscoverCb()
45 {
46     static NSProviderDiscoveredCallback g_discoverCb = NULL;
47
48     return & g_discoverCb;
49 }
50
51 void NSSetDiscoverProviderCb(NSProviderDiscoveredCallback cb)
52 {
53     * NSGetBoneDiscoverCb() = cb;
54 }
55
56 NSProviderDiscoveredCallback NSGetDiscoverCb()
57 {
58     return * NSGetBoneDiscoverCb();
59 }
60
61 void * NSDiscoveredProviderFunc(void * provider)
62 {
63     NSGetDiscoverCb()((NSProvider *) provider);
64
65     return NULL;
66 }
67
68 void NSDiscoveredProvider(NSProvider * provider)
69 {
70     if (!NSThreadInit(NSDiscoveredProviderFunc, (void *) provider))
71     {
72         NS_LOG(ERROR, "execute discovered provider callback fail");
73         return;
74     }
75 }
76
77 NSSyncCallback * NSGetBoneNotificationSyncCb()
78 {
79     static NSSyncCallback g_syncCb = NULL;
80
81     return & g_syncCb;
82 }
83
84 void NSSetNotificationSyncCb(NSSyncCallback cb)
85 {
86     * NSGetBoneNotificationSyncCb() = cb;
87 }
88
89 typedef struct
90 {
91     NSProvider * provider;
92     NSSync * sync;
93 } NSSyncData;
94
95 void * NSNotificationSyncFunc(void * obj)
96 {
97     NSProvider * provider = ((NSSyncData *) obj)->provider;
98     NSSync * syncData = ((NSSyncData *) obj)->sync;
99     (* NSGetBoneNotificationSyncCb())(provider, syncData);
100     return NULL;
101 }
102
103 void NSNotificationSync(NSProvider * provider, NSSync * sync)
104 {
105     NSSyncData * obj = (NSSyncData *)OICMalloc(sizeof(NSSyncData));
106     obj->provider = provider;
107     obj->sync = sync;
108
109     if (!NSThreadInit(NSNotificationSyncFunc, (void *) obj))
110     {
111         NS_LOG(ERROR, "execute noti post callback fail");
112         return;
113     }
114 }
115
116 NSNotificationReceivedCallback  * NSGetBoneNotificationPostedCb()
117 {
118     static NSNotificationReceivedCallback  g_postCb = NULL;
119
120     return & g_postCb;
121 }
122
123 void NSSetNotificationPostedCb(NSNotificationReceivedCallback  cb)
124 {
125     * NSGetBoneNotificationPostedCb() = cb;
126 }
127
128 NSNotificationReceivedCallback  NSGetNotificationPostedCb()
129 {
130     return * NSGetBoneNotificationPostedCb();
131 }
132
133 typedef struct
134 {
135     NSProvider * provider;
136     NSMessage * msg;
137 } NSMessageData;
138
139 void * NSNotificationPostFunc(void * obj)
140 {
141     NSMessageData * msgData = (NSMessageData *) obj;
142
143     NSGetNotificationPostedCb()((NSProvider *) msgData->provider,
144             (NSMessage *) msgData->msg);
145     return NULL;
146 }
147
148 void NSNotificationPost(NSProvider * provider, NSMessage * msg)
149 {
150     NSMessageData * obj = (NSMessageData *)OICMalloc(sizeof(NSMessageData));
151     if (!obj)
152     {
153         NS_LOG(ERROR, "NSMessageData allocation is failed");
154         return;
155     }
156     obj->provider = provider;
157     obj->msg = msg;
158
159     if (!NSThreadInit(NSNotificationPostFunc, (void *) obj))
160     {
161         NS_LOG(ERROR, "execute noti post callback fail");
162         return;
163     }
164 }
165
166 NSTask * NSMakeTask(NSTaskType type, void * data)
167 {
168     NSTask * retTask = OICMalloc(sizeof(NSTask));
169     if (!retTask)
170     {
171         return NULL;
172     }
173
174     retTask->taskType = type;
175     retTask->taskData = data;
176     retTask->nextTask = NULL;
177
178     return retTask;
179 }
180
181 NSMessage_consumer * NSCopyMessage(NSMessage_consumer * msg)
182 {
183     if (!msg)
184     {
185         return NULL;
186     }
187
188     NSMessage_consumer * newMsg = (NSMessage_consumer *)OICMalloc(sizeof(NSMessage_consumer));
189     if (!newMsg)
190     {
191         return NULL;
192     }
193
194     newMsg->mId = OICStrdup(msg->mId);
195     newMsg->mTitle = OICStrdup(msg->mTitle);
196     newMsg->mContentText = OICStrdup(msg->mContentText);
197     newMsg->mSource = OICStrdup(msg->mSource);
198     newMsg->addr = (OCDevAddr *)OICMalloc(sizeof(OCDevAddr));
199     if (!newMsg->addr)
200     {
201         NS_LOG(ERROR, "OCDevAddr allocation is failed");
202     }
203     memcpy(newMsg->addr, msg->addr, sizeof(OCDevAddr));
204
205     return newMsg;
206 }
207 void NSRemoveMessage(NSMessage_consumer * msg)
208 {
209     if (msg->mId)
210     {
211         OICFree(msg->mId);
212         msg->mId = NULL;
213     }
214     if (msg->mTitle)
215     {
216         OICFree(msg->mTitle);
217         msg->mTitle = NULL;
218     }
219     if (msg->mContentText)
220     {
221         OICFree(msg->mContentText);
222         msg->mContentText = NULL;
223     }
224     if (msg->mSource)
225     {
226         OICFree(msg->mSource);
227         msg->mSource = NULL;
228     }
229     if (msg->addr)
230     {
231         OICFree(msg->addr);
232         msg->addr = NULL;
233     }
234
235     OICFree(msg);
236     msg = NULL;
237 }
238
239 OCStackResult NSInvokeRequest(OCDoHandle * handle,
240         OCMethod method, const OCDevAddr * addr,
241         const char * queryUrl, OCPayload * payload,
242         void * callbackFunc, void * callbackData)
243 {
244     OCCallbackData cbdata;
245
246     cbdata.cb = callbackFunc;
247     cbdata.context = callbackData;
248     cbdata.cd = NULL;
249
250     return OCDoResource(handle, method, queryUrl, addr,
251             payload, CT_DEFAULT, NS_QOS, &cbdata, NULL, 0);
252 }