xref: /minix3/external/bsd/fetch/dist/libfetch/fetch.h (revision 040ec64444222c3cf664253481b0af9434ab4a20)
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