xref: /minix3/external/bsd/fetch/dist/libfetch/fetch.3 (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1040ec644SDavid van Moolenbroek.\"-
2040ec644SDavid van Moolenbroek.\" Copyright (c) 1998-2004 Dag-Erling Co�dan Sm�rgrav
3040ec644SDavid van Moolenbroek.\" Copyright (c) 2010 Joerg Sonnenberger <joerg@NetBSD.org>
4040ec644SDavid van Moolenbroek.\" All rights reserved.
5040ec644SDavid van Moolenbroek.\"
6040ec644SDavid van Moolenbroek.\" Redistribution and use in source and binary forms, with or without
7040ec644SDavid van Moolenbroek.\" modification, are permitted provided that the following conditions
8040ec644SDavid van Moolenbroek.\" are met:
9040ec644SDavid van Moolenbroek.\" 1. Redistributions of source code must retain the above copyright
10040ec644SDavid van Moolenbroek.\"    notice, this list of conditions and the following disclaimer.
11040ec644SDavid van Moolenbroek.\" 2. Redistributions in binary form must reproduce the above copyright
12040ec644SDavid van Moolenbroek.\"    notice, this list of conditions and the following disclaimer in the
13040ec644SDavid van Moolenbroek.\"    documentation and/or other materials provided with the distribution.
14040ec644SDavid van Moolenbroek.\"
15040ec644SDavid van Moolenbroek.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16040ec644SDavid van Moolenbroek.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17040ec644SDavid van Moolenbroek.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18040ec644SDavid van Moolenbroek.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19040ec644SDavid van Moolenbroek.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20040ec644SDavid van Moolenbroek.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21040ec644SDavid van Moolenbroek.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22040ec644SDavid van Moolenbroek.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23040ec644SDavid van Moolenbroek.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24040ec644SDavid van Moolenbroek.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25040ec644SDavid van Moolenbroek.\" SUCH DAMAGE.
26040ec644SDavid van Moolenbroek.\"
27040ec644SDavid van Moolenbroek.\" $FreeBSD: fetch.3,v 1.64 2007/12/18 11:03:26 des Exp $
28*0a6a1f1dSLionel Sambuc.\" $NetBSD: fetch.3,v 1.3 2014/03/18 18:20:36 riastradh Exp $
29040ec644SDavid van Moolenbroek.\"
30040ec644SDavid van Moolenbroek.Dd January 22, 2010
31040ec644SDavid van Moolenbroek.Dt FETCH 3
32040ec644SDavid van Moolenbroek.Os
33040ec644SDavid van Moolenbroek.Sh NAME
34040ec644SDavid van Moolenbroek.Nm fetchMakeURL ,
35040ec644SDavid van Moolenbroek.Nm fetchParseURL ,
36040ec644SDavid van Moolenbroek.Nm fetchCopyURL ,
37040ec644SDavid van Moolenbroek.Nm fetchFreeURL ,
38040ec644SDavid van Moolenbroek.Nm fetchXGetURL ,
39040ec644SDavid van Moolenbroek.Nm fetchGetURL ,
40040ec644SDavid van Moolenbroek.Nm fetchPutURL ,
41040ec644SDavid van Moolenbroek.Nm fetchStatURL ,
42040ec644SDavid van Moolenbroek.Nm fetchListURL ,
43040ec644SDavid van Moolenbroek.Nm fetchXGet ,
44040ec644SDavid van Moolenbroek.Nm fetchGet ,
45040ec644SDavid van Moolenbroek.Nm fetchPut ,
46040ec644SDavid van Moolenbroek.Nm fetchStat ,
47040ec644SDavid van Moolenbroek.Nm fetchList ,
48040ec644SDavid van Moolenbroek.Nm fetchXGetFile ,
49040ec644SDavid van Moolenbroek.Nm fetchGetFile ,
50040ec644SDavid van Moolenbroek.Nm fetchPutFile ,
51040ec644SDavid van Moolenbroek.Nm fetchStatFile ,
52040ec644SDavid van Moolenbroek.Nm fetchListFile ,
53040ec644SDavid van Moolenbroek.Nm fetchXGetHTTP ,
54040ec644SDavid van Moolenbroek.Nm fetchGetHTTP ,
55040ec644SDavid van Moolenbroek.Nm fetchPutHTTP ,
56040ec644SDavid van Moolenbroek.Nm fetchStatHTTP ,
57040ec644SDavid van Moolenbroek.Nm fetchListHTTP ,
58040ec644SDavid van Moolenbroek.Nm fetchXGetFTP ,
59040ec644SDavid van Moolenbroek.Nm fetchGetFTP ,
60040ec644SDavid van Moolenbroek.Nm fetchPutFTP ,
61040ec644SDavid van Moolenbroek.Nm fetchStatFTP ,
62040ec644SDavid van Moolenbroek.Nm fetchListFTP
63040ec644SDavid van Moolenbroek.Nm fetchInitURLList ,
64040ec644SDavid van Moolenbroek.Nm fetchFreeURLList ,
65040ec644SDavid van Moolenbroek.Nm fetchUnquotePath ,
66040ec644SDavid van Moolenbroek.Nm fetchUnquoteFilename ,
67040ec644SDavid van Moolenbroek.Nm fetchStringifyURL ,
68040ec644SDavid van Moolenbroek.Nm fetchConnectionCacheInit ,
69040ec644SDavid van Moolenbroek.Nm fetchConnectionCacheClose ,
70040ec644SDavid van Moolenbroek.Nm fetch
71040ec644SDavid van Moolenbroek.Nd file transfer functions
72040ec644SDavid van Moolenbroek.Sh LIBRARY
73040ec644SDavid van Moolenbroek.Lb libfetch
74040ec644SDavid van Moolenbroek.Sh SYNOPSIS
75040ec644SDavid van Moolenbroek.In stdio.h
76040ec644SDavid van Moolenbroek.In fetch.h
77040ec644SDavid van Moolenbroek.Ft struct url *
78040ec644SDavid van Moolenbroek.Fn fetchMakeURL "const char *scheme" "const char *host" "int port" "const char *doc" "const char *user" "const char *pwd"
79040ec644SDavid van Moolenbroek.Ft struct url *
80040ec644SDavid van Moolenbroek.Fn fetchParseURL "const char *URL"
81040ec644SDavid van Moolenbroek.Ft struct url *
82040ec644SDavid van Moolenbroek.Fn fetchCopyURL "const struct url *u"
83040ec644SDavid van Moolenbroek.Ft void
84040ec644SDavid van Moolenbroek.Fn fetchFreeURL "struct url *u"
85040ec644SDavid van Moolenbroek.Ft fetchIO *
86040ec644SDavid van Moolenbroek.Fn fetchXGetURL "const char *URL" "struct url_stat *us" "const char *flags"
87040ec644SDavid van Moolenbroek.Ft fetchIO *
88040ec644SDavid van Moolenbroek.Fn fetchGetURL "const char *URL" "const char *flags"
89040ec644SDavid van Moolenbroek.Ft fetchIO *
90040ec644SDavid van Moolenbroek.Fn fetchPutURL "const char *URL" "const char *flags"
91040ec644SDavid van Moolenbroek.Ft int
92040ec644SDavid van Moolenbroek.Fn fetchStatURL "const char *URL" "struct url_stat *us" "const char *flags"
93040ec644SDavid van Moolenbroek.Ft int
94040ec644SDavid van Moolenbroek.Fn fetchListURL "struct url_list *list" "const char *URL" "const char *flags"
95040ec644SDavid van Moolenbroek.Ft fetchIO *
96040ec644SDavid van Moolenbroek.Fn fetchXGet "struct url *u" "struct url_stat *us" "const char *flags"
97040ec644SDavid van Moolenbroek.Ft fetchIO *
98040ec644SDavid van Moolenbroek.Fn fetchGet "struct url *u" "const char *flags"
99040ec644SDavid van Moolenbroek.Ft fetchIO *
100040ec644SDavid van Moolenbroek.Fn fetchPut "struct url *u" "const char *flags"
101040ec644SDavid van Moolenbroek.Ft int
102040ec644SDavid van Moolenbroek.Fn fetchStat "struct url *u" "struct url_stat *us" "const char *flags"
103040ec644SDavid van Moolenbroek.Ft int
104040ec644SDavid van Moolenbroek.Fn fetchList "struct url_list *list" "struct url *u" "const char *flags"
105040ec644SDavid van Moolenbroek.Ft fetchIO *
106040ec644SDavid van Moolenbroek.Fn fetchXGetFile "struct url *u" "struct url_stat *us" "const char *flags"
107040ec644SDavid van Moolenbroek.Ft fetchIO *
108040ec644SDavid van Moolenbroek.Fn fetchGetFile "struct url *u" "const char *flags"
109040ec644SDavid van Moolenbroek.Ft fetchIO *
110040ec644SDavid van Moolenbroek.Fn fetchPutFile "struct url *u" "const char *flags"
111040ec644SDavid van Moolenbroek.Ft int
112040ec644SDavid van Moolenbroek.Fn fetchStatFile "struct url *u" "struct url_stat *us" "const char *flags"
113040ec644SDavid van Moolenbroek.Ft int
114040ec644SDavid van Moolenbroek.Fn fetchListFile "struct url_list *list" "struct url *u" "const char *flags"
115040ec644SDavid van Moolenbroek.Ft fetchIO *
116040ec644SDavid van Moolenbroek.Fn fetchXGetHTTP "struct url *u" "struct url_stat *us" "const char *flags"
117040ec644SDavid van Moolenbroek.Ft fetchIO *
118040ec644SDavid van Moolenbroek.Fn fetchGetHTTP "struct url *u" "const char *flags"
119040ec644SDavid van Moolenbroek.Ft fetchIO *
120040ec644SDavid van Moolenbroek.Fn fetchPutHTTP "struct url *u" "const char *flags"
121040ec644SDavid van Moolenbroek.Ft int
122040ec644SDavid van Moolenbroek.Fn fetchStatHTTP "struct url *u" "struct url_stat *us" "const char *flags"
123040ec644SDavid van Moolenbroek.Ft int
124040ec644SDavid van Moolenbroek.Fn fetchListHTTP "struct url_list *list" "struct url *u" "const char *flags"
125040ec644SDavid van Moolenbroek.Ft fetchIO *
126040ec644SDavid van Moolenbroek.Fn fetchXGetFTP "struct url *u" "struct url_stat *us" "const char *flags"
127040ec644SDavid van Moolenbroek.Ft fetchIO *
128040ec644SDavid van Moolenbroek.Fn fetchGetFTP "struct url *u" "const char *flags"
129040ec644SDavid van Moolenbroek.Ft fetchIO *
130040ec644SDavid van Moolenbroek.Fn fetchPutFTP "struct url *u" "const char *flags"
131040ec644SDavid van Moolenbroek.Ft int
132040ec644SDavid van Moolenbroek.Fn fetchStatFTP "struct url *u" "struct url_stat *us" "const char *flags"
133040ec644SDavid van Moolenbroek.Ft int
134040ec644SDavid van Moolenbroek.Fn fetchListFTP "struct url_list *list" "struct url *u" "const char *flags"
135040ec644SDavid van Moolenbroek.Ft void
136040ec644SDavid van Moolenbroek.Fn fetchInitURLList "struct url_list *ul"
137040ec644SDavid van Moolenbroek.Ft int
138040ec644SDavid van Moolenbroek.Fn fetchAppendURLList "struct url_list *dst" "const struct url_list *src"
139040ec644SDavid van Moolenbroek.Ft void
140040ec644SDavid van Moolenbroek.Fn fetchFreeURLList "struct url_list *ul"
141040ec644SDavid van Moolenbroek.Ft char *
142040ec644SDavid van Moolenbroek.Fn fetchUnquotePath "struct url *u"
143040ec644SDavid van Moolenbroek.Ft char *
144040ec644SDavid van Moolenbroek.Fn fetchUnquoteFilename "struct url *u"
145040ec644SDavid van Moolenbroek.Ft char *
146040ec644SDavid van Moolenbroek.Fn fetchStringifyURL "const struct url *u"
147040ec644SDavid van Moolenbroek.Ft void
148040ec644SDavid van Moolenbroek.Fn fetchConnectionCacheInit "int global" "int per_host"
149040ec644SDavid van Moolenbroek.Ft void
150040ec644SDavid van Moolenbroek.Fn fetchConnectionCacheClose "void"
151040ec644SDavid van Moolenbroek.Sh DESCRIPTION
152040ec644SDavid van MoolenbroekThese functions implement a high-level library for retrieving and
153040ec644SDavid van Moolenbroekuploading files using Uniform Resource Locators (URLs).
154040ec644SDavid van Moolenbroek.Pp
155040ec644SDavid van Moolenbroek.Fn fetchParseURL
156040ec644SDavid van Moolenbroektakes a URL in the form of a null-terminated string and splits it into
157040ec644SDavid van Moolenbroekits components function according to the Common Internet Scheme Syntax
158040ec644SDavid van Moolenbroekdetailed in RFC 1738.
159040ec644SDavid van MoolenbroekA regular expression which produces this syntax is:
160040ec644SDavid van Moolenbroek.Bd -literal -offset indent
161040ec644SDavid van Moolenbroek\*[Lt]scheme\*[Gt]:(//(\*[Lt]user\*[Gt](:\*[Lt]pwd\*[Gt])?@)?\*[Lt]host\*[Gt](:\*[Lt]port\*[Gt])?)?/(\*[Lt]document\*[Gt])?
162040ec644SDavid van Moolenbroek.Ed
163040ec644SDavid van Moolenbroek.Pp
164040ec644SDavid van MoolenbroekIf the URL does not seem to begin with a scheme name, it is assumed to be a local path.
165040ec644SDavid van MoolenbroekOnly absolute path names are accepted.
166040ec644SDavid van Moolenbroek.Pp
167040ec644SDavid van MoolenbroekNote that some components of the URL are not necessarily relevant to
168040ec644SDavid van Moolenbroekall URL schemes.
169040ec644SDavid van MoolenbroekFor instance, the file scheme only needs the
170040ec644SDavid van Moolenbroek.Aq scheme
171040ec644SDavid van Moolenbroekand
172040ec644SDavid van Moolenbroek.Aq document
173040ec644SDavid van Moolenbroekcomponents.
174040ec644SDavid van Moolenbroek.Fn fetchParseURL
175040ec644SDavid van Moolenbroekquotes any unsafe character in the URL automatically.
176040ec644SDavid van MoolenbroekThis is not done by
177040ec644SDavid van Moolenbroek.Fn fetchMakeURL .
178040ec644SDavid van Moolenbroek.Fn fetchCopyURL
179040ec644SDavid van Moolenbroekcopies an existing
180040ec644SDavid van Moolenbroek.Vt url
181040ec644SDavid van Moolenbroekstructure.
182040ec644SDavid van Moolenbroek.Pp
183040ec644SDavid van Moolenbroek.Fn fetchMakeURL ,
184040ec644SDavid van Moolenbroek.Fn fetchParseURL ,
185040ec644SDavid van Moolenbroekand
186040ec644SDavid van Moolenbroek.Fn fetchCopyURL
187040ec644SDavid van Moolenbroekreturn a pointer to a
188040ec644SDavid van Moolenbroek.Vt url
189040ec644SDavid van Moolenbroekstructure, which is defined as follows in
190040ec644SDavid van Moolenbroek.In fetch.h :
191040ec644SDavid van Moolenbroek.Bd -literal
192040ec644SDavid van Moolenbroek#define URL_SCHEMELEN 16
193040ec644SDavid van Moolenbroek#define URL_USERLEN 256
194040ec644SDavid van Moolenbroek#define URL_PWDLEN 256
195040ec644SDavid van Moolenbroek#define URL_HOSTLEN 255
196040ec644SDavid van Moolenbroek
197040ec644SDavid van Moolenbroekstruct url {
198040ec644SDavid van Moolenbroek    char	 scheme[URL_SCHEMELEN + 1];
199040ec644SDavid van Moolenbroek    char	 user[URL_USERLEN + 1];
200040ec644SDavid van Moolenbroek    char	 pwd[URL_PWDLEN + 1];
201040ec644SDavid van Moolenbroek    char	 host[URL_HOSTLEN + 1];
202040ec644SDavid van Moolenbroek    int		 port;
203040ec644SDavid van Moolenbroek    char	*doc;
204040ec644SDavid van Moolenbroek    off_t	 offset;
205040ec644SDavid van Moolenbroek    size_t	 length;
206040ec644SDavid van Moolenbroek    time_t	 last_modified;
207040ec644SDavid van Moolenbroek};
208040ec644SDavid van Moolenbroek.Ed
209040ec644SDavid van Moolenbroek.Pp
210040ec644SDavid van MoolenbroekThe pointer returned by
211040ec644SDavid van Moolenbroek.Fn fetchMakeURL ,
212040ec644SDavid van Moolenbroek.Fn fetchCopyURL ,
213040ec644SDavid van Moolenbroekand
214040ec644SDavid van Moolenbroek.Fn fetchParseURL
215040ec644SDavid van Moolenbroekshould be freed using
216040ec644SDavid van Moolenbroek.Fn fetchFreeURL .
217040ec644SDavid van MoolenbroekThe size of
218040ec644SDavid van Moolenbroek.Vt struct URL
219040ec644SDavid van Moolenbroekis not part of the ABI.
220040ec644SDavid van Moolenbroek.Pp
221040ec644SDavid van Moolenbroek.Fn fetchXGetURL ,
222040ec644SDavid van Moolenbroek.Fn fetchGetURL ,
223040ec644SDavid van Moolenbroekand
224040ec644SDavid van Moolenbroek.Fn fetchPutURL
225040ec644SDavid van Moolenbroekconstitute the recommended interface to the
226040ec644SDavid van Moolenbroek.Nm fetch
227040ec644SDavid van Moolenbroeklibrary.
228040ec644SDavid van MoolenbroekThey examine the URL passed to them to determine the transfer
229040ec644SDavid van Moolenbroekmethod, and call the appropriate lower-level functions to perform the
230040ec644SDavid van Moolenbroekactual transfer.
231040ec644SDavid van Moolenbroek.Fn fetchXGetURL
232040ec644SDavid van Moolenbroekalso returns the remote document's metadata in the
233040ec644SDavid van Moolenbroek.Vt url_stat
234040ec644SDavid van Moolenbroekstructure pointed to by the
235040ec644SDavid van Moolenbroek.Fa us
236040ec644SDavid van Moolenbroekargument.
237040ec644SDavid van Moolenbroek.Pp
238040ec644SDavid van MoolenbroekThe
239040ec644SDavid van Moolenbroek.Fa flags
240040ec644SDavid van Moolenbroekargument is a string of characters which specify transfer options.
241040ec644SDavid van MoolenbroekThe
242040ec644SDavid van Moolenbroekmeaning of the individual flags is scheme-dependent, and is detailed
243040ec644SDavid van Moolenbroekin the appropriate section below.
244040ec644SDavid van Moolenbroek.Pp
245040ec644SDavid van Moolenbroek.Fn fetchStatURL
246040ec644SDavid van Moolenbroekattempts to obtain the requested document's metadata and fill in the
247040ec644SDavid van Moolenbroekstructure pointed to by its second argument.
248040ec644SDavid van MoolenbroekThe
249040ec644SDavid van Moolenbroek.Vt url_stat
250040ec644SDavid van Moolenbroekstructure is defined as follows in
251040ec644SDavid van Moolenbroek.In fetch.h :
252040ec644SDavid van Moolenbroek.Bd -literal
253040ec644SDavid van Moolenbroekstruct url_stat {
254040ec644SDavid van Moolenbroek    off_t	 size;
255040ec644SDavid van Moolenbroek    time_t	 atime;
256040ec644SDavid van Moolenbroek    time_t	 mtime;
257040ec644SDavid van Moolenbroek};
258040ec644SDavid van Moolenbroek.Ed
259040ec644SDavid van Moolenbroek.Pp
260040ec644SDavid van MoolenbroekIf the size could not be obtained from the server, the
261040ec644SDavid van Moolenbroek.Fa size
262040ec644SDavid van Moolenbroekfield is set to \-1.
263040ec644SDavid van MoolenbroekIf the modification time could not be obtained from the server, the
264040ec644SDavid van Moolenbroek.Fa mtime
265040ec644SDavid van Moolenbroekfield is set to the epoch.
266040ec644SDavid van MoolenbroekIf the access time could not be obtained from the server, the
267040ec644SDavid van Moolenbroek.Fa atime
268040ec644SDavid van Moolenbroekfield is set to the modification time.
269040ec644SDavid van Moolenbroek.Pp
270040ec644SDavid van Moolenbroek.Fn fetchListURL
271040ec644SDavid van Moolenbroekattempts to list the contents of the directory pointed to by the URL provided.
272040ec644SDavid van MoolenbroekThe pattern can be a simple glob-like expression as hint.
273040ec644SDavid van MoolenbroekCallers should not depend on the server to filter names.
274040ec644SDavid van MoolenbroekIf successful, it appends the list of entries to the
275040ec644SDavid van Moolenbroek.Vt url_list
276040ec644SDavid van Moolenbroekstructure.
277040ec644SDavid van MoolenbroekThe
278040ec644SDavid van Moolenbroek.Vt url_list
279040ec644SDavid van Moolenbroekstructure is defined as follows in
280040ec644SDavid van Moolenbroek.In fetch.h :
281040ec644SDavid van Moolenbroek.Bd -literal
282040ec644SDavid van Moolenbroekstruct url_list {
283040ec644SDavid van Moolenbroek    size_t	length;
284040ec644SDavid van Moolenbroek    size_t	alloc_size;
285040ec644SDavid van Moolenbroek    struct url	*urls;
286040ec644SDavid van Moolenbroek};
287040ec644SDavid van Moolenbroek.Ed
288040ec644SDavid van Moolenbroek.Pp
289040ec644SDavid van MoolenbroekThe list should be initialized by calling
290040ec644SDavid van Moolenbroek.Fn fetchInitURLList
291040ec644SDavid van Moolenbroekand the entries be freed by calling
292040ec644SDavid van Moolenbroek.Fn fetchFreeURLList .
293040ec644SDavid van MoolenbroekThe function
294040ec644SDavid van Moolenbroek.Fn fetchAppendURLList
295040ec644SDavid van Moolenbroekcan be used to append one URL lists to another.
296040ec644SDavid van MoolenbroekIf the
297040ec644SDavid van Moolenbroek.Ql c
298040ec644SDavid van Moolenbroek(cache result) flag is specified, the library is allowed to internally
299040ec644SDavid van Moolenbroekcache the result.
300040ec644SDavid van Moolenbroek.Pp
301040ec644SDavid van Moolenbroek.Fn fetchStringifyURL
302040ec644SDavid van Moolenbroekreturns the URL as string.
303040ec644SDavid van Moolenbroek.Fn fetchUnquotePath
304040ec644SDavid van Moolenbroekreturns the path name part of the URL with any quoting undone.
305040ec644SDavid van MoolenbroekQuery arguments and fragment identifiers are not included.
306040ec644SDavid van Moolenbroek.Fn fetchUnquoteFilename
307040ec644SDavid van Moolenbroekreturns the last component of the path name as returned by
308040ec644SDavid van Moolenbroek.Fn fetchUnquotePath .
309040ec644SDavid van Moolenbroek.Fn fetchStringifyURL ,
310040ec644SDavid van Moolenbroek.Fn fetchUnquotePath ,
311040ec644SDavid van Moolenbroekand
312040ec644SDavid van Moolenbroek.Fn fetchUnquoteFilename
313040ec644SDavid van Moolenbroekreturn a string that should be deallocated with
314040ec644SDavid van Moolenbroek.Fn free
315040ec644SDavid van Moolenbroekafter use.
316040ec644SDavid van Moolenbroek.Pp
317040ec644SDavid van Moolenbroek.Fn fetchConnectionCacheInit
318040ec644SDavid van Moolenbroekenables the connection cache.
319040ec644SDavid van MoolenbroekThe first argument specifies the global limit on cached connections.
320040ec644SDavid van MoolenbroekThe second argument specifies the host limit.
321040ec644SDavid van MoolenbroekEntries are considered to specify the same host, if the host name
322040ec644SDavid van Moolenbroekfrom the URL is identical, indepent of the address or address family.
323040ec644SDavid van Moolenbroek.Fn fetchConnectionCacheClose
324040ec644SDavid van Moolenbroekflushed the connection cache and closes all cached connections.
325040ec644SDavid van Moolenbroek.Pp
326040ec644SDavid van Moolenbroek.Fn fetchXGet ,
327040ec644SDavid van Moolenbroek.Fn fetchGet ,
328040ec644SDavid van Moolenbroek.Fn fetchPut ,
329040ec644SDavid van Moolenbroekand
330040ec644SDavid van Moolenbroek.Fn fetchStat
331040ec644SDavid van Moolenbroekare similar to
332040ec644SDavid van Moolenbroek.Fn fetchXGetURL ,
333040ec644SDavid van Moolenbroek.Fn fetchGetURL ,
334040ec644SDavid van Moolenbroek.Fn fetchPutURL ,
335040ec644SDavid van Moolenbroekand
336040ec644SDavid van Moolenbroek.Fn fetchStatURL ,
337040ec644SDavid van Moolenbroekexcept that they expect a pre-parsed URL in the form of a pointer to
338040ec644SDavid van Moolenbroeka
339040ec644SDavid van Moolenbroek.Vt struct url
340040ec644SDavid van Moolenbroekrather than a string.
341040ec644SDavid van Moolenbroek.Pp
342040ec644SDavid van MoolenbroekAll of the
343040ec644SDavid van Moolenbroek.Fn fetchXGetXXX ,
344040ec644SDavid van Moolenbroek.Fn fetchGetXXX ,
345040ec644SDavid van Moolenbroekand
346040ec644SDavid van Moolenbroek.Fn fetchPutXXX
347040ec644SDavid van Moolenbroekfunctions return a pointer to a stream which can be used to read or
348040ec644SDavid van Moolenbroekwrite data from or to the requested document, respectively.
349040ec644SDavid van MoolenbroekNote that
350040ec644SDavid van Moolenbroekalthough the implementation details of the individual access methods
351040ec644SDavid van Moolenbroekvary, it can generally be assumed that a stream returned by one of the
352040ec644SDavid van Moolenbroek.Fn fetchXGetXXX
353040ec644SDavid van Moolenbroekor
354040ec644SDavid van Moolenbroek.Fn fetchGetXXX
355040ec644SDavid van Moolenbroekfunctions is read-only, and that a stream returned by one of the
356040ec644SDavid van Moolenbroek.Fn fetchPutXXX
357040ec644SDavid van Moolenbroekfunctions is write-only.
358040ec644SDavid van Moolenbroek.Sh PROTOCOL INDEPENDENT FLAGS
359040ec644SDavid van MoolenbroekIf the
360040ec644SDavid van Moolenbroek.Ql i
361040ec644SDavid van Moolenbroek(if-modified-since) flag is specified, the library will try to fetch
362040ec644SDavid van Moolenbroekthe content only if it is newer than
363040ec644SDavid van Moolenbroek.Va last_modified .
364040ec644SDavid van MoolenbroekFor HTTP an
365040ec644SDavid van Moolenbroek.Li If-Modified-Since
366040ec644SDavid van MoolenbroekHTTP header is sent.
367040ec644SDavid van MoolenbroekFor FTP a
368040ec644SDavid van Moolenbroek.Li MTDM
369040ec644SDavid van Moolenbroekcommand is sent first and compared locally.
370040ec644SDavid van MoolenbroekFor FILE the source file is compared.
371040ec644SDavid van Moolenbroek.Sh FILE SCHEME
372040ec644SDavid van Moolenbroek.Fn fetchXGetFile ,
373040ec644SDavid van Moolenbroek.Fn fetchGetFile ,
374040ec644SDavid van Moolenbroekand
375040ec644SDavid van Moolenbroek.Fn fetchPutFile
376040ec644SDavid van Moolenbroekprovide access to documents which are files in a locally mounted file
377040ec644SDavid van Moolenbroeksystem.
378040ec644SDavid van MoolenbroekOnly the
379040ec644SDavid van Moolenbroek.Aq document
380040ec644SDavid van Moolenbroekcomponent of the URL is used.
381040ec644SDavid van Moolenbroek.Pp
382040ec644SDavid van Moolenbroek.Fn fetchXGetFile
383040ec644SDavid van Moolenbroekand
384040ec644SDavid van Moolenbroek.Fn fetchGetFile
385040ec644SDavid van Moolenbroekdo not accept any flags.
386040ec644SDavid van Moolenbroek.Pp
387040ec644SDavid van Moolenbroek.Fn fetchPutFile
388040ec644SDavid van Moolenbroekaccepts the
389040ec644SDavid van Moolenbroek.Ql a
390040ec644SDavid van Moolenbroek(append to file) flag.
391040ec644SDavid van MoolenbroekIf that flag is specified, the data written to
392040ec644SDavid van Moolenbroekthe stream returned by
393040ec644SDavid van Moolenbroek.Fn fetchPutFile
394040ec644SDavid van Moolenbroekwill be appended to the previous contents of the file, instead of
395040ec644SDavid van Moolenbroekreplacing them.
396040ec644SDavid van Moolenbroek.Sh FTP SCHEME
397040ec644SDavid van Moolenbroek.Fn fetchXGetFTP ,
398040ec644SDavid van Moolenbroek.Fn fetchGetFTP ,
399040ec644SDavid van Moolenbroekand
400040ec644SDavid van Moolenbroek.Fn fetchPutFTP
401040ec644SDavid van Moolenbroekimplement the FTP protocol as described in RFC 959.
402040ec644SDavid van Moolenbroek.Pp
403040ec644SDavid van MoolenbroekBy default
404040ec644SDavid van Moolenbroek.Nm libfetch
405040ec644SDavid van Moolenbroekwill attempt to use passive mode first and only fallback to active mode
406040ec644SDavid van Moolenbroekif the server reports a syntax error.
407040ec644SDavid van MoolenbroekIf the
408040ec644SDavid van Moolenbroek.Ql a
409040ec644SDavid van Moolenbroek(active) flag is specified, a passive connection is not tried and active mode
410040ec644SDavid van Moolenbroekis used directly.
411040ec644SDavid van Moolenbroek.Pp
412040ec644SDavid van MoolenbroekIf the
413040ec644SDavid van Moolenbroek.Ql l
414040ec644SDavid van Moolenbroek(low) flag is specified, data sockets will be allocated in the low (or
415040ec644SDavid van Moolenbroekdefault) port range instead of the high port range (see
416040ec644SDavid van Moolenbroek.Xr ip 4 ) .
417040ec644SDavid van Moolenbroek.Pp
418040ec644SDavid van MoolenbroekIf the
419040ec644SDavid van Moolenbroek.Ql d
420040ec644SDavid van Moolenbroek(direct) flag is specified,
421040ec644SDavid van Moolenbroek.Fn fetchXGetFTP ,
422040ec644SDavid van Moolenbroek.Fn fetchGetFTP ,
423040ec644SDavid van Moolenbroekand
424040ec644SDavid van Moolenbroek.Fn fetchPutFTP
425040ec644SDavid van Moolenbroekwill use a direct connection even if a proxy server is defined.
426040ec644SDavid van Moolenbroek.Pp
427040ec644SDavid van MoolenbroekIf no user name or password is given, the
428040ec644SDavid van Moolenbroek.Nm fetch
429040ec644SDavid van Moolenbroeklibrary will attempt an anonymous login, with user name "anonymous"
430040ec644SDavid van Moolenbroekand password "anonymous@\*[Lt]hostname\*[Gt]".
431040ec644SDavid van Moolenbroek.Sh HTTP SCHEME
432040ec644SDavid van MoolenbroekThe
433040ec644SDavid van Moolenbroek.Fn fetchXGetHTTP ,
434040ec644SDavid van Moolenbroek.Fn fetchGetHTTP ,
435040ec644SDavid van Moolenbroekand
436040ec644SDavid van Moolenbroek.Fn fetchPutHTTP
437040ec644SDavid van Moolenbroekfunctions implement the HTTP/1.1 protocol.
438040ec644SDavid van MoolenbroekWith a little luck, there is
439040ec644SDavid van Moolenbroekeven a chance that they comply with RFC 2616 and RFC 2617.
440040ec644SDavid van Moolenbroek.Pp
441040ec644SDavid van MoolenbroekIf the
442040ec644SDavid van Moolenbroek.Ql d
443040ec644SDavid van Moolenbroek(direct) flag is specified,
444040ec644SDavid van Moolenbroek.Fn fetchXGetHTTP ,
445040ec644SDavid van Moolenbroek.Fn fetchGetHTTP ,
446040ec644SDavid van Moolenbroekand
447040ec644SDavid van Moolenbroek.Fn fetchPutHTTP
448040ec644SDavid van Moolenbroekwill use a direct connection even if a proxy server is defined.
449040ec644SDavid van Moolenbroek.Pp
450040ec644SDavid van MoolenbroekSince there seems to be no good way of implementing the HTTP PUT
451040ec644SDavid van Moolenbroekmethod in a manner consistent with the rest of the
452040ec644SDavid van Moolenbroek.Nm fetch
453040ec644SDavid van Moolenbroeklibrary,
454040ec644SDavid van Moolenbroek.Fn fetchPutHTTP
455040ec644SDavid van Moolenbroekis currently unimplemented.
456040ec644SDavid van Moolenbroek.Sh AUTHENTICATION
457040ec644SDavid van MoolenbroekApart from setting the appropriate environment variables and
458040ec644SDavid van Moolenbroekspecifying the user name and password in the URL or the
459040ec644SDavid van Moolenbroek.Vt struct url ,
460040ec644SDavid van Moolenbroekthe calling program has the option of defining an authentication
461040ec644SDavid van Moolenbroekfunction with the following prototype:
462040ec644SDavid van Moolenbroek.Pp
463040ec644SDavid van Moolenbroek.Ft int
464040ec644SDavid van Moolenbroek.Fn myAuthMethod "struct url *u"
465040ec644SDavid van Moolenbroek.Pp
466040ec644SDavid van MoolenbroekThe callback function should fill in the
467040ec644SDavid van Moolenbroek.Fa user
468040ec644SDavid van Moolenbroekand
469040ec644SDavid van Moolenbroek.Fa pwd
470040ec644SDavid van Moolenbroekfields in the provided
471040ec644SDavid van Moolenbroek.Vt struct url
472040ec644SDavid van Moolenbroekand return 0 on success, or any other value to indicate failure.
473040ec644SDavid van Moolenbroek.Pp
474040ec644SDavid van MoolenbroekTo register the authentication callback, simply set
475040ec644SDavid van Moolenbroek.Va fetchAuthMethod
476040ec644SDavid van Moolenbroekto point at it.
477040ec644SDavid van MoolenbroekThe callback will be used whenever a site requires authentication and
478040ec644SDavid van Moolenbroekthe appropriate environment variables are not set.
479040ec644SDavid van Moolenbroek.Pp
480040ec644SDavid van MoolenbroekThis interface is experimental and may be subject to change.
481040ec644SDavid van Moolenbroek.Sh RETURN VALUES
482040ec644SDavid van Moolenbroek.Fn fetchParseURL
483040ec644SDavid van Moolenbroekreturns a pointer to a
484040ec644SDavid van Moolenbroek.Vt struct url
485040ec644SDavid van Moolenbroekcontaining the individual components of the URL.
486040ec644SDavid van MoolenbroekIf it is
487040ec644SDavid van Moolenbroekunable to allocate memory, or the URL is syntactically incorrect,
488040ec644SDavid van Moolenbroek.Fn fetchParseURL
489040ec644SDavid van Moolenbroekreturns a
490040ec644SDavid van Moolenbroek.Dv NULL
491040ec644SDavid van Moolenbroekpointer.
492040ec644SDavid van Moolenbroek.Pp
493040ec644SDavid van MoolenbroekThe
494040ec644SDavid van Moolenbroek.Fn fetchStat
495040ec644SDavid van Moolenbroekfunctions return 0 on success and \-1 on failure.
496040ec644SDavid van Moolenbroek.Pp
497040ec644SDavid van MoolenbroekAll other functions return a stream pointer which may be used to
498040ec644SDavid van Moolenbroekaccess the requested document, or
499040ec644SDavid van Moolenbroek.Dv NULL
500040ec644SDavid van Moolenbroekif an error occurred.
501040ec644SDavid van Moolenbroek.Pp
502040ec644SDavid van MoolenbroekThe following error codes are defined in
503040ec644SDavid van Moolenbroek.In fetch.h :
504040ec644SDavid van Moolenbroek.Bl -tag -width 18n
505040ec644SDavid van Moolenbroek.It Bq Er FETCH_ABORT
506040ec644SDavid van MoolenbroekOperation aborted
507040ec644SDavid van Moolenbroek.It Bq Er FETCH_AUTH
508040ec644SDavid van MoolenbroekAuthentication failed
509040ec644SDavid van Moolenbroek.It Bq Er FETCH_DOWN
510040ec644SDavid van MoolenbroekService unavailable
511040ec644SDavid van Moolenbroek.It Bq Er FETCH_EXISTS
512040ec644SDavid van MoolenbroekFile exists
513040ec644SDavid van Moolenbroek.It Bq Er FETCH_FULL
514040ec644SDavid van MoolenbroekFile system full
515040ec644SDavid van Moolenbroek.It Bq Er FETCH_INFO
516040ec644SDavid van MoolenbroekInformational response
517040ec644SDavid van Moolenbroek.It Bq Er FETCH_MEMORY
518040ec644SDavid van MoolenbroekInsufficient memory
519040ec644SDavid van Moolenbroek.It Bq Er FETCH_MOVED
520040ec644SDavid van MoolenbroekFile has moved
521040ec644SDavid van Moolenbroek.It Bq Er FETCH_NETWORK
522040ec644SDavid van MoolenbroekNetwork error
523040ec644SDavid van Moolenbroek.It Bq Er FETCH_OK
524040ec644SDavid van MoolenbroekNo error
525040ec644SDavid van Moolenbroek.It Bq Er FETCH_PROTO
526040ec644SDavid van MoolenbroekProtocol error
527040ec644SDavid van Moolenbroek.It Bq Er FETCH_RESOLV
528040ec644SDavid van MoolenbroekResolver error
529040ec644SDavid van Moolenbroek.It Bq Er FETCH_SERVER
530040ec644SDavid van MoolenbroekServer error
531040ec644SDavid van Moolenbroek.It Bq Er FETCH_TEMP
532040ec644SDavid van MoolenbroekTemporary error
533040ec644SDavid van Moolenbroek.It Bq Er FETCH_TIMEOUT
534040ec644SDavid van MoolenbroekOperation timed out
535040ec644SDavid van Moolenbroek.It Bq Er FETCH_UNAVAIL
536040ec644SDavid van MoolenbroekFile is not available
537040ec644SDavid van Moolenbroek.It Bq Er FETCH_UNKNOWN
538040ec644SDavid van MoolenbroekUnknown error
539040ec644SDavid van Moolenbroek.It Bq Er FETCH_URL
540040ec644SDavid van MoolenbroekInvalid URL
541040ec644SDavid van Moolenbroek.El
542040ec644SDavid van Moolenbroek.Pp
543040ec644SDavid van MoolenbroekThe accompanying error message includes a protocol-specific error code
544040ec644SDavid van Moolenbroekand message, e.g.\& "File is not available (404 Not Found)"
545040ec644SDavid van Moolenbroek.Sh ENVIRONMENT
546040ec644SDavid van Moolenbroek.Bl -tag -width ".Ev FETCH_BIND_ADDRESS"
547040ec644SDavid van Moolenbroek.It Ev FETCH_BIND_ADDRESS
548040ec644SDavid van MoolenbroekSpecifies a host name or IP address to which sockets used for outgoing
549040ec644SDavid van Moolenbroekconnections will be bound.
550040ec644SDavid van Moolenbroek.It Ev FTP_LOGIN
551040ec644SDavid van MoolenbroekDefault FTP login if none was provided in the URL.
552040ec644SDavid van Moolenbroek.It Ev FTP_PASSIVE_MODE
553040ec644SDavid van MoolenbroekIf set to anything but
554040ec644SDavid van Moolenbroek.Ql no ,
555040ec644SDavid van Moolenbroekforces the FTP code to use passive mode.
556040ec644SDavid van Moolenbroek.It Ev FTP_PASSWORD
557040ec644SDavid van MoolenbroekDefault FTP password if the remote server requests one and none was
558040ec644SDavid van Moolenbroekprovided in the URL.
559040ec644SDavid van Moolenbroek.It Ev FTP_PROXY
560040ec644SDavid van MoolenbroekURL of the proxy to use for FTP requests.
561040ec644SDavid van MoolenbroekThe document part is ignored.
562040ec644SDavid van MoolenbroekFTP and HTTP proxies are supported; if no scheme is specified, FTP is
563040ec644SDavid van Moolenbroekassumed.
564040ec644SDavid van MoolenbroekIf the proxy is an FTP proxy,
565040ec644SDavid van Moolenbroek.Nm libfetch
566040ec644SDavid van Moolenbroekwill send
567040ec644SDavid van Moolenbroek.Ql user@host
568040ec644SDavid van Moolenbroekas user name to the proxy, where
569040ec644SDavid van Moolenbroek.Ql user
570040ec644SDavid van Moolenbroekis the real user name, and
571040ec644SDavid van Moolenbroek.Ql host
572040ec644SDavid van Moolenbroekis the name of the FTP server.
573040ec644SDavid van Moolenbroek.Pp
574040ec644SDavid van MoolenbroekIf this variable is set to an empty string, no proxy will be used for
575040ec644SDavid van MoolenbroekFTP requests, even if the
576040ec644SDavid van Moolenbroek.Ev HTTP_PROXY
577040ec644SDavid van Moolenbroekvariable is set.
578040ec644SDavid van Moolenbroek.It Ev ftp_proxy
579040ec644SDavid van MoolenbroekSame as
580040ec644SDavid van Moolenbroek.Ev FTP_PROXY ,
581040ec644SDavid van Moolenbroekfor compatibility.
582040ec644SDavid van Moolenbroek.It Ev HTTP_AUTH
583040ec644SDavid van MoolenbroekSpecifies HTTP authorization parameters as a colon-separated list of
584040ec644SDavid van Moolenbroekitems.
585040ec644SDavid van MoolenbroekThe first and second item are the authorization scheme and realm
586040ec644SDavid van Moolenbroekrespectively; further items are scheme-dependent.
587040ec644SDavid van MoolenbroekCurrently, only basic authorization is supported.
588040ec644SDavid van Moolenbroek.Pp
589040ec644SDavid van MoolenbroekBasic authorization requires two parameters: the user name and
590040ec644SDavid van Moolenbroekpassword, in that order.
591040ec644SDavid van Moolenbroek.Pp
592040ec644SDavid van MoolenbroekThis variable is only used if the server requires authorization and
593040ec644SDavid van Moolenbroekno user name or password was specified in the URL.
594040ec644SDavid van Moolenbroek.It Ev HTTP_PROXY
595040ec644SDavid van MoolenbroekURL of the proxy to use for HTTP requests.
596040ec644SDavid van MoolenbroekThe document part is ignored.
597040ec644SDavid van MoolenbroekOnly HTTP proxies are supported for HTTP requests.
598040ec644SDavid van MoolenbroekIf no port number is specified, the default is 3128.
599040ec644SDavid van Moolenbroek.Pp
600040ec644SDavid van MoolenbroekNote that this proxy will also be used for FTP documents, unless the
601040ec644SDavid van Moolenbroek.Ev FTP_PROXY
602040ec644SDavid van Moolenbroekvariable is set.
603040ec644SDavid van Moolenbroek.It Ev http_proxy
604040ec644SDavid van MoolenbroekSame as
605040ec644SDavid van Moolenbroek.Ev HTTP_PROXY ,
606040ec644SDavid van Moolenbroekfor compatibility.
607040ec644SDavid van Moolenbroek.It Ev HTTP_PROXY_AUTH
608040ec644SDavid van MoolenbroekSpecifies authorization parameters for the HTTP proxy in the same
609040ec644SDavid van Moolenbroekformat as the
610040ec644SDavid van Moolenbroek.Ev HTTP_AUTH
611040ec644SDavid van Moolenbroekvariable.
612040ec644SDavid van Moolenbroek.Pp
613040ec644SDavid van MoolenbroekThis variable is used if and only if connected to an HTTP proxy, and
614040ec644SDavid van Moolenbroekis ignored if a user and/or a password were specified in the proxy
615040ec644SDavid van MoolenbroekURL.
616040ec644SDavid van Moolenbroek.It Ev HTTP_REFERER
617040ec644SDavid van MoolenbroekSpecifies the referrer URL to use for HTTP requests.
618040ec644SDavid van MoolenbroekIf set to
619040ec644SDavid van Moolenbroek.Dq auto ,
620040ec644SDavid van Moolenbroekthe document URL will be used as referrer URL.
621040ec644SDavid van Moolenbroek.It Ev HTTP_USER_AGENT
622040ec644SDavid van MoolenbroekSpecifies the User-Agent string to use for HTTP requests.
623040ec644SDavid van MoolenbroekThis can be useful when working with HTTP origin or proxy servers that
624040ec644SDavid van Moolenbroekdifferentiate between user agents.
625040ec644SDavid van Moolenbroek.It Ev NETRC
626040ec644SDavid van MoolenbroekSpecifies a file to use instead of
627040ec644SDavid van Moolenbroek.Pa ~/.netrc
628040ec644SDavid van Moolenbroekto look up login names and passwords for FTP sites.
629040ec644SDavid van MoolenbroekSee
630040ec644SDavid van Moolenbroek.Xr ftp 1
631040ec644SDavid van Moolenbroekfor a description of the file format.
632040ec644SDavid van MoolenbroekThis feature is experimental.
633040ec644SDavid van Moolenbroek.It Ev NO_PROXY
634040ec644SDavid van MoolenbroekEither a single asterisk, which disables the use of proxies
635040ec644SDavid van Moolenbroekaltogether, or a comma- or whitespace-separated list of hosts for
636040ec644SDavid van Moolenbroekwhich proxies should not be used.
637040ec644SDavid van Moolenbroek.It Ev no_proxy
638040ec644SDavid van MoolenbroekSame as
639040ec644SDavid van Moolenbroek.Ev NO_PROXY ,
640040ec644SDavid van Moolenbroekfor compatibility.
641040ec644SDavid van Moolenbroek.El
642040ec644SDavid van Moolenbroek.Sh EXAMPLES
643040ec644SDavid van MoolenbroekTo access a proxy server on
644040ec644SDavid van Moolenbroek.Pa proxy.example.com
645040ec644SDavid van Moolenbroekport 8080, set the
646040ec644SDavid van Moolenbroek.Ev HTTP_PROXY
647040ec644SDavid van Moolenbroekenvironment variable in a manner similar to this:
648040ec644SDavid van Moolenbroek.Pp
649040ec644SDavid van Moolenbroek.Dl HTTP_PROXY=http://proxy.example.com:8080
650040ec644SDavid van Moolenbroek.Pp
651040ec644SDavid van MoolenbroekIf the proxy server requires authentication, there are
652040ec644SDavid van Moolenbroektwo options available for passing the authentication data.
653040ec644SDavid van MoolenbroekThe first method is by using the proxy URL:
654040ec644SDavid van Moolenbroek.Pp
655040ec644SDavid van Moolenbroek.Dl HTTP_PROXY=http://\*[Lt]user\*[Gt]:\*[Lt]pwd\*[Gt]@proxy.example.com:8080
656040ec644SDavid van Moolenbroek.Pp
657040ec644SDavid van MoolenbroekThe second method is by using the
658040ec644SDavid van Moolenbroek.Ev HTTP_PROXY_AUTH
659040ec644SDavid van Moolenbroekenvironment variable:
660040ec644SDavid van Moolenbroek.Bd -literal -offset indent
661040ec644SDavid van MoolenbroekHTTP_PROXY=http://proxy.example.com:8080
662040ec644SDavid van MoolenbroekHTTP_PROXY_AUTH=basic:*:\*[Lt]user\*[Gt]:\*[Lt]pwd\*[Gt]
663040ec644SDavid van Moolenbroek.Ed
664040ec644SDavid van Moolenbroek.Pp
665040ec644SDavid van MoolenbroekTo disable the use of a proxy for an HTTP server running on the local
666040ec644SDavid van Moolenbroekhost, define
667040ec644SDavid van Moolenbroek.Ev NO_PROXY
668040ec644SDavid van Moolenbroekas follows:
669040ec644SDavid van Moolenbroek.Bd -literal -offset indent
670040ec644SDavid van MoolenbroekNO_PROXY=localhost,127.0.0.1
671040ec644SDavid van Moolenbroek.Ed
672040ec644SDavid van Moolenbroek.Sh SEE ALSO
673040ec644SDavid van Moolenbroek.\" .Xr fetch 1 ,
674040ec644SDavid van Moolenbroek.\" .Xr ftpio 3 ,
675040ec644SDavid van Moolenbroek.Xr ftp 1 ,
676040ec644SDavid van Moolenbroek.Xr ip 4
677040ec644SDavid van Moolenbroek.Rs
678040ec644SDavid van Moolenbroek.%A J. Postel
679040ec644SDavid van Moolenbroek.%A J. K. Reynolds
680040ec644SDavid van Moolenbroek.%D October 1985
681040ec644SDavid van Moolenbroek.%B File Transfer Protocol
682040ec644SDavid van Moolenbroek.%O RFC 959
683040ec644SDavid van Moolenbroek.Re
684040ec644SDavid van Moolenbroek.Rs
685040ec644SDavid van Moolenbroek.%A P. Deutsch
686040ec644SDavid van Moolenbroek.%A A. Emtage
687040ec644SDavid van Moolenbroek.%A A. Marine
688040ec644SDavid van Moolenbroek.%D May 1994
689040ec644SDavid van Moolenbroek.%T How to Use Anonymous FTP
690040ec644SDavid van Moolenbroek.%O RFC 1635
691040ec644SDavid van Moolenbroek.Re
692040ec644SDavid van Moolenbroek.Rs
693040ec644SDavid van Moolenbroek.%A T. Berners-Lee
694040ec644SDavid van Moolenbroek.%A L. Masinter
695040ec644SDavid van Moolenbroek.%A M. McCahill
696040ec644SDavid van Moolenbroek.%D December 1994
697040ec644SDavid van Moolenbroek.%T Uniform Resource Locators (URL)
698040ec644SDavid van Moolenbroek.%O RFC 1738
699040ec644SDavid van Moolenbroek.Re
700040ec644SDavid van Moolenbroek.Rs
701040ec644SDavid van Moolenbroek.%A R. Fielding
702040ec644SDavid van Moolenbroek.%A J. Gettys
703040ec644SDavid van Moolenbroek.%A J. Mogul
704040ec644SDavid van Moolenbroek.%A H. Frystyk
705040ec644SDavid van Moolenbroek.%A L. Masinter
706040ec644SDavid van Moolenbroek.%A P. Leach
707040ec644SDavid van Moolenbroek.%A T. Berners-Lee
708040ec644SDavid van Moolenbroek.%D January 1999
709040ec644SDavid van Moolenbroek.%B Hypertext Transfer Protocol -- HTTP/1.1
710040ec644SDavid van Moolenbroek.%O RFC 2616
711040ec644SDavid van Moolenbroek.Re
712040ec644SDavid van Moolenbroek.Rs
713040ec644SDavid van Moolenbroek.%A J. Franks
714040ec644SDavid van Moolenbroek.%A P. Hallam-Baker
715040ec644SDavid van Moolenbroek.%A J. Hostetler
716040ec644SDavid van Moolenbroek.%A S. Lawrence
717040ec644SDavid van Moolenbroek.%A P. Leach
718040ec644SDavid van Moolenbroek.%A A. Luotonen
719040ec644SDavid van Moolenbroek.%A L. Stewart
720040ec644SDavid van Moolenbroek.%D June 1999
721040ec644SDavid van Moolenbroek.%B HTTP Authentication: Basic and Digest Access Authentication
722040ec644SDavid van Moolenbroek.%O RFC 2617
723040ec644SDavid van Moolenbroek.Re
724040ec644SDavid van Moolenbroek.Sh HISTORY
725040ec644SDavid van MoolenbroekThe
726040ec644SDavid van Moolenbroek.Nm fetch
727040ec644SDavid van Moolenbroeklibrary first appeared in
728040ec644SDavid van Moolenbroek.Fx 3.0 .
729040ec644SDavid van Moolenbroek.Sh AUTHORS
730040ec644SDavid van Moolenbroek.An -nosplit
731040ec644SDavid van MoolenbroekThe
732040ec644SDavid van Moolenbroek.Nm fetch
733040ec644SDavid van Moolenbroeklibrary was mostly written by
734040ec644SDavid van Moolenbroek.An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org
735040ec644SDavid van Moolenbroekwith numerous suggestions from
736040ec644SDavid van Moolenbroek.An Jordan K. Hubbard Aq Mt jkh@FreeBSD.org ,
737040ec644SDavid van Moolenbroek.An Eugene Skepner Aq Mt eu@qub.com
738040ec644SDavid van Moolenbroekand other
739040ec644SDavid van Moolenbroek.Fx
740040ec644SDavid van Moolenbroekdevelopers.
741040ec644SDavid van MoolenbroekIt replaces the older
742040ec644SDavid van Moolenbroek.Nm ftpio
743040ec644SDavid van Moolenbroeklibrary written by
744040ec644SDavid van Moolenbroek.An Poul-Henning Kamp Aq Mt phk@FreeBSD.org
745040ec644SDavid van Moolenbroekand
746040ec644SDavid van Moolenbroek.An Jordan K. Hubbard Aq Mt jkh@FreeBSD.org .
747040ec644SDavid van Moolenbroek.Pp
748040ec644SDavid van MoolenbroekThis manual page was written by
749040ec644SDavid van Moolenbroek.An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org .
750040ec644SDavid van Moolenbroek.Sh BUGS
751040ec644SDavid van MoolenbroekSome parts of the library are not yet implemented.
752040ec644SDavid van MoolenbroekThe most notable
753040ec644SDavid van Moolenbroekexamples of this are
754040ec644SDavid van Moolenbroek.Fn fetchPutHTTP
755040ec644SDavid van Moolenbroekand FTP proxy support.
756040ec644SDavid van Moolenbroek.Pp
757040ec644SDavid van MoolenbroekThere is no way to select a proxy at run-time other than setting the
758040ec644SDavid van Moolenbroek.Ev HTTP_PROXY
759040ec644SDavid van Moolenbroekor
760040ec644SDavid van Moolenbroek.Ev FTP_PROXY
761040ec644SDavid van Moolenbroekenvironment variables as appropriate.
762040ec644SDavid van Moolenbroek.Pp
763040ec644SDavid van Moolenbroek.Nm libfetch
764040ec644SDavid van Moolenbroekdoes not understand or obey 305 (Use Proxy) replies.
765040ec644SDavid van Moolenbroek.Pp
766040ec644SDavid van MoolenbroekError numbers are unique only within a certain context; the error
767040ec644SDavid van Moolenbroekcodes used for FTP and HTTP overlap, as do those used for resolver and
768040ec644SDavid van Moolenbroeksystem errors.
769040ec644SDavid van MoolenbroekFor instance, error code 202 means "Command not
770040ec644SDavid van Moolenbroekimplemented, superfluous at this site" in an FTP context and
771040ec644SDavid van Moolenbroek"Accepted" in an HTTP context.
772040ec644SDavid van Moolenbroek.Pp
773040ec644SDavid van Moolenbroek.Fn fetchStatFTP
774040ec644SDavid van Moolenbroekdoes not check that the result of an MDTM command is a valid date.
775040ec644SDavid van Moolenbroek.Pp
776040ec644SDavid van MoolenbroekThe man page is incomplete, poorly written and produces badly
777040ec644SDavid van Moolenbroekformatted text.
778040ec644SDavid van Moolenbroek.Pp
779040ec644SDavid van MoolenbroekThe error reporting mechanism is unsatisfactory.
780040ec644SDavid van Moolenbroek.Pp
781040ec644SDavid van MoolenbroekSome parts of the code are not fully reentrant.
782