diff options
author | Nicolas George <george@nsup.org> | 2020-07-29 14:39:20 +0200 |
---|---|---|
committer | Nicolas George <george@nsup.org> | 2020-08-12 16:33:09 +0200 |
commit | d853293679f93ef882e6a5f1c47eb5a65ceddf3d (patch) | |
tree | a98280626780bd89a6d3294558667ed2bc617a27 /libavformat/url.h | |
parent | 64ff61b3c52af335e811fe04b85108775e1f2784 (diff) | |
download | ffmpeg-d853293679f93ef882e6a5f1c47eb5a65ceddf3d.tar.gz |
lavf/url: add ff_url_decompose().
Diffstat (limited to 'libavformat/url.h')
-rw-r--r-- | libavformat/url.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libavformat/url.h b/libavformat/url.h index de0d30aca0..ae27da5c73 100644 --- a/libavformat/url.h +++ b/libavformat/url.h @@ -344,4 +344,45 @@ const AVClass *ff_urlcontext_child_class_iterate(void **iter); const URLProtocol **ffurl_get_protocols(const char *whitelist, const char *blacklist); +typedef struct URLComponents { + const char *url; /**< whole URL, for reference */ + const char *scheme; /**< possibly including lavf-specific options */ + const char *authority; /**< "//" if it is a real URL */ + const char *userinfo; /**< including final '@' if present */ + const char *host; + const char *port; /**< including initial ':' if present */ + const char *path; + const char *query; /**< including initial '?' if present */ + const char *fragment; /**< including initial '#' if present */ + const char *end; +} URLComponents; + +#define url_component_end_scheme authority +#define url_component_end_authority userinfo +#define url_component_end_userinfo host +#define url_component_end_host port +#define url_component_end_port path +#define url_component_end_path query +#define url_component_end_query fragment +#define url_component_end_fragment end +#define url_component_end_authority_full path + +#define URL_COMPONENT_HAVE(uc, component) \ + ((uc).url_component_end_##component > (uc).component) + +/** + * Parse an URL to find the components. + * + * Each component runs until the start of the next component, + * possibly including a mandatory delimiter. + * + * @param uc structure to fill with pointers to the components. + * @param url URL to parse. + * @param end end of the URL, or NULL to parse to the end of string. + * + * @return >= 0 for success or an AVERROR code, especially if the URL is + * malformed. + */ +int ff_url_decompose(URLComponents *uc, const char *url, const char *end); + #endif /* AVFORMAT_URL_H */ |