Try to support windows xp.
							parent
							
								
									a66779ed00
								
							
						
					
					
						commit
						2faba9bed9
					
				| 
						 | 
				
			
			@ -45,6 +45,45 @@ static IP_PORT broadcasts[MAX_BROADCASTS];
 | 
			
		|||
 | 
			
		||||
#include <iphlpapi.h>
 | 
			
		||||
 | 
			
		||||
//windows xp support
 | 
			
		||||
static int
 | 
			
		||||
inet_pton4(const char *src, uint32_t *dst)
 | 
			
		||||
{
 | 
			
		||||
	static const char digits[] = "0123456789";
 | 
			
		||||
	int saw_digit, octets, ch;
 | 
			
		||||
	u_char tmp[sizeof(uint32_t)], *tp;
 | 
			
		||||
 | 
			
		||||
	saw_digit = 0;
 | 
			
		||||
	octets = 0;
 | 
			
		||||
	*(tp = tmp) = 0;
 | 
			
		||||
	while ((ch = *src++) != '\0') {
 | 
			
		||||
		const char *pch;
 | 
			
		||||
 | 
			
		||||
		if ((pch = strchr(digits, ch)) != NULL) {
 | 
			
		||||
			size_t nx = *tp * 10 + (pch - digits);
 | 
			
		||||
 | 
			
		||||
			if (nx > 255)
 | 
			
		||||
				return (0);
 | 
			
		||||
			*tp = (u_char) nx;
 | 
			
		||||
			if (! saw_digit) {
 | 
			
		||||
				if (++octets > 4)
 | 
			
		||||
					return (0);
 | 
			
		||||
				saw_digit = 1;
 | 
			
		||||
			}
 | 
			
		||||
		} else if (ch == '.' && saw_digit) {
 | 
			
		||||
			if (octets == 4)
 | 
			
		||||
				return (0);
 | 
			
		||||
			*++tp = 0;
 | 
			
		||||
			saw_digit = 0;
 | 
			
		||||
		} else
 | 
			
		||||
			return (0);
 | 
			
		||||
	}
 | 
			
		||||
	if (octets < 4)
 | 
			
		||||
		return (0);
 | 
			
		||||
	memcpy(dst, tmp, sizeof(uint32_t));
 | 
			
		||||
	return (1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void get_broadcast_info(uint16 port)
 | 
			
		||||
{
 | 
			
		||||
    number_broadcasts = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -71,13 +110,11 @@ static void get_broadcast_info(uint16 port)
 | 
			
		|||
        IP_ADAPTER_INFO *pAdapter = pAdapterInfo;
 | 
			
		||||
 | 
			
		||||
        while (pAdapter) {
 | 
			
		||||
            unsigned long iface_ip = 0, subnet_mask = 0;
 | 
			
		||||
            uint32_t iface_ip = 0, subnet_mask = 0;
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            if (inet_pton(AF_INET, pAdapter->IpAddressList.IpMask.String, &subnet_mask) == 1
 | 
			
		||||
                    && inet_pton(AF_INET, pAdapter->IpAddressList.IpAddress.String, &iface_ip) == 1) {
 | 
			
		||||
            if (inet_pton4(pAdapter->IpAddressList.IpMask.String, &subnet_mask) == 1
 | 
			
		||||
                    && inet_pton4(pAdapter->IpAddressList.IpAddress.String, &iface_ip) == 1) {
 | 
			
		||||
                    IP_PORT *ip_port = &broadcasts[number_broadcasts];
 | 
			
		||||
                    //ip_port->ip.family = AF_INET;
 | 
			
		||||
                    uint32 broadcast_ip = iface_ip | ~subnet_mask;
 | 
			
		||||
                    ip_port->ip = broadcast_ip;
 | 
			
		||||
                    ip_port->port = port;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue