xref: /netbsd/external/bsd/fetch/dist/libfetch/fetch.h (revision 70160d70)
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