udp: Allow specifying the connect option in udp_set_remote_url, too

If the remote address is updated later with this function, the caller
shouldn't set the connect option until in this call.

Originally committed as revision 26245 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Martin Storsjö 2011-01-06 15:16:50 +00:00
parent babd19ce2e
commit 21a569f302
2 changed files with 21 additions and 1 deletions

View file

@ -245,8 +245,9 @@ static int udp_port(struct sockaddr_storage *addr, int addr_len)
int udp_set_remote_url(URLContext *h, const char *uri)
{
UDPContext *s = h->priv_data;
char hostname[256];
char hostname[256], buf[10];
int port;
const char *p;
av_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &port, NULL, 0, uri);
@ -256,6 +257,21 @@ int udp_set_remote_url(URLContext *h, const char *uri)
return AVERROR(EIO);
}
s->is_multicast = ff_is_multicast_address((struct sockaddr*) &s->dest_addr);
p = strchr(uri, '?');
if (p) {
if (find_info_tag(buf, sizeof(buf), "connect", p)) {
int was_connected = s->is_connected;
s->is_connected = strtol(buf, NULL, 10);
if (s->is_connected && !was_connected) {
if (connect(s->udp_fd, (struct sockaddr *) &s->dest_addr,
s->dest_addr_len)) {
s->is_connected = 0;
av_log(NULL, AV_LOG_ERROR, "connect: %s\n", strerror(errno));
return AVERROR(EIO);
}
}
}
}
return 0;
}