fetch.h revision 268900
162765Smarkm/*-
262765Smarkm * Copyright (c) 1998-2004 Dag-Erling Sm��rgrav
362765Smarkm * All rights reserved.
462765Smarkm *
562765Smarkm * Redistribution and use in source and binary forms, with or without
662765Smarkm * modification, are permitted provided that the following conditions
762765Smarkm * are met:
862765Smarkm * 1. Redistributions of source code must retain the above copyright
962765Smarkm *    notice, this list of conditions and the following disclaimer
1062765Smarkm *    in this position and unchanged.
1162765Smarkm * 2. Redistributions in binary form must reproduce the above copyright
1262765Smarkm *    notice, this list of conditions and the following disclaimer in the
1362765Smarkm *    documentation and/or other materials provided with the distribution.
1462765Smarkm * 3. The name of the author may not be used to endorse or promote products
1562765Smarkm *    derived from this software without specific prior written permission
1662765Smarkm *
1762765Smarkm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1862765Smarkm * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1962765Smarkm * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2062765Smarkm * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2162765Smarkm * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2262765Smarkm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2362765Smarkm * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2462765Smarkm * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2562765Smarkm * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2662765Smarkm * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2762765Smarkm *
2862765Smarkm * $FreeBSD: stable/10/lib/libfetch/fetch.h 268900 2014-07-20 00:29:41Z bapt $
2962765Smarkm */
3062765Smarkm
3162765Smarkm#ifndef _FETCH_H_INCLUDED
3262765Smarkm#define _FETCH_H_INCLUDED
3365686Smarkm
3474914Sjhb#define _LIBFETCH_VER "libfetch/2.0"
3567365Sjhb
3667112Smarkm#define URL_SCHEMELEN 16
3770834Swollman#define URL_USERLEN 256
3874741Smarkm#define URL_PWDLEN 256
3962765Smarkm
4069168Smarkmstruct url {
4169168Smarkm	char		 scheme[URL_SCHEMELEN+1];
4269168Smarkm	char		 user[URL_USERLEN+1];
4374072Smarkm	char		 pwd[URL_PWDLEN+1];
4462765Smarkm	char		 host[MAXHOSTNAMELEN+1];
4567112Smarkm	int		 port;
4667112Smarkm	char		*doc;
4772667Smarkm	off_t		 offset;
4872667Smarkm	size_t		 length;
4972667Smarkm	time_t		 ims_time;
5063771Smarkm};
5169168Smarkm
5263771Smarkmstruct url_stat {
5369168Smarkm	off_t		 size;
5467112Smarkm	time_t		 atime;
5562765Smarkm	time_t		 mtime;
5662765Smarkm};
5762765Smarkm
5869168Smarkmstruct url_ent {
5962765Smarkm	char		 name[PATH_MAX];
6067112Smarkm	struct url_stat	 stat;
6167112Smarkm};
6262765Smarkm
6362765Smarkm/* Recognized schemes */
6462765Smarkm#define SCHEME_FTP	"ftp"
6562765Smarkm#define SCHEME_HTTP	"http"
6662765Smarkm#define SCHEME_HTTPS	"https"
6762765Smarkm#define SCHEME_FILE	"file"
6867112Smarkm
6967112Smarkm/* Error codes */
7062765Smarkm#define	FETCH_ABORT	 1
7162765Smarkm#define	FETCH_AUTH	 2
7263771Smarkm#define	FETCH_DOWN	 3
7363771Smarkm#define	FETCH_EXISTS	 4
7463771Smarkm#define	FETCH_FULL	 5
7563771Smarkm#define	FETCH_INFO	 6
7663771Smarkm#define	FETCH_MEMORY	 7
7762765Smarkm#define	FETCH_MOVED	 8
7863855Smarkm#define	FETCH_NETWORK	 9
7962765Smarkm#define	FETCH_OK	10
8069168Smarkm#define	FETCH_PROTO	11
8169168Smarkm#define	FETCH_RESOLV	12
8262765Smarkm#define	FETCH_SERVER	13
8365686Smarkm#define	FETCH_TEMP	14
8467112Smarkm#define	FETCH_TIMEOUT	15
8567112Smarkm#define	FETCH_UNAVAIL	16
8667112Smarkm#define	FETCH_UNKNOWN	17
8767112Smarkm#define	FETCH_URL	18
8867112Smarkm#define	FETCH_VERBOSE	19
8967112Smarkm
9067112Smarkm__BEGIN_DECLS
9167112Smarkm
9267112Smarkm/* FILE-specific functions */
9367112SmarkmFILE		*fetchXGetFile(struct url *, struct url_stat *, const char *);
9465686SmarkmFILE		*fetchGetFile(struct url *, const char *);
9567112SmarkmFILE		*fetchPutFile(struct url *, const char *);
9667112Smarkmint		 fetchStatFile(struct url *, struct url_stat *, const char *);
9765686Smarkmstruct url_ent	*fetchListFile(struct url *, const char *);
9867112Smarkm
9967112Smarkm/* HTTP-specific functions */
10067112SmarkmFILE		*fetchXGetHTTP(struct url *, struct url_stat *, const char *);
10167112SmarkmFILE		*fetchGetHTTP(struct url *, const char *);
10267112SmarkmFILE		*fetchPutHTTP(struct url *, const char *);
10369168Smarkmint		 fetchStatHTTP(struct url *, struct url_stat *, const char *);
10467112Smarkmstruct url_ent	*fetchListHTTP(struct url *, const char *);
10569168SmarkmFILE		*fetchReqHTTP(struct url *, const char *, const char *,
10669168Smarkm		    const char *, const char *);
10767112Smarkm
10867112Smarkm/* FTP-specific functions */
10967112SmarkmFILE		*fetchXGetFTP(struct url *, struct url_stat *, const char *);
11067112SmarkmFILE		*fetchGetFTP(struct url *, const char *);
11167112SmarkmFILE		*fetchPutFTP(struct url *, const char *);
11267112Smarkmint		 fetchStatFTP(struct url *, struct url_stat *, const char *);
11367112Smarkmstruct url_ent	*fetchListFTP(struct url *, const char *);
11467112Smarkm
11567112Smarkm/* Generic functions */
11665686SmarkmFILE		*fetchXGetURL(const char *, struct url_stat *, const char *);
11765686SmarkmFILE		*fetchGetURL(const char *, const char *);
11867112SmarkmFILE		*fetchPutURL(const char *, const char *);
11967112Smarkmint		 fetchStatURL(const char *, struct url_stat *, const char *);
12067112Smarkmstruct url_ent	*fetchListURL(const char *, const char *);
12167112SmarkmFILE		*fetchXGet(struct url *, struct url_stat *, const char *);
12267112SmarkmFILE		*fetchGet(struct url *, const char *);
12367112SmarkmFILE		*fetchPut(struct url *, const char *);
12465686Smarkmint		 fetchStat(struct url *, struct url_stat *, const char *);
12567112Smarkmstruct url_ent	*fetchList(struct url *, const char *);
12665686Smarkm
12767112Smarkm/* URL parsing */
12872200Sbmilekicstruct url	*fetchMakeURL(const char *, const char *, int,
12967112Smarkm		     const char *, const char *, const char *);
13067112Smarkmstruct url	*fetchParseURL(const char *);
13165686Smarkmvoid		 fetchFreeURL(struct url *);
132
133__END_DECLS
134
135/* Authentication */
136typedef int (*auth_t)(struct url *);
137extern auth_t		 fetchAuthMethod;
138
139/* Last error code */
140extern int		 fetchLastErrCode;
141#define MAXERRSTRING 256
142extern char		 fetchLastErrString[MAXERRSTRING];
143
144/* I/O timeout */
145extern int		 fetchTimeout;
146
147/* Restart interrupted syscalls */
148extern int		 fetchRestartCalls;
149
150/* Extra verbosity */
151extern int		 fetchDebug;
152
153#endif
154