added struct, enum and modified struct, enum
[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     NSConsumerThread * thread = NSThreadInit(NSDiscoveredProviderFunc, (void *) provider);
71     NS_VERTIFY_NOT_NULL_V(thread);
72 }
73
74 NSSyncCallback * NSGetBoneNotificationSyncCb()
75 {
76     static NSSyncCallback g_syncCb = NULL;
77
78     return & g_syncCb;
79 }
80
81 void NSSetNotificationSyncCb(NSSyncCallback cb)
82 {
83     * NSGetBoneNotificationSyncCb() = cb;
84 }
85
86 typedef struct
87 {
88     NSProvider * provider;
89     NSSyncInfo * sync;
90 } NSSyncData;
91
92 void * NSNotificationSyncFunc(void * obj)
93 {
94     NSProvider * provider = ((NSSyncData *) obj)->provider;
95     NSSyncInfo * syncData = ((NSSyncData *) obj)->sync;
96     (* NSGetBoneNotificationSyncCb())(provider, syncData);
97     return NULL;
98 }
99
100 void NSNotificationSync(NSProvider * provider, NSSyncInfo * sync)
101 {
102     NSSyncData * obj = (NSSyncData *)OICMalloc(sizeof(NSSyncData));
103     NS_VERTIFY_NOT_NULL_V(obj);
104     obj->provider = provider;
105     obj->sync = sync;
106
107     NSConsumerThread * thread = NSThreadInit(NSNotificationSyncFunc, (void *) obj);
108     NS_VERTIFY_NOT_NULL_V(thread);
109 }
110
111 NSNotificationReceivedCallback  * NSGetBoneNotificationPostedCb()
112 {
113     static NSNotificationReceivedCallback  g_postCb = NULL;
114
115     return & g_postCb;
116 }
117
118 void NSSetNotificationPostedCb(NSNotificationReceivedCallback  cb)
119 {
120     * NSGetBoneNotificationPostedCb() = cb;
121 }
122
123 NSNotificationReceivedCallback  NSGetNotificationPostedCb()
124 {
125     return * NSGetBoneNotificationPostedCb();
126 }
127
128 typedef struct
129 {
130     NSProvider * provider;
131     NSMessage * msg;
132 } NSMessageData;
133
134 void * NSNotificationPostFunc(void * obj)
135 {
136     NSMessageData * msgData = (NSMessageData *) obj;
137
138     NSGetNotificationPostedCb()((NSProvider *) msgData->provider,
139             (NSMessage *) msgData->msg);
140     return NULL;
141 }
142
143 void NSNotificationPost(NSProvider * provider, NSMessage * msg)
144 {
145     NSMessageData * obj = (NSMessageData *)OICMalloc(sizeof(NSMessageData));
146     NS_VERTIFY_NOT_NULL_V(obj);
147     obj->provider = provider;
148     obj->msg = msg;
149
150     NSConsumerThread * thread = NSThreadInit(NSNotificationPostFunc, (void *) obj);
151     NS_VERTIFY_NOT_NULL_V(thread);
152 }
153
154 NSTask * NSMakeTask(NSTaskType type, void * data)
155 {
156     NSTask * retTask = OICMalloc(sizeof(NSTask));
157     NS_VERTIFY_NOT_NULL(retTask, NULL);
158
159     retTask->taskType = type;
160     retTask->taskData = data;
161     retTask->nextTask = NULL;
162
163     return retTask;
164 }
165
166 NSMessage_consumer * NSCopyMessage(NSMessage_consumer * msg)
167 {
168     NS_VERTIFY_NOT_NULL(msg, NULL);
169
170     NSMessage_consumer * newMsg = (NSMessage_consumer *)OICMalloc(sizeof(NSMessage_consumer));
171     NS_VERTIFY_NOT_NULL(newMsg, NULL);
172
173     newMsg->addr = (OCDevAddr *)OICMalloc(sizeof(OCDevAddr));
174     NS_VERTIFY_NOT_NULL_WITH_POST_CLEANING(newMsg, NULL, OICFree(newMsg));
175     memcpy(newMsg->addr, msg->addr, sizeof(OCDevAddr));
176
177     newMsg->mId = OICStrdup(msg->mId);
178     newMsg->mTitle = OICStrdup(msg->mTitle);
179     newMsg->mContentText = OICStrdup(msg->mContentText);
180     newMsg->mSource = OICStrdup(msg->mSource);
181
182     return newMsg;
183 }
184 void NSRemoveMessage(NSMessage_consumer * msg)
185 {
186     if (msg->mId)
187     {
188         OICFree(msg->mId);
189         msg->mId = NULL;
190     }
191     if (msg->mTitle)
192     {
193         OICFree(msg->mTitle);
194         msg->mTitle = NULL;
195     }
196     if (msg->mContentText)
197     {
198         OICFree(msg->mContentText);
199         msg->mContentText = NULL;
200     }
201     if (msg->mSource)
202     {
203         OICFree(msg->mSource);
204         msg->mSource = NULL;
205     }
206     if (msg->addr)
207     {
208         OICFree(msg->addr);
209         msg->addr = NULL;
210     }
211
212     OICFree(msg);
213     msg = NULL;
214 }
215
216 OCStackResult NSInvokeRequest(OCDoHandle * handle,
217         OCMethod method, const OCDevAddr * addr,
218         const char * queryUrl, OCPayload * payload,
219         void * callbackFunc, void * callbackData)
220 {
221     OCCallbackData cbdata;
222
223     cbdata.cb = callbackFunc;
224     cbdata.context = callbackData;
225     cbdata.cd = NULL;
226
227     return OCDoResource(handle, method, queryUrl, addr,
228             payload, CT_DEFAULT, NS_QOS, &cbdata, NULL, 0);
229 }