* Increment version to 1.0.14.
* Fix TiVo beacon issue where it would only broadcast on eth0. * Fix a couple gcc4.4 warnings.
This commit is contained in:
parent
94989f8b15
commit
944729cf12
16
getifaddr.c
16
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
|
||||
|
40
minidlna.c
40
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<argc; i++)
|
||||
@ -226,7 +227,7 @@ init(int argc, char * * argv)
|
||||
if( (getifhwaddr("eth0", mac_str, 64) < 0) &&
|
||||
(getifhwaddr("eth1", mac_str, 64) < 0) )
|
||||
{
|
||||
DPRINTF(E_WARN, L_GENERAL, "No MAC address found. Falling back to generic UUID.\n");
|
||||
DPRINTF(E_OFF, L_GENERAL, "No MAC address found. Falling back to generic UUID.\n");
|
||||
strcpy(mac_str, "554e4b4e4f57");
|
||||
}
|
||||
strcpy(uuidvalue+5, "4d696e69-444c-164e-9d41-");
|
||||
@ -235,16 +236,6 @@ init(int argc, char * * argv)
|
||||
|
||||
getfriendlyname(friendly_name, FRIENDLYNAME_MAX_LEN);
|
||||
|
||||
char ext_ip_addr[INET_ADDRSTRLEN];
|
||||
if( (getsysaddr(ext_ip_addr, INET_ADDRSTRLEN) < 0) &&
|
||||
(getifaddr("eth0", ext_ip_addr, INET_ADDRSTRLEN) < 0) &&
|
||||
(getifaddr("eth1", ext_ip_addr, INET_ADDRSTRLEN) < 0) )
|
||||
{
|
||||
printf("No IP!\n");
|
||||
return 1;
|
||||
}
|
||||
if( parselanaddr(&lan_addr[n_lan_addr], ext_ip_addr) == 0 )
|
||||
n_lan_addr++;
|
||||
runtime_vars.port = -1;
|
||||
runtime_vars.notify_interval = 895; /* seconds between SSDP announces */
|
||||
|
||||
@ -469,10 +460,25 @@ init(int argc, char * * argv)
|
||||
fprintf(stderr, "Unknown option: %s\n", argv[i]);
|
||||
}
|
||||
}
|
||||
/* If no IP was specified, try to detect one */
|
||||
if( n_lan_addr < 1 )
|
||||
{
|
||||
if( (getsysaddr(ext_ip_addr, INET_ADDRSTRLEN) < 0) &&
|
||||
(getifaddr("eth0", ext_ip_addr, INET_ADDRSTRLEN) < 0) &&
|
||||
(getifaddr("eth1", ext_ip_addr, INET_ADDRSTRLEN) < 0) )
|
||||
{
|
||||
DPRINTF(E_OFF, L_GENERAL, "No IP address automatically detected!\n");
|
||||
}
|
||||
if( *ext_ip_addr && parselanaddr(&lan_addr[n_lan_addr], ext_ip_addr) == 0 )
|
||||
{
|
||||
n_lan_addr++;
|
||||
}
|
||||
}
|
||||
|
||||
if( (n_lan_addr==0) || (runtime_vars.port<=0) )
|
||||
{
|
||||
fprintf(stderr, "Usage:\n\t"
|
||||
"%s [-f config_file] [-i ext_ifname] [-o ext_ip]\n"
|
||||
"%s [-f config_file]\n"
|
||||
"\t\t[-a listening_ip] [-p port] [-d]\n"
|
||||
/*"[-l logfile] " not functionnal */
|
||||
"\t\t[-s serial] [-m model_number] \n"
|
||||
@ -675,7 +681,7 @@ main(int argc, char * * argv)
|
||||
"messages. EXITING\n");
|
||||
}
|
||||
|
||||
#ifdef TIVO_SUPPORT
|
||||
#ifdef TIVO_SUPPORT
|
||||
if( GETFLAG(TIVOMASK) )
|
||||
{
|
||||
DPRINTF(E_WARN, L_GENERAL, "TiVo support is enabled.\n");
|
||||
@ -693,13 +699,13 @@ main(int argc, char * * argv)
|
||||
}
|
||||
tivo_bcast.sin_family = AF_INET;
|
||||
tivo_bcast.sin_addr.s_addr = htonl(getBcastAddress());
|
||||
tivo_bcast.sin_port = htons( 2190 );
|
||||
tivo_bcast.sin_port = htons(2190);
|
||||
}
|
||||
else
|
||||
{
|
||||
sbeacon = -1;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
SendSSDPGoodbye(snotify, n_lan_addr);
|
||||
|
||||
|
@ -27,9 +27,6 @@ enable_tivo=no
|
||||
# default presentation url is http address on port 80
|
||||
#presentation_url=http://www.mylan/index.php
|
||||
|
||||
# report system uptime instead of daemon uptime
|
||||
system_uptime=no
|
||||
|
||||
# notify interval in seconds. default is 30 seconds.
|
||||
notify_interval=900
|
||||
|
||||
|
@ -98,31 +98,39 @@ OpenAndConfTivoBeaconSocket()
|
||||
/*
|
||||
* Returns the interface broadcast address to be used for beacons
|
||||
*/
|
||||
uint32_t getBcastAddress( void )
|
||||
uint32_t
|
||||
getBcastAddress(void)
|
||||
{
|
||||
struct ifreq ifr;
|
||||
struct sockaddr_in *sin;
|
||||
int s, rval;
|
||||
int i, rval;
|
||||
int s = socket(PF_INET, SOCK_STREAM, 0);
|
||||
struct sockaddr_in sin;
|
||||
struct sockaddr_in addr;
|
||||
struct ifreq ifr;
|
||||
|
||||
s = socket( AF_INET, SOCK_DGRAM, 0 );
|
||||
if ( s < 0 )
|
||||
for (i=1; 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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -24,8 +24,8 @@ struct aBeacon
|
||||
struct aBeacon* next;
|
||||
};
|
||||
|
||||
|
||||
uint32_t getBcastAddress( void );
|
||||
uint32_t
|
||||
getBcastAddress();
|
||||
|
||||
int
|
||||
OpenAndConfTivoBeaconSocket();
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
#include <sqlite3.h>
|
||||
|
||||
#define MINIDLNA_VERSION "1.0.13"
|
||||
#define MINIDLNA_VERSION "1.0.14"
|
||||
|
||||
#define CLIENT_CACHE_SLOTS 20
|
||||
#define USE_FORK 1
|
||||
|
Loading…
x
Reference in New Issue
Block a user