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