mirror of
https://github.com/solemnwarning/ipxwrapper
synced 2024-12-30 16:45:37 +01:00
Updated sendto() to only broadcast on enabled interfaces
This commit is contained in:
parent
39233b20a1
commit
c2e26c7cab
@ -322,7 +322,7 @@ static DWORD WINAPI router_main(LPVOID buf) {
|
|||||||
|
|
||||||
lock_mutex();
|
lock_mutex();
|
||||||
|
|
||||||
add_host(packet->src_net, packet->src_node, ntohl(addr.sin_addr.s_addr));
|
add_host(packet->src_net, packet->src_node, addr.sin_addr.s_addr);
|
||||||
|
|
||||||
for(sockptr = sockets; sockptr; sockptr = sockptr->next) {
|
for(sockptr = sockets; sockptr; sockptr = sockptr->next) {
|
||||||
if(
|
if(
|
||||||
@ -470,8 +470,8 @@ static BOOL load_nics(void) {
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
nnic->ipaddr = ntohl(inet_addr(ifptr->IpAddressList.IpAddress.String));
|
nnic->ipaddr = inet_addr(ifptr->IpAddressList.IpAddress.String);
|
||||||
nnic->bcast = nnic->ipaddr | ~ntohl(inet_addr(ifptr->IpAddressList.IpMask.String));
|
nnic->bcast = nnic->ipaddr | ~inet_addr(ifptr->IpAddressList.IpMask.String);
|
||||||
|
|
||||||
memcpy(nnic->hwaddr, ifptr->Address, 6);
|
memcpy(nnic->hwaddr, ifptr->Address, 6);
|
||||||
|
|
||||||
|
@ -659,16 +659,35 @@ int WSAAPI sendto(SOCKET fd, const char *buf, int len, int flags, const struct s
|
|||||||
packet->size = htons(len);
|
packet->size = htons(len);
|
||||||
memcpy(packet->data, buf, len);
|
memcpy(packet->data, buf, len);
|
||||||
|
|
||||||
/* TODO: Only send out enabled interfaces */
|
|
||||||
|
|
||||||
struct sockaddr_in saddr;
|
struct sockaddr_in saddr;
|
||||||
saddr.sin_family = AF_INET;
|
saddr.sin_family = AF_INET;
|
||||||
saddr.sin_addr.s_addr = INADDR_BROADCAST;
|
|
||||||
saddr.sin_port = htons(global_conf.udp_port);
|
saddr.sin_port = htons(global_conf.udp_port);
|
||||||
|
|
||||||
int sval = r_sendto(net_fd, (char*)packet, psize, 0, (struct sockaddr*)&saddr, sizeof(saddr));
|
ipx_host *host = find_host(packet->dest_net, packet->dest_node);
|
||||||
if(sval == -1) {
|
|
||||||
len = -1;
|
if(host) {
|
||||||
|
saddr.sin_addr.s_addr = host->ipaddr;
|
||||||
|
|
||||||
|
int sval = r_sendto(net_fd, (char*)packet, psize, 0, (struct sockaddr*)&saddr, sizeof(saddr));
|
||||||
|
if(sval == -1) {
|
||||||
|
len = -1;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
ipx_nic *nic = nics;
|
||||||
|
int success = 0;
|
||||||
|
|
||||||
|
while(nic) {
|
||||||
|
saddr.sin_addr.s_addr = nic->bcast;
|
||||||
|
|
||||||
|
int sval = r_sendto(net_fd, (char*)packet, psize, 0, (struct sockaddr*)&saddr, sizeof(saddr));
|
||||||
|
if(sval >= 0) {
|
||||||
|
success = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
nic = nic->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
len = success ? len : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(packet);
|
free(packet);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user