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