diff options
author | Justin Maggard <jmaggard@users.sourceforge.net> | 2009-06-16 05:08:29 +0400 |
---|---|---|
committer | Justin Maggard <jmaggard@users.sourceforge.net> | 2009-06-16 05:08:29 +0400 |
commit | 23ebac08806a372bce46c887b01f518d6588cc51 (patch) | |
tree | 7384d529328ad98d150575deaef8564fa82cdcef /tivo_beacon.c | |
parent | 2bd77d714cc6e86afc621f436fb77bfee2bd46cd (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.c | 48 |
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; } /* |