1 /* <!-- copyright */
2 /*
3 * libmetalink
4 *
5 * Copyright (c) 2008 Tatsuhiro Tsujikawa
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in
15 * all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 * THE SOFTWARE.
24 */
25 /* copyright --> */
26 #include "metalink_pctrl.h"
27
28 #include <string.h>
29
new_metalink_pctrl(void)30 metalink_pctrl_t* new_metalink_pctrl(void)
31 {
32 metalink_pctrl_t* ctrl;
33 ctrl = malloc(sizeof(metalink_pctrl_t));
34 if(!ctrl) {
35 return NULL;
36 }
37 memset(ctrl, 0, sizeof(metalink_pctrl_t));
38 ctrl->metalink = metalink_new();
39 if(!ctrl->metalink) {
40 goto NEW_METALINK_PCTRL_ERROR;
41 }
42 ctrl->files = metalink_list_new();
43 if(!ctrl->files) {
44 goto NEW_METALINK_PCTRL_ERROR;
45 }
46 ctrl->languages = metalink_list_new();
47 if(!ctrl->languages) {
48 goto NEW_METALINK_PCTRL_ERROR;
49 }
50 ctrl->oses = metalink_list_new();
51 if(!ctrl->oses) {
52 goto NEW_METALINK_PCTRL_ERROR;
53 }
54 ctrl->resources = metalink_list_new();
55 if(!ctrl->resources) {
56 goto NEW_METALINK_PCTRL_ERROR;
57 }
58 ctrl->metaurls = metalink_list_new();
59 if(!ctrl->metaurls) {
60 goto NEW_METALINK_PCTRL_ERROR;
61 }
62 ctrl->checksums = metalink_list_new();
63 if(!ctrl->checksums) {
64 goto NEW_METALINK_PCTRL_ERROR;
65 }
66 ctrl->piece_hashes = metalink_list_new();
67 if(!ctrl->piece_hashes) {
68 goto NEW_METALINK_PCTRL_ERROR;
69 }
70 return ctrl;
71 NEW_METALINK_PCTRL_ERROR:
72 delete_metalink_pctrl(ctrl);
73 return NULL;
74 }
75
delete_metalink_pctrl(metalink_pctrl_t * ctrl)76 void delete_metalink_pctrl(metalink_pctrl_t* ctrl)
77 {
78 if(!ctrl) {
79 return;
80 }
81 metalink_delete(ctrl->metalink);
82
83 metalink_list_for_each(ctrl->files, (void (*)(void*))&metalink_file_delete);
84 metalink_list_delete(ctrl->files);
85 metalink_file_delete(ctrl->temp_file);
86
87 /* metalink_list_delete takes care of freeing the pointers in those lists */
88 metalink_list_delete(ctrl->languages);
89 metalink_list_delete(ctrl->oses);
90
91 metalink_list_for_each(ctrl->resources,
92 (void (*)(void*))&metalink_resource_delete);
93 metalink_list_delete(ctrl->resources);
94 metalink_resource_delete(ctrl->temp_resource);
95
96 metalink_list_for_each(ctrl->metaurls,
97 (void (*)(void*))&metalink_metaurl_delete);
98 metalink_list_delete(ctrl->metaurls);
99 metalink_metaurl_delete(ctrl->temp_metaurl);
100
101 metalink_list_for_each(ctrl->checksums,
102 (void (*)(void*))&metalink_checksum_delete);
103 metalink_list_delete(ctrl->checksums);
104 metalink_checksum_delete(ctrl->temp_checksum);
105
106 metalink_chunk_checksum_delete(ctrl->temp_chunk_checksum);
107
108 metalink_list_for_each(ctrl->piece_hashes,
109 (void (*)(void*))&metalink_piece_hash_delete);
110 metalink_list_delete(ctrl->piece_hashes);
111 metalink_piece_hash_delete(ctrl->temp_piece_hash);
112
113 metalink_signature_delete(ctrl->temp_signature);
114
115 free(ctrl);
116 }
117
metalink_pctrl_detach_metalink(metalink_pctrl_t * ctrl)118 metalink_t* metalink_pctrl_detach_metalink(metalink_pctrl_t* ctrl)
119 {
120 metalink_t* metalink;
121 metalink = ctrl->metalink;
122 ctrl->metalink = NULL;
123 return metalink;
124 }
125
metalink_pctrl_set_error(metalink_pctrl_t * ctrl,metalink_error_t error)126 void metalink_pctrl_set_error(metalink_pctrl_t* ctrl, metalink_error_t error)
127 {
128 ctrl->error = error;
129 }
130
metalink_pctrl_get_error(metalink_pctrl_t * ctrl)131 metalink_error_t metalink_pctrl_get_error(metalink_pctrl_t* ctrl)
132 {
133 return ctrl->error;
134 }
135
metalink_pctrl_metalink_accumulate_files(metalink_pctrl_t * ctrl)136 metalink_error_t metalink_pctrl_metalink_accumulate_files(metalink_pctrl_t* ctrl)
137 {
138 size_t files_length;
139 files_length = metalink_list_length(ctrl->files);
140 if(files_length) {
141 ctrl->metalink->files = calloc(files_length+1, sizeof(metalink_file_t*));
142 if(!ctrl->metalink->files) {
143 return METALINK_ERR_BAD_ALLOC;
144 }
145 metalink_list_to_array(ctrl->files, (void**)ctrl->metalink->files);
146 ctrl->metalink->files[files_length] = NULL;
147
148 metalink_list_clear(ctrl->files);
149 }
150 return 0;
151 }
152
commit_list_to_array(void *** array_ptr,metalink_list_t * src,size_t ele_size)153 static metalink_error_t commit_list_to_array(void*** array_ptr, metalink_list_t* src, size_t ele_size)
154 {
155 size_t size;
156 size = metalink_list_length(src);
157 if(size) {
158 *array_ptr = calloc(size+1, ele_size);
159 if(!*array_ptr) {
160 return METALINK_ERR_BAD_ALLOC;
161 }
162 metalink_list_to_array(src, *array_ptr);
163 (*array_ptr)[size] = NULL;
164 metalink_list_clear(src);
165 }
166 return 0;
167 }
168
169 /* transaction functions */
metalink_pctrl_new_file_transaction(metalink_pctrl_t * ctrl)170 metalink_file_t* metalink_pctrl_new_file_transaction(metalink_pctrl_t* ctrl)
171 {
172 if(ctrl->temp_file) {
173 metalink_file_delete(ctrl->temp_file);
174 }
175 ctrl->temp_file = metalink_file_new();
176
177 metalink_list_clear(ctrl->languages);
178 metalink_list_clear(ctrl->oses);
179
180 metalink_list_for_each(ctrl->resources,
181 (void (*)(void*))&metalink_resource_delete);
182 metalink_list_clear(ctrl->resources);
183
184 metalink_list_for_each(ctrl->metaurls,
185 (void (*)(void*))&metalink_metaurl_delete);
186 metalink_list_clear(ctrl->metaurls);
187
188 metalink_list_for_each(ctrl->checksums,
189 (void (*)(void*))&metalink_checksum_delete);
190 metalink_list_clear(ctrl->checksums);
191
192 return ctrl->temp_file;
193 }
194
resource_pri_comp(const void * lhs,const void * rhs)195 static int resource_pri_comp(const void *lhs, const void *rhs)
196 {
197 return (*(const metalink_resource_t**)lhs)->priority -
198 (*(const metalink_resource_t**)rhs)->priority;
199 }
200
metaurl_pri_comp(const void * lhs,const void * rhs)201 static int metaurl_pri_comp(const void *lhs, const void *rhs)
202 {
203 return (*(const metalink_metaurl_t**)lhs)->priority -
204 (*(const metalink_metaurl_t**)rhs)->priority;
205 }
206
metalink_pctrl_commit_file_transaction(metalink_pctrl_t * ctrl)207 metalink_error_t metalink_pctrl_commit_file_transaction(metalink_pctrl_t* ctrl)
208 {
209 metalink_error_t r;
210 if(!ctrl->temp_file) {
211 return METALINK_ERR_NO_FILE_TRANSACTION;
212 }
213
214 /* copy ctrl->languages to ctrl->temp_file->languages */
215 r = commit_list_to_array((void*)&ctrl->temp_file->languages,
216 ctrl->languages, sizeof(char*));
217 if(r != 0) {
218 return r;
219 }
220 if(ctrl->temp_file->languages) {
221 ctrl->temp_file->language = ctrl->temp_file->languages[0];
222 }
223
224 /* copy ctrl->oses to ctrl->temp_file->oses */
225 r = commit_list_to_array((void*)&ctrl->temp_file->oses,
226 ctrl->oses, sizeof(char*));
227 if(r != 0) {
228 return r;
229 }
230 if(ctrl->temp_file->oses) {
231 ctrl->temp_file->os = ctrl->temp_file->oses[0];
232 }
233
234 /* copy ctrl->resources to ctrl->temp_file->resources */
235 r = commit_list_to_array((void*)&ctrl->temp_file->resources,
236 ctrl->resources, sizeof(metalink_resource_t*));
237 if(r != 0) {
238 return r;
239 }
240 if(ctrl->temp_file->resources) {
241 size_t size;
242 for(size = 0; ctrl->temp_file->resources[size]; ++size);
243 /* Sort by priority */
244 qsort(ctrl->temp_file->resources, size, sizeof(metalink_resource_t*),
245 resource_pri_comp);
246 }
247
248 /* copy ctrl->metaurls to ctrl->temp_file->metaurls */
249 r = commit_list_to_array((void*)&ctrl->temp_file->metaurls,
250 ctrl->metaurls, sizeof(metalink_metaurl_t*));
251 if(r != 0) {
252 return r;
253 }
254 if(ctrl->temp_file->metaurls) {
255 size_t size;
256 for(size = 0; ctrl->temp_file->metaurls[size]; ++size);
257 /* Sort by priority */
258 qsort(ctrl->temp_file->metaurls, size, sizeof(metalink_metaurl_t*),
259 metaurl_pri_comp);
260 }
261
262 /* copy ctrl->checksums to ctrl->temp_file->checksums */
263 r = commit_list_to_array((void*)&ctrl->temp_file->checksums,
264 ctrl->checksums, sizeof(metalink_checksum_t*));
265 if(r != 0) {
266 return r;
267 }
268
269 if(metalink_list_append(ctrl->files, ctrl->temp_file) != 0) {
270 return METALINK_ERR_BAD_ALLOC;
271 }
272
273 ctrl->temp_file = NULL;
274 return 0;
275 }
276
metalink_pctrl_new_resource_transaction(metalink_pctrl_t * ctrl)277 metalink_resource_t* metalink_pctrl_new_resource_transaction(metalink_pctrl_t* ctrl)
278 {
279 if(ctrl->temp_resource) {
280 metalink_resource_delete(ctrl->temp_resource);
281 }
282 ctrl->temp_resource = metalink_resource_new();
283 return ctrl->temp_resource;
284 }
285
metalink_pctrl_commit_resource_transaction(metalink_pctrl_t * ctrl)286 metalink_error_t metalink_pctrl_commit_resource_transaction(metalink_pctrl_t* ctrl)
287 {
288 if(!ctrl->temp_resource) {
289 return METALINK_ERR_NO_RESOURCE_TRANSACTION;
290 }
291
292 if(metalink_list_append(ctrl->resources, ctrl->temp_resource) != 0) {
293 return METALINK_ERR_BAD_ALLOC;
294 }
295
296 ctrl->temp_resource = NULL;
297 return 0;
298 }
299
metalink_pctrl_new_metaurl_transaction(metalink_pctrl_t * ctrl)300 metalink_metaurl_t* metalink_pctrl_new_metaurl_transaction(metalink_pctrl_t* ctrl)
301 {
302 if(ctrl->temp_metaurl) {
303 metalink_metaurl_delete(ctrl->temp_metaurl);
304 }
305 ctrl->temp_metaurl = metalink_metaurl_new();
306 return ctrl->temp_metaurl;
307 }
308
metalink_pctrl_commit_metaurl_transaction(metalink_pctrl_t * ctrl)309 metalink_error_t metalink_pctrl_commit_metaurl_transaction(metalink_pctrl_t* ctrl)
310 {
311 if(!ctrl->temp_metaurl) {
312 return METALINK_ERR_NO_RESOURCE_TRANSACTION;
313 }
314
315 if(metalink_list_append(ctrl->metaurls, ctrl->temp_metaurl) != 0) {
316 return METALINK_ERR_BAD_ALLOC;
317 }
318
319 ctrl->temp_metaurl = NULL;
320 return 0;
321 }
322
metalink_pctrl_new_checksum_transaction(metalink_pctrl_t * ctrl)323 metalink_checksum_t* metalink_pctrl_new_checksum_transaction(metalink_pctrl_t* ctrl)
324 {
325 if(ctrl->temp_checksum) {
326 metalink_checksum_delete(ctrl->temp_checksum);
327 }
328 ctrl->temp_checksum = metalink_checksum_new();
329 return ctrl->temp_checksum;
330 }
331
metalink_pctrl_commit_checksum_transaction(metalink_pctrl_t * ctrl)332 metalink_error_t metalink_pctrl_commit_checksum_transaction(metalink_pctrl_t* ctrl)
333 {
334 if(!ctrl->temp_checksum) {
335 return METALINK_ERR_NO_CHECKSUM_TRANSACTION;
336 }
337
338 if(metalink_list_append(ctrl->checksums, ctrl->temp_checksum) != 0) {
339 return METALINK_ERR_BAD_ALLOC;
340 }
341 ctrl->temp_checksum = NULL;
342 return 0;
343 }
344
345 metalink_chunk_checksum_t*
metalink_pctrl_new_chunk_checksum_transaction(metalink_pctrl_t * ctrl)346 metalink_pctrl_new_chunk_checksum_transaction(metalink_pctrl_t* ctrl)
347 {
348 if(ctrl->temp_chunk_checksum) {
349 metalink_chunk_checksum_delete(ctrl->temp_chunk_checksum);
350 }
351
352 ctrl->temp_chunk_checksum = metalink_chunk_checksum_new();
353 metalink_list_for_each(ctrl->piece_hashes,
354 (void (*)(void*))&metalink_piece_hash_delete);
355 metalink_list_clear(ctrl->piece_hashes);
356
357 return ctrl->temp_chunk_checksum;
358 }
359
metalink_pctrl_commit_chunk_checksum_transaction(metalink_pctrl_t * ctrl)360 metalink_error_t metalink_pctrl_commit_chunk_checksum_transaction(metalink_pctrl_t* ctrl)
361 {
362 metalink_error_t r;
363 if(!ctrl->temp_chunk_checksum) {
364 return METALINK_ERR_NO_CHUNK_CHECKSUM_TRANSACTION;
365 }
366 if(!ctrl->temp_file) {
367 return METALINK_ERR_NO_FILE_TRANSACTION;
368 }
369 r = commit_list_to_array((void*)&ctrl->temp_chunk_checksum->piece_hashes,
370 ctrl->piece_hashes, sizeof(metalink_piece_hash_t*));
371 if(r != 0) {
372 return r;
373 }
374 metalink_list_clear(ctrl->piece_hashes);
375 ctrl->temp_file->chunk_checksum = ctrl->temp_chunk_checksum;
376 ctrl->temp_chunk_checksum = NULL;
377 return 0;
378 }
379
metalink_pctrl_new_piece_hash_transaction(metalink_pctrl_t * ctrl)380 metalink_piece_hash_t* metalink_pctrl_new_piece_hash_transaction(metalink_pctrl_t* ctrl)
381 {
382 if(ctrl->temp_piece_hash) {
383 metalink_piece_hash_delete(ctrl->temp_piece_hash);
384 }
385 ctrl->temp_piece_hash = metalink_piece_hash_new();
386 return ctrl->temp_piece_hash;
387 }
388
metalink_pctrl_commit_piece_hash_transaction(metalink_pctrl_t * ctrl)389 metalink_error_t metalink_pctrl_commit_piece_hash_transaction(metalink_pctrl_t* ctrl)
390 {
391 if(!ctrl->temp_piece_hash) {
392 return METALINK_ERR_NO_PIECE_HASH_TRANSACTION;
393 }
394 if(metalink_list_append(ctrl->piece_hashes,
395 (void*)ctrl->temp_piece_hash) != 0) {
396 return METALINK_ERR_BAD_ALLOC;
397 }
398 ctrl->temp_piece_hash = NULL;
399 return 0;
400 }
401
metalink_pctrl_new_signature_transaction(metalink_pctrl_t * ctrl)402 metalink_signature_t* metalink_pctrl_new_signature_transaction(metalink_pctrl_t* ctrl) {
403 if(ctrl->temp_signature) {
404 metalink_signature_delete(ctrl->temp_signature);
405 }
406 ctrl->temp_signature = metalink_signature_new();
407 return ctrl->temp_signature;
408 }
409
metalink_pctrl_commit_signature_transaction(metalink_pctrl_t * ctrl)410 metalink_error_t metalink_pctrl_commit_signature_transaction(metalink_pctrl_t* ctrl) {
411 if(!ctrl->temp_signature) {
412 return METALINK_ERR_NO_SIGNATURE_TRANSACTION;
413 }
414 if(ctrl->temp_file->signature) {
415 metalink_signature_delete(ctrl->temp_file->signature);
416 }
417 ctrl->temp_file->signature = ctrl->temp_signature;
418 ctrl->temp_signature = NULL;
419 return 0;
420 }
421
422 /* metalink manipulation functions */
metalink_pctrl_set_version(metalink_pctrl_t * ctrl,metalink_version_t version)423 void metalink_pctrl_set_version(metalink_pctrl_t* ctrl, metalink_version_t version)
424 {
425 metalink_set_version(ctrl->metalink, version);
426 }
427
metalink_pctrl_add_language(metalink_pctrl_t * ctrl,const char * language)428 metalink_error_t metalink_pctrl_add_language(metalink_pctrl_t* ctrl, const char* language)
429 {
430 char *l;
431
432 l = strdup(language);
433 if(!l || metalink_list_append(ctrl->languages, l) != 0) {
434 return METALINK_ERR_BAD_ALLOC;
435 }
436 return 0;
437 }
438
metalink_pctrl_add_os(metalink_pctrl_t * ctrl,const char * os)439 metalink_error_t metalink_pctrl_add_os(metalink_pctrl_t* ctrl, const char* os)
440 {
441 char *o;
442
443 o = strdup(os);
444 if(!o || metalink_list_append(ctrl->oses, o) != 0) {
445 return METALINK_ERR_BAD_ALLOC;
446 }
447 return 0;
448 }
449
metalink_pctrl_set_identity(metalink_pctrl_t * ctrl,const char * identity)450 metalink_error_t metalink_pctrl_set_identity(metalink_pctrl_t* ctrl, const char* identity)
451 {
452 return metalink_set_identity(ctrl->metalink, identity);
453 }
454
metalink_pctrl_set_tags(metalink_pctrl_t * ctrl,const char * tags)455 metalink_error_t metalink_pctrl_set_tags(metalink_pctrl_t* ctrl, const char* tags)
456 {
457 return metalink_set_tags(ctrl->metalink, tags);
458 }
459
460 /* file manipulation functions*/
metalink_pctrl_file_set_language(metalink_pctrl_t * ctrl,const char * language)461 metalink_error_t metalink_pctrl_file_set_language(metalink_pctrl_t* ctrl, const char* language)
462 {
463 char *l;
464
465 if(ctrl->languages) {
466 metalink_list_delete(ctrl->languages);
467 }
468
469 l = strdup(language);
470 ctrl->languages = metalink_list_new();
471 if(!ctrl->languages || !l || metalink_list_append(ctrl->languages, l) != 0) {
472 return METALINK_ERR_BAD_ALLOC;
473 }
474
475 return 0;
476 }
477
metalink_pctrl_file_set_os(metalink_pctrl_t * ctrl,const char * os)478 metalink_error_t metalink_pctrl_file_set_os(metalink_pctrl_t* ctrl, const char* os)
479 {
480 char *o;
481
482 if(ctrl->oses) {
483 metalink_list_delete(ctrl->oses);
484 }
485
486 o = strdup(os);
487 ctrl->oses = metalink_list_new();
488 if(!ctrl->oses || !o || metalink_list_append(ctrl->oses, o) != 0) {
489 return METALINK_ERR_BAD_ALLOC;
490 }
491
492 return 0;
493 }
494
metalink_pctrl_file_set_name(metalink_pctrl_t * ctrl,const char * name)495 metalink_error_t metalink_pctrl_file_set_name(metalink_pctrl_t* ctrl, const char* name)
496 {
497 return metalink_file_set_name(ctrl->temp_file, name);
498 }
499
metalink_pctrl_file_set_description(metalink_pctrl_t * ctrl,const char * description)500 metalink_error_t metalink_pctrl_file_set_description(metalink_pctrl_t* ctrl, const char* description)
501 {
502 return metalink_file_set_description(ctrl->temp_file, description);
503 }
504
metalink_pctrl_file_set_copyright(metalink_pctrl_t * ctrl,const char * copyright)505 metalink_error_t metalink_pctrl_file_set_copyright(metalink_pctrl_t* ctrl, const char* copyright)
506 {
507 return metalink_file_set_copyright(ctrl->temp_file, copyright);
508 }
509
metalink_pctrl_file_set_identity(metalink_pctrl_t * ctrl,const char * identity)510 metalink_error_t metalink_pctrl_file_set_identity(metalink_pctrl_t* ctrl, const char* identity)
511 {
512 return metalink_file_set_identity(ctrl->temp_file, identity);
513 }
514
metalink_pctrl_file_set_logo(metalink_pctrl_t * ctrl,const char * logo)515 metalink_error_t metalink_pctrl_file_set_logo(metalink_pctrl_t* ctrl, const char* logo)
516 {
517 return metalink_file_set_logo(ctrl->temp_file, logo);
518 }
519
metalink_pctrl_file_set_publisher_name(metalink_pctrl_t * ctrl,const char * name)520 metalink_error_t metalink_pctrl_file_set_publisher_name(metalink_pctrl_t* ctrl, const char* name)
521 {
522 return metalink_file_set_publisher_name(ctrl->temp_file, name);
523 }
524
metalink_pctrl_file_set_publisher_url(metalink_pctrl_t * ctrl,const char * url)525 metalink_error_t metalink_pctrl_file_set_publisher_url(metalink_pctrl_t* ctrl, const char* url)
526 {
527 return metalink_file_set_publisher_url(ctrl->temp_file, url);
528 }
529
metalink_pctrl_file_set_size(metalink_pctrl_t * ctrl,long long int size)530 void metalink_pctrl_file_set_size(metalink_pctrl_t* ctrl, long long int size)
531 {
532 metalink_file_set_size(ctrl->temp_file, size);
533 }
534
metalink_pctrl_file_set_version(metalink_pctrl_t * ctrl,const char * version)535 metalink_error_t metalink_pctrl_file_set_version(metalink_pctrl_t* ctrl, const char* version)
536 {
537 return metalink_file_set_version(ctrl->temp_file, version);
538 }
539
metalink_pctrl_file_set_maxconnections(metalink_pctrl_t * ctrl,int maxconnections)540 void metalink_pctrl_file_set_maxconnections(metalink_pctrl_t* ctrl, int maxconnections)
541 {
542 metalink_file_set_maxconnections(ctrl->temp_file, maxconnections);
543 }
544
545
546 /* resource manipulation functions */
metalink_pctrl_resource_set_type(metalink_pctrl_t * ctrl,const char * type)547 metalink_error_t metalink_pctrl_resource_set_type(metalink_pctrl_t* ctrl, const char* type)
548 {
549 return metalink_resource_set_type(ctrl->temp_resource, type);
550 }
551
metalink_pctrl_resource_set_location(metalink_pctrl_t * ctrl,const char * location)552 metalink_error_t metalink_pctrl_resource_set_location(metalink_pctrl_t* ctrl,
553 const char* location)
554 {
555 return metalink_resource_set_location(ctrl->temp_resource, location);
556 }
557
metalink_pctrl_resource_set_preference(metalink_pctrl_t * ctrl,int preference)558 void metalink_pctrl_resource_set_preference(metalink_pctrl_t* ctrl,
559 int preference)
560 {
561 metalink_resource_set_preference(ctrl->temp_resource, preference);
562 }
563
metalink_pctrl_resource_set_priority(metalink_pctrl_t * ctrl,int priority)564 void metalink_pctrl_resource_set_priority(metalink_pctrl_t* ctrl,
565 int priority)
566 {
567 metalink_resource_set_priority(ctrl->temp_resource, priority);
568 }
569
metalink_pctrl_resource_set_maxconnections(metalink_pctrl_t * ctrl,int maxconnections)570 void metalink_pctrl_resource_set_maxconnections(metalink_pctrl_t* ctrl,
571 int maxconnections)
572 {
573 metalink_resource_set_maxconnections(ctrl->temp_resource, maxconnections);
574 }
575
metalink_pctrl_resource_set_url(metalink_pctrl_t * ctrl,const char * url)576 metalink_error_t metalink_pctrl_resource_set_url(metalink_pctrl_t* ctrl, const char* url)
577 {
578 return metalink_resource_set_url(ctrl->temp_resource, url);
579 }
580
581 /* metaurl manipulation functions */
metalink_pctrl_metaurl_set_mediatype(metalink_pctrl_t * ctrl,const char * mediatype)582 metalink_error_t metalink_pctrl_metaurl_set_mediatype(metalink_pctrl_t* ctrl,
583 const char* mediatype)
584 {
585 return metalink_metaurl_set_mediatype(ctrl->temp_metaurl, mediatype);
586 }
587
metalink_pctrl_metaurl_set_name(metalink_pctrl_t * ctrl,const char * name)588 metalink_error_t metalink_pctrl_metaurl_set_name(metalink_pctrl_t* ctrl,
589 const char* name)
590 {
591 return metalink_metaurl_set_name(ctrl->temp_metaurl, name);
592 }
593
metalink_pctrl_metaurl_set_priority(metalink_pctrl_t * ctrl,int priority)594 void metalink_pctrl_metaurl_set_priority(metalink_pctrl_t* ctrl,
595 int priority)
596 {
597 metalink_metaurl_set_priority(ctrl->temp_metaurl, priority);
598 }
599
metalink_pctrl_metaurl_set_url(metalink_pctrl_t * ctrl,const char * url)600 metalink_error_t metalink_pctrl_metaurl_set_url(metalink_pctrl_t* ctrl,
601 const char* url)
602 {
603 return metalink_metaurl_set_url(ctrl->temp_metaurl, url);
604 }
605
606 /* checksum manipulation functions */
metalink_pctrl_checksum_set_type(metalink_pctrl_t * ctrl,const char * type)607 metalink_error_t metalink_pctrl_checksum_set_type(metalink_pctrl_t* ctrl, const char* type)
608 {
609 return metalink_checksum_set_type(ctrl->temp_checksum, type);
610 }
611
metalink_pctrl_checksum_set_hash(metalink_pctrl_t * ctrl,const char * hash)612 metalink_error_t metalink_pctrl_checksum_set_hash(metalink_pctrl_t* ctrl, const char* hash)
613 {
614 return metalink_checksum_set_hash(ctrl->temp_checksum, hash);
615 }
616
617 /* piece hash manipulation functions */
metalink_pctrl_piece_hash_set_piece(metalink_pctrl_t * ctrl,int piece)618 void metalink_pctrl_piece_hash_set_piece(metalink_pctrl_t* ctrl, int piece)
619 {
620 metalink_piece_hash_set_piece(ctrl->temp_piece_hash, piece);
621 }
622
metalink_pctrl_piece_hash_set_hash(metalink_pctrl_t * ctrl,const char * hash)623 metalink_error_t metalink_pctrl_piece_hash_set_hash(metalink_pctrl_t* ctrl, const char* hash)
624 {
625 return metalink_piece_hash_set_hash(ctrl->temp_piece_hash, hash);
626 }
627
628 /* chunk checksum manipulation functions */
metalink_pctrl_chunk_checksum_set_type(metalink_pctrl_t * ctrl,const char * type)629 metalink_error_t metalink_pctrl_chunk_checksum_set_type(metalink_pctrl_t* ctrl, const char* type)
630 {
631 return metalink_chunk_checksum_set_type(ctrl->temp_chunk_checksum, type);
632 }
633
metalink_pctrl_chunk_checksum_set_length(metalink_pctrl_t * ctrl,int length)634 void metalink_pctrl_chunk_checksum_set_length(metalink_pctrl_t* ctrl, int length)
635 {
636 metalink_chunk_checksum_set_length(ctrl->temp_chunk_checksum, length);
637 }
638
metalink_pctrl_chunk_checksum_set_piece_hashes(metalink_pctrl_t * ctrl,metalink_piece_hash_t ** piece_hashes)639 void metalink_pctrl_chunk_checksum_set_piece_hashes
640 (metalink_pctrl_t* ctrl, metalink_piece_hash_t** piece_hashes)
641 {
642 metalink_chunk_checksum_set_piece_hashes(ctrl->temp_chunk_checksum,
643 piece_hashes);
644 }
645
646 /* signature manipulation functions */
metalink_pctrl_signature_set_signature(metalink_pctrl_t * ctrl,const char * signature)647 metalink_error_t metalink_pctrl_signature_set_signature(metalink_pctrl_t* ctrl, const char* signature) {
648 return metalink_signature_set_signature(ctrl->temp_signature, signature);
649 }
650
651 /* information functions */
metalink_pctrl_set_generator(metalink_pctrl_t * ctrl,const char * generator)652 metalink_error_t metalink_pctrl_set_generator(metalink_pctrl_t* ctrl, const char* generator)
653 {
654 return metalink_set_generator(ctrl->metalink, generator);
655 }
656
metalink_pctrl_set_origin(metalink_pctrl_t * ctrl,const char * origin)657 metalink_error_t metalink_pctrl_set_origin(metalink_pctrl_t* ctrl, const char* origin)
658 {
659 return metalink_set_origin(ctrl->metalink, origin);
660 }
661
metalink_pctrl_set_origin_dynamic(metalink_pctrl_t * ctrl,int origin_dynamic)662 void metalink_pctrl_set_origin_dynamic(metalink_pctrl_t* ctrl,
663 int origin_dynamic)
664 {
665 metalink_set_origin_dynamic(ctrl->metalink, origin_dynamic);
666 }
667
metalink_pctrl_set_published(metalink_pctrl_t * ctrl,int published)668 void metalink_pctrl_set_published(metalink_pctrl_t* ctrl, int published)
669 {
670 metalink_set_published(ctrl->metalink, published);
671 }
672
metalink_pctrl_set_updated(metalink_pctrl_t * ctrl,int updated)673 void metalink_pctrl_set_updated(metalink_pctrl_t* ctrl, int updated)
674 {
675 metalink_set_updated(ctrl->metalink, updated);
676 }
677