Commit f3bfe388 authored by Måns Rullgård's avatar Måns Rullgård

Make ff_url_split() public

ff_url_split() is retained as an alias, as it was used by ffserver,
to avoid breaking ABI compatibility with it.

Originally committed as revision 23822 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 350120d2
...@@ -2978,7 +2978,7 @@ static void rtsp_cmd_describe(HTTPContext *c, const char *url) ...@@ -2978,7 +2978,7 @@ static void rtsp_cmd_describe(HTTPContext *c, const char *url)
struct sockaddr_in my_addr; struct sockaddr_in my_addr;
/* find which url is asked */ /* find which url is asked */
ff_url_split(NULL, 0, NULL, 0, NULL, 0, NULL, path1, sizeof(path1), url); av_url_split(NULL, 0, NULL, 0, NULL, 0, NULL, path1, sizeof(path1), url);
path = path1; path = path1;
if (*path == '/') if (*path == '/')
path++; path++;
...@@ -3055,7 +3055,7 @@ static void rtsp_cmd_setup(HTTPContext *c, const char *url, ...@@ -3055,7 +3055,7 @@ static void rtsp_cmd_setup(HTTPContext *c, const char *url,
RTSPActionServerSetup setup; RTSPActionServerSetup setup;
/* find which url is asked */ /* find which url is asked */
ff_url_split(NULL, 0, NULL, 0, NULL, 0, NULL, path1, sizeof(path1), url); av_url_split(NULL, 0, NULL, 0, NULL, 0, NULL, path1, sizeof(path1), url);
path = path1; path = path1;
if (*path == '/') if (*path == '/')
path++; path++;
...@@ -3198,7 +3198,7 @@ static HTTPContext *find_rtp_session_with_url(const char *url, ...@@ -3198,7 +3198,7 @@ static HTTPContext *find_rtp_session_with_url(const char *url,
return NULL; return NULL;
/* find which url is asked */ /* find which url is asked */
ff_url_split(NULL, 0, NULL, 0, NULL, 0, NULL, path1, sizeof(path1), url); av_url_split(NULL, 0, NULL, 0, NULL, 0, NULL, path1, sizeof(path1), url);
path = path1; path = path1;
if (*path == '/') if (*path == '/')
path++; path++;
......
...@@ -1184,6 +1184,32 @@ int64_t av_gen_search(AVFormatContext *s, int stream_index, ...@@ -1184,6 +1184,32 @@ int64_t av_gen_search(AVFormatContext *s, int stream_index,
/** media file output */ /** media file output */
int av_set_parameters(AVFormatContext *s, AVFormatParameters *ap); int av_set_parameters(AVFormatContext *s, AVFormatParameters *ap);
/**
* Split a URL string into components.
*
* The pointers to buffers for storing individual components may be null,
* in order to ignore that component. Buffers for components not found are
* set to empty strings. If the port is not found, it is set to a negative
* value.
*
* @param proto the buffer for the protocol
* @param proto_size the size of the proto buffer
* @param authorization the buffer for the authorization
* @param authorization_size the size of the authorization buffer
* @param hostname the buffer for the host name
* @param hostname_size the size of the hostname buffer
* @param port_ptr a pointer to store the port number in
* @param path the buffer for the path
* @param path_size the size of the path buffer
* @param url the URL to split
*/
void av_url_split(char *proto, int proto_size,
char *authorization, int authorization_size,
char *hostname, int hostname_size,
int *port_ptr,
char *path, int path_size,
const char *url);
/** /**
* Allocates the stream private data and writes the stream header to an * Allocates the stream private data and writes the stream header to an
* output media file. * output media file.
......
...@@ -90,7 +90,7 @@ static int gopher_open(URLContext *h, const char *uri, int flags) ...@@ -90,7 +90,7 @@ static int gopher_open(URLContext *h, const char *uri, int flags)
h->priv_data = s; h->priv_data = s;
/* needed in any case to build the host string */ /* needed in any case to build the host string */
ff_url_split(NULL, 0, auth, sizeof(auth), hostname, sizeof(hostname), &port, av_url_split(NULL, 0, auth, sizeof(auth), hostname, sizeof(hostname), &port,
path, sizeof(path), uri); path, sizeof(path), uri);
if (port < 0) if (port < 0)
......
...@@ -105,12 +105,12 @@ static int http_open_cnx(URLContext *h) ...@@ -105,12 +105,12 @@ static int http_open_cnx(URLContext *h)
/* fill the dest addr */ /* fill the dest addr */
redo: redo:
/* needed in any case to build the host string */ /* needed in any case to build the host string */
ff_url_split(NULL, 0, auth, sizeof(auth), hostname, sizeof(hostname), &port, av_url_split(NULL, 0, auth, sizeof(auth), hostname, sizeof(hostname), &port,
path1, sizeof(path1), s->location); path1, sizeof(path1), s->location);
ff_url_join(hoststr, sizeof(hoststr), NULL, NULL, hostname, port, NULL); ff_url_join(hoststr, sizeof(hoststr), NULL, NULL, hostname, port, NULL);
if (use_proxy) { if (use_proxy) {
ff_url_split(NULL, 0, auth, sizeof(auth), hostname, sizeof(hostname), &port, av_url_split(NULL, 0, auth, sizeof(auth), hostname, sizeof(hostname), &port,
NULL, 0, proxy_path); NULL, 0, proxy_path);
path = s->location; path = s->location;
} else { } else {
......
...@@ -89,27 +89,9 @@ int ff_probe_input_buffer(ByteIOContext **pb, AVInputFormat **fmt, ...@@ -89,27 +89,9 @@ int ff_probe_input_buffer(ByteIOContext **pb, AVInputFormat **fmt,
const char *filename, void *logctx, const char *filename, void *logctx,
unsigned int offset, unsigned int max_probe_size); unsigned int offset, unsigned int max_probe_size);
#if LIBAVFORMAT_VERSION_MAJOR < 53
/** /**
* Splits a URL string into components. To reassemble components back into * @deprecated use av_url_split() instead
* a URL, use ff_url_join instead of using snprintf directly.
*
* The pointers to buffers for storing individual components may be null,
* in order to ignore that component. Buffers for components not found are
* set to empty strings. If the port isn't found, it is set to a negative
* value.
*
* @see ff_url_join
*
* @param proto the buffer for the protocol
* @param proto_size the size of the proto buffer
* @param authorization the buffer for the authorization
* @param authorization_size the size of the authorization buffer
* @param hostname the buffer for the host name
* @param hostname_size the size of the hostname buffer
* @param port_ptr a pointer to store the port number in
* @param path the buffer for the path
* @param path_size the size of the path buffer
* @param url the URL to split
*/ */
void ff_url_split(char *proto, int proto_size, void ff_url_split(char *proto, int proto_size,
char *authorization, int authorization_size, char *authorization, int authorization_size,
...@@ -117,15 +99,16 @@ void ff_url_split(char *proto, int proto_size, ...@@ -117,15 +99,16 @@ void ff_url_split(char *proto, int proto_size,
int *port_ptr, int *port_ptr,
char *path, int path_size, char *path, int path_size,
const char *url); const char *url);
#endif
/** /**
* Assembles a URL string from components. This is the reverse operation * Assembles a URL string from components. This is the reverse operation
* of ff_url_split. * of av_url_split.
* *
* Note, this requires networking to be initialized, so the caller must * Note, this requires networking to be initialized, so the caller must
* ensure ff_network_init has been called. * ensure ff_network_init has been called.
* *
* @see ff_url_split * @see av_url_split
* *
* @param str the buffer to fill with the url * @param str the buffer to fill with the url
* @param size the size of the str buffer * @param size the size of the str buffer
......
...@@ -581,7 +581,7 @@ static int mms_open(URLContext *h, const char *uri, int flags) ...@@ -581,7 +581,7 @@ static int mms_open(URLContext *h, const char *uri, int flags)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
// only for MMS over TCP, so set proto = NULL // only for MMS over TCP, so set proto = NULL
ff_url_split(NULL, 0, NULL, 0, av_url_split(NULL, 0, NULL, 0,
mms->host, sizeof(mms->host), &port, mms->path, mms->host, sizeof(mms->host), &port, mms->path,
sizeof(mms->path), uri); sizeof(mms->path), uri);
......
...@@ -813,7 +813,7 @@ static int rtmp_open(URLContext *s, const char *uri, int flags) ...@@ -813,7 +813,7 @@ static int rtmp_open(URLContext *s, const char *uri, int flags)
s->priv_data = rt; s->priv_data = rt;
rt->is_input = !(flags & URL_WRONLY); rt->is_input = !(flags & URL_WRONLY);
ff_url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname), &port, av_url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname), &port,
path, sizeof(path), s->filename); path, sizeof(path), s->filename);
if (port < 0) if (port < 0)
......
...@@ -66,7 +66,7 @@ int rtp_set_remote_url(URLContext *h, const char *uri) ...@@ -66,7 +66,7 @@ int rtp_set_remote_url(URLContext *h, const char *uri)
char buf[1024]; char buf[1024];
char path[1024]; char path[1024];
ff_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port, av_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port,
path, sizeof(path), uri); path, sizeof(path), uri);
ff_url_join(buf, sizeof(buf), "udp", NULL, hostname, port, "%s", path); ff_url_join(buf, sizeof(buf), "udp", NULL, hostname, port, "%s", path);
...@@ -146,7 +146,7 @@ static int rtp_open(URLContext *h, const char *uri, int flags) ...@@ -146,7 +146,7 @@ static int rtp_open(URLContext *h, const char *uri, int flags)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
h->priv_data = s; h->priv_data = s;
ff_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &rtp_port, av_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &rtp_port,
path, sizeof(path), uri); path, sizeof(path), uri);
/* extract parameters */ /* extract parameters */
ttl = -1; ttl = -1;
......
...@@ -327,7 +327,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1, ...@@ -327,7 +327,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
rtsp_st = st->priv_data; rtsp_st = st->priv_data;
/* XXX: may need to add full url resolution */ /* XXX: may need to add full url resolution */
ff_url_split(proto, sizeof(proto), NULL, 0, NULL, 0, av_url_split(proto, sizeof(proto), NULL, 0, NULL, 0,
NULL, NULL, 0, p); NULL, NULL, 0, p);
if (proto[0] == '\0') { if (proto[0] == '\0') {
/* relative control URL */ /* relative control URL */
...@@ -1366,7 +1366,7 @@ int ff_rtsp_connect(AVFormatContext *s) ...@@ -1366,7 +1366,7 @@ int ff_rtsp_connect(AVFormatContext *s)
redirect: redirect:
rt->control_transport = RTSP_MODE_PLAIN; rt->control_transport = RTSP_MODE_PLAIN;
/* extract hostname and port */ /* extract hostname and port */
ff_url_split(NULL, 0, auth, sizeof(auth), av_url_split(NULL, 0, auth, sizeof(auth),
host, sizeof(host), &port, path, sizeof(path), s->filename); host, sizeof(host), &port, path, sizeof(path), s->filename);
if (*auth) { if (*auth) {
av_strlcpy(rt->auth, auth, sizeof(rt->auth)); av_strlcpy(rt->auth, auth, sizeof(rt->auth));
......
...@@ -109,7 +109,7 @@ static int sdp_get_address(char *dest_addr, int size, int *ttl, const char *url) ...@@ -109,7 +109,7 @@ static int sdp_get_address(char *dest_addr, int size, int *ttl, const char *url)
const char *p; const char *p;
char proto[32]; char proto[32];
ff_url_split(proto, sizeof(proto), NULL, 0, dest_addr, size, &port, NULL, 0, url); av_url_split(proto, sizeof(proto), NULL, 0, dest_addr, size, &port, NULL, 0, url);
*ttl = 0; *ttl = 0;
......
...@@ -45,7 +45,7 @@ static int tcp_open(URLContext *h, const char *uri, int flags) ...@@ -45,7 +45,7 @@ static int tcp_open(URLContext *h, const char *uri, int flags)
char hostname[1024],proto[1024],path[1024]; char hostname[1024],proto[1024],path[1024];
char portstr[10]; char portstr[10];
ff_url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname), av_url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname),
&port, path, sizeof(path), uri); &port, path, sizeof(path), uri);
if (strcmp(proto,"tcp") || port <= 0 || port >= 65536) if (strcmp(proto,"tcp") || port <= 0 || port >= 65536)
return AVERROR(EINVAL); return AVERROR(EINVAL);
......
...@@ -266,7 +266,7 @@ int udp_set_remote_url(URLContext *h, const char *uri) ...@@ -266,7 +266,7 @@ int udp_set_remote_url(URLContext *h, const char *uri)
char hostname[256]; char hostname[256];
int port; int port;
ff_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port, NULL, 0, uri); av_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port, NULL, 0, uri);
/* set the destination address */ /* set the destination address */
s->dest_addr_len = udp_set_url(&s->dest_addr, hostname, port); s->dest_addr_len = udp_set_url(&s->dest_addr, hostname, port);
...@@ -347,9 +347,9 @@ static int udp_open(URLContext *h, const char *uri, int flags) ...@@ -347,9 +347,9 @@ static int udp_open(URLContext *h, const char *uri, int flags)
} }
/* fill the dest addr */ /* fill the dest addr */
ff_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port, NULL, 0, uri); av_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port, NULL, 0, uri);
/* XXX: fix ff_url_split */ /* XXX: fix av_url_split */
if (hostname[0] == '\0' || hostname[0] == '?') { if (hostname[0] == '\0' || hostname[0] == '?') {
/* only accepts null hostname if input */ /* only accepts null hostname if input */
if (flags & URL_WRONLY) if (flags & URL_WRONLY)
......
...@@ -3493,12 +3493,30 @@ void av_pkt_dump_log(void *avcl, int level, AVPacket *pkt, int dump_payload) ...@@ -3493,12 +3493,30 @@ void av_pkt_dump_log(void *avcl, int level, AVPacket *pkt, int dump_payload)
pkt_dump_internal(avcl, NULL, level, pkt, dump_payload); pkt_dump_internal(avcl, NULL, level, pkt, dump_payload);
} }
#if LIBAVFORMAT_VERSION_MAJOR < 53
attribute_deprecated
void ff_url_split(char *proto, int proto_size, void ff_url_split(char *proto, int proto_size,
char *authorization, int authorization_size, char *authorization, int authorization_size,
char *hostname, int hostname_size, char *hostname, int hostname_size,
int *port_ptr, int *port_ptr,
char *path, int path_size, char *path, int path_size,
const char *url) const char *url)
{
av_url_split(proto, proto_size,
authorization, authorization_size,
hostname, hostname_size,
port_ptr,
path, path_size,
url);
}
#endif
void av_url_split(char *proto, int proto_size,
char *authorization, int authorization_size,
char *hostname, int hostname_size,
int *port_ptr,
char *path, int path_size,
const char *url)
{ {
const char *p, *ls, *at, *col, *brk; const char *p, *ls, *at, *col, *brk;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment