mirror of
https://github.com/ntop/n2n.git
synced 2024-09-19 00:21: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;
|
||||
|
||||
#define SOCKET int
|
||||
#else /* #ifndef WIN32 */
|
||||
typedef u_short sa_family_t;
|
||||
#endif /* #ifndef WIN32 */
|
||||
|
||||
|
||||
|
|
|
@ -190,6 +190,9 @@ int fill_sockaddr (struct sockaddr * addr,
|
|||
size_t addrlen,
|
||||
const n2n_sock_t * sock);
|
||||
|
||||
int fill_n2nsock (n2n_sock_t* sock,
|
||||
struct sockaddr* sa);
|
||||
|
||||
int encode_PACKET (uint8_t * base,
|
||||
size_t * idx,
|
||||
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
|
||||
memcpy(&sender, &(eee->curr_sn->sock), sizeof(struct sockaddr_in));
|
||||
else {
|
||||
sender.family = AF_INET; /* UDP socket was opened PF_INET v4 */
|
||||
sender.port = ntohs(sender_sock->sin_port);
|
||||
memcpy(&(sender.addr.v4), &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
||||
// REVISIT: type conversion back and forth, choose a consistent approach throughout whole code,
|
||||
// i.e. stick with more general sockaddr as long as possible and narrow only if required
|
||||
fill_n2nsock(&sender, (struct sockaddr*)sender_sock);
|
||||
}
|
||||
/* The packet may not have an orig_sender socket spec. So default to last
|
||||
* 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
|
||||
* IP transport version the packet arrived on. May need to UDP sockets. */
|
||||
memset(&sender, 0, sizeof(n2n_sock_t));
|
||||
sender.family = AF_INET; /* UDP socket was opened PF_INET v4 */
|
||||
sender.port = ntohs(sender_sock->sin_port);
|
||||
memcpy(&(sender.addr.v4), &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
||||
fill_n2nsock(&sender, (struct sockaddr*)sender_sock);
|
||||
|
||||
from_supernode = cmn.flags & N2N_FLAGS_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 */
|
||||
cmn2.flags |= N2N_FLAGS_SOCKET | N2N_FLAGS_FROM_SUPERNODE;
|
||||
|
||||
pkt.sock.family = AF_INET;
|
||||
pkt.sock.port = ntohs(sender_sock->sin_port);
|
||||
memcpy(pkt.sock.addr.v4, &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
||||
fill_n2nsock(&pkt.sock, (struct sockaddr*)sender_sock);
|
||||
|
||||
rec_buf = encbuf;
|
||||
/* 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 */
|
||||
cmn2.flags |= N2N_FLAGS_SOCKET | N2N_FLAGS_FROM_SUPERNODE;
|
||||
|
||||
reg.sock.family = AF_INET;
|
||||
reg.sock.port = ntohs(sender_sock->sin_port);
|
||||
memcpy(reg.sock.addr.v4, &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
||||
fill_n2nsock(®.sock, (struct sockaddr*)sender_sock);
|
||||
|
||||
/* Re-encode the header. */
|
||||
encode_REGISTER(encbuf, &encx, &cmn2, ®);
|
||||
|
@ -1966,9 +1960,7 @@ static int process_udp (n2n_sn_t * sss,
|
|||
|
||||
ack.lifetime = reg_lifetime(sss);
|
||||
|
||||
ack.sock.family = AF_INET;
|
||||
ack.sock.port = ntohs(sender_sock->sin_port);
|
||||
memcpy(ack.sock.addr.v4, &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
||||
fill_n2nsock(&ack.sock, (struct sockaddr*)sender_sock);
|
||||
|
||||
/* Add sender's data to federation (or update it) */
|
||||
if(comm->is_federation == IS_FEDERATION) {
|
||||
|
@ -2049,9 +2041,7 @@ static int process_udp (n2n_sn_t * sss,
|
|||
// NULL comm and from_supernode parameter)
|
||||
// exception: do not forward auto ip draw
|
||||
if(!is_null_mac(reg.edgeMac)) {
|
||||
reg.sock.family = AF_INET;
|
||||
reg.sock.port = ntohs(sender_sock->sin_port);
|
||||
memcpy(reg.sock.addr.v4, &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
||||
fill_n2nsock(®.sock, (struct sockaddr*)sender_sock);
|
||||
|
||||
cmn2.pc = n2n_register_super;
|
||||
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;
|
||||
|
||||
memset(&sender, 0, sizeof(n2n_sock_t));
|
||||
sender.family = AF_INET;
|
||||
sender.port = ntohs(sender_sock->sin_port);
|
||||
memcpy(&(sender.addr.v4), &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
||||
fill_n2nsock(&sender, (struct sockaddr*)sender_sock);
|
||||
|
||||
orig_sender = &sender;
|
||||
|
||||
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;
|
||||
|
||||
memset(&sender, 0, sizeof(n2n_sock_t));
|
||||
sender.family = AF_INET;
|
||||
sender.port = ntohs(sender_sock->sin_port);
|
||||
memcpy(&(sender.addr.v4), &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
||||
fill_n2nsock(&sender, (struct sockaddr*)sender_sock);
|
||||
|
||||
memset(&nak, 0, sizeof(n2n_REGISTER_SUPER_NAK_t));
|
||||
|
||||
|
@ -2401,9 +2388,9 @@ static int process_udp (n2n_sn_t * sss,
|
|||
pi.aflags = 0;
|
||||
memcpy(pi.mac, query.targetMac, 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);
|
||||
memcpy(pi.sock.addr.v4, &(sender_sock->sin_addr.s_addr), IPV4_SIZE);
|
||||
|
||||
fill_n2nsock(&pi.sock, (struct sockaddr*)sender_sock);
|
||||
|
||||
pi.load = sn_selection_criterion_gather_data(sss);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
// 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,
|
||||
size_t * idx,
|
||||
const n2n_common_t * common,
|
||||
|
|
Loading…
Reference in New Issue
Block a user