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