fetch.h revision 67041
137535Sdes/*-
237535Sdes * Copyright (c) 1998 Dag-Erling Co�dan Sm�rgrav
337535Sdes * All rights reserved.
437535Sdes *
537535Sdes * Redistribution and use in source and binary forms, with or without
637535Sdes * modification, are permitted provided that the following conditions
737535Sdes * are met:
837535Sdes * 1. Redistributions of source code must retain the above copyright
937535Sdes *    notice, this list of conditions and the following disclaimer
1037535Sdes *    in this position and unchanged.
1137535Sdes * 2. Redistributions in binary form must reproduce the above copyright
1237535Sdes *    notice, this list of conditions and the following disclaimer in the
1337535Sdes *    documentation and/or other materials provided with the distribution.
1437535Sdes * 3. The name of the author may not be used to endorse or promote products
1537535Sdes *    derived from this software without specific prior written permission
1637535Sdes *
1737535Sdes * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1837535Sdes * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1937535Sdes * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2037535Sdes * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2137535Sdes * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2237535Sdes * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2337535Sdes * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2437535Sdes * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2537535Sdes * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2637535Sdes * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2737535Sdes *
2850476Speter * $FreeBSD: head/lib/libfetch/fetch.h 67041 2000-10-12 21:59:22Z des $
2937535Sdes */
3037535Sdes
3137535Sdes#ifndef _FETCH_H_INCLUDED
3237535Sdes#define _FETCH_H_INCLUDED
3337535Sdes
3460924Sdes#define _LIBFETCH_VER "libfetch/2.0"
3540975Sdes
3637535Sdes#define URL_SCHEMELEN 16
3737535Sdes#define URL_USERLEN 256
3837535Sdes#define URL_PWDLEN 256
3937535Sdes
4040975Sdesstruct url {
4140975Sdes    char	 scheme[URL_SCHEMELEN+1];
4240975Sdes    char	 user[URL_USERLEN+1];
4340975Sdes    char	 pwd[URL_PWDLEN+1];
4440975Sdes    char	 host[MAXHOSTNAMELEN+1];
4540975Sdes    int		 port;
4660376Sdes    char	*doc;
4760376Sdes    off_t	 offset;
4860376Sdes    size_t	 length;
4937535Sdes};
5037535Sdes
5140975Sdesstruct url_stat {
5240975Sdes    off_t	 size;
5341862Sdes    time_t	 atime;
5441862Sdes    time_t	 mtime;
5540975Sdes};
5637535Sdes
5741989Sdesstruct url_ent {
5841989Sdes    char	 name[MAXPATHLEN];
5941989Sdes    struct url_stat stat;
6041989Sdes};
6141989Sdes
6267041Sdes/* Recognized schemes */
6367041Sdes#define SCHEME_FTP	"ftp"
6467041Sdes#define SCHEME_HTTP	"http"
6567041Sdes#define SCHEME_FILE	"file"
6667041Sdes
6760924Sdes/* Error codes */
6860924Sdes#define	FETCH_ABORT	 1
6960924Sdes#define	FETCH_AUTH	 2
7060924Sdes#define	FETCH_DOWN	 3
7160924Sdes#define	FETCH_EXISTS	 4
7260924Sdes#define	FETCH_FULL	 5
7360924Sdes#define	FETCH_INFO	 6
7460924Sdes#define	FETCH_MEMORY	 7
7560924Sdes#define	FETCH_MOVED	 8
7660924Sdes#define	FETCH_NETWORK	 9
7760924Sdes#define	FETCH_OK	10
7860924Sdes#define	FETCH_PROTO	11
7960924Sdes#define	FETCH_RESOLV	12
8060924Sdes#define	FETCH_SERVER	13
8160924Sdes#define	FETCH_TEMP	14
8260924Sdes#define	FETCH_TIMEOUT	15
8360924Sdes#define	FETCH_UNAVAIL	16
8460924Sdes#define	FETCH_UNKNOWN	17
8560924Sdes#define	FETCH_URL	18
8660924Sdes#define	FETCH_VERBOSE	19
8760924Sdes
8837535Sdes/* FILE-specific functions */
8963340SdesFILE		*fetchXGetFile(struct url *, struct url_stat *, char *);
9040975SdesFILE		*fetchGetFile(struct url *, char *);
9140975SdesFILE		*fetchPutFile(struct url *, char *);
9240975Sdesint		 fetchStatFile(struct url *, struct url_stat *, char *);
9341989Sdesstruct url_ent	*fetchListFile(struct url *, char *);
9437535Sdes
9537535Sdes/* HTTP-specific functions */
9663340SdesFILE		*fetchXGetHTTP(struct url *, struct url_stat *, char *);
9740975SdesFILE		*fetchGetHTTP(struct url *, char *);
9840975SdesFILE		*fetchPutHTTP(struct url *, char *);
9940975Sdesint		 fetchStatHTTP(struct url *, struct url_stat *, char *);
10041989Sdesstruct url_ent	*fetchListHTTP(struct url *, char *);
10137535Sdes
10237535Sdes/* FTP-specific functions */
10363340SdesFILE		*fetchXGetFTP(struct url *, struct url_stat *, char *);
10440975SdesFILE		*fetchGetFTP(struct url *, char *);
10540975SdesFILE		*fetchPutFTP(struct url *, char *);
10640975Sdesint		 fetchStatFTP(struct url *, struct url_stat *, char *);
10741989Sdesstruct url_ent	*fetchListFTP(struct url *, char *);
10837535Sdes
10937535Sdes/* Generic functions */
11063340SdesFILE		*fetchXGetURL(char *, struct url_stat *, char *);
11140975SdesFILE		*fetchGetURL(char *, char *);
11240975SdesFILE		*fetchPutURL(char *, char *);
11340975Sdesint		 fetchStatURL(char *, struct url_stat *, char *);
11441989Sdesstruct url_ent	*fetchListURL(char *, char *);
11563340SdesFILE		*fetchXGet(struct url *, struct url_stat *, char *);
11640975SdesFILE		*fetchGet(struct url *, char *);
11740975SdesFILE		*fetchPut(struct url *, char *);
11840975Sdesint		 fetchStat(struct url *, struct url_stat *, char *);
11941989Sdesstruct url_ent	*fetchList(struct url *, char *);
12037535Sdes
12160376Sdes/* URL parsing */
12260927Sdesstruct url	*fetchMakeURL(char *, char *, int, char *, char *, char *);
12360376Sdesstruct url	*fetchParseURL(char *);
12460376Sdesvoid		 fetchFreeURL(struct url *);
12560376Sdes
12641862Sdes/* Last error code */
12741862Sdesextern int	 fetchLastErrCode;
12860924Sdes#define MAXERRSTRING 256
12960924Sdesextern char	 fetchLastErrString[MAXERRSTRING];
13055557Sdesextern int	 fetchTimeout;
13163335Sdesextern int	 fetchRestartCalls;
13241862Sdes
13337535Sdes#endif
134