14ca1ab94SDag-Erling Smørgrav /*- 24ca1ab94SDag-Erling Smørgrav * Copyright (c) 1998 Dag-Erling Co�dan Sm�rgrav 34ca1ab94SDag-Erling Smørgrav * All rights reserved. 44ca1ab94SDag-Erling Smørgrav * 54ca1ab94SDag-Erling Smørgrav * Redistribution and use in source and binary forms, with or without 64ca1ab94SDag-Erling Smørgrav * modification, are permitted provided that the following conditions 74ca1ab94SDag-Erling Smørgrav * are met: 84ca1ab94SDag-Erling Smørgrav * 1. Redistributions of source code must retain the above copyright 94ca1ab94SDag-Erling Smørgrav * notice, this list of conditions and the following disclaimer 104ca1ab94SDag-Erling Smørgrav * in this position and unchanged. 114ca1ab94SDag-Erling Smørgrav * 2. Redistributions in binary form must reproduce the above copyright 124ca1ab94SDag-Erling Smørgrav * notice, this list of conditions and the following disclaimer in the 134ca1ab94SDag-Erling Smørgrav * documentation and/or other materials provided with the distribution. 144ca1ab94SDag-Erling Smørgrav * 3. The name of the author may not be used to endorse or promote products 154ca1ab94SDag-Erling Smørgrav * derived from this software without specific prior written permission 164ca1ab94SDag-Erling Smørgrav * 174ca1ab94SDag-Erling Smørgrav * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 184ca1ab94SDag-Erling Smørgrav * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 194ca1ab94SDag-Erling Smørgrav * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 204ca1ab94SDag-Erling Smørgrav * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 214ca1ab94SDag-Erling Smørgrav * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 224ca1ab94SDag-Erling Smørgrav * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 234ca1ab94SDag-Erling Smørgrav * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 244ca1ab94SDag-Erling Smørgrav * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 254ca1ab94SDag-Erling Smørgrav * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 264ca1ab94SDag-Erling Smørgrav * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 274ca1ab94SDag-Erling Smørgrav * 287f3dea24SPeter Wemm * $FreeBSD$ 294ca1ab94SDag-Erling Smørgrav */ 304ca1ab94SDag-Erling Smørgrav 314ca1ab94SDag-Erling Smørgrav #ifndef _FETCH_H_INCLUDED 324ca1ab94SDag-Erling Smørgrav #define _FETCH_H_INCLUDED 334ca1ab94SDag-Erling Smørgrav 34ba101983SDag-Erling Smørgrav #define _LIBFETCH_VER "libfetch/2.0" 354ca1ab94SDag-Erling Smørgrav 364ca1ab94SDag-Erling Smørgrav #define URL_SCHEMELEN 16 374ca1ab94SDag-Erling Smørgrav #define URL_USERLEN 256 384ca1ab94SDag-Erling Smørgrav #define URL_PWDLEN 256 394ca1ab94SDag-Erling Smørgrav 40d8acd8dcSDag-Erling Smørgrav struct url { 414ca1ab94SDag-Erling Smørgrav char scheme[URL_SCHEMELEN+1]; 424ca1ab94SDag-Erling Smørgrav char user[URL_USERLEN+1]; 434ca1ab94SDag-Erling Smørgrav char pwd[URL_PWDLEN+1]; 444ca1ab94SDag-Erling Smørgrav char host[MAXHOSTNAMELEN+1]; 454ca1ab94SDag-Erling Smørgrav int port; 4660245e42SDag-Erling Smørgrav char *doc; 4760245e42SDag-Erling Smørgrav off_t offset; 4860245e42SDag-Erling Smørgrav size_t length; 494ca1ab94SDag-Erling Smørgrav }; 504ca1ab94SDag-Erling Smørgrav 51d8acd8dcSDag-Erling Smørgrav struct url_stat { 52d8acd8dcSDag-Erling Smørgrav off_t size; 530fba3a00SDag-Erling Smørgrav time_t atime; 540fba3a00SDag-Erling Smørgrav time_t mtime; 55d8acd8dcSDag-Erling Smørgrav }; 564ca1ab94SDag-Erling Smørgrav 57ce71b736SDag-Erling Smørgrav struct url_ent { 58ce71b736SDag-Erling Smørgrav char name[MAXPATHLEN]; 59ce71b736SDag-Erling Smørgrav struct url_stat stat; 60ce71b736SDag-Erling Smørgrav }; 61ce71b736SDag-Erling Smørgrav 62be9e1d8aSDag-Erling Smørgrav /* Recognized schemes */ 63be9e1d8aSDag-Erling Smørgrav #define SCHEME_FTP "ftp" 64be9e1d8aSDag-Erling Smørgrav #define SCHEME_HTTP "http" 65be9e1d8aSDag-Erling Smørgrav #define SCHEME_FILE "file" 66be9e1d8aSDag-Erling Smørgrav 67ba101983SDag-Erling Smørgrav /* Error codes */ 68ba101983SDag-Erling Smørgrav #define FETCH_ABORT 1 69ba101983SDag-Erling Smørgrav #define FETCH_AUTH 2 70ba101983SDag-Erling Smørgrav #define FETCH_DOWN 3 71ba101983SDag-Erling Smørgrav #define FETCH_EXISTS 4 72ba101983SDag-Erling Smørgrav #define FETCH_FULL 5 73ba101983SDag-Erling Smørgrav #define FETCH_INFO 6 74ba101983SDag-Erling Smørgrav #define FETCH_MEMORY 7 75ba101983SDag-Erling Smørgrav #define FETCH_MOVED 8 76ba101983SDag-Erling Smørgrav #define FETCH_NETWORK 9 77ba101983SDag-Erling Smørgrav #define FETCH_OK 10 78ba101983SDag-Erling Smørgrav #define FETCH_PROTO 11 79ba101983SDag-Erling Smørgrav #define FETCH_RESOLV 12 80ba101983SDag-Erling Smørgrav #define FETCH_SERVER 13 81ba101983SDag-Erling Smørgrav #define FETCH_TEMP 14 82ba101983SDag-Erling Smørgrav #define FETCH_TIMEOUT 15 83ba101983SDag-Erling Smørgrav #define FETCH_UNAVAIL 16 84ba101983SDag-Erling Smørgrav #define FETCH_UNKNOWN 17 85ba101983SDag-Erling Smørgrav #define FETCH_URL 18 86ba101983SDag-Erling Smørgrav #define FETCH_VERBOSE 19 87ba101983SDag-Erling Smørgrav 884ca1ab94SDag-Erling Smørgrav /* FILE-specific functions */ 891a5faa10SDag-Erling Smørgrav FILE *fetchXGetFile(struct url *, struct url_stat *, char *); 90d8acd8dcSDag-Erling Smørgrav FILE *fetchGetFile(struct url *, char *); 91d8acd8dcSDag-Erling Smørgrav FILE *fetchPutFile(struct url *, char *); 92d8acd8dcSDag-Erling Smørgrav int fetchStatFile(struct url *, struct url_stat *, char *); 93ce71b736SDag-Erling Smørgrav struct url_ent *fetchListFile(struct url *, char *); 944ca1ab94SDag-Erling Smørgrav 954ca1ab94SDag-Erling Smørgrav /* HTTP-specific functions */ 961a5faa10SDag-Erling Smørgrav FILE *fetchXGetHTTP(struct url *, struct url_stat *, char *); 97d8acd8dcSDag-Erling Smørgrav FILE *fetchGetHTTP(struct url *, char *); 98d8acd8dcSDag-Erling Smørgrav FILE *fetchPutHTTP(struct url *, char *); 99d8acd8dcSDag-Erling Smørgrav int fetchStatHTTP(struct url *, struct url_stat *, char *); 100ce71b736SDag-Erling Smørgrav struct url_ent *fetchListHTTP(struct url *, char *); 1014ca1ab94SDag-Erling Smørgrav 1024ca1ab94SDag-Erling Smørgrav /* FTP-specific functions */ 1031a5faa10SDag-Erling Smørgrav FILE *fetchXGetFTP(struct url *, struct url_stat *, char *); 104d8acd8dcSDag-Erling Smørgrav FILE *fetchGetFTP(struct url *, char *); 105d8acd8dcSDag-Erling Smørgrav FILE *fetchPutFTP(struct url *, char *); 106d8acd8dcSDag-Erling Smørgrav int fetchStatFTP(struct url *, struct url_stat *, char *); 107ce71b736SDag-Erling Smørgrav struct url_ent *fetchListFTP(struct url *, char *); 1084ca1ab94SDag-Erling Smørgrav 1094ca1ab94SDag-Erling Smørgrav /* Generic functions */ 1101a5faa10SDag-Erling Smørgrav FILE *fetchXGetURL(char *, struct url_stat *, char *); 1114ca1ab94SDag-Erling Smørgrav FILE *fetchGetURL(char *, char *); 1124ca1ab94SDag-Erling Smørgrav FILE *fetchPutURL(char *, char *); 113d8acd8dcSDag-Erling Smørgrav int fetchStatURL(char *, struct url_stat *, char *); 114ce71b736SDag-Erling Smørgrav struct url_ent *fetchListURL(char *, char *); 1151a5faa10SDag-Erling Smørgrav FILE *fetchXGet(struct url *, struct url_stat *, char *); 116d8acd8dcSDag-Erling Smørgrav FILE *fetchGet(struct url *, char *); 117d8acd8dcSDag-Erling Smørgrav FILE *fetchPut(struct url *, char *); 118d8acd8dcSDag-Erling Smørgrav int fetchStat(struct url *, struct url_stat *, char *); 119ce71b736SDag-Erling Smørgrav struct url_ent *fetchList(struct url *, char *); 1204ca1ab94SDag-Erling Smørgrav 12160245e42SDag-Erling Smørgrav /* URL parsing */ 1229a964d6aSDag-Erling Smørgrav struct url *fetchMakeURL(char *, char *, int, char *, char *, char *); 12360245e42SDag-Erling Smørgrav struct url *fetchParseURL(char *); 12460245e42SDag-Erling Smørgrav void fetchFreeURL(struct url *); 12560245e42SDag-Erling Smørgrav 1260fba3a00SDag-Erling Smørgrav /* Last error code */ 1270fba3a00SDag-Erling Smørgrav extern int fetchLastErrCode; 128ba101983SDag-Erling Smørgrav #define MAXERRSTRING 256 129ba101983SDag-Erling Smørgrav extern char fetchLastErrString[MAXERRSTRING]; 130fc6e9e65SDag-Erling Smørgrav extern int fetchTimeout; 131d999dcacSDag-Erling Smørgrav extern int fetchRestartCalls; 1320fba3a00SDag-Erling Smørgrav 1334ca1ab94SDag-Erling Smørgrav #endif 134