fetch.h revision 69464
1108574Sjmallett/*-
2108574Sjmallett * Copyright (c) 1998 Dag-Erling Co�dan Sm�rgrav
3108574Sjmallett * All rights reserved.
4108574Sjmallett *
5108574Sjmallett * Redistribution and use in source and binary forms, with or without
6108574Sjmallett * modification, are permitted provided that the following conditions
7108574Sjmallett * are met:
8108574Sjmallett * 1. Redistributions of source code must retain the above copyright
9108574Sjmallett *    notice, this list of conditions and the following disclaimer
10108574Sjmallett *    in this position and unchanged.
11108574Sjmallett * 2. Redistributions in binary form must reproduce the above copyright
12108574Sjmallett *    notice, this list of conditions and the following disclaimer in the
13108574Sjmallett *    documentation and/or other materials provided with the distribution.
14108574Sjmallett * 3. The name of the author may not be used to endorse or promote products
15108574Sjmallett *    derived from this software without specific prior written permission
16108574Sjmallett *
17108574Sjmallett * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18108574Sjmallett * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19108574Sjmallett * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20108574Sjmallett * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21108574Sjmallett * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22108574Sjmallett * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23108574Sjmallett * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24108574Sjmallett * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25108574Sjmallett * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26108574Sjmallett * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27108574Sjmallett *
28108574Sjmallett * $FreeBSD: head/lib/libfetch/fetch.h 69464 2000-12-01 11:04:43Z des $
29108574Sjmallett */
30108574Sjmallett
31108574Sjmallett#ifndef _FETCH_H_INCLUDED
32108574Sjmallett#define _FETCH_H_INCLUDED
33108574Sjmallett
34181905Sed#define _LIBFETCH_VER "libfetch/2.0"
35206622Suqs
36108574Sjmallett#define URL_SCHEMELEN 16
37108574Sjmallett#define URL_USERLEN 256
38108574Sjmallett#define URL_PWDLEN 256
39108574Sjmallett
40181905Sedstruct url {
41108574Sjmallett    char	 scheme[URL_SCHEMELEN+1];
42108574Sjmallett    char	 user[URL_USERLEN+1];
43108574Sjmallett    char	 pwd[URL_PWDLEN+1];
44108574Sjmallett    char	 host[MAXHOSTNAMELEN+1];
45108574Sjmallett    int		 port;
46108574Sjmallett    char	*doc;
47108574Sjmallett    off_t	 offset;
48115631Sru    size_t	 length;
49108574Sjmallett};
50108574Sjmallett
51108574Sjmallettstruct url_stat {
52108574Sjmallett    off_t	 size;
53108574Sjmallett    time_t	 atime;
54108574Sjmallett    time_t	 mtime;
55108574Sjmallett};
56108574Sjmallett
57181905Sedstruct url_ent {
58108574Sjmallett    char	 name[MAXPATHLEN];
59181905Sed    struct url_stat stat;
60181905Sed};
61108574Sjmallett
62181905Sed/* Recognized schemes */
63108574Sjmallett#define SCHEME_FTP	"ftp"
64108574Sjmallett#define SCHEME_HTTP	"http"
65108574Sjmallett#define SCHEME_HTTPS	"https"
66108574Sjmallett#define SCHEME_FILE	"file"
67108574Sjmallett
68108574Sjmallett/* Error codes */
69115631Sru#define	FETCH_ABORT	 1
70108574Sjmallett#define	FETCH_AUTH	 2
71108574Sjmallett#define	FETCH_DOWN	 3
72108574Sjmallett#define	FETCH_EXISTS	 4
73108574Sjmallett#define	FETCH_FULL	 5
74115631Sru#define	FETCH_INFO	 6
75181905Sed#define	FETCH_MEMORY	 7
76108574Sjmallett#define	FETCH_MOVED	 8
77108574Sjmallett#define	FETCH_NETWORK	 9
78108574Sjmallett#define	FETCH_OK	10
79108574Sjmallett#define	FETCH_PROTO	11
80108574Sjmallett#define	FETCH_RESOLV	12
81115631Sru#define	FETCH_SERVER	13
82108574Sjmallett#define	FETCH_TEMP	14
83108574Sjmallett#define	FETCH_TIMEOUT	15
84181905Sed#define	FETCH_UNAVAIL	16
85108574Sjmallett#define	FETCH_UNKNOWN	17
86108574Sjmallett#define	FETCH_URL	18
87108574Sjmallett#define	FETCH_VERBOSE	19
88108574Sjmallett
89108574Sjmallett/* FILE-specific functions */
90108574SjmallettFILE		*fetchXGetFile(struct url *, struct url_stat *, char *);
91108574SjmallettFILE		*fetchGetFile(struct url *, char *);
92108574SjmallettFILE		*fetchPutFile(struct url *, char *);
93115631Sruint		 fetchStatFile(struct url *, struct url_stat *, char *);
94108574Sjmallettstruct url_ent	*fetchListFile(struct url *, char *);
95115631Sru
96108574Sjmallett/* HTTP-specific functions */
97108574SjmallettFILE		*fetchXGetHTTP(struct url *, struct url_stat *, char *);
98108574SjmallettFILE		*fetchGetHTTP(struct url *, char *);
99108574SjmallettFILE		*fetchPutHTTP(struct url *, char *);
100115631Sruint		 fetchStatHTTP(struct url *, struct url_stat *, char *);
101115631Srustruct url_ent	*fetchListHTTP(struct url *, char *);
102181905Sed
103108574Sjmallett/* FTP-specific functions */
104108574SjmallettFILE		*fetchXGetFTP(struct url *, struct url_stat *, char *);
105240412SemasteFILE		*fetchGetFTP(struct url *, char *);
106240412SemasteFILE		*fetchPutFTP(struct url *, char *);
107108574Sjmallettint		 fetchStatFTP(struct url *, struct url_stat *, char *);
108108574Sjmallettstruct url_ent	*fetchListFTP(struct url *, char *);
109108574Sjmallett
110108574Sjmallett/* Generic functions */
111108574SjmallettFILE		*fetchXGetURL(char *, struct url_stat *, char *);
112108574SjmallettFILE		*fetchGetURL(char *, char *);
113181905SedFILE		*fetchPutURL(char *, char *);
114181905Sedint		 fetchStatURL(char *, struct url_stat *, char *);
115181905Sedstruct url_ent	*fetchListURL(char *, char *);
116115631SruFILE		*fetchXGet(struct url *, struct url_stat *, char *);
117115631SruFILE		*fetchGet(struct url *, char *);
118108574SjmallettFILE		*fetchPut(struct url *, char *);
119108574Sjmallettint		 fetchStat(struct url *, struct url_stat *, char *);
120108574Sjmallettstruct url_ent	*fetchList(struct url *, char *);
121108574Sjmallett
122108574Sjmallett/* URL parsing */
123108574Sjmallettstruct url	*fetchMakeURL(char *, char *, int, char *, char *, char *);
124108574Sjmallettstruct url	*fetchParseURL(char *);
125108574Sjmallettvoid		 fetchFreeURL(struct url *);
126108574Sjmallett
127115631Sru/* Last error code */
128108574Sjmallettextern int	 fetchLastErrCode;
129108574Sjmallett#define MAXERRSTRING 256
130108574Sjmallettextern char	 fetchLastErrString[MAXERRSTRING];
131181905Sedextern int	 fetchTimeout;
132181905Sedextern int	 fetchRestartCalls;
133108574Sjmallett
134108574Sjmallett#endif
135108574Sjmallett