File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / curl / src / tool_metalink.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 3 10:01:15 2020 UTC (4 years, 10 months ago) by misho
Branches: curl, MAIN
CVS tags: v7_70_0p4, HEAD
curl

    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 - 2020, 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: #include "tool_sdecls.h"
   26: 
   27: struct GlobalConfig;
   28: struct OperationConfig;
   29: 
   30: /* returns 1 for success, 0 otherwise (we use OpenSSL *_Init fncs directly) */
   31: typedef int (*digest_init_func)(void *context);
   32: 
   33: typedef void (*digest_update_func)(void *context,
   34:                                    const unsigned char *data,
   35:                                    unsigned int len);
   36: typedef void (*digest_final_func)(unsigned char *result, void *context);
   37: 
   38: typedef struct {
   39:   digest_init_func     digest_init;   /* Initialize context procedure */
   40:   digest_update_func   digest_update; /* Update context with data */
   41:   digest_final_func    digest_final;  /* Get final result procedure */
   42:   unsigned int         digest_ctxtsize;  /* Context structure size */
   43:   unsigned int         digest_resultlen; /* Result length (bytes) */
   44: } digest_params;
   45: 
   46: typedef struct {
   47:   const digest_params   *digest_hash;      /* Hash function definition */
   48:   void                  *digest_hashctx;   /* Hash function context */
   49: } digest_context;
   50: 
   51: typedef struct {
   52:   const char *hash_name;
   53:   const digest_params *dparams;
   54: } metalink_digest_def;
   55: 
   56: typedef struct {
   57:   const char *alias_name;
   58:   const metalink_digest_def *digest_def;
   59: } metalink_digest_alias;
   60: 
   61: typedef struct metalink_checksum {
   62:   const metalink_digest_def *digest_def;
   63:   /* raw digest value, not ascii hex digest */
   64:   unsigned char *digest;
   65: } metalink_checksum;
   66: 
   67: typedef struct metalink_resource {
   68:   struct metalink_resource *next;
   69:   char *url;
   70: } metalink_resource;
   71: 
   72: typedef struct metalinkfile {
   73:   struct metalinkfile *next;
   74:   char *filename;
   75:   metalink_checksum *checksum;
   76:   metalink_resource *resource;
   77: } metalinkfile;
   78: 
   79: #ifdef USE_METALINK
   80: 
   81: /*
   82:  * curl requires libmetalink 0.1.0 or newer
   83:  */
   84: #define CURL_REQ_LIBMETALINK_MAJOR  0
   85: #define CURL_REQ_LIBMETALINK_MINOR  1
   86: #define CURL_REQ_LIBMETALINK_PATCH  0
   87: 
   88: #define CURL_REQ_LIBMETALINK_VERS  ((CURL_REQ_LIBMETALINK_MAJOR * 10000) + \
   89:                                     (CURL_REQ_LIBMETALINK_MINOR * 100) + \
   90:                                      CURL_REQ_LIBMETALINK_PATCH)
   91: 
   92: extern const digest_params MD5_DIGEST_PARAMS[1];
   93: extern const digest_params SHA1_DIGEST_PARAMS[1];
   94: extern const digest_params SHA256_DIGEST_PARAMS[1];
   95: 
   96: #include <metalink/metalink.h>
   97: 
   98: /*
   99:  * Counts the resource in the metalinkfile.
  100:  */
  101: int count_next_metalink_resource(metalinkfile *mlfile);
  102: 
  103: void delete_metalinkfile(metalinkfile *mlfile);
  104: void clean_metalink(struct OperationConfig *config);
  105: 
  106: /*
  107:  * Performs final parse operation and extracts information from
  108:  * Metalink and creates metalinkfile structs.
  109:  *
  110:  * This function returns 0 if it succeeds without warnings, or one of
  111:  * the following negative error codes:
  112:  *
  113:  * -1: Parsing failed; or no file is found
  114:  * -2: Parsing succeeded with some warnings.
  115:  */
  116: int parse_metalink(struct OperationConfig *config, struct OutStruct *outs,
  117:                    const char *metalink_url);
  118: 
  119: /*
  120:  * Callback function for CURLOPT_WRITEFUNCTION
  121:  */
  122: size_t metalink_write_cb(void *buffer, size_t sz, size_t nmemb,
  123:                          void *userdata);
  124: 
  125: /*
  126:  * Returns nonzero if content_type includes "application/metalink+xml"
  127:  * media-type. The check is done in case-insensitive manner.
  128:  */
  129: int check_metalink_content_type(const char *content_type);
  130: 
  131: /*
  132:  * Check checksum of file denoted by filename.
  133:  *
  134:  * This function returns 1 if the checksum matches or one of the
  135:  * following integers:
  136:  *
  137:  * 0:
  138:  *   Checksum didn't match.
  139:  * -1:
  140:  *   Could not open file; or could not read data from file.
  141:  * -2:
  142:  *   No checksum in Metalink supported, hash algorithm not available, or
  143:  *   Metalink does not contain checksum.
  144:  */
  145: int metalink_check_hash(struct GlobalConfig *config,
  146:                         metalinkfile *mlfile,
  147:                         const char *filename);
  148: 
  149: /*
  150:  * Release resources allocated at global scope.
  151:  */
  152: void metalink_cleanup(void);
  153: 
  154: #else /* USE_METALINK */
  155: 
  156: #define count_next_metalink_resource(x)  0
  157: #define delete_metalinkfile(x)  (void)x
  158: #define clean_metalink(x)  (void)x
  159: 
  160: /* metalink_cleanup() takes no arguments */
  161: #define metalink_cleanup() Curl_nop_stmt
  162: 
  163: #endif /* USE_METALINK */
  164: 
  165: #endif /* HEADER_CURL_TOOL_METALINK_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>