1 /* librepo - A library providing (libcURL like) API to downloading repository 2 * Copyright (C) 2012 Tomas Mlcoch 3 * 4 * Licensed under the GNU Lesser General Public License Version 2.1 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef __LR_METALINK_H__ 22 #define __LR_METALINK_H__ 23 24 #include <glib.h> 25 #include "xmlparser.h" 26 27 G_BEGIN_DECLS 28 29 /** \defgroup metalink Metalink parser 30 * \addtogroup metalink 31 * @{ 32 */ 33 34 /** Single checksum for the metalink target file. */ 35 typedef struct { 36 char *type; /*!< Type of checksum (e.g. "md5", "sha1", "sha256", ... */ 37 char *value; /*!< Value of the checksum */ 38 } LrMetalinkHash; 39 40 /** Single metalink URL */ 41 typedef struct { 42 char *protocol; /*!< Mirror protocol "http", "ftp", "rsync", ... */ 43 char *type; /*!< Mirror type "http", "ftp", "rsync", ... */ 44 char *location; /*!< ISO 3166-1 alpha-2 code ("US", "CZ", ..) */ 45 int preference; /*!< Integer number 1-100, higher is better */ 46 char *url; /*!< URL to the target file */ 47 } LrMetalinkUrl; 48 49 /** Alternate */ 50 typedef struct { 51 gint64 timestamp; /*!< File timestamp */ 52 gint64 size; /*!< File size */ 53 GSList *hashes; /*!< List of pointers to LrMetalinkHashes (could be NULL) */ 54 } LrMetalinkAlternate; 55 56 /** Metalink */ 57 typedef struct { 58 char *filename; /*!< Filename */ 59 gint64 timestamp; /*!< Repo timestamp (the highest ts in the repomd.xml) */ 60 gint64 size; /*!< File size */ 61 GSList *hashes; /*!< List of pointers to LrMetalinkHashes (could be NULL) */ 62 GSList *urls; /*!< List of pointers to LrMetalinkUrls (could be NULL) */ 63 GSList *alternates; /*!< List of pointers to LrMetalinkAlternates (could be NULL) */ 64 } LrMetalink; 65 66 /** Create new empty metalink object. 67 * @return New metalink object. 68 */ 69 LrMetalink * 70 lr_metalink_init(void); 71 72 /** Parse metalink file. 73 * @param metalink Metalink object. 74 * @param fd File descriptor. 75 * @param filename File to look for in metalink file. 76 * @param warningcb ::LrXmlParserWarningCb function or NULL 77 * @param warningcb_data Warning callback data or NULL 78 * @param err GError ** 79 * @return TRUE if everything is ok, FALSE if err is set. 80 */ 81 gboolean 82 lr_metalink_parse_file(LrMetalink *metalink, 83 int fd, 84 const char *filename, 85 LrXmlParserWarningCb warningcb, 86 void *warningcb_data, 87 GError **err); 88 89 /** Free metalink object and all its content. 90 * @param metalink Metalink object. 91 */ 92 void 93 lr_metalink_free(LrMetalink *metalink); 94 95 /** @} */ 96 97 G_END_DECLS 98 99 #endif 100