Updated for consumer APIs.
[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 #define NS_QUERY_CONSUMER_ID "consumerid"
28
29 char ** NSGetConsumerId()
30 {
31     static char * g_consumerId = NULL;
32     return & g_consumerId;
33 }
34
35 void NSSetConsumerId(char * cId)
36 {
37     NS_VERIFY_NOT_NULL_V(cId);
38     char ** consumerId = NSGetConsumerId();
39     NSOICFree(*consumerId);
40     *consumerId = (char *)OICMalloc(sizeof(char) * NS_DEVICE_ID_LENGTH);
41     NS_VERIFY_NOT_NULL_V(*consumerId);
42
43     OICStrcpy(*consumerId, sizeof(char) * NS_DEVICE_ID_LENGTH, cId);
44 }
45
46 char * NSMakeRequestUriWithConsumerId(const char * uri)
47 {
48     NS_VERIFY_NOT_NULL(uri, NULL);
49
50     char * consumerId = OICStrdup(*NSGetConsumerId());
51     NS_VERIFY_NOT_NULL(consumerId, NULL);
52
53     size_t uriLen = strlen(uri) + 1;
54     size_t qKeyLen = sizeof(NS_QUERY_CONSUMER_ID);
55     size_t queryLen = NS_DEVICE_ID_LENGTH + uriLen + qKeyLen + 2;
56
57     char * retQuery = (char *)OICMalloc(sizeof(char) * queryLen);
58     NS_VERIFY_NOT_NULL(retQuery, NULL);
59
60     size_t index = 0;
61     OICStrcpy((retQuery + index), uriLen, uri);
62     index += uriLen - 1;
63     OICStrcpy((retQuery + index), 2, "?");
64     index += 1;
65     OICStrcpy((retQuery + index), qKeyLen, NS_QUERY_CONSUMER_ID);
66     index += qKeyLen - 1;
67     OICStrcpy((retQuery + index), 2, "=");
68     index += 1;
69     OICStrcpy((retQuery + index), NS_DEVICE_ID_LENGTH, consumerId);
70
71     NSOICFree(consumerId);
72
73     return retQuery;
74 }
75
76 bool * NSGetBoneIsStartedConsumer()
77 {
78     static bool g_isStartedConsumer = false;
79
80     return & g_isStartedConsumer;
81 }
82
83 void NSSetIsStartedConsumer(bool setValue)
84 {
85     * NSGetBoneIsStartedConsumer() = setValue;
86 }
87
88 bool NSIsStartedConsumer()
89 {
90     return * NSGetBoneIsStartedConsumer();
91 }
92
93 NSProviderDiscoveredCallback * NSGetBoneDiscoverCb()
94 {
95     static NSProviderDiscoveredCallback g_discoverCb = NULL;
96
97     return & g_discoverCb;
98 }
99
100 void NSSetDiscoverProviderCb(NSProviderDiscoveredCallback cb)
101 {
102     * NSGetBoneDiscoverCb() = cb;
103 }
104
105 NSProviderDiscoveredCallback NSGetDiscoverCb()
106 {
107     return * NSGetBoneDiscoverCb();
108 }
109
110 void * NSDiscoveredProviderFunc(void * provider)
111 {
112     NSGetDiscoverCb()((NSProvider *) provider);
113
114     return NULL;
115 }
116
117 void NSDiscoveredProvider(NSProvider * provider)
118 {
119     NSConsumerThread * thread = NSThreadInit(NSDiscoveredProviderFunc, (void *) provider);
120     NS_VERIFY_NOT_NULL_V(thread);
121 }
122
123 NSSubscriptionAcceptedCallback * NSGetSubscriptionAcceptedCb()
124 {
125     static NSSubscriptionAcceptedCallback g_acceptCb = NULL;
126
127     return & g_acceptCb;
128 }
129
130 void NSSetSubscriptionAcceptedCb(NSSubscriptionAcceptedCallback cb)
131 {
132     *(NSGetSubscriptionAcceptedCb()) = cb;
133 }
134
135 void NSSubscriptionAccepted(NSProvider * provider)
136 {
137     (*(NSGetSubscriptionAcceptedCb()))(provider);
138 }
139
140 NSSyncInfoReceivedCallback * NSGetBoneNotificationSyncCb()
141 {
142     static NSSyncInfoReceivedCallback g_syncCb = NULL;
143
144     return & g_syncCb;
145 }
146
147 void NSSetNotificationSyncCb(NSSyncInfoReceivedCallback cb)
148 {
149     * NSGetBoneNotificationSyncCb() = cb;
150 }
151
152 void * NSNotificationSyncFunc(void * obj)
153 {
154     (* NSGetBoneNotificationSyncCb())((NSSyncInfo *) obj);
155     return NULL;
156 }
157
158 void NSNotificationSync(NSSyncInfo * sync)
159 {
160     NS_VERIFY_NOT_NULL_V(sync);
161     NSConsumerThread * thread = NSThreadInit(NSNotificationSyncFunc, (void *) sync);
162     NS_VERIFY_NOT_NULL_V(thread);
163 }
164
165 NSMessageReceivedCallback  * NSGetBoneMessagePostedCb()
166 {
167     static NSMessageReceivedCallback  g_postCb = NULL;
168
169     return & g_postCb;
170 }
171
172 void NSSetMessagePostedCb(NSMessageReceivedCallback  cb)
173 {
174     * NSGetBoneMessagePostedCb() = cb;
175 }
176
177 NSMessageReceivedCallback  NSGetMessagePostedCb()
178 {
179     return * NSGetBoneMessagePostedCb();
180 }
181
182 void * NSMessagePostFunc(void * obj)
183 {
184     NSGetMessagePostedCb()((NSMessage *) obj);
185     return NULL;
186 }
187
188 void NSMessagePost(NSMessage * msg)
189 {
190     NS_VERIFY_NOT_NULL_V(msg);
191     NSConsumerThread * thread = NSThreadInit(NSMessagePostFunc, (void *) msg);
192     NS_VERIFY_NOT_NULL_V(thread);
193 }
194
195 NSTask * NSMakeTask(NSTaskType type, void * data)
196 {
197     NSTask * retTask = OICMalloc(sizeof(NSTask));
198     NS_VERIFY_NOT_NULL(retTask, NULL);
199
200     retTask->taskType = type;
201     retTask->taskData = data;
202     retTask->nextTask = NULL;
203
204     return retTask;
205 }
206
207 NSMessage_consumer * NSCopyMessage(NSMessage_consumer * msg)
208 {
209     NS_VERIFY_NOT_NULL(msg, NULL);
210
211     NSMessage_consumer * newMsg = (NSMessage_consumer *)OICMalloc(sizeof(NSMessage_consumer));
212     NS_VERIFY_NOT_NULL(newMsg, NULL);
213
214     newMsg->addr = (OCDevAddr *)OICMalloc(sizeof(OCDevAddr));
215     NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(newMsg, NULL, OICFree(newMsg));
216     memcpy(newMsg->addr, msg->addr, sizeof(OCDevAddr));
217
218     newMsg->messageId = msg->messageId;
219     newMsg->title = OICStrdup(msg->title);
220     newMsg->contentText = OICStrdup(msg->contentText);
221     newMsg->sourceName = OICStrdup(msg->sourceName);
222
223     return newMsg;
224 }
225 void NSRemoveMessage(NSMessage_consumer * msg)
226 {
227     msg->messageId = 0;
228     NSOICFree(msg->title);
229     NSOICFree(msg->contentText);
230     NSOICFree(msg->sourceName);
231     NSOICFree(msg->addr);
232
233     NSOICFree(msg);
234 }
235
236 OCStackResult NSInvokeRequest(OCDoHandle * handle,
237         OCMethod method, const OCDevAddr * addr,
238         const char * queryUrl, OCPayload * payload,
239         void * callbackFunc, void * callbackData)
240 {
241     OCCallbackData cbdata;
242
243     cbdata.cb = callbackFunc;
244     cbdata.context = callbackData;
245     cbdata.cd = NULL;
246
247     return OCDoResource(handle, method, queryUrl, addr,
248             payload, CT_DEFAULT, NS_QOS, &cbdata, NULL, 0);
249 }