summaryrefslogtreecommitdiffstats
path: root/usr.bin/fetch/fetch.h
diff options
context:
space:
mode:
authorwollman <wollman@FreeBSD.org>1997-01-30 21:43:44 +0000
committerwollman <wollman@FreeBSD.org>1997-01-30 21:43:44 +0000
commit444cbb04eefcb9a4da4e2a366541c4d02d74938d (patch)
tree8697935e80816a6c94b292ebeb8af3ef6994b10b /usr.bin/fetch/fetch.h
parent067667ae976ea0d2540166d4637720d70a012cf7 (diff)
downloadFreeBSD-src-444cbb04eefcb9a4da4e2a366541c4d02d74938d.zip
FreeBSD-src-444cbb04eefcb9a4da4e2a366541c4d02d74938d.tar.gz
Here is my long-threatened revamping of fetch. Jean-Marc probably won't
recognize it any more. This makes the following significant changes: - The main body of the program doesn't know a thing about URIs, HTTP, or FTP. This makes it possible to easily plug in other protocols. (The next revision will probably be able to dynamically add new recognizers.) - There are no longer arbitrary timeouts for the protocols. If you want to set one for yourself, use the environment variables. - FTP proxies are now supported (if I implemented it right). - The HTTP implementation is much more complete, and can now do restarts, preserve modtimes, and mrun in mirror mode. It's not yet up to 1.1, but it's getting there. - Transaction TCP is now used for sending HTTP requests. The HTTP/1.1 syntax for requesting that the connection be closed after one request is implemented. In all of this, I have doubtless broken somebody. Please test it and tell me about the bugs.
Diffstat (limited to 'usr.bin/fetch/fetch.h')
-rw-r--r--usr.bin/fetch/fetch.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/usr.bin/fetch/fetch.h b/usr.bin/fetch/fetch.h
new file mode 100644
index 0000000..daa010e
--- /dev/null
+++ b/usr.bin/fetch/fetch.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright 1997 Massachusetts Institute of Technology
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose and without fee is hereby
+ * granted, provided that both the above copyright notice and this
+ * permission notice appear in all copies, that both the above
+ * copyright notice and this permission notice appear in all
+ * supporting documentation, and that the name of M.I.T. not be used
+ * in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. M.I.T. makes
+ * no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied
+ * warranty.
+ *
+ * THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS
+ * ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
+ * SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $Id$
+ */
+
+#ifndef fetch_h
+#define fetch_h 1
+
+
+#define BUFFER_SIZE 1024
+#define FETCH_VERSION "fetch/1.0"
+#define PATH_CP "/bin/cp"
+
+struct fetch_state {
+ const char *fs_status;
+ const char *fs_outputfile;
+ int fs_verbose; /* -q, -v option */
+ int fs_newtime; /* -n option */
+ int fs_mirror; /* -m option */
+ int fs_restart; /* -r option */
+ int fs_timeout; /* -T option */
+ int fs_passive_mode; /* -p option */
+ int fs_linkfile; /* -l option */
+ int fs_precious; /* -R option */
+ time_t fs_modtime;
+ void *fs_proto;
+ int (*fs_retrieve)(struct fetch_state *);
+ int (*fs_close)(struct fetch_state *);
+};
+
+struct uri_scheme {
+ const char *sc_name; /* name of the scheme, <32 characters */
+ int (*sc_parse)(struct fetch_state *, const char *);
+ /* routine to parse a URI and build state */
+ int (*sc_proxy_parse)(struct fetch_state *, const char *);
+ /* same, but for proxy case */
+ const char *sc_proxy_envar; /* envar used to determine proxy */
+ const char *sc_proxy_by; /* list of protos which can proxy us */
+
+ /* The rest is filled in dynamically... */
+ int sc_can_proxy;
+ struct uri_scheme *sc_proxyproto;
+};
+
+extern struct uri_scheme file_scheme, ftp_scheme, http_scheme;
+
+void adjmodtime(struct fetch_state *fs);
+void catchsig(int signo);
+void display(struct fetch_state *fs, off_t total, ssize_t thisincr);
+void init_schemes(void);
+void rm(struct fetch_state *fs);
+void setup_sigalrm(void);
+void unsetup_sigalrm(void);
+char *percent_decode(const char *orig);
+char *safe_strdup(const char *orig);
+char *safe_strndup(const char *orig, size_t len);
+char *to_base64(const unsigned char *buf, size_t len);
+int from_base64(const char *orig, unsigned char *buf, size_t *lenp);
+int parse_host_port(const char *str, char **hostname, int *port);
+int parse_uri(struct fetch_state *fs, const char *uri);
+#endif /* ! fetch_h */
OpenPOWER on IntegriCloud