Try to support windows xp.
							parent
							
								
									a66779ed00
								
							
						
					
					
						commit
						2faba9bed9
					
				| 
						 | 
					@ -45,6 +45,45 @@ static IP_PORT broadcasts[MAX_BROADCASTS];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <iphlpapi.h>
 | 
					#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)
 | 
					static void get_broadcast_info(uint16 port)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    number_broadcasts = 0;
 | 
					    number_broadcasts = 0;
 | 
				
			||||||
| 
						 | 
					@ -71,13 +110,11 @@ static void get_broadcast_info(uint16 port)
 | 
				
			||||||
        IP_ADAPTER_INFO *pAdapter = pAdapterInfo;
 | 
					        IP_ADAPTER_INFO *pAdapter = pAdapterInfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        while (pAdapter) {
 | 
					        while (pAdapter) {
 | 
				
			||||||
            unsigned long iface_ip = 0, subnet_mask = 0;
 | 
					            uint32_t iface_ip = 0, subnet_mask = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            
 | 
					            if (inet_pton4(pAdapter->IpAddressList.IpMask.String, &subnet_mask) == 1
 | 
				
			||||||
            if (inet_pton(AF_INET, pAdapter->IpAddressList.IpMask.String, &subnet_mask) == 1
 | 
					                    && inet_pton4(pAdapter->IpAddressList.IpAddress.String, &iface_ip) == 1) {
 | 
				
			||||||
                    && inet_pton(AF_INET, pAdapter->IpAddressList.IpAddress.String, &iface_ip) == 1) {
 | 
					 | 
				
			||||||
                    IP_PORT *ip_port = &broadcasts[number_broadcasts];
 | 
					                    IP_PORT *ip_port = &broadcasts[number_broadcasts];
 | 
				
			||||||
                    //ip_port->ip.family = AF_INET;
 | 
					 | 
				
			||||||
                    uint32 broadcast_ip = iface_ip | ~subnet_mask;
 | 
					                    uint32 broadcast_ip = iface_ip | ~subnet_mask;
 | 
				
			||||||
                    ip_port->ip = broadcast_ip;
 | 
					                    ip_port->ip = broadcast_ip;
 | 
				
			||||||
                    ip_port->port = port;
 | 
					                    ip_port->port = port;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue