mirror of
https://github.com/ntop/n2n.git
synced 2024-09-19 16:41:11 +02:00
encapsulated several fillings of n2n_sock_t in single function (#1025)
* encapsulated several fillings of n2n_sock_t in single function * Windows specifics... * stuck to the project's style code
This commit is contained in:
parent
063db27ea6
commit
ffb4e31b8a
|
@ -240,6 +240,8 @@ typedef struct tuntap_dev {
|
||||||
} tuntap_dev;
|
} tuntap_dev;
|
||||||
|
|
||||||
#define SOCKET int
|
#define SOCKET int
|
||||||
|
#else /* #ifndef WIN32 */
|
||||||
|
typedef u_short sa_family_t;
|
||||||
#endif /* #ifndef WIN32 */
|
#endif /* #ifndef WIN32 */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -190,6 +190,9 @@ int fill_sockaddr (struct sockaddr * addr,
|
||||||
size_t addrlen,
|
size_t addrlen,
|
||||||
const n2n_sock_t * sock);
|
const n2n_sock_t * sock);
|
||||||
|
|
||||||
|
int fill_n2nsock (n2n_sock_t* sock,
|
||||||
|
struct sockaddr* sa);
|
||||||
|
|
||||||
int encode_PACKET (uint8_t * base,
|
int encode_PACKET (uint8_t * base,
|
||||||
size_t * idx,
|
size_t * idx,
|
||||||
const n2n_common_t * common,
|
const n2n_common_t * common,
|
||||||
|
|
|
@ -2190,9 +2190,9 @@ void process_udp (n2n_edge_t *eee, const struct sockaddr_in *sender_sock, const
|
||||||
// TCP expects that we know our comm partner and does not deliver the sender
|
// TCP expects that we know our comm partner and does not deliver the sender
|
||||||
memcpy(&sender, &(eee->curr_sn->sock), sizeof(struct sockaddr_in));
|
memcpy(&sender, &(eee->curr_sn->sock), sizeof(struct sockaddr_in));
|
||||||
else {
|
else {
|
||||||
sender.family = AF_INET; /* UDP socket was opened PF_INET v4 */
|
// REVISIT: type conversion back and forth, choose a consistent approach throughout whole code,
|
||||||
sender.port = ntohs(sender_sock->sin_port);
|
// i.e. stick with more general sockaddr as long as possible and narrow only if required
|
||||||
memcpy(&(sender.addr.v4), &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
fill_n2nsock(&sender, (struct sockaddr*)sender_sock);
|
||||||
}
|
}
|
||||||
/* The packet may not have an orig_sender socket spec. So default to last
|
/* The packet may not have an orig_sender socket spec. So default to last
|
||||||
* hop as sender. */
|
* hop as sender. */
|
||||||
|
|
|
@ -1655,9 +1655,7 @@ static int process_udp (n2n_sn_t * sss,
|
||||||
/* REVISIT: when UDP/IPv6 is supported we will need a flag to indicate which
|
/* REVISIT: when UDP/IPv6 is supported we will need a flag to indicate which
|
||||||
* IP transport version the packet arrived on. May need to UDP sockets. */
|
* IP transport version the packet arrived on. May need to UDP sockets. */
|
||||||
memset(&sender, 0, sizeof(n2n_sock_t));
|
memset(&sender, 0, sizeof(n2n_sock_t));
|
||||||
sender.family = AF_INET; /* UDP socket was opened PF_INET v4 */
|
fill_n2nsock(&sender, (struct sockaddr*)sender_sock);
|
||||||
sender.port = ntohs(sender_sock->sin_port);
|
|
||||||
memcpy(&(sender.addr.v4), &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
|
||||||
|
|
||||||
from_supernode = cmn.flags & N2N_FLAGS_FROM_SUPERNODE;
|
from_supernode = cmn.flags & N2N_FLAGS_FROM_SUPERNODE;
|
||||||
if(from_supernode) {
|
if(from_supernode) {
|
||||||
|
@ -1720,9 +1718,7 @@ static int process_udp (n2n_sn_t * sss,
|
||||||
/* We are going to add socket even if it was not there before */
|
/* We are going to add socket even if it was not there before */
|
||||||
cmn2.flags |= N2N_FLAGS_SOCKET | N2N_FLAGS_FROM_SUPERNODE;
|
cmn2.flags |= N2N_FLAGS_SOCKET | N2N_FLAGS_FROM_SUPERNODE;
|
||||||
|
|
||||||
pkt.sock.family = AF_INET;
|
fill_n2nsock(&pkt.sock, (struct sockaddr*)sender_sock);
|
||||||
pkt.sock.port = ntohs(sender_sock->sin_port);
|
|
||||||
memcpy(pkt.sock.addr.v4, &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
|
||||||
|
|
||||||
rec_buf = encbuf;
|
rec_buf = encbuf;
|
||||||
/* Re-encode the header. */
|
/* Re-encode the header. */
|
||||||
|
@ -1805,9 +1801,7 @@ static int process_udp (n2n_sn_t * sss,
|
||||||
/* We are going to add socket even if it was not there before */
|
/* We are going to add socket even if it was not there before */
|
||||||
cmn2.flags |= N2N_FLAGS_SOCKET | N2N_FLAGS_FROM_SUPERNODE;
|
cmn2.flags |= N2N_FLAGS_SOCKET | N2N_FLAGS_FROM_SUPERNODE;
|
||||||
|
|
||||||
reg.sock.family = AF_INET;
|
fill_n2nsock(®.sock, (struct sockaddr*)sender_sock);
|
||||||
reg.sock.port = ntohs(sender_sock->sin_port);
|
|
||||||
memcpy(reg.sock.addr.v4, &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
|
||||||
|
|
||||||
/* Re-encode the header. */
|
/* Re-encode the header. */
|
||||||
encode_REGISTER(encbuf, &encx, &cmn2, ®);
|
encode_REGISTER(encbuf, &encx, &cmn2, ®);
|
||||||
|
@ -1966,9 +1960,7 @@ static int process_udp (n2n_sn_t * sss,
|
||||||
|
|
||||||
ack.lifetime = reg_lifetime(sss);
|
ack.lifetime = reg_lifetime(sss);
|
||||||
|
|
||||||
ack.sock.family = AF_INET;
|
fill_n2nsock(&ack.sock, (struct sockaddr*)sender_sock);
|
||||||
ack.sock.port = ntohs(sender_sock->sin_port);
|
|
||||||
memcpy(ack.sock.addr.v4, &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
|
||||||
|
|
||||||
/* Add sender's data to federation (or update it) */
|
/* Add sender's data to federation (or update it) */
|
||||||
if(comm->is_federation == IS_FEDERATION) {
|
if(comm->is_federation == IS_FEDERATION) {
|
||||||
|
@ -2049,9 +2041,7 @@ static int process_udp (n2n_sn_t * sss,
|
||||||
// NULL comm and from_supernode parameter)
|
// NULL comm and from_supernode parameter)
|
||||||
// exception: do not forward auto ip draw
|
// exception: do not forward auto ip draw
|
||||||
if(!is_null_mac(reg.edgeMac)) {
|
if(!is_null_mac(reg.edgeMac)) {
|
||||||
reg.sock.family = AF_INET;
|
fill_n2nsock(®.sock, (struct sockaddr*)sender_sock);
|
||||||
reg.sock.port = ntohs(sender_sock->sin_port);
|
|
||||||
memcpy(reg.sock.addr.v4, &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
|
||||||
|
|
||||||
cmn2.pc = n2n_register_super;
|
cmn2.pc = n2n_register_super;
|
||||||
encode_REGISTER_SUPER(ackbuf, &encx, &cmn2, ®);
|
encode_REGISTER_SUPER(ackbuf, &encx, &cmn2, ®);
|
||||||
|
@ -2196,9 +2186,8 @@ static int process_udp (n2n_sn_t * sss,
|
||||||
n2n_REGISTER_SUPER_ACK_payload_t *payload;
|
n2n_REGISTER_SUPER_ACK_payload_t *payload;
|
||||||
|
|
||||||
memset(&sender, 0, sizeof(n2n_sock_t));
|
memset(&sender, 0, sizeof(n2n_sock_t));
|
||||||
sender.family = AF_INET;
|
fill_n2nsock(&sender, (struct sockaddr*)sender_sock);
|
||||||
sender.port = ntohs(sender_sock->sin_port);
|
|
||||||
memcpy(&(sender.addr.v4), &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
|
||||||
orig_sender = &sender;
|
orig_sender = &sender;
|
||||||
|
|
||||||
memset(&ack, 0, sizeof(n2n_REGISTER_SUPER_ACK_t));
|
memset(&ack, 0, sizeof(n2n_REGISTER_SUPER_ACK_t));
|
||||||
|
@ -2282,9 +2271,7 @@ static int process_udp (n2n_sn_t * sss,
|
||||||
n2n_sock_t sender;
|
n2n_sock_t sender;
|
||||||
|
|
||||||
memset(&sender, 0, sizeof(n2n_sock_t));
|
memset(&sender, 0, sizeof(n2n_sock_t));
|
||||||
sender.family = AF_INET;
|
fill_n2nsock(&sender, (struct sockaddr*)sender_sock);
|
||||||
sender.port = ntohs(sender_sock->sin_port);
|
|
||||||
memcpy(&(sender.addr.v4), &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
|
||||||
|
|
||||||
memset(&nak, 0, sizeof(n2n_REGISTER_SUPER_NAK_t));
|
memset(&nak, 0, sizeof(n2n_REGISTER_SUPER_NAK_t));
|
||||||
|
|
||||||
|
@ -2401,9 +2388,9 @@ static int process_udp (n2n_sn_t * sss,
|
||||||
pi.aflags = 0;
|
pi.aflags = 0;
|
||||||
memcpy(pi.mac, query.targetMac, sizeof(n2n_mac_t));
|
memcpy(pi.mac, query.targetMac, sizeof(n2n_mac_t));
|
||||||
memcpy(pi.srcMac, sss->mac_addr, sizeof(n2n_mac_t));
|
memcpy(pi.srcMac, sss->mac_addr, sizeof(n2n_mac_t));
|
||||||
pi.sock.family = AF_INET;
|
|
||||||
pi.sock.port = ntohs(sender_sock->sin_port);
|
fill_n2nsock(&pi.sock, (struct sockaddr*)sender_sock);
|
||||||
memcpy(pi.sock.addr.v4, &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
|
||||||
pi.load = sn_selection_criterion_gather_data(sss);
|
pi.load = sn_selection_criterion_gather_data(sss);
|
||||||
|
|
||||||
snprintf(pi.version, sizeof(pi.version), "%s", sss->version);
|
snprintf(pi.version, sizeof(pi.version), "%s", sss->version);
|
||||||
|
|
34
src/wire.c
34
src/wire.c
|
@ -600,11 +600,45 @@ int fill_sockaddr (struct sockaddr * addr,
|
||||||
retval = 0;
|
retval = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(AF_INET6 == sock->family) {
|
||||||
|
if(addrlen >= sizeof(struct sockaddr_in6)) {
|
||||||
|
struct sockaddr_in6 * si = (struct sockaddr_in6 *)addr;
|
||||||
|
si->sin6_family = sock->family;
|
||||||
|
si->sin6_port = htons(sock->port);
|
||||||
|
memcpy(&(si->sin6_addr.s6_addr), sock->addr.v6, IPV6_SIZE);
|
||||||
|
retval = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// fills struct sockaddr's data into n2n_sock
|
||||||
|
int fill_n2nsock (n2n_sock_t* sock, struct sockaddr* sa) {
|
||||||
|
|
||||||
|
sock->family = *(sa_family_t*)sa;
|
||||||
|
switch(sock->family) {
|
||||||
|
case AF_INET: {
|
||||||
|
sock->port = ntohs(((struct sockaddr_in*)sa)->sin_port);
|
||||||
|
memcpy(sock->addr.v4, &((struct sockaddr_in*)sa)->sin_addr.s_addr, sizeof(struct in_addr));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case AF_INET6: {
|
||||||
|
sock->port = ntohs(((struct sockaddr_in6*)sa)->sin6_port);
|
||||||
|
memcpy(sock->addr.v6, &((struct sockaddr_in6*)sa)->sin6_addr.s6_addr, sizeof(struct in6_addr));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
sock->family = AF_INVALID;
|
||||||
|
return -1;
|
||||||
|
break; /* well, ... */
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int encode_PACKET (uint8_t * base,
|
int encode_PACKET (uint8_t * base,
|
||||||
size_t * idx,
|
size_t * idx,
|
||||||
const n2n_common_t * common,
|
const n2n_common_t * common,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user