Add feature check code for download feature
[platform/core/api/url-download.git] / src / download-wrapping.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/types.h>
4 #include <sys/stat.h>
5 #include <sys/socket.h>
6 #include <sys/un.h>
7 #include <fcntl.h>
8 #include <errno.h>
9 #include <unistd.h>
10
11 #include <download.h>
12 #include <download_private.h>
13 #include <download-provider-interface.h>
14
15 /////////////////////// APIs /////////////////////////////////
16
17 int download_create(int *download_id)
18 {
19         TRACE_INFO("");
20         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
21         if (download_id == NULL)
22                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
23         return dp_interface_create(download_id);
24 }
25
26 int download_destroy(int download_id)
27 {
28         TRACE_INFO("");
29         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
30         return dp_interface_destroy(download_id);
31 }
32
33 int download_start(int download_id)
34 {
35         TRACE_INFO("");
36         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
37         return dp_interface_start(download_id);
38 }
39
40 int download_pause(int download_id)
41 {
42         TRACE_INFO("");
43         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
44         return dp_interface_pause(download_id);
45 }
46
47 int download_cancel(int download_id)
48 {
49         TRACE_INFO("");
50         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
51         return dp_interface_cancel(download_id);
52 }
53
54
55 int download_set_url(int download_id, const char *url)
56 {
57         TRACE_INFO("");
58         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
59         if (url == NULL)
60                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
61         return dp_interface_set_url(download_id, url);
62 }
63
64
65 int download_get_url(int download_id, char **url)
66 {
67         TRACE_INFO("");
68         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
69         if (url == NULL)
70                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
71         return dp_interface_get_url(download_id, url);
72 }
73
74 int download_set_network_type(int download_id,
75                                                 download_network_type_e net_type)
76 {
77         TRACE_INFO("");
78         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
79         if (net_type == DOWNLOAD_NETWORK_DATA_NETWORK)
80                 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE);
81         else if (net_type == DOWNLOAD_NETWORK_WIFI)
82                 CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
83         else if (net_type == DOWNLOAD_NETWORK_WIFI_DIRECT)
84                  CHECK_FEATURE_SUPPORTED(WIFI_DIRECT_FEATURE);
85         else if (net_type == DOWNLOAD_NETWORK_ALL)
86                 CHECK_FEATURE_SUPPORTED(TELEPHONY_FEATURE, WIFI_FEATURE, WIFI_DIRECT_FEATURE);
87
88         return dp_interface_set_network_type(download_id, (int)net_type);
89 }
90
91 int download_get_network_type(int download_id,
92                                                         download_network_type_e *net_type)
93 {
94         TRACE_INFO("");
95         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
96
97         if (net_type == NULL) {
98                 TRACE_ERROR("Parameter NULL Check");
99                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
100         }
101         int network_type = DOWNLOAD_ADAPTOR_NETWORK_ALL;
102         int ret = dp_interface_get_network_type(download_id, &network_type);
103         if (ret == DOWNLOAD_ADAPTOR_ERROR_NONE)
104                 *net_type = network_type;
105         return ret;
106 }
107
108 int download_set_network_bonding(int download_id, bool enable)
109 {
110         TRACE_INFO("");
111         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
112         return dp_interface_set_network_bonding(download_id, (int)enable);
113 }
114
115 int download_get_network_bonding(int download_id, bool *enable)
116 {
117         int is_set = 0;
118         TRACE_INFO("");
119         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
120         if (enable == NULL) {
121                 TRACE_ERROR("Parameter NULL Check");
122                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
123         }
124         int ret = dp_interface_get_network_bonding(download_id, &is_set);
125         if (ret == DOWNLOAD_ADAPTOR_ERROR_NONE)
126                 *enable = (bool)is_set;
127         return ret;
128 }
129
130 int download_set_destination(int download_id, const char *path)
131 {
132         TRACE_INFO("");
133         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
134         if (path == NULL)
135                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
136         return dp_interface_set_destination(download_id, path);
137 }
138
139
140 int download_get_destination(int download_id, char **path)
141 {
142         TRACE_INFO("");
143         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
144         if (path == NULL)
145                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
146         return dp_interface_get_destination(download_id, path);
147 }
148
149 int download_set_file_name(int download_id, const char *file_name)
150 {
151         TRACE_INFO("");
152         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
153         if (file_name == NULL)
154                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
155         return dp_interface_set_file_name(download_id, file_name);
156 }
157
158 int download_get_file_name(int download_id, char **file_name)
159 {
160         TRACE_INFO("");
161         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
162         if (file_name == NULL)
163                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
164         return dp_interface_get_file_name(download_id, file_name);
165 }
166
167 int download_get_downloaded_file_path(int download_id, char **path)
168 {
169         TRACE_INFO("");
170         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
171         if (path == NULL)
172                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
173         return dp_interface_get_downloaded_file_path(download_id, path);
174 }
175
176 int download_add_http_header_field(int download_id, const char *field,
177         const char *value)
178 {
179         TRACE_INFO("");
180         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
181         if (field == NULL || value == NULL)
182                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
183         return
184                 dp_interface_add_http_header_field(download_id, field, value);
185 }
186
187 int download_get_http_header_field(int download_id,
188         const char *field, char **value)
189 {
190         TRACE_INFO("");
191         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
192         if (field == NULL || value == NULL)
193                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
194         return
195                 dp_interface_get_http_header_field(download_id, field, value);
196 }
197
198 int download_get_http_header_field_list(int download_id, char ***fields,
199         int *length)
200 {
201         TRACE_INFO("");
202         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
203         if (fields == NULL || length == NULL)
204                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
205         return dp_interface_get_http_header_field_list(download_id, fields,
206                 length);
207 }
208
209 int download_remove_http_header_field(int download_id,
210         const char *field)
211 {
212         TRACE_INFO("");
213         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
214         if (field == NULL)
215                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
216         return dp_interface_remove_http_header_field(download_id, field);
217 }
218
219 // download_state_changed_cb is different with dp_interface_state_changed_cb.
220 int download_set_state_changed_cb(int download_id,
221         download_state_changed_cb callback, void* user_data)
222 {
223         TRACE_INFO("");
224         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
225         return dp_interface_set_state_changed_cb(download_id,
226                 (dp_interface_state_changed_cb)callback, user_data);
227 }
228
229 int download_unset_state_changed_cb(int download_id)
230 {
231         TRACE_INFO("");
232         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
233         return dp_interface_unset_state_changed_cb(download_id);
234 }
235
236 // download_progress_cb is same with dp_interface_progress_cb.
237 int download_set_progress_cb(int download_id,
238         download_progress_cb callback, void *user_data)
239 {
240         TRACE_INFO("");
241         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
242         return dp_interface_set_progress_cb(download_id,
243                         (dp_interface_progress_cb)callback, user_data);
244 }
245
246 int download_unset_progress_cb(int download_id)
247 {
248         TRACE_INFO("");
249         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
250         return dp_interface_unset_progress_cb(download_id);
251 }
252
253 int download_get_state(int download_id, download_state_e *state)
254 {
255         int statecode = 0;
256         TRACE_INFO("");
257         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
258         if (state == NULL) {
259                 TRACE_ERROR("Parameter NULL Check");
260                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
261         }
262         int ret = dp_interface_get_state(download_id, &statecode);
263         if (ret == DOWNLOAD_ADAPTOR_ERROR_NONE)
264                 *state = statecode;
265         return ret;
266 }
267
268 int download_get_temp_path(int download_id, char **temp_path)
269 {
270         TRACE_INFO("");
271         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
272         if (temp_path == NULL)
273                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
274         return dp_interface_get_temp_path(download_id, temp_path);
275 }
276
277 int download_get_content_name(int download_id, char **content_name)
278 {
279         TRACE_INFO("");
280         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
281         if (content_name == NULL)
282                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
283         return dp_interface_get_content_name(download_id, content_name);
284 }
285
286 int download_get_content_size(int download_id,
287         unsigned long long *content_size)
288 {
289         TRACE_INFO("");
290         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
291         if (content_size == NULL)
292                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
293         return dp_interface_get_content_size(download_id, content_size);
294 }
295
296 int download_get_mime_type(int download_id, char **mime_type)
297 {
298         TRACE_INFO("");
299         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
300         if (mime_type == NULL)
301                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
302         return dp_interface_get_mime_type(download_id, mime_type);
303 }
304
305 int download_set_auto_download(int download_id, bool enable)
306 {
307         TRACE_INFO("");
308         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
309         return dp_interface_set_auto_download(download_id, (int)enable);
310 }
311
312 int download_get_auto_download(int download_id, bool *enable)
313 {
314         int is_set = 0;
315         TRACE_INFO("");
316         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
317         if (enable == NULL) {
318                 TRACE_ERROR("Parameter NULL Check");
319                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
320         }
321         int ret = dp_interface_get_auto_download(download_id, &is_set);
322         if (ret == DOWNLOAD_ADAPTOR_ERROR_NONE)
323                 *enable = (bool)is_set;
324         return ret;
325 }
326
327 int download_get_error(int download_id, download_error_e *error)
328 {
329         int errorcode = 0;
330         TRACE_INFO("");
331         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
332         if (error == NULL) {
333                 TRACE_ERROR("Parameter NULL Check");
334                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
335         }
336         int ret = dp_interface_get_error(download_id, &errorcode);
337         if (ret == DOWNLOAD_ADAPTOR_ERROR_NONE)
338                 *error = errorcode;
339         return ret;
340 }
341
342 int download_get_http_status(int download_id, int *http_status)
343 {
344         TRACE_INFO("");
345         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
346         if (http_status == NULL)
347                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
348         return dp_interface_get_http_status(download_id, http_status);
349 }
350
351 int download_set_notification_app_control(int download_id, download_notification_app_control_type_e type, app_control_h handle)
352 {
353         TRACE_INFO("");
354         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
355         if (handle == NULL)
356                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
357         return dp_interface_set_notification_service_handle(download_id, (int)type, handle);
358 }
359
360 int download_get_notification_app_control(int download_id, download_notification_app_control_type_e type, app_control_h *handle)
361 {
362         TRACE_INFO("");
363         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
364         if (handle == NULL)
365                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
366         return dp_interface_get_notification_service_handle(download_id, (int)type, (void **)handle);
367 }
368
369 int download_set_notification_title(int download_id, const char *title)
370 {
371         TRACE_INFO("");
372         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
373         if (title == NULL)
374                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
375         return dp_interface_set_notification_title(download_id, title);
376 }
377
378 int download_get_notification_title(int download_id, char **title)
379 {
380         TRACE_INFO("");
381         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
382         if (title == NULL)
383                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
384         return dp_interface_get_notification_title(download_id, title);
385 }
386
387 int download_set_notification_description(int download_id, const char *description)
388 {
389         TRACE_INFO("");
390         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
391         if (description == NULL)
392                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
393         return dp_interface_set_notification_description(download_id, description);
394 }
395
396 int download_get_notification_description(int download_id, char **description)
397 {
398         TRACE_INFO("");
399         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
400         if (description == NULL)
401                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
402         return dp_interface_get_notification_description(download_id, description);
403 }
404
405 int download_set_notification_type(int download_id, download_notification_type_e type)
406 {
407         TRACE_INFO("");
408         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
409         return dp_interface_set_notification_type(download_id, (int)type);
410 }
411
412 int download_get_notification_type(int download_id, download_notification_type_e *type)
413 {
414         int noti_type = 0;
415         TRACE_INFO("");
416         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
417         if (type == NULL) {
418                 TRACE_ERROR("Parameter NULL Check");
419                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
420         }
421         int ret = dp_interface_get_notification_type(download_id, &noti_type);
422         if (ret == DOWNLOAD_ADAPTOR_ERROR_NONE)
423                 *type = (download_notification_type_e)noti_type;
424         return ret;
425 }
426
427 int download_get_etag(int download_id, char **etag)
428 {
429         TRACE_INFO("");
430         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
431         if (etag == NULL)
432                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
433         return dp_interface_get_etag(download_id, etag);
434 }
435
436 int download_set_temp_file_path(int download_id, char *path)
437 {
438         TRACE_INFO("");
439         CHECK_FEATURE_SUPPORTED(DOWNLOAD_FEATURE);
440         if (path == NULL)
441                 return DOWNLOAD_ERROR_INVALID_PARAMETER;
442         return dp_interface_set_temp_file_path(download_id, path);
443 }