tool_metalink.h
Go to the documentation of this file.
1 #ifndef HEADER_CURL_TOOL_METALINK_H
2 #define HEADER_CURL_TOOL_METALINK_H
3 /***************************************************************************
4  * _ _ ____ _
5  * Project ___| | | | _ \| |
6  * / __| | | | |_) | |
7  * | (__| |_| | _ <| |___
8  * \___|\___/|_| \_\_____|
9  *
10  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
11  *
12  * This software is licensed as described in the file COPYING, which
13  * you should have received as part of this distribution. The terms
14  * are also available at https://curl.haxx.se/docs/copyright.html.
15  *
16  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17  * copies of the Software, and permit persons to whom the Software is
18  * furnished to do so, under the terms of the COPYING file.
19  *
20  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21  * KIND, either express or implied.
22  *
23  ***************************************************************************/
24 #include "tool_setup.h"
25 
26 struct GlobalConfig;
27 struct OperationConfig;
28 
29 /* returns 1 for success, 0 otherwise (we use OpenSSL *_Init fncs directly) */
30 typedef int (* Curl_digest_init_func)(void *context);
31 
32 typedef void (* Curl_digest_update_func)(void *context,
33  const unsigned char *data,
34  unsigned int len);
35 typedef void (* Curl_digest_final_func)(unsigned char *result, void *context);
36 
37 typedef struct {
38  Curl_digest_init_func digest_init; /* Initialize context procedure */
39  Curl_digest_update_func digest_update; /* Update context with data */
40  Curl_digest_final_func digest_final; /* Get final result procedure */
41  unsigned int digest_ctxtsize; /* Context structure size */
42  unsigned int digest_resultlen; /* Result length (bytes) */
44 
45 typedef struct {
46  const digest_params *digest_hash; /* Hash function definition */
47  void *digest_hashctx; /* Hash function context */
49 
52  const unsigned char *data,
53  unsigned int len);
54 int Curl_digest_final(digest_context *context, unsigned char *result);
55 
56 typedef struct {
57  const char *hash_name;
60 
61 typedef struct {
62  const char *alias_name;
65 
66 typedef struct metalink_checksum {
68  /* raw digest value, not ascii hex digest */
69  unsigned char *digest;
71 
72 typedef struct metalink_resource {
74  char *url;
76 
77 typedef struct metalinkfile {
78  struct metalinkfile *next;
79  char *filename;
82 } metalinkfile;
83 
84 #ifdef USE_METALINK
85 
86 /*
87  * curl requires libmetalink 0.1.0 or newer
88  */
89 #define CURL_REQ_LIBMETALINK_MAJOR 0
90 #define CURL_REQ_LIBMETALINK_MINOR 1
91 #define CURL_REQ_LIBMETALINK_PATCH 0
92 
93 #define CURL_REQ_LIBMETALINK_VERS ((CURL_REQ_LIBMETALINK_MAJOR * 10000) + \
94  (CURL_REQ_LIBMETALINK_MINOR * 100) + \
95  CURL_REQ_LIBMETALINK_PATCH)
96 
97 extern const digest_params MD5_DIGEST_PARAMS[1];
98 extern const digest_params SHA1_DIGEST_PARAMS[1];
99 extern const digest_params SHA256_DIGEST_PARAMS[1];
100 
101 #include <metalink/metalink.h>
102 
103 /*
104  * Counts the resource in the metalinkfile.
105  */
108 
109 /*
110  * Performs final parse operation and extracts information from
111  * Metalink and creates metalinkfile structs.
112  *
113  * This function returns 0 if it succeeds without warnings, or one of
114  * the following negative error codes:
115  *
116  * -1: Parsing failed; or no file is found
117  * -2: Parsing succeeded with some warnings.
118  */
119 int parse_metalink(struct OperationConfig *config, struct OutStruct *outs,
120  const char *metalink_url);
121 
122 /*
123  * Callback function for CURLOPT_WRITEFUNCTION
124  */
125 size_t metalink_write_cb(void *buffer, size_t sz, size_t nmemb,
126  void *userdata);
127 
128 /*
129  * Returns nonzero if content_type includes "application/metalink+xml"
130  * media-type. The check is done in case-insensitive manner.
131  */
132 int check_metalink_content_type(const char *content_type);
133 
134 /*
135  * Check checksum of file denoted by filename.
136  *
137  * This function returns 1 if the checksum matches or one of the
138  * following integers:
139  *
140  * 0:
141  * Checksum didn't match.
142  * -1:
143  * Could not open file; or could not read data from file.
144  * -2:
145  * No checksum in Metalink supported, hash algorithm not available, or
146  * Metalink does not contain checksum.
147  */
148 int metalink_check_hash(struct GlobalConfig *config,
149  metalinkfile *mlfile,
150  const char *filename);
151 
152 /*
153  * Release resources allocated at global scope.
154  */
155 void metalink_cleanup(void);
156 
157 #else /* USE_METALINK */
158 
159 #define count_next_metalink_resource(x) 0
160 #define clean_metalink(x) (void)x
161 
162 /* metalink_cleanup() takes no arguments */
163 #define metalink_cleanup() Curl_nop_stmt
164 
165 #endif /* USE_METALINK */
166 
167 #endif /* HEADER_CURL_TOOL_METALINK_H */
Definition: ws_ssl.c:25
void * digest_hashctx
Definition: tool_metalink.h:47
unsigned int digest_ctxtsize
Definition: tool_metalink.h:41
unsigned int digest_resultlen
Definition: tool_metalink.h:42
Curl_digest_init_func digest_init
Definition: tool_metalink.h:38
char * filename
Definition: tool_metalink.h:79
struct metalinkfile * next
Definition: tool_metalink.h:78
UNITTEST_START int result
Definition: unit1304.c:49
char buffer[]
Definition: unit1308.c:48
size_t len
Definition: curl_sasl.c:55
Curl_digest_update_func digest_update
Definition: tool_metalink.h:39
UNITTEST_START struct Curl_easy data
Definition: unit1399.c:82
Curl_digest_final_func digest_final
Definition: tool_metalink.h:40
const digest_params * digest_hash
Definition: tool_metalink.h:46
metalink_resource * resource
Definition: tool_metalink.h:81
metalink_checksum * checksum
Definition: tool_metalink.h:80
Definition: debug.c:29


rc_tagdetect_client
Author(s): Monika Florek-Jasinska , Raphael Schaller
autogenerated on Sat Feb 13 2021 03:42:16