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();
|
||||
|
||||
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) {
|
||||
if(
|
||||
@ -470,8 +470,8 @@ static BOOL load_nics(void) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
nnic->ipaddr = ntohl(inet_addr(ifptr->IpAddressList.IpAddress.String));
|
||||
nnic->bcast = nnic->ipaddr | ~ntohl(inet_addr(ifptr->IpAddressList.IpMask.String));
|
||||
nnic->ipaddr = inet_addr(ifptr->IpAddressList.IpAddress.String);
|
||||
nnic->bcast = nnic->ipaddr | ~inet_addr(ifptr->IpAddressList.IpMask.String);
|
||||
|
||||
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);
|
||||
memcpy(packet->data, buf, len);
|
||||
|
||||
/* TODO: Only send out enabled interfaces */
|
||||
|
||||
struct sockaddr_in saddr;
|
||||
saddr.sin_family = AF_INET;
|
||||
saddr.sin_addr.s_addr = INADDR_BROADCAST;
|
||||
saddr.sin_port = htons(global_conf.udp_port);
|
||||
|
||||
int sval = r_sendto(net_fd, (char*)packet, psize, 0, (struct sockaddr*)&saddr, sizeof(saddr));
|
||||
if(sval == -1) {
|
||||
len = -1;
|
||||
ipx_host *host = find_host(packet->dest_net, packet->dest_node);
|
||||
|
||||
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user