X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Furl.h;h=9808b54024c21ab2f4aa3533613dbd32a3745967;hp=771f17a4e89776ebbca6c49cb300f84c3f65d42e;hb=d5be8ecca466601bda9b81c28a79077fbda6ccde;hpb=e5408e7db8f3d0c80ce4c51a6b8d67bc26baa815 diff --git a/src/url.h b/src/url.h index 771f17a4..9808b540 100644 --- a/src/url.h +++ b/src/url.h @@ -1,93 +1,140 @@ /* Declarations for url.c. Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. -This file is part of Wget. +This file is part of GNU Wget. -This program is free software; you can redistribute it and/or modify +GNU Wget is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. -This program is distributed in the hope that it will be useful, +GNU Wget is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software +along with Wget; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef URL_H #define URL_H -/* If the string contains unsafe characters, duplicate it with - encode_string, otherwise just copy it with strdup. */ -#define CLEANDUP(x) (contains_unsafe (x) ? encode_string (x) : xstrdup (x)) +/* Default port definitions */ +#define DEFAULT_HTTP_PORT 80 +#define DEFAULT_FTP_PORT 21 +#define DEFAULT_HTTPS_PORT 443 + +/* Note: the ordering here is related to the order of elements in + `supported_schemes' in url.c. */ + +enum url_scheme { + SCHEME_HTTP, +#ifdef HAVE_SSL + SCHEME_HTTPS, +#endif + SCHEME_FTP, + SCHEME_INVALID +}; /* Structure containing info on a URL. */ -struct urlinfo +struct url { - char *url; /* Unchanged URL */ - uerr_t proto; /* URL protocol */ + char *url; /* Original URL */ + enum url_scheme scheme; /* URL scheme */ + char *host; /* Extracted hostname */ - unsigned short port; - char ftp_type; - char *path, *dir, *file; /* Path, as well as dir and file - (properly decoded) */ - char *user, *passwd; /* Username and password */ - struct urlinfo *proxy; /* The exact string to pass to proxy - server */ - char *referer; /* The source from which the request - URI was obtained */ - char *local; /* The local filename of the URL - document */ + int port; /* Port number */ + + /* URL components (URL-quoted). */ + char *path; + char *params; + char *query; + char *fragment; + + /* Extracted path info (unquoted). */ + char *dir; + char *file; + + /* Username and password (unquoted). */ + char *user; + char *passwd; }; -enum uflags -{ - URELATIVE = 0x0001, /* Is URL relative? */ - UNOPROTO = 0x0002, /* Is URL without a protocol? */ - UABS2REL = 0x0004, /* Convert absolute to relative? */ - UREL2ABS = 0x0008 /* Convert relative to absolute? */ +enum convert_options { + CO_NOCONVERT = 0, /* don't convert this URL */ + CO_CONVERT_TO_RELATIVE, /* convert to relative, e.g. to + "../../otherdir/foo.gif" */ + CO_CONVERT_TO_COMPLETE /* convert to absolute, e.g. to + "http://orighost/somedir/bar.jpg". */ }; /* A structure that defines the whereabouts of a URL, i.e. its position in an HTML document, etc. */ + typedef struct _urlpos { - char *url; /* URL */ - char *local_name; /* Local file to which it was saved */ - enum uflags flags; /* Various flags */ - int pos, size; /* Relative position in the buffer */ - struct _urlpos *next; /* Next struct in list */ + char *url; /* linked URL, after it has been + merged with the base */ + char *local_name; /* Local file to which it was saved */ + + /* Information about the original link: */ + int link_relative_p; /* was the link relative? */ + int link_complete_p; /* was the link complete (with the + host name, etc.) */ + + /* Conversion requirements: */ + enum convert_options convert; /* is conversion required? */ + + /* URL's position in the buffer. */ + int pos, size; + + struct _urlpos *next; /* Next struct in list */ } urlpos; +/* downloaded_file() takes a parameter of this type and returns this type. */ +typedef enum +{ + /* Return enumerators: */ + FILE_NOT_ALREADY_DOWNLOADED = 0, -/* Function declarations */ + /* Return / parameter enumerators: */ + FILE_DOWNLOADED_NORMALLY, + FILE_DOWNLOADED_AND_HTML_EXTENSION_ADDED, -int skip_url PARAMS ((const char *)); + /* Parameter enumerators: */ + CHECK_FOR_FILE +} downloaded_file_t; + +/* Function declarations */ -int contains_unsafe PARAMS ((const char *)); char *encode_string PARAMS ((const char *)); -struct urlinfo *newurl PARAMS ((void)); -void freeurl PARAMS ((struct urlinfo *, int)); -uerr_t urlproto PARAMS ((const char *)); -int skip_proto PARAMS ((const char *)); -int skip_uname PARAMS ((const char *)); +struct url *url_parse PARAMS ((const char *, int *)); +const char *url_error PARAMS ((int)); +char *url_full_path PARAMS ((const struct url *)); +void url_set_dir PARAMS ((struct url *, const char *)); +void url_set_file PARAMS ((struct url *, const char *)); +void url_free PARAMS ((struct url *)); -uerr_t parseurl PARAMS ((const char *, struct urlinfo *, int)); -char *str_url PARAMS ((const struct urlinfo *, int)); -int url_equal PARAMS ((const char *, const char *)); +enum url_scheme url_scheme PARAMS ((const char *)); +int url_skip_scheme PARAMS ((const char *)); +int url_has_scheme PARAMS ((const char *)); +int scheme_default_port PARAMS ((enum url_scheme)); + +int url_skip_uname PARAMS ((const char *)); + +char *url_string PARAMS ((const struct url *, int)); urlpos *get_urls_file PARAMS ((const char *)); -urlpos *get_urls_html PARAMS ((const char *, const char *, int)); +urlpos *get_urls_html PARAMS ((const char *, const char *, int, int *)); void free_urlpos PARAMS ((urlpos *)); +char *uri_merge PARAMS ((const char *, const char *)); + void rotate_backups PARAMS ((const char *)); int mkalldirs PARAMS ((const char *)); -char *url_filename PARAMS ((const struct urlinfo *)); -void opt_url PARAMS ((struct urlinfo *)); +char *url_filename PARAMS ((const struct url *)); char *getproxy PARAMS ((uerr_t)); int no_proxy_match PARAMS ((const char *, const char **)); @@ -95,4 +142,8 @@ int no_proxy_match PARAMS ((const char *, const char **)); void convert_links PARAMS ((const char *, urlpos *)); urlpos *add_url PARAMS ((urlpos *, const char *, const char *)); +downloaded_file_t downloaded_file PARAMS ((downloaded_file_t, const char *)); + +char *rewrite_shorthand_url PARAMS ((const char *)); + #endif /* URL_H */