diff --git a/getifaddr.c b/getifaddr.c index ca7cb99..18a5daf 100644 --- a/getifaddr.c +++ b/getifaddr.c @@ -62,30 +62,32 @@ getsysaddr(char * buf, int len) { int i; int s = socket(PF_INET, SOCK_STREAM, 0); + struct sockaddr_in addr; + struct ifreq ifr; + int ret = -1; for (i=1; i > 0; i++) { - struct ifreq ifr; - struct sockaddr_in *addr = (struct sockaddr_in *) &ifr.ifr_addr; - ifr.ifr_ifindex = i; if( ioctl(s, SIOCGIFNAME, &ifr) < 0 ) break; if(ioctl(s, SIOCGIFADDR, &ifr, sizeof(struct ifreq)) < 0) continue; - if(strncmp(inet_ntoa(addr->sin_addr), "127.", 4) == 0) + memcpy(&addr, &ifr.ifr_addr, sizeof(addr)); + if(strncmp(inet_ntoa(addr.sin_addr), "127.", 4) == 0) continue; - if(!inet_ntop(AF_INET, &addr->sin_addr, buf, len)) + if(!inet_ntop(AF_INET, &addr.sin_addr, buf, len)) { DPRINTF(E_ERROR, L_GENERAL, "inet_ntop(): %s\n", strerror(errno)); close(s); - return -1; + break; } + ret = 0; break; } close(s); - return 0; + return(ret); } int diff --git a/minidlna.c b/minidlna.c index 6b71a29..1f61ae9 100644 --- a/minidlna.c +++ b/minidlna.c @@ -147,14 +147,14 @@ parselanaddr(struct lan_addr_s * lan_addr, const char * str) } if(n>15) { - fprintf(stderr, "Error parsing address/mask : %s\n", str); + DPRINTF(E_OFF, L_GENERAL, "Error parsing address/mask: %s\n", str); return -1; } memcpy(lan_addr->str, str, n); lan_addr->str[n] = '\0'; if(!inet_aton(lan_addr->str, &lan_addr->addr)) { - fprintf(stderr, "Error parsing address/mask : %s\n", str); + DPRINTF(E_OFF, L_GENERAL, "Error parsing address/mask: %s\n", str); return -1; } lan_addr->mask.s_addr = htonl(nbits ? (0xffffffff << (32 - nbits)) : 0); @@ -210,6 +210,7 @@ init(int argc, char * * argv) char * string, * word; enum media_types type; char * path; + char ext_ip_addr[INET_ADDRSTRLEN] = {'\0'}; /* first check if "-f" option is used */ for(i=2; i 0; i++) { - return INADDR_BROADCAST; + ifr.ifr_ifindex = i; + if( ioctl(s, SIOCGIFNAME, &ifr) < 0 ) + break; + if(ioctl(s, SIOCGIFADDR, &ifr, sizeof(struct ifreq)) < 0) + continue; + memcpy(&addr, &ifr.ifr_addr, sizeof(addr)); + if(strcmp(inet_ntoa(addr.sin_addr), lan_addr[0].str) == 0) + { + rval = ioctl(s, SIOCGIFBRDADDR, &ifr); + if( rval < 0 ) + { + close(s); + return INADDR_BROADCAST; + } + memcpy(&sin, &ifr.ifr_broadaddr, sizeof(sin)); + close(s); + DPRINTF(E_DEBUG, L_TIVO, "Interface: %s broadcast addr %s \n", ifr.ifr_name, inet_ntoa(sin.sin_addr)); + return ntohl((uint32_t)(sin.sin_addr.s_addr)); + } } - strcpy( ifr.ifr_name, "eth0" ); - rval = ioctl( s, SIOCGIFBRDADDR, &ifr ); - if ( rval < 0 ) - { - close(s); - return INADDR_BROADCAST; - } - - sin = (struct sockaddr_in *)&ifr.ifr_broadaddr; - close(s); - DPRINTF(E_DEBUG, L_TIVO, "Interface: %s broadcast addr %s \n", "eth0", inet_ntoa(sin->sin_addr) ); - - return ntohl((uint32_t)(sin->sin_addr.s_addr)); + return INADDR_BROADCAST; } /* diff --git a/tivo_beacon.h b/tivo_beacon.h index b1982e4..2009492 100644 --- a/tivo_beacon.h +++ b/tivo_beacon.h @@ -24,8 +24,8 @@ struct aBeacon struct aBeacon* next; }; - -uint32_t getBcastAddress( void ); +uint32_t +getBcastAddress(); int OpenAndConfTivoBeaconSocket(); diff --git a/upnpglobalvars.h b/upnpglobalvars.h index dc53fd8..7d06e93 100644 --- a/upnpglobalvars.h +++ b/upnpglobalvars.h @@ -15,7 +15,7 @@ #include -#define MINIDLNA_VERSION "1.0.13" +#define MINIDLNA_VERSION "1.0.14" #define CLIENT_CACHE_SLOTS 20 #define USE_FORK 1