mirror of
https://gitlab.com/Mr_Goldberg/goldberg_emulator.git
synced 2024-11-27 14:08:39 +01:00
Try to support windows xp.
This commit is contained in:
parent
a66779ed00
commit
2faba9bed9
1 changed files with 42 additions and 5 deletions
|
@ -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 a new issue