http-url.h revision 5394bed8aaef2a6c1c870a34a23a7824e1f370bb
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch#ifndef HTTP_URL_H
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch#define HTTP_URL_H
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Boschstruct http_url {
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch /* server */
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch const char *host_name;
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch struct ip_addr host_ip;
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch in_port_t port;
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch /* path */
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch const char *path;
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch /* ?query (still encoded) */
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch const char *enc_query;
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch /* #fragment (still encoded) */
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch const char *enc_fragment;
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch unsigned int have_host_ip:1; /* URL uses IP address */
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch unsigned int have_port:1;
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch unsigned int have_ssl:1;
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch};
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch/*
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch * HTTP URL parsing
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch */
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Boschenum http_url_parse_flags {
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch /* Scheme part 'http:' is already parsed externally. This implies that
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch this is an absolute HTTP URL. */
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch HTTP_URL_PARSE_SCHEME_EXTERNAL = 0x01,
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch /* Allow '#fragment' part in URL */
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch HTTP_URL_ALLOW_FRAGMENT_PART = 0x02
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch};
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Boschint http_url_parse(const char *url, struct http_url *base,
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch enum http_url_parse_flags flags,
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch struct http_url **url_r, const char **error_r);
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch/*
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch * HTTP URL construction
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch */
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Boschconst char *http_url_create(const struct http_url *url);
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch
5394bed8aaef2a6c1c870a34a23a7824e1f370bbStephan Bosch#endif