mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-16 04:15:05 +00:00
Remove some more duplicated code
Originally committed as revision 11038 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
d4936869ff
commit
aa519c4771
@ -158,13 +158,9 @@ static int udp_set_url(struct sockaddr_storage *addr, const char *hostname, int
|
|||||||
return addr_len;
|
return addr_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int udp_ipv6_set_local(URLContext *h) {
|
static int udp_socket_create(UDPContext *s, struct sockaddr_storage *addr, int *addr_len)
|
||||||
UDPContext *s = h->priv_data;
|
{
|
||||||
int udp_fd = -1;
|
int udp_fd = -1;
|
||||||
struct sockaddr_storage clientaddr;
|
|
||||||
socklen_t addrlen;
|
|
||||||
char sbuf[NI_MAXSERV];
|
|
||||||
char hbuf[NI_MAXHOST];
|
|
||||||
struct addrinfo *res0 = NULL, *res = NULL;
|
struct addrinfo *res0 = NULL, *res = NULL;
|
||||||
int family = AF_UNSPEC;
|
int family = AF_UNSPEC;
|
||||||
|
|
||||||
@ -182,25 +178,10 @@ static int udp_ipv6_set_local(URLContext *h) {
|
|||||||
if (udp_fd < 0)
|
if (udp_fd < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (bind(udp_fd, res0->ai_addr, res0->ai_addrlen) < 0) {
|
memcpy(addr, res->ai_addr, res->ai_addrlen);
|
||||||
perror("bind");
|
*addr_len = res->ai_addrlen;
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
freeaddrinfo(res0);
|
freeaddrinfo(res0);
|
||||||
res0 = NULL;
|
|
||||||
|
|
||||||
addrlen = sizeof(clientaddr);
|
|
||||||
if (getsockname(udp_fd, (struct sockaddr *)&clientaddr, &addrlen) < 0) {
|
|
||||||
perror("getsockname");
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getnameinfo((struct sockaddr *)&clientaddr, addrlen, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) != 0) {
|
|
||||||
perror("getnameinfo");
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
s->local_port = strtol(sbuf, NULL, 10);
|
|
||||||
|
|
||||||
return udp_fd;
|
return udp_fd;
|
||||||
|
|
||||||
@ -212,6 +193,19 @@ static int udp_ipv6_set_local(URLContext *h) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int udp_port(struct sockaddr_storage *addr, int addr_len)
|
||||||
|
{
|
||||||
|
char sbuf[NI_MAXSERV];
|
||||||
|
char hbuf[NI_MAXHOST];
|
||||||
|
|
||||||
|
if (getnameinfo((struct sockaddr *)addr, addr_len, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) != 0) {
|
||||||
|
perror("getnameinfo");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return strtol(sbuf, NULL, 10);
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
static int udp_set_url(struct sockaddr_in *addr, const char *hostname, int port)
|
static int udp_set_url(struct sockaddr_in *addr, const char *hostname, int port)
|
||||||
@ -225,6 +219,26 @@ static int udp_set_url(struct sockaddr_in *addr, const char *hostname, int port)
|
|||||||
return sizeof(struct sockaddr_in);
|
return sizeof(struct sockaddr_in);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int udp_socket_create(UDPContext *s, struct sockaddr_in *addr, int *addr_len)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
fd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
if (fd < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
addr->sin_family = AF_INET;
|
||||||
|
addr->sin_addr.s_addr = htonl (INADDR_ANY);
|
||||||
|
addr->sin_port = htons(s->local_port);
|
||||||
|
*addr_len = sizeof(struct sockaddr_in);
|
||||||
|
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int udp_port(struct sockaddr_in *addr, int len)
|
||||||
|
{
|
||||||
|
return ntohs(addr->sin_port);
|
||||||
|
}
|
||||||
#endif /* CONFIG_IPV6 */
|
#endif /* CONFIG_IPV6 */
|
||||||
|
|
||||||
|
|
||||||
@ -295,8 +309,10 @@ static int udp_open(URLContext *h, const char *uri, int flags)
|
|||||||
char buf[256];
|
char buf[256];
|
||||||
#ifndef CONFIG_IPV6
|
#ifndef CONFIG_IPV6
|
||||||
struct sockaddr_in my_addr;
|
struct sockaddr_in my_addr;
|
||||||
int len;
|
#else
|
||||||
|
struct sockaddr_storage my_addr;
|
||||||
#endif
|
#endif
|
||||||
|
int len;
|
||||||
|
|
||||||
h->is_streamed = 1;
|
h->is_streamed = 1;
|
||||||
h->max_packet_size = 1472;
|
h->max_packet_size = 1472;
|
||||||
@ -341,31 +357,22 @@ static int udp_open(URLContext *h, const char *uri, int flags)
|
|||||||
|
|
||||||
if (s->is_multicast && !(h->flags & URL_WRONLY))
|
if (s->is_multicast && !(h->flags & URL_WRONLY))
|
||||||
s->local_port = port;
|
s->local_port = port;
|
||||||
#ifndef CONFIG_IPV6
|
udp_fd = udp_socket_create(s, &my_addr, &len);
|
||||||
udp_fd = socket(AF_INET, SOCK_DGRAM, 0);
|
|
||||||
if (udp_fd < 0)
|
if (udp_fd < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
my_addr.sin_family = AF_INET;
|
|
||||||
my_addr.sin_addr.s_addr = htonl (INADDR_ANY);
|
|
||||||
my_addr.sin_port = htons(s->local_port);
|
|
||||||
|
|
||||||
if (s->reuse_socket)
|
if (s->reuse_socket)
|
||||||
if (setsockopt (udp_fd, SOL_SOCKET, SO_REUSEADDR, &(s->reuse_socket), sizeof(s->reuse_socket)) != 0)
|
if (setsockopt (udp_fd, SOL_SOCKET, SO_REUSEADDR, &(s->reuse_socket), sizeof(s->reuse_socket)) != 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
/* the bind is needed to give a port to the socket now */
|
/* the bind is needed to give a port to the socket now */
|
||||||
if (bind(udp_fd,(struct sockaddr *)&my_addr, sizeof(my_addr)) < 0)
|
if (bind(udp_fd,(struct sockaddr *)&my_addr, len) < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
len = sizeof(my_addr);
|
len = sizeof(my_addr);
|
||||||
getsockname(udp_fd, (struct sockaddr *)&my_addr, &len);
|
getsockname(udp_fd, (struct sockaddr *)&my_addr, &len);
|
||||||
s->local_port = ntohs(my_addr.sin_port);
|
s->local_port = udp_port(&my_addr, len);
|
||||||
#else
|
|
||||||
udp_fd = udp_ipv6_set_local(h);
|
|
||||||
if (udp_fd < 0)
|
|
||||||
goto fail;
|
|
||||||
#endif /* CONFIG_IPV6 */
|
|
||||||
if (s->is_multicast) {
|
if (s->is_multicast) {
|
||||||
if (h->flags & URL_WRONLY) {
|
if (h->flags & URL_WRONLY) {
|
||||||
/* output */
|
/* output */
|
||||||
|
Loading…
Reference in New Issue
Block a user