xref: /freebsd/lib/libfetch/fetch.3 (revision 1a0a934547909744a6a2fa4cfd5b795ec6394f05)
14ca1ab94SDag-Erling Smørgrav.\" Copyright (c) 1998 Dag-Erling Co�dan Sm�rgrav
24ca1ab94SDag-Erling Smørgrav.\" All rights reserved.
34ca1ab94SDag-Erling Smørgrav.\"
44ca1ab94SDag-Erling Smørgrav.\" Redistribution and use in source and binary forms, with or without
54ca1ab94SDag-Erling Smørgrav.\" modification, are permitted provided that the following conditions
64ca1ab94SDag-Erling Smørgrav.\" are met:
74ca1ab94SDag-Erling Smørgrav.\" 1. Redistributions of source code must retain the above copyright
84ca1ab94SDag-Erling Smørgrav.\"    notice, this list of conditions and the following disclaimer.
94ca1ab94SDag-Erling Smørgrav.\" 2. Redistributions in binary form must reproduce the above copyright
104ca1ab94SDag-Erling Smørgrav.\"    notice, this list of conditions and the following disclaimer in the
114ca1ab94SDag-Erling Smørgrav.\"    documentation and/or other materials provided with the distribution.
124ca1ab94SDag-Erling Smørgrav.\"
134ca1ab94SDag-Erling Smørgrav.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
144ca1ab94SDag-Erling Smørgrav.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
154ca1ab94SDag-Erling Smørgrav.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
164ca1ab94SDag-Erling Smørgrav.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
174ca1ab94SDag-Erling Smørgrav.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
184ca1ab94SDag-Erling Smørgrav.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
194ca1ab94SDag-Erling Smørgrav.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
204ca1ab94SDag-Erling Smørgrav.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
214ca1ab94SDag-Erling Smørgrav.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
224ca1ab94SDag-Erling Smørgrav.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
234ca1ab94SDag-Erling Smørgrav.\" SUCH DAMAGE.
244ca1ab94SDag-Erling Smørgrav.\"
257f3dea24SPeter Wemm.\" $FreeBSD$
264ca1ab94SDag-Erling Smørgrav.\"
274ca1ab94SDag-Erling Smørgrav.Dd July 1, 1998
284ca1ab94SDag-Erling Smørgrav.Dt FETCH 3
294ca1ab94SDag-Erling Smørgrav.Os
304ca1ab94SDag-Erling Smørgrav.Sh NAME
319a964d6aSDag-Erling Smørgrav.Nm fetchMakeURL ,
3260245e42SDag-Erling Smørgrav.Nm fetchParseURL ,
3360245e42SDag-Erling Smørgrav.Nm fetchFreeURL ,
341a5faa10SDag-Erling Smørgrav.Nm fetchXGetURL ,
354ca1ab94SDag-Erling Smørgrav.Nm fetchGetURL ,
364ca1ab94SDag-Erling Smørgrav.Nm fetchPutURL ,
37d8acd8dcSDag-Erling Smørgrav.Nm fetchStatURL ,
38ce71b736SDag-Erling Smørgrav.Nm fetchListURL ,
391a5faa10SDag-Erling Smørgrav.Nm fetchXGet ,
40db5f8cebSDag-Erling Smørgrav.Nm fetchGet ,
41db5f8cebSDag-Erling Smørgrav.Nm fetchPut ,
42d8acd8dcSDag-Erling Smørgrav.Nm fetchStat ,
43ce71b736SDag-Erling Smørgrav.Nm fetchList ,
441a5faa10SDag-Erling Smørgrav.Nm fetchXGetFile ,
454ca1ab94SDag-Erling Smørgrav.Nm fetchGetFile ,
464ca1ab94SDag-Erling Smørgrav.Nm fetchPutFile ,
47d8acd8dcSDag-Erling Smørgrav.Nm fetchStatFile ,
48ce71b736SDag-Erling Smørgrav.Nm fetchListFile ,
491a5faa10SDag-Erling Smørgrav.Nm fetchXGetHTTP ,
504ca1ab94SDag-Erling Smørgrav.Nm fetchGetHTTP ,
514ca1ab94SDag-Erling Smørgrav.Nm fetchPutHTTP ,
52d8acd8dcSDag-Erling Smørgrav.Nm fetchStatHTTP ,
53ce71b736SDag-Erling Smørgrav.Nm fetchListHTTP ,
541a5faa10SDag-Erling Smørgrav.Nm fetchXGetFTP ,
554ca1ab94SDag-Erling Smørgrav.Nm fetchGetFTP ,
5615efcd39SAlexey Zelkin.Nm fetchPutFTP ,
5715efcd39SAlexey Zelkin.Nm fetchStatFTP ,
5815efcd39SAlexey Zelkin.Nm fetchListFTP
5915efcd39SAlexey Zelkin.Nd file transfer functions
6015efcd39SAlexey Zelkin.Sh LIBRARY
6115efcd39SAlexey Zelkin.Lb libfetch
624ca1ab94SDag-Erling Smørgrav.Sh SYNOPSIS
6332eef9aeSRuslan Ermilov.In sys/param.h
6432eef9aeSRuslan Ermilov.In stdio.h
6532eef9aeSRuslan Ermilov.In fetch.h
6660245e42SDag-Erling Smørgrav.Ft struct url *
6738c7e4a6SArchie Cobbs.Fn fetchMakeURL "const char *scheme" "const char *host" "int port" "const char *doc" "const char *user" "const char *pwd"
689a964d6aSDag-Erling Smørgrav.Ft struct url *
6938c7e4a6SArchie Cobbs.Fn fetchParseURL "const char *URL"
7060245e42SDag-Erling Smørgrav.Ft void
7138c7e4a6SArchie Cobbs.Fn fetchFreeURL "struct url *u"
72db5f8cebSDag-Erling Smørgrav.Ft FILE *
7338c7e4a6SArchie Cobbs.Fn fetchXGetURL "const char *URL" "struct url_stat *us" "const char *flags"
741a5faa10SDag-Erling Smørgrav.Ft FILE *
7538c7e4a6SArchie Cobbs.Fn fetchGetURL "const char *URL" "const char *flags"
76db5f8cebSDag-Erling Smørgrav.Ft FILE *
7738c7e4a6SArchie Cobbs.Fn fetchPutURL "const char *URL" "const char *flags"
78d8acd8dcSDag-Erling Smørgrav.Ft int
7938c7e4a6SArchie Cobbs.Fn fetchStatURL "const char *URL" "struct url_stat *us" "const char *flags"
80ce71b736SDag-Erling Smørgrav.Ft struct url_ent *
8138c7e4a6SArchie Cobbs.Fn fetchListURL "const char *URL" "const char *flags"
824ca1ab94SDag-Erling Smørgrav.Ft FILE *
8338c7e4a6SArchie Cobbs.Fn fetchXGet "struct url *u" "struct url_stat *us" "const char *flags"
841a5faa10SDag-Erling Smørgrav.Ft FILE *
8538c7e4a6SArchie Cobbs.Fn fetchGet "struct url *u" "const char *flags"
86db5f8cebSDag-Erling Smørgrav.Ft FILE *
8738c7e4a6SArchie Cobbs.Fn fetchPut "struct url *u" "const char *flags"
88d8acd8dcSDag-Erling Smørgrav.Ft int
8938c7e4a6SArchie Cobbs.Fn fetchStat "struct url *u" "struct url_stat *us" "const char *flags"
90ce71b736SDag-Erling Smørgrav.Ft struct url_ent *
9138c7e4a6SArchie Cobbs.Fn fetchList "struct url *u" "const char *flags"
92db5f8cebSDag-Erling Smørgrav.Ft FILE *
9338c7e4a6SArchie Cobbs.Fn fetchXGetFile "struct url *u" "struct url_stat *us" "const char *flags"
941a5faa10SDag-Erling Smørgrav.Ft FILE *
9538c7e4a6SArchie Cobbs.Fn fetchGetFile "struct url *u" "const char *flags"
964ca1ab94SDag-Erling Smørgrav.Ft FILE *
9738c7e4a6SArchie Cobbs.Fn fetchPutFile "struct url *u" "const char *flags"
98d8acd8dcSDag-Erling Smørgrav.Ft int
9938c7e4a6SArchie Cobbs.Fn fetchStatFile "struct url *u" "struct url_stat *us" "const char *flags"
100ce71b736SDag-Erling Smørgrav.Ft struct url_ent *
10138c7e4a6SArchie Cobbs.Fn fetchListFile "struct url *u" "const char *flags"
1024ca1ab94SDag-Erling Smørgrav.Ft FILE *
10338c7e4a6SArchie Cobbs.Fn fetchXGetHTTP "struct url *u" "struct url_stat *us" "const char *flags"
1041a5faa10SDag-Erling Smørgrav.Ft FILE *
10538c7e4a6SArchie Cobbs.Fn fetchGetHTTP "struct url *u" "const char *flags"
1064ca1ab94SDag-Erling Smørgrav.Ft FILE *
10738c7e4a6SArchie Cobbs.Fn fetchPutHTTP "struct url *u" "const char *flags"
108d8acd8dcSDag-Erling Smørgrav.Ft int
10938c7e4a6SArchie Cobbs.Fn fetchStatHTTP "struct url *u" "struct url_stat *us" "const char *flags"
110ce71b736SDag-Erling Smørgrav.Ft struct url_ent *
11138c7e4a6SArchie Cobbs.Fn fetchListHTTP "struct url *u" "const char *flags"
1124ca1ab94SDag-Erling Smørgrav.Ft FILE *
11338c7e4a6SArchie Cobbs.Fn fetchXGetFTP "struct url *u" "struct url_stat *us" "const char *flags"
1141a5faa10SDag-Erling Smørgrav.Ft FILE *
11538c7e4a6SArchie Cobbs.Fn fetchGetFTP "struct url *u" "const char *flags"
1164ca1ab94SDag-Erling Smørgrav.Ft FILE *
11738c7e4a6SArchie Cobbs.Fn fetchPutFTP "struct url *u" "const char *flags"
118d8acd8dcSDag-Erling Smørgrav.Ft int
11938c7e4a6SArchie Cobbs.Fn fetchStatFTP "struct url *u" "struct url_stat *us" "const char *flags"
120ce71b736SDag-Erling Smørgrav.Ft struct url_ent *
12138c7e4a6SArchie Cobbs.Fn fetchListFTP "struct url *u" "const char *flags"
1224ca1ab94SDag-Erling Smørgrav.Sh DESCRIPTION
1234ca1ab94SDag-Erling SmørgravThese functions implement a high-level library for retrieving and
1244ca1ab94SDag-Erling Smørgravuploading files using Uniform Resource Locators (URLs).
1254ca1ab94SDag-Erling Smørgrav.Pp
12660245e42SDag-Erling Smørgrav.Fn fetchParseURL
12760245e42SDag-Erling Smørgravtakes a URL in the form of a null-terminated string and splits it into
12860245e42SDag-Erling Smørgravits components function according to the Common Internet Scheme Syntax
1299364c532SDag-Erling Smørgravdetailed in RFC1738.
1309364c532SDag-Erling SmørgravA regular expression which produces this syntax is:
13160245e42SDag-Erling Smørgrav.Bd -literal
13260245e42SDag-Erling Smørgrav    <scheme>:(//(<user>(:<pwd>)?@)?<host>(:<port>)?)?/(<document>)?
13360245e42SDag-Erling Smørgrav.Ed
13460245e42SDag-Erling Smørgrav.Pp
1351df2031cSDag-Erling SmørgravIf the URL does not seem to begin with a scheme name, the following
1361df2031cSDag-Erling Smørgravsyntax is assumed:
1371df2031cSDag-Erling Smørgrav.Bd -literal
1381df2031cSDag-Erling Smørgrav    ((<user>(:<pwd>)?@)?<host>(:<port>)?)?/(<document>)?
1391df2031cSDag-Erling Smørgrav.Ed
1401df2031cSDag-Erling Smørgrav.Pp
14160245e42SDag-Erling SmørgravNote that some components of the URL are not necessarily relevant to
14260245e42SDag-Erling Smørgravall URL schemes.
1431df2031cSDag-Erling SmørgravFor instance, the file scheme only needs the <scheme> and <document>
1441df2031cSDag-Erling Smørgravcomponents.
14560245e42SDag-Erling Smørgrav.Pp
1469a964d6aSDag-Erling Smørgrav.Fn fetchMakeURL
1479a964d6aSDag-Erling Smørgravand
14840ac2845SDag-Erling Smørgrav.Fn fetchParseURL
1499a964d6aSDag-Erling Smørgravreturn a pointer to a
150a7e16a9dSRuslan Ermilov.Vt url
15140ac2845SDag-Erling Smørgravstructure, which is defined as follows in
152fe08efe6SRuslan Ermilov.In fetch.h :
15340ac2845SDag-Erling Smørgrav.Bd -literal
15440ac2845SDag-Erling Smørgrav#define URL_SCHEMELEN 16
15540ac2845SDag-Erling Smørgrav#define URL_USERLEN 256
15640ac2845SDag-Erling Smørgrav#define URL_PWDLEN 256
15740ac2845SDag-Erling Smørgrav
15840ac2845SDag-Erling Smørgravstruct url {
15940ac2845SDag-Erling Smørgrav    char	 scheme[URL_SCHEMELEN+1];
16040ac2845SDag-Erling Smørgrav    char	 user[URL_USERLEN+1];
16140ac2845SDag-Erling Smørgrav    char	 pwd[URL_PWDLEN+1];
16240ac2845SDag-Erling Smørgrav    char	 host[MAXHOSTNAMELEN+1];
16340ac2845SDag-Erling Smørgrav    int		 port;
16440ac2845SDag-Erling Smørgrav    char	*doc;
16540ac2845SDag-Erling Smørgrav    off_t	 offset;
16640ac2845SDag-Erling Smørgrav    size_t	 length;
16740ac2845SDag-Erling Smørgrav};
16840ac2845SDag-Erling Smørgrav.Ed
16940ac2845SDag-Erling Smørgrav.Pp
17060245e42SDag-Erling SmørgravThe pointer returned by
1719a964d6aSDag-Erling Smørgrav.Fn fetchMakeURL
1729a964d6aSDag-Erling Smørgravor
17360245e42SDag-Erling Smørgrav.Fn fetchParseURL
17460245e42SDag-Erling Smørgravshould be freed using
17560245e42SDag-Erling Smørgrav.Fn fetchFreeURL .
17660245e42SDag-Erling Smørgrav.Pp
1771a5faa10SDag-Erling Smørgrav.Fn fetchXGetURL ,
1781a5faa10SDag-Erling Smørgrav.Fn fetchGetURL ,
179db5f8cebSDag-Erling Smørgravand
180db5f8cebSDag-Erling Smørgrav.Fn fetchPutURL
181db5f8cebSDag-Erling Smørgravconstitute the recommended interface to the
182db5f8cebSDag-Erling Smørgrav.Nm fetch
183c6ff3a1bSSheldon Hearnlibrary.
184c6ff3a1bSSheldon HearnThey examine the URL passed to them to determine the transfer
185db5f8cebSDag-Erling Smørgravmethod, and call the appropriate lower-level functions to perform the
186c6ff3a1bSSheldon Hearnactual transfer.
1871a5faa10SDag-Erling Smørgrav.Fn fetchXGetURL
1881a5faa10SDag-Erling Smørgravalso returns the remote document's metadata in the
189a7e16a9dSRuslan Ermilov.Vt url_stat
1901a5faa10SDag-Erling Smørgravstructure pointed to by the
1911a5faa10SDag-Erling Smørgrav.Fa us
1921a5faa10SDag-Erling Smørgravargument.
1931a5faa10SDag-Erling Smørgrav.Pp
194c6ff3a1bSSheldon HearnThe
195db5f8cebSDag-Erling Smørgrav.Fa flags
196c6ff3a1bSSheldon Hearnargument is a string of characters which specify transfer options.
197c6ff3a1bSSheldon HearnThe
198db5f8cebSDag-Erling Smørgravmeaning of the individual flags is scheme-dependent, and is detailed
199db5f8cebSDag-Erling Smørgravin the appropriate section below.
200db5f8cebSDag-Erling Smørgrav.Pp
201d8acd8dcSDag-Erling Smørgrav.Fn fetchStatURL
202d8acd8dcSDag-Erling Smørgravattempts to obtain the requested document's metadata and fill in the
2035e75e35cSDima Dorfmanstructure pointed to by its second argument.
204c6ff3a1bSSheldon HearnThe
205a7e16a9dSRuslan Ermilov.Vt url_stat
206d8acd8dcSDag-Erling Smørgravstructure is defined as follows in
207fe08efe6SRuslan Ermilov.In fetch.h :
208d8acd8dcSDag-Erling Smørgrav.Bd -literal
209d8acd8dcSDag-Erling Smørgravstruct url_stat {
210d8acd8dcSDag-Erling Smørgrav    off_t	 size;
2115aea254fSDag-Erling Smørgrav    time_t	 atime;
2125aea254fSDag-Erling Smørgrav    time_t	 mtime;
213d8acd8dcSDag-Erling Smørgrav};
214d8acd8dcSDag-Erling Smørgrav.Ed
215d8acd8dcSDag-Erling Smørgrav.Pp
21640ac2845SDag-Erling SmørgravIf the size could not be obtained from the server, the
21740ac2845SDag-Erling Smørgrav.Fa size
21840ac2845SDag-Erling Smørgravfield is set to -1.
21940ac2845SDag-Erling SmørgravIf the modification time could not be obtained from the server, the
22040ac2845SDag-Erling Smørgrav.Fa mtime
22140ac2845SDag-Erling Smørgravfield is set to the epoch.
22240ac2845SDag-Erling SmørgravIf the access time could not be obtained from the server, the
22340ac2845SDag-Erling Smørgrav.Fa atime
22440ac2845SDag-Erling Smørgravfield is set to the modification time.
22540ac2845SDag-Erling Smørgrav.Pp
226ce71b736SDag-Erling Smørgrav.Fn fetchListURL
227ce71b736SDag-Erling Smørgravattempts to list the contents of the directory pointed to by the URL
228c6ff3a1bSSheldon Hearnprovided.
229c6ff3a1bSSheldon HearnIf successful, it returns a malloced array of
230a7e16a9dSRuslan Ermilov.Vt url_ent
231c6ff3a1bSSheldon Hearnstructures.
232c6ff3a1bSSheldon HearnThe
233a7e16a9dSRuslan Ermilov.Vt url_ent
234ce71b736SDag-Erling Smørgravstructure is defined as follows in
235fe08efe6SRuslan Ermilov.In fetch.h :
236ce71b736SDag-Erling Smørgrav.Bd -literal
237ce71b736SDag-Erling Smørgravstruct url_ent {
238ce71b736SDag-Erling Smørgrav    char         name[MAXPATHLEN];
239ce71b736SDag-Erling Smørgrav    struct url_stat stat;
240ce71b736SDag-Erling Smørgrav};
241ce71b736SDag-Erling Smørgrav.Ed
242ce71b736SDag-Erling Smørgrav.Pp
243ce71b736SDag-Erling SmørgravThe list is terminated by an entry with an empty name.
244ce71b736SDag-Erling Smørgrav.Pp
245ce71b736SDag-Erling SmørgravThe pointer returned by
246ce71b736SDag-Erling Smørgrav.Fn fetchListURL
247ce71b736SDag-Erling Smørgravshould be freed using
248ce71b736SDag-Erling Smørgrav.Fn free .
249ce71b736SDag-Erling Smørgrav.Pp
2501a5faa10SDag-Erling Smørgrav.Fn fetchXGet ,
251d8acd8dcSDag-Erling Smørgrav.Fn fetchGet ,
252db5f8cebSDag-Erling Smørgrav.Fn fetchPut
2534ca1ab94SDag-Erling Smørgravand
254d8acd8dcSDag-Erling Smørgrav.Fn fetchStat
255d8acd8dcSDag-Erling Smørgravare similar to
2561a5faa10SDag-Erling Smørgrav.Fn fetchXGetURL ,
257d8acd8dcSDag-Erling Smørgrav.Fn fetchGetURL ,
258d8acd8dcSDag-Erling Smørgrav.Fn fetchPutURL
259d8acd8dcSDag-Erling Smørgravand
260d8acd8dcSDag-Erling Smørgrav.Fn fetchStatURL ,
261db5f8cebSDag-Erling Smørgravexcept that they expect a pre-parsed URL in the form of a pointer to
262d8acd8dcSDag-Erling Smørgrava
263a7e16a9dSRuslan Ermilov.Vt struct url
264d8acd8dcSDag-Erling Smørgravrather than a string.
2654ca1ab94SDag-Erling Smørgrav.Pp
2664ca1ab94SDag-Erling SmørgravAll of the
2671a5faa10SDag-Erling Smørgrav.Fn fetchXGetXXX ,
2684ca1ab94SDag-Erling Smørgrav.Fn fetchGetXXX
2694ca1ab94SDag-Erling Smørgravand
2704ca1ab94SDag-Erling Smørgrav.Fn fetchPutXXX
2714ca1ab94SDag-Erling Smørgravfunctions return a pointer to a stream which can be used to read or
272c6ff3a1bSSheldon Hearnwrite data from or to the requested document, respectively.
273c6ff3a1bSSheldon HearnNote that
2744ca1ab94SDag-Erling Smørgravalthough the implementation details of the individual access methods
2754ca1ab94SDag-Erling Smørgravvary, it can generally be assumed that a stream returned by one of the
2761a5faa10SDag-Erling Smørgrav.Fn fetchXGetXXX
2771a5faa10SDag-Erling Smørgravor
2784ca1ab94SDag-Erling Smørgrav.Fn fetchGetXXX
2794ca1ab94SDag-Erling Smørgravfunctions is read-only, and that a stream returned by one of the
2804ca1ab94SDag-Erling Smørgrav.Fn fetchPutXXX
2814ca1ab94SDag-Erling Smørgravfunctions is write-only.
2824ca1ab94SDag-Erling Smørgrav.Sh FILE SCHEME
2831a5faa10SDag-Erling Smørgrav.Fn fetchXGetFile ,
2844ca1ab94SDag-Erling Smørgrav.Fn fetchGetFile
2854ca1ab94SDag-Erling Smørgravand
2864ca1ab94SDag-Erling Smørgrav.Fn fetchPutFile
2874ca1ab94SDag-Erling Smørgravprovide access to documents which are files in a locally mounted file
288c6ff3a1bSSheldon Hearnsystem.
289c6ff3a1bSSheldon HearnOnly the <document> component of the URL is used.
2904ca1ab94SDag-Erling Smørgrav.Pp
2911a5faa10SDag-Erling Smørgrav.Fn fetchXGetFile
2921a5faa10SDag-Erling Smørgravand
2934ca1ab94SDag-Erling Smørgrav.Fn fetchGetFile
2941a5faa10SDag-Erling Smørgravdo not accept any flags.
2954ca1ab94SDag-Erling Smørgrav.Pp
2964ca1ab94SDag-Erling Smørgrav.Fn fetchPutFile
2974ca1ab94SDag-Erling Smørgravaccepts the
298a7e16a9dSRuslan Ermilov.Ql a
299c6ff3a1bSSheldon Hearn(append to file) flag.
300c6ff3a1bSSheldon HearnIf that flag is specified, the data written to
3014ca1ab94SDag-Erling Smørgravthe stream returned by
3024ca1ab94SDag-Erling Smørgrav.Fn fetchPutFile
3034ca1ab94SDag-Erling Smørgravwill be appended to the previous contents of the file, instead of
3044ca1ab94SDag-Erling Smørgravreplacing them.
3054ca1ab94SDag-Erling Smørgrav.Sh FTP SCHEME
3061a5faa10SDag-Erling Smørgrav.Fn fetchXGetFTP ,
3074ca1ab94SDag-Erling Smørgrav.Fn fetchGetFTP
3084ca1ab94SDag-Erling Smørgravand
3094ca1ab94SDag-Erling Smørgrav.Fn fetchPutFTP
3104ca1ab94SDag-Erling Smørgravimplement the FTP protocol as described in RFC959.
3114ca1ab94SDag-Erling Smørgrav.Pp
3124ca1ab94SDag-Erling SmørgravIf the
313a7e16a9dSRuslan Ermilov.Ql p
3144ca1ab94SDag-Erling Smørgrav(passive) flag is specified, a passive (rather than active) connection
3154ca1ab94SDag-Erling Smørgravwill be attempted.
3164ca1ab94SDag-Erling Smørgrav.Pp
317f5f109a0SDag-Erling SmørgravIf the
318a7e16a9dSRuslan Ermilov.Ql l
319d5f175ceSDag-Erling Smørgrav(low) flag is specified, data sockets will be allocated in the low (or
320d5c24aa8SBill Fennerdefault) port range instead of the high port range (see
321f5f109a0SDag-Erling Smørgrav.Xr ip 4 ) .
322f5f109a0SDag-Erling Smørgrav.Pp
323f5f109a0SDag-Erling SmørgravIf the
324a7e16a9dSRuslan Ermilov.Ql d
325f5f109a0SDag-Erling Smørgrav(direct) flag is specified,
3261a5faa10SDag-Erling Smørgrav.Fn fetchXGetFTP ,
327f5f109a0SDag-Erling Smørgrav.Fn fetchGetFTP
328f5f109a0SDag-Erling Smørgravand
329f5f109a0SDag-Erling Smørgrav.Fn fetchPutFTP
330f5f109a0SDag-Erling Smørgravwill use a direct connection even if a proxy server is defined.
331f5f109a0SDag-Erling Smørgrav.Pp
3324ca1ab94SDag-Erling SmørgravIf no user name or password is given, the
3334ca1ab94SDag-Erling Smørgrav.Nm fetch
334c86c6f74SDag-Erling Smørgravlibrary will attempt an anonymous login, with user name "anonymous"
335c86c6f74SDag-Erling Smørgravand password "anonymous@<hostname>".
3364ca1ab94SDag-Erling Smørgrav.Sh HTTP SCHEME
3374ca1ab94SDag-Erling SmørgravThe
3381a5faa10SDag-Erling Smørgrav.Fn fetchXGetHTTP ,
3394ca1ab94SDag-Erling Smørgrav.Fn fetchGetHTTP
3404ca1ab94SDag-Erling Smørgravand
3414ca1ab94SDag-Erling Smørgrav.Fn fetchPutHTTP
342c6ff3a1bSSheldon Hearnfunctions implement the HTTP/1.1 protocol.
343c6ff3a1bSSheldon HearnWith a little luck, there's
34406b533d3SDag-Erling Smørgraveven a chance that they comply with RFC2616 and RFC2617.
3454ca1ab94SDag-Erling Smørgrav.Pp
346f5f109a0SDag-Erling SmørgravIf the
347a7e16a9dSRuslan Ermilov.Ql d
348f5f109a0SDag-Erling Smørgrav(direct) flag is specified,
3491a5faa10SDag-Erling Smørgrav.Fn fetchXGetHTTP ,
350f5f109a0SDag-Erling Smørgrav.Fn fetchGetHTTP
351f5f109a0SDag-Erling Smørgravand
352f5f109a0SDag-Erling Smørgrav.Fn fetchPutHTTP
353f5f109a0SDag-Erling Smørgravwill use a direct connection even if a proxy server is defined.
354f5f109a0SDag-Erling Smørgrav.Pp
3554ca1ab94SDag-Erling SmørgravSince there seems to be no good way of implementing the HTTP PUT
3564ca1ab94SDag-Erling Smørgravmethod in a manner consistent with the rest of the
3574ca1ab94SDag-Erling Smørgrav.Nm fetch
3584ca1ab94SDag-Erling Smørgravlibrary,
3594ca1ab94SDag-Erling Smørgrav.Fn fetchPutHTTP
3604ca1ab94SDag-Erling Smørgravis currently unimplemented.
36106b533d3SDag-Erling Smørgrav.Sh AUTHENTICATION
36206b533d3SDag-Erling SmørgravApart from setting the appropriate environment variables and
36306b533d3SDag-Erling Smørgravspecifying the user name and password in the URL or the
364a7e16a9dSRuslan Ermilov.Vt struct url ,
36506b533d3SDag-Erling Smørgravthe calling program has the option of defining an authentication
36606b533d3SDag-Erling Smørgravfunction with the following prototype:
36706b533d3SDag-Erling Smørgrav.Pp
36806b533d3SDag-Erling Smørgrav.Ft int
36906b533d3SDag-Erling Smørgrav.Fn myAuthMethod "struct url *u"
37006b533d3SDag-Erling Smørgrav.Pp
37106b533d3SDag-Erling SmørgravThe callback function should fill in the
37206b533d3SDag-Erling Smørgrav.Fa user
37306b533d3SDag-Erling Smørgravand
37406b533d3SDag-Erling Smørgrav.Fa pwd
37506b533d3SDag-Erling Smørgravfields in the provided
376a7e16a9dSRuslan Ermilov.Vt struct url
37706b533d3SDag-Erling Smørgravand return 0 on success, or any other value to indicate failure.
37806b533d3SDag-Erling Smørgrav.Pp
37906b533d3SDag-Erling SmørgravTo register the authentication callback, simply set
380a7e16a9dSRuslan Ermilov.Va fetchAuthMethod
38106b533d3SDag-Erling Smørgravto point at it.
38206b533d3SDag-Erling SmørgravThe callback will be used whenever a site requires authentication and
38306b533d3SDag-Erling Smørgravthe appropriate environment variables aren't set.
38406b533d3SDag-Erling Smørgrav.Pp
38506b533d3SDag-Erling SmørgravThis interface is experimental and may be subject to change.
3864ca1ab94SDag-Erling Smørgrav.Sh RETURN VALUES
3874ca1ab94SDag-Erling Smørgrav.Fn fetchParseURL
3884ca1ab94SDag-Erling Smørgravreturns a pointer to a
389a7e16a9dSRuslan Ermilov.Vt struct url
390c6ff3a1bSSheldon Hearncontaining the individual components of the URL.
391c6ff3a1bSSheldon HearnIf it is
3924ca1ab94SDag-Erling Smørgravunable to allocate memory, or the URL is syntactically incorrect,
3934ca1ab94SDag-Erling Smørgrav.Fn fetchParseURL
3944ca1ab94SDag-Erling Smørgravreturns a NULL pointer.
3954ca1ab94SDag-Erling Smørgrav.Pp
396d8acd8dcSDag-Erling SmørgravThe
397d8acd8dcSDag-Erling Smørgrav.Fn fetchStat
398d8acd8dcSDag-Erling Smørgravfunctions return 0 on success and -1 on failure.
399d8acd8dcSDag-Erling Smørgrav.Pp
4004ca1ab94SDag-Erling SmørgravAll other functions return a stream pointer which may be used to
401d8acd8dcSDag-Erling Smørgravaccess the requested document, or NULL if an error occurred.
402d8acd8dcSDag-Erling Smørgrav.Pp
403ba101983SDag-Erling SmørgravThe following error codes are defined in
404fe08efe6SRuslan Ermilov.In fetch.h :
40515efcd39SAlexey Zelkin.Bl -tag -width 18n
406d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_ABORT
407d8acd8dcSDag-Erling SmørgravOperation aborted
408d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_AUTH
409d8acd8dcSDag-Erling SmørgravAuthentication failed
410d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_DOWN
411d8acd8dcSDag-Erling SmørgravService unavailable
412d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_EXISTS
413d8acd8dcSDag-Erling SmørgravFile exists
414d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_FULL
415d8acd8dcSDag-Erling SmørgravFile system full
416d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_INFO
417d8acd8dcSDag-Erling SmørgravInformational response
418d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_MEMORY
419d8acd8dcSDag-Erling SmørgravInsufficient memory
420d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_MOVED
421d8acd8dcSDag-Erling SmørgravFile has moved
422d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_NETWORK
423d8acd8dcSDag-Erling SmørgravNetwork error
424d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_OK
425d8acd8dcSDag-Erling SmørgravNo error
426d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_PROTO
427d8acd8dcSDag-Erling SmørgravProtocol error
428d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_RESOLV
429d8acd8dcSDag-Erling SmørgravResolver error
430d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_SERVER
431d8acd8dcSDag-Erling SmørgravServer error
432d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_TEMP
433d8acd8dcSDag-Erling SmørgravTemporary error
434d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_TIMEOUT
435d8acd8dcSDag-Erling SmørgravOperation timed out
436d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_UNAVAIL
437d8acd8dcSDag-Erling SmørgravFile is not available
438d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_UNKNOWN
439d8acd8dcSDag-Erling SmørgravUnknown error
440d8acd8dcSDag-Erling Smørgrav.It Bq Er FETCH_URL
441d8acd8dcSDag-Erling SmørgravInvalid URL
442d8acd8dcSDag-Erling Smørgrav.El
443d8acd8dcSDag-Erling Smørgrav.Pp
444d8acd8dcSDag-Erling SmørgravThe accompanying error message includes a protocol-specific error code
4451a0a9345SRuslan Ermilovand message, e.g.\& "File is not available (404 Not Found)"
4464ca1ab94SDag-Erling Smørgrav.Sh ENVIRONMENT
4473a5146d9SRuslan Ermilov.Bl -tag -width ".Ev FETCH_BIND_ADDRESS"
448c42cb9d9SDag-Erling Smørgrav.It Ev FETCH_BIND_ADDRESS
449c42cb9d9SDag-Erling SmørgravSpecifies a hostname or IP address to which sockets used for outgoing
450c42cb9d9SDag-Erling Smørgravconnections will be bound.
451659e0d5eSDag-Erling Smørgrav.It Ev FTP_LOGIN
452659e0d5eSDag-Erling SmørgravDefault FTP login if none was provided in the URL.
45391c51046SDag-Erling Smørgrav.It Ev FTP_PASSIVE_MODE
4546c81eb52SDag-Erling SmørgravIf set to anything but
4556c81eb52SDag-Erling Smørgrav.Ql no ,
4566c81eb52SDag-Erling Smørgravforces the FTP code to use passive mode.
45791c51046SDag-Erling Smørgrav.It Ev FTP_PASSWORD
45891c51046SDag-Erling SmørgravDefault FTP password if the remote server requests one and none was
45991c51046SDag-Erling Smørgravprovided in the URL.
460bc2a5e68SDag-Erling Smørgrav.It Ev FTP_PROXY
4611df2031cSDag-Erling SmørgravURL of the proxy to use for FTP requests.
4621df2031cSDag-Erling SmørgravThe document part is ignored.
4631df2031cSDag-Erling SmørgravFTP and HTTP proxies are supported; if no scheme is specified, FTP is
4641df2031cSDag-Erling Smørgravassumed.
4651df2031cSDag-Erling SmørgravIf the proxy is an FTP proxy,
466e0a9ca38SDag-Erling Smørgrav.Nm libfetch
467e0a9ca38SDag-Erling Smørgravwill send
468e0a9ca38SDag-Erling Smørgrav.Ql user@host
469e0a9ca38SDag-Erling Smørgravas user name to the proxy, where
470e0a9ca38SDag-Erling Smørgrav.Ql user
471e0a9ca38SDag-Erling Smørgravis the real user name, and
472e0a9ca38SDag-Erling Smørgrav.Ql host
473e0a9ca38SDag-Erling Smørgravis the name of the FTP server.
47489d755e1SDag-Erling Smørgrav.Pp
4752e83f638SDag-Erling SmørgravIf this variable is set to an empty string, no proxy will be used for
4762e83f638SDag-Erling SmørgravFTP requests, even if the
4772e83f638SDag-Erling Smørgrav.Ev HTTP_PROXY
4782e83f638SDag-Erling Smørgravvariable is set.
4794cee73c8SDag-Erling Smørgrav.It Ev ftp_proxy
4804cee73c8SDag-Erling SmørgravSame as
4814cee73c8SDag-Erling Smørgrav.Ev FTP_PROXY ,
4824cee73c8SDag-Erling Smørgravfor compatibility.
48398f5573fSDag-Erling Smørgrav.It Ev HTTP_AUTH
48489d755e1SDag-Erling SmørgravSpecifies HTTP authorization parameters as a colon-separated list of
48589d755e1SDag-Erling Smørgravitems.
48698f5573fSDag-Erling SmørgravThe first and second item are the authorization scheme and realm
48798f5573fSDag-Erling Smørgravrespectively; further items are scheme-dependent.
48898f5573fSDag-Erling SmørgravCurrently, only basic authorization is supported.
48989d755e1SDag-Erling Smørgrav.Pp
49098f5573fSDag-Erling SmørgravBasic authorization requires two parameters: the user name and
49198f5573fSDag-Erling Smørgravpassword, in that order.
49289d755e1SDag-Erling Smørgrav.Pp
49389d755e1SDag-Erling SmørgravThis variable is only used if the server requires authorization and
49489d755e1SDag-Erling Smørgravno user name or password was specified in the URL.
495bc2a5e68SDag-Erling Smørgrav.It Ev HTTP_PROXY
4961df2031cSDag-Erling SmørgravURL of the proxy to use for HTTP requests.
4971df2031cSDag-Erling SmørgravThe document part is ignored.
4981df2031cSDag-Erling SmørgravOnly HTTP proxies are supported for HTTP requests.
499bc2a5e68SDag-Erling SmørgravIf no port number is specified, the default is 3128.
50089d755e1SDag-Erling Smørgrav.Pp
5011df2031cSDag-Erling SmørgravNote that this proxy will also be used for FTP documents, unless the
502e0a9ca38SDag-Erling Smørgrav.Ev FTP_PROXY
503e0a9ca38SDag-Erling Smørgravvariable is set.
5044cee73c8SDag-Erling Smørgrav.It Ev http_proxy
5054cee73c8SDag-Erling SmørgravSame as
5064cee73c8SDag-Erling Smørgrav.Ev HTTP_PROXY ,
5074cee73c8SDag-Erling Smørgravfor compatibility.
508bc2a5e68SDag-Erling Smørgrav.It Ev HTTP_PROXY_AUTH
50998f5573fSDag-Erling SmørgravSpecifies authorization parameters for the HTTP proxy in the same
510e0a9ca38SDag-Erling Smørgravformat as the
511e0a9ca38SDag-Erling Smørgrav.Ev HTTP_AUTH
512e0a9ca38SDag-Erling Smørgravvariable.
51389d755e1SDag-Erling Smørgrav.Pp
5141df2031cSDag-Erling SmørgravThis variable is used if and only if connected to an HTTP proxy, and
5151df2031cSDag-Erling Smørgravis ignored if a user and/or a password were specified in the proxy
5161df2031cSDag-Erling SmørgravURL.
517d5216a4fSDag-Erling Smørgrav.It Ev HTTP_REFERER
51857bd0fc6SJens SchweikhardtSpecifies the referrer URL to use for HTTP requests.
519d5216a4fSDag-Erling SmørgravIf set to
520d5216a4fSDag-Erling Smørgrav.Dq auto ,
52157bd0fc6SJens Schweikhardtthe document URL will be used as referrer URL.
5226a0cf64bSDag-Erling Smørgrav.It Ev HTTP_USER_AGENT
5236a0cf64bSDag-Erling SmørgravSpecifies the User-Agent string to use for HTTP requests.
5246a0cf64bSDag-Erling SmørgravThis can be useful when working with HTTP origin or proxy servers that
525a7e16a9dSRuslan Ermilovdifferentiate between user agents.
5260ab4a51eSDag-Erling Smørgrav.It Ev NETRC
5270ab4a51eSDag-Erling SmørgravSpecifies a file to use instead of
5280ab4a51eSDag-Erling Smørgrav.Pa ~/.netrc
5290ab4a51eSDag-Erling Smørgravto look up login names and passwords for FTP sites.
5300ab4a51eSDag-Erling SmørgravSee
5310ab4a51eSDag-Erling Smørgrav.Xr ftp 1
5320ab4a51eSDag-Erling Smørgravfor a description of the file format.
5330ab4a51eSDag-Erling SmørgravThis feature is experimental.
534bc2a5e68SDag-Erling Smørgrav.El
5350315901cSTom Rhodes.Sh EXAMPLES
5360315901cSTom RhodesTo access a proxy server on
5370315901cSTom Rhodes.Pa proxy.example.com
5380315901cSTom Rhodesport 8080, set the
5390315901cSTom Rhodes.Ev HTTP_PROXY
5400315901cSTom Rhodesenvironment variable in a manner similar to this:
5410315901cSTom Rhodes.Pp
5420315901cSTom Rhodes.Dl HTTP_PROXY=http://proxy.example.com:8080
5430315901cSTom Rhodes.Pp
5440315901cSTom RhodesIf the proxy server requires authentication, there are
5450315901cSTom Rhodestwo options available for passing the authentication data.
5460315901cSTom RhodesThe first method is by using the proxy URL:
5470315901cSTom Rhodes.Pp
5480315901cSTom Rhodes.Dl HTTP_PROXY=http://<user>:<pwd>@proxy.example.com:8080
5490315901cSTom Rhodes.Pp
5500315901cSTom RhodesThe second method is by using the
5510315901cSTom Rhodes.Ev HTTP_PROXY_AUTH
5520315901cSTom Rhodesenvironment variable:
5530315901cSTom Rhodes.Bd -literal -offset indent
5540315901cSTom RhodesHTTP_PROXY=http://proxy.example.com:8080
5550315901cSTom RhodesHTTP_PROXY_AUTH=basic:*:<user>:<pwd>
5560315901cSTom Rhodes.Ed
5574ca1ab94SDag-Erling Smørgrav.Sh SEE ALSO
5584ca1ab94SDag-Erling Smørgrav.Xr fetch 1 ,
559f5f109a0SDag-Erling Smørgrav.Xr ftpio 3 ,
560c86c6f74SDag-Erling Smørgrav.Xr ip 4
561c86c6f74SDag-Erling Smørgrav.Rs
562c86c6f74SDag-Erling Smørgrav.%A J. Postel
563c86c6f74SDag-Erling Smørgrav.%A J. K. Reynolds
564c86c6f74SDag-Erling Smørgrav.%D October 1985
565c86c6f74SDag-Erling Smørgrav.%B File Transfer Protocol
566c86c6f74SDag-Erling Smørgrav.%O RFC959
567c86c6f74SDag-Erling Smørgrav.Re
568c86c6f74SDag-Erling Smørgrav.Rs
569c86c6f74SDag-Erling Smørgrav.%A P. Deutsch
570c86c6f74SDag-Erling Smørgrav.%A A. Emtage
571c86c6f74SDag-Erling Smørgrav.%A A. Marine.
572c86c6f74SDag-Erling Smørgrav.%D May 1994
573c86c6f74SDag-Erling Smørgrav.%T How to Use Anonymous FTP
574c86c6f74SDag-Erling Smørgrav.%O RFC1635
57598849115SRuslan Ermilov.Re
5764ca1ab94SDag-Erling Smørgrav.Rs
5770f5fcaa3SSheldon Hearn.%A T. Berners-Lee
5780f5fcaa3SSheldon Hearn.%A L. Masinter
5790f5fcaa3SSheldon Hearn.%A M. McCahill
5804ca1ab94SDag-Erling Smørgrav.%D December 1994
5814ca1ab94SDag-Erling Smørgrav.%T Uniform Resource Locators (URL)
5824ca1ab94SDag-Erling Smørgrav.%O RFC1738
5834ca1ab94SDag-Erling Smørgrav.Re
5844ca1ab94SDag-Erling Smørgrav.Rs
5850f5fcaa3SSheldon Hearn.%A R. Fielding
5860f5fcaa3SSheldon Hearn.%A J. Gettys
5870f5fcaa3SSheldon Hearn.%A J. Mogul
5880f5fcaa3SSheldon Hearn.%A H. Frystyk
58906b533d3SDag-Erling Smørgrav.%A L. Masinter
59006b533d3SDag-Erling Smørgrav.%A P. Leach
5910f5fcaa3SSheldon Hearn.%A T. Berners-Lee
592d5c24aa8SBill Fenner.%D January 1999
5934ca1ab94SDag-Erling Smørgrav.%B Hypertext Transfer Protocol -- HTTP/1.1
59406b533d3SDag-Erling Smørgrav.%O RFC2616
59506b533d3SDag-Erling Smørgrav.Re
59606b533d3SDag-Erling Smørgrav.Rs
59706b533d3SDag-Erling Smørgrav.%A J. Franks
59806b533d3SDag-Erling Smørgrav.%A P. Hallam-Baker
59906b533d3SDag-Erling Smørgrav.%A J. Hostetler
60006b533d3SDag-Erling Smørgrav.%A S. Lawrence
60106b533d3SDag-Erling Smørgrav.%A P. Leach
60206b533d3SDag-Erling Smørgrav.%A A. Luotonen
60306b533d3SDag-Erling Smørgrav.%A L. Stewart
60406b533d3SDag-Erling Smørgrav.%D June 1999
60506b533d3SDag-Erling Smørgrav.%B HTTP Authentication: Basic and Digest Access Authentication
60606b533d3SDag-Erling Smørgrav.%O RFC2617
6074ca1ab94SDag-Erling Smørgrav.Re
6084ca1ab94SDag-Erling Smørgrav.Sh HISTORY
6094ca1ab94SDag-Erling SmørgravThe
6104ca1ab94SDag-Erling Smørgrav.Nm fetch
6114ca1ab94SDag-Erling Smørgravlibrary first appeared in
6124ca1ab94SDag-Erling Smørgrav.Fx 3.0 .
6134ca1ab94SDag-Erling Smørgrav.Sh AUTHORS
614725ab628SRuslan Ermilov.An -nosplit
6154ca1ab94SDag-Erling SmørgravThe
6164ca1ab94SDag-Erling Smørgrav.Nm fetch
6174ca1ab94SDag-Erling Smørgravlibrary was mostly written by
61809e06539SDag-Erling Smørgrav.An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org
6194ca1ab94SDag-Erling Smørgravwith numerous suggestions from
620d8acd8dcSDag-Erling Smørgrav.An Jordan K. Hubbard Aq jkh@FreeBSD.org ,
621d8acd8dcSDag-Erling Smørgrav.An Eugene Skepner Aq eu@qub.com
622b5c508fbSRuslan Ermilovand other
623b5c508fbSRuslan Ermilov.Fx
624b5c508fbSRuslan Ermilovdevelopers.
625d8acd8dcSDag-Erling SmørgravIt replaces the older
6264ca1ab94SDag-Erling Smørgrav.Nm ftpio
627d8acd8dcSDag-Erling Smørgravlibrary written by
628d8acd8dcSDag-Erling Smørgrav.An Poul-Henning Kamp Aq pkh@FreeBSD.org
629d8acd8dcSDag-Erling Smørgravand
6304ca1ab94SDag-Erling Smørgrav.An Jordan K. Hubbard Aq jkh@FreeBSD.org .
6314ca1ab94SDag-Erling Smørgrav.Pp
6324ca1ab94SDag-Erling SmørgravThis manual page was written by
63309e06539SDag-Erling Smørgrav.An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org .
6344ca1ab94SDag-Erling Smørgrav.Sh BUGS
635c6ff3a1bSSheldon HearnSome parts of the library are not yet implemented.
636c6ff3a1bSSheldon HearnThe most notable
637d8acd8dcSDag-Erling Smørgravexamples of this are
638d8acd8dcSDag-Erling Smørgrav.Fn fetchPutHTTP ,
639ce71b736SDag-Erling Smørgrav.Fn fetchListHTTP ,
64015efcd39SAlexey Zelkin.Fn fetchListFTP
641d8acd8dcSDag-Erling Smørgravand FTP proxy support.
642d8acd8dcSDag-Erling Smørgrav.Pp
643db5f8cebSDag-Erling SmørgravThere's no way to select a proxy at run-time other than setting the
644db5f8cebSDag-Erling Smørgrav.Ev HTTP_PROXY
645db5f8cebSDag-Erling Smørgravor
646db5f8cebSDag-Erling Smørgrav.Ev FTP_PROXY
647c6ff3a1bSSheldon Hearnenvironment variables as appropriate.
64898f5573fSDag-Erling Smørgrav.Pp
649842a95ccSDag-Erling Smørgrav.Nm libfetch
65098f5573fSDag-Erling Smørgravdoes not understand or obey 305 (Use Proxy) replies.
65198f5573fSDag-Erling Smørgrav.Pp
652842a95ccSDag-Erling SmørgravError numbers are unique only within a certain context; the error
653842a95ccSDag-Erling Smørgravcodes used for FTP and HTTP overlap, as do those used for resolver and
654c6ff3a1bSSheldon Hearnsystem errors.
655c6ff3a1bSSheldon HearnFor instance, error code 202 means "Command not
656842a95ccSDag-Erling Smørgravimplemented, superfluous at this site" in an FTP context and
657842a95ccSDag-Erling Smørgrav"Accepted" in an HTTP context.
658842a95ccSDag-Erling Smørgrav.Pp
659f5f109a0SDag-Erling Smørgrav.Fn fetchStatFTP
660f5f109a0SDag-Erling Smørgravdoes not check that the result of an MDTM command is a valid date.
661f5f109a0SDag-Erling Smørgrav.Pp
6621a5faa10SDag-Erling SmørgravThe man page is incomplete, poorly written and produces badly
6631a5faa10SDag-Erling Smørgravformatted text.
664db5f8cebSDag-Erling Smørgrav.Pp
665ba101983SDag-Erling SmørgravThe error reporting mechanism is unsatisfactory.
666ba101983SDag-Erling Smørgrav.Pp
667ba101983SDag-Erling SmørgravSome parts of the code are not fully reentrant.
668