Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/azatoth/minidlna.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Maggard <jmaggard@users.sourceforge.net>2009-06-16 05:08:29 +0400
committerJustin Maggard <jmaggard@users.sourceforge.net>2009-06-16 05:08:29 +0400
commit23ebac08806a372bce46c887b01f518d6588cc51 (patch)
tree7384d529328ad98d150575deaef8564fa82cdcef /tivo_beacon.c
parent2bd77d714cc6e86afc621f436fb77bfee2bd46cd (diff)
* Increment version to 1.0.14.
* Fix TiVo beacon issue where it would only broadcast on eth0. * Fix a couple gcc4.4 warnings.
Diffstat (limited to 'tivo_beacon.c')
-rw-r--r--tivo_beacon.c48
1 files changed, 28 insertions, 20 deletions
diff --git a/tivo_beacon.c b/tivo_beacon.c
index eb68b1d..fcdd9a4 100644
--- a/tivo_beacon.c
+++ b/tivo_beacon.c
@@ -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;
- }
-
- strcpy( ifr.ifr_name, "eth0" );
- rval = ioctl( s, SIOCGIFBRDADDR, &ifr );
- if ( rval < 0 )
- {
- close(s);
- 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));
+ }
}
- 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;
}
/*