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