]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
SAT>IP server: bind only to IPv4 (IPv6 support is not defined in SAT>IP spec), fixes...
authorJaroslav Kysela <perex@perex.cz>
Fri, 27 Nov 2015 16:52:10 +0000 (17:52 +0100)
committerJaroslav Kysela <perex@perex.cz>
Fri, 27 Nov 2015 16:52:10 +0000 (17:52 +0100)
src/satip/server.c
src/tcp.c
src/tcp.h

index 3f7e63d7d98289189b7219fd95d796bdf80639b3..5537b1bdadfc2d51a2d2f17dbc491ab7ce1218ca 100644 (file)
@@ -719,7 +719,7 @@ void satip_server_init(int rtsp_port)
   satip_server_bootid = time(NULL);
   satip_server_conf.satip_deviceid = 1;
 
-  if (tcp_server_bound(http_server, &http) < 0) {
+  if (tcp_server_bound(http_server, &http, PF_INET) < 0) {
     tvherror("satips", "Unable to determine the HTTP/RTSP address");
     return;
   }
index 03a1a5efab5252562d6b1aa4535c169ceca9d099..f7a348e4b5517e9959061262eb8927f201da6eb2 100644 (file)
--- a/src/tcp.c
+++ b/src/tcp.c
@@ -929,7 +929,7 @@ tcp_server_delete(void *server)
  *
  */
 int
-tcp_default_ip_addr ( struct sockaddr_storage *deflt )
+tcp_default_ip_addr ( struct sockaddr_storage *deflt, int family )
 {
 
   struct sockaddr_storage ss;
@@ -937,7 +937,7 @@ tcp_default_ip_addr ( struct sockaddr_storage *deflt )
   int sock;
 
   memset(&ss, 0, sizeof(ss));
-  ss.ss_family = tcp_preferred_address_family;
+  ss.ss_family = family == PF_UNSPEC ? tcp_preferred_address_family : family;
   if (inet_pton(ss.ss_family,
                 ss.ss_family == AF_INET ?
                   /* Google name servers */
@@ -978,7 +978,7 @@ tcp_default_ip_addr ( struct sockaddr_storage *deflt )
  *
  */
 int
-tcp_server_bound ( void *server, struct sockaddr_storage *bound )
+tcp_server_bound ( void *server, struct sockaddr_storage *bound, int family )
 {
   tcp_server_t *ts = server;
   int i, len, port;
@@ -1001,7 +1001,7 @@ tcp_server_bound ( void *server, struct sockaddr_storage *bound )
   port = IP_PORT(ts->bound);
 
   /* no bind address was set, try to find one */
-  if (tcp_default_ip_addr(bound) < 0)
+  if (tcp_default_ip_addr(bound, family) < 0)
     return -1;
   if (bound->ss_family == AF_INET)
     IP_AS_V4(*bound, port) = port;
index d966aee88dd74c0b4cb88cd7e7231248bb029616..08b8cce5f453ae14277fbe253d21fe664f69a9d9 100644 (file)
--- a/src/tcp.h
+++ b/src/tcp.h
@@ -72,9 +72,9 @@ void tcp_server_register(void *server);
 
 void tcp_server_delete(void *server);
 
-int tcp_default_ip_addr(struct sockaddr_storage *deflt);
+int tcp_default_ip_addr(struct sockaddr_storage *deflt, int family);
 
-int tcp_server_bound(void *server, struct sockaddr_storage *bound);
+int tcp_server_bound(void *server, struct sockaddr_storage *bound, int family);
 
 int tcp_read(int fd, void *buf, size_t len);