1 1.1 agc /*- 2 1.1 agc * Copyright (c) 1998-2004 Dag-Erling Codan Smrgrav 3 1.1 agc * All rights reserved. 4 1.1 agc * 5 1.1 agc * Redistribution and use in source and binary forms, with or without 6 1.1 agc * modification, are permitted provided that the following conditions 7 1.1 agc * are met: 8 1.1 agc * 1. Redistributions of source code must retain the above copyright 9 1.1 agc * notice, this list of conditions and the following disclaimer 10 1.1 agc * in this position and unchanged. 11 1.1 agc * 2. Redistributions in binary form must reproduce the above copyright 12 1.1 agc * notice, this list of conditions and the following disclaimer in the 13 1.1 agc * documentation and/or other materials provided with the distribution. 14 1.1 agc * 3. The name of the author may not be used to endorse or promote products 15 1.1 agc * derived from this software without specific prior written permission 16 1.1 agc * 17 1.1 agc * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 1.1 agc * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 1.1 agc * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 1.1 agc * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 1.1 agc * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 1.1 agc * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 1.1 agc * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 1.1 agc * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 1.1 agc * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 1.1 agc * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 1.1 agc * 28 1.1 agc * $FreeBSD: src/lib/libfetch/fetch.h,v 1.25.8.1 2006/11/11 00:16:07 des Exp $ 29 1.1 agc */ 30 1.1 agc 31 1.1 agc #ifndef _FETCH_H_INCLUDED 32 1.1 agc #define _FETCH_H_INCLUDED 33 1.1 agc 34 1.1 agc #define _LIBFETCH_VER "libfetch/2.0" 35 1.1 agc 36 1.1 agc #define URL_SCHEMELEN 16 37 1.1 agc #define URL_USERLEN 256 38 1.1 agc #define URL_PWDLEN 256 39 1.1 agc 40 1.1 agc struct url { 41 1.1 agc char scheme[URL_SCHEMELEN+1]; 42 1.1 agc char user[URL_USERLEN+1]; 43 1.1 agc char pwd[URL_PWDLEN+1]; 44 1.1 agc char host[MAXHOSTNAMELEN+1]; 45 1.1 agc int port; 46 1.1 agc char *doc; 47 1.1 agc off_t offset; 48 1.1 agc size_t length; 49 1.1 agc }; 50 1.1 agc 51 1.1 agc struct url_stat { 52 1.1 agc off_t size; 53 1.1 agc time_t atime; 54 1.1 agc time_t mtime; 55 1.1 agc }; 56 1.1 agc 57 1.1 agc struct url_ent { 58 1.1 agc char name[PATH_MAX]; 59 1.1 agc struct url_stat stat; 60 1.1 agc }; 61 1.1 agc 62 1.1 agc /* Recognized schemes */ 63 1.1 agc #define SCHEME_FTP "ftp" 64 1.1 agc #define SCHEME_HTTP "http" 65 1.1 agc #define SCHEME_HTTPS "https" 66 1.1 agc #define SCHEME_FILE "file" 67 1.1 agc 68 1.1 agc /* Error codes */ 69 1.1 agc #define FETCH_ABORT 1 70 1.1 agc #define FETCH_AUTH 2 71 1.1 agc #define FETCH_DOWN 3 72 1.1 agc #define FETCH_EXISTS 4 73 1.1 agc #define FETCH_FULL 5 74 1.1 agc #define FETCH_INFO 6 75 1.1 agc #define FETCH_MEMORY 7 76 1.1 agc #define FETCH_MOVED 8 77 1.1 agc #define FETCH_NETWORK 9 78 1.1 agc #define FETCH_OK 10 79 1.1 agc #define FETCH_PROTO 11 80 1.1 agc #define FETCH_RESOLV 12 81 1.1 agc #define FETCH_SERVER 13 82 1.1 agc #define FETCH_TEMP 14 83 1.1 agc #define FETCH_TIMEOUT 15 84 1.1 agc #define FETCH_UNAVAIL 16 85 1.1 agc #define FETCH_UNKNOWN 17 86 1.1 agc #define FETCH_URL 18 87 1.1 agc #define FETCH_VERBOSE 19 88 1.1 agc 89 1.1 agc __BEGIN_DECLS 90 1.1 agc 91 1.1 agc /* FILE-specific functions */ 92 1.1 agc FILE *fetchXGetFile(struct url *, struct url_stat *, const char *); 93 1.1 agc FILE *fetchGetFile(struct url *, const char *); 94 1.1 agc FILE *fetchPutFile(struct url *, const char *); 95 1.1 agc int fetchStatFile(struct url *, struct url_stat *, const char *); 96 1.1 agc struct url_ent *fetchListFile(struct url *, const char *); 97 1.1 agc 98 1.1 agc /* HTTP-specific functions */ 99 1.1 agc FILE *fetchXGetHTTP(struct url *, struct url_stat *, const char *); 100 1.1 agc FILE *fetchGetHTTP(struct url *, const char *); 101 1.1 agc FILE *fetchPutHTTP(struct url *, const char *); 102 1.1 agc int fetchStatHTTP(struct url *, struct url_stat *, const char *); 103 1.1 agc struct url_ent *fetchListHTTP(struct url *, const char *); 104 1.1 agc 105 1.1 agc /* FTP-specific functions */ 106 1.1 agc FILE *fetchXGetFTP(struct url *, struct url_stat *, const char *); 107 1.1 agc FILE *fetchGetFTP(struct url *, const char *); 108 1.1 agc FILE *fetchPutFTP(struct url *, const char *); 109 1.1 agc int fetchStatFTP(struct url *, struct url_stat *, const char *); 110 1.1 agc struct url_ent *fetchListFTP(struct url *, const char *); 111 1.1 agc 112 1.1 agc /* Generic functions */ 113 1.1 agc FILE *fetchXGetURL(const char *, struct url_stat *, const char *); 114 1.1 agc FILE *fetchGetURL(const char *, const char *); 115 1.1 agc FILE *fetchPutURL(const char *, const char *); 116 1.1 agc int fetchStatURL(const char *, struct url_stat *, const char *); 117 1.1 agc struct url_ent *fetchListURL(const char *, const char *); 118 1.1 agc FILE *fetchXGet(struct url *, struct url_stat *, const char *); 119 1.1 agc FILE *fetchGet(struct url *, const char *); 120 1.1 agc FILE *fetchPut(struct url *, const char *); 121 1.1 agc int fetchStat(struct url *, struct url_stat *, const char *); 122 1.1 agc struct url_ent *fetchList(struct url *, const char *); 123 1.1 agc 124 1.1 agc /* URL parsing */ 125 1.1 agc struct url *fetchMakeURL(const char *, const char *, int, 126 1.1 agc const char *, const char *, const char *); 127 1.1 agc struct url *fetchParseURL(const char *); 128 1.1 agc void fetchFreeURL(struct url *); 129 1.1 agc 130 1.1 agc __END_DECLS 131 1.1 agc 132 1.1 agc /* Authentication */ 133 1.1 agc typedef int (*auth_t)(struct url *); 134 1.1 agc extern auth_t fetchAuthMethod; 135 1.1 agc 136 1.1 agc /* Last error code */ 137 1.1 agc extern int fetchLastErrCode; 138 1.1 agc #define MAXERRSTRING 256 139 1.1 agc extern char fetchLastErrString[MAXERRSTRING]; 140 1.1 agc 141 1.1 agc /* I/O timeout */ 142 1.1 agc extern int fetchTimeout; 143 1.1 agc 144 1.1 agc /* Restart interrupted syscalls */ 145 1.1 agc extern int fetchRestartCalls; 146 1.1 agc 147 1.1 agc /* Extra verbosity */ 148 1.1 agc extern int fetchDebug; 149 1.1 agc 150 1.1 agc #endif 151