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 #ifndef _D_METALINK_PCTRL_H_ 27 #define _D_METALINK_PCTRL_H_ 28 29 #include "metalink_config.h" 30 31 #include <metalink/metalink.h> 32 33 #include "metalink_list.h" 34 35 typedef struct metalink_pctrl_t { 36 metalink_error_t error; 37 38 metalink_t* metalink; 39 40 metalink_list_t/* <metalink_file_t*> */ * files; 41 42 metalink_file_t* temp_file; 43 44 metalink_list_t/* <char*> */ *languages; 45 46 metalink_list_t/* <char*> */ *oses; 47 48 metalink_list_t/* <metalink_resource_t*> */ * resources; 49 50 metalink_resource_t* temp_resource; 51 52 metalink_list_t/* <metalink_metaurl_t*> */ * metaurls; 53 54 metalink_metaurl_t* temp_metaurl; 55 56 metalink_list_t/* <metalink_checksum_t*> */ * checksums; 57 58 metalink_checksum_t* temp_checksum; 59 60 metalink_chunk_checksum_t* temp_chunk_checksum; 61 62 metalink_list_t/* <metalink_piece_hash_t*> */ * piece_hashes; 63 64 metalink_piece_hash_t* temp_piece_hash; 65 66 metalink_signature_t* temp_signature; 67 } metalink_pctrl_t; 68 69 metalink_pctrl_t* new_metalink_pctrl(void); 70 71 void delete_metalink_pctrl(metalink_pctrl_t* ctrl); 72 73 /** 74 * detach metalink member: return ctrl->metalink and set NULL to 75 * ctrl->metalink. 76 */ 77 metalink_t* metalink_pctrl_detach_metalink(metalink_pctrl_t* ctrl); 78 79 /* Set error code */ 80 void metalink_pctrl_set_error(metalink_pctrl_t* ctrl, metalink_error_t error); 81 82 metalink_error_t metalink_pctrl_get_error(metalink_pctrl_t* ctrl); 83 84 /* metalink manipulation functions */ 85 metalink_error_t metalink_pctrl_metalink_accumulate_files(metalink_pctrl_t* ctrl); 86 87 /* transaction functions */ 88 metalink_file_t* metalink_pctrl_new_file_transaction(metalink_pctrl_t* ctrl); 89 90 metalink_error_t metalink_pctrl_commit_file_transaction(metalink_pctrl_t* ctrl); 91 92 metalink_resource_t* metalink_pctrl_new_resource_transaction(metalink_pctrl_t* ctrl); 93 94 metalink_error_t metalink_pctrl_commit_resource_transaction(metalink_pctrl_t* ctrl); 95 96 metalink_metaurl_t* metalink_pctrl_new_metaurl_transaction(metalink_pctrl_t* ctrl); 97 98 metalink_error_t metalink_pctrl_commit_metaurl_transaction(metalink_pctrl_t* ctrl); 99 100 metalink_checksum_t* metalink_pctrl_new_checksum_transaction(metalink_pctrl_t* ctrl); 101 102 metalink_error_t metalink_pctrl_commit_checksum_transaction(metalink_pctrl_t* ctrl); 103 104 metalink_chunk_checksum_t* metalink_pctrl_new_chunk_checksum_transaction(metalink_pctrl_t* ctrl); 105 106 metalink_error_t metalink_pctrl_commit_chunk_checksum_transaction(metalink_pctrl_t* ctrl); 107 108 metalink_piece_hash_t* metalink_pctrl_new_piece_hash_transaction(metalink_pctrl_t* ctrl); 109 110 metalink_error_t metalink_pctrl_commit_piece_hash_transaction(metalink_pctrl_t* ctrl); 111 112 metalink_signature_t* metalink_pctrl_new_signature_transaction(metalink_pctrl_t* ctrl); 113 114 metalink_error_t metalink_pctrl_commit_signature_transaction(metalink_pctrl_t* ctrl); 115 116 /* metalink manipulation functions */ 117 void metalink_pctrl_set_version(metalink_pctrl_t* ctrl, metalink_version_t version); 118 metalink_error_t metalink_pctrl_add_language(metalink_pctrl_t* ctrl, const char* language); 119 metalink_error_t metalink_pctrl_add_os(metalink_pctrl_t* ctrl, const char* os); 120 metalink_error_t metalink_pctrl_set_identity(metalink_pctrl_t* ctrl, const char* identity); 121 metalink_error_t metalink_pctrl_set_tags(metalink_pctrl_t* ctrl, const char* tags); 122 123 /* file manipulation functions */ 124 metalink_error_t metalink_pctrl_file_set_language(metalink_pctrl_t* ctrl, const char* language); 125 126 metalink_error_t metalink_pctrl_file_set_os(metalink_pctrl_t* ctrl, const char* os); 127 128 metalink_error_t metalink_pctrl_file_set_name(metalink_pctrl_t* ctrl, const char* name); 129 130 metalink_error_t metalink_pctrl_file_set_description(metalink_pctrl_t* ctrl, const char* description); 131 132 metalink_error_t metalink_pctrl_file_set_copyright(metalink_pctrl_t* ctrl, const char* copyright); 133 134 metalink_error_t metalink_pctrl_file_set_identity(metalink_pctrl_t* ctrl, const char* identity); 135 136 metalink_error_t metalink_pctrl_file_set_logo(metalink_pctrl_t* ctrl, const char* logo); 137 138 metalink_error_t metalink_pctrl_file_set_publisher_name(metalink_pctrl_t* ctrl, const char* name); 139 140 metalink_error_t metalink_pctrl_file_set_publisher_url(metalink_pctrl_t* ctrl, const char* url); 141 142 void metalink_pctrl_file_set_size(metalink_pctrl_t* ctrl, long long int size); 143 144 metalink_error_t metalink_pctrl_file_set_version(metalink_pctrl_t* ctrl, const char* version); 145 146 void metalink_pctrl_file_set_maxconnections(metalink_pctrl_t* ctrl, int maxconnections); 147 148 /* resource manipulation functions */ 149 metalink_error_t metalink_pctrl_resource_set_type(metalink_pctrl_t* ctrl, const char* type); 150 151 metalink_error_t metalink_pctrl_resource_set_location(metalink_pctrl_t* ctrl, 152 const char* location); 153 154 void metalink_pctrl_resource_set_preference(metalink_pctrl_t* ctrl, 155 int preference); 156 157 void metalink_pctrl_resource_set_priority(metalink_pctrl_t* ctrl, 158 int priority); 159 160 void metalink_pctrl_resource_set_maxconnections(metalink_pctrl_t* ctrl, 161 int maxconnections); 162 163 metalink_error_t metalink_pctrl_resource_set_url(metalink_pctrl_t* ctrl, const char* url); 164 165 /* metaurl manipulation functions */ 166 metalink_error_t metalink_pctrl_metaurl_set_mediatype(metalink_pctrl_t* ctrl, 167 const char* mediatype); 168 169 metalink_error_t metalink_pctrl_metaurl_set_name(metalink_pctrl_t* ctrl, 170 const char* name); 171 172 void metalink_pctrl_metaurl_set_priority(metalink_pctrl_t* ctrl, 173 int priority); 174 175 metalink_error_t metalink_pctrl_metaurl_set_url(metalink_pctrl_t* ctrl, 176 const char* url); 177 178 /* checksum manipulation functions */ 179 metalink_error_t metalink_pctrl_checksum_set_type(metalink_pctrl_t* ctrl, const char* type); 180 181 metalink_error_t metalink_pctrl_checksum_set_hash(metalink_pctrl_t* ctrl, const char* hash); 182 183 /* piece hash manipulation functions */ 184 void metalink_pctrl_piece_hash_set_piece(metalink_pctrl_t* ctrl, int piece); 185 186 metalink_error_t metalink_pctrl_piece_hash_set_hash(metalink_pctrl_t* ctrl, const char* hash); 187 188 /* chunk checksum manipulation functions */ 189 metalink_error_t metalink_pctrl_chunk_checksum_set_type(metalink_pctrl_t* ctrl, const char* type); 190 191 void metalink_pctrl_chunk_checksum_set_length(metalink_pctrl_t* ctrl, int length); 192 193 /* signature manipulation functions */ 194 metalink_error_t metalink_pctrl_signature_set_signature(metalink_pctrl_t* ctrl, const char* signature); 195 196 /* Unlike other mutator functions, this function doesn't create copy of 197 piece_hashes. So don't free piece_hashes manually after this call.*/ 198 void metalink_pctrl_chunk_checksum_set_piece_hashes(metalink_pctrl_t* ctrl, 199 metalink_piece_hash_t** piece_hashes); 200 201 /* information functions */ 202 metalink_error_t metalink_pctrl_set_generator(metalink_pctrl_t* ctrl, const char* generator); 203 204 metalink_error_t metalink_pctrl_set_origin(metalink_pctrl_t* ctrl, const char* origin); 205 206 /* Sets the dynamic attribute of the origin element as per Metalink 207 version 4. If it is "true", origin_dynamic must be 1. Otherwise, it 208 must be 0. For Metalink version 3, origin_dynamic must be 1 if the 209 type attribute of metalink element is "dynamic". Otherwise, it must 210 be 0. 211 */ 212 void metalink_pctrl_set_origin_dynamic(metalink_pctrl_t* ctrl, 213 int origin_dynamic); 214 215 void metalink_pctrl_set_published(metalink_pctrl_t* ctrl, int published); 216 217 void metalink_pctrl_set_updated(metalink_pctrl_t* ctrl, int updated); 218 219 #endif /* _D_METALINK_PCTRL_H_ */ 220