Skip to content

Commit

Permalink
Fix sock encoding now that we store ports in network order
Browse files Browse the repository at this point in the history
  • Loading branch information
hamishcoleman committed Feb 25, 2024
1 parent 41d418b commit 1edb03b
Showing 1 changed file with 14 additions and 13 deletions.
27 changes: 14 additions & 13 deletions src/wire.c
Original file line number Diff line number Diff line change
Expand Up @@ -265,25 +265,26 @@ int encode_sock (uint8_t * base,
int retval = 0;
uint16_t f;

f = 0;
if(sock->type == SOCK_STREAM) {
f |= 0x4000;
}
if(sock->family == AF_INET6) {
f |= 0x8000;
}

retval += encode_uint16(base, idx, f);

// n2n_sock_t is always stored in network order, so it is a 2 byte buf
retval += encode_buf(base, idx, &(sock->port), 2);

switch(sock->family) {
case AF_INET: {
f = 0;
if(sock->type == SOCK_STREAM) {
f |= 0x4000;
}
retval += encode_uint16(base, idx, f);
retval += encode_uint16(base, idx, sock->port);
retval += encode_buf(base, idx, sock->addr.v4, IPV4_SIZE);
break;
}

case AF_INET6: {
f = 0x8000;
if(sock->type == SOCK_STREAM) {
f |= 0x4000;
}
retval += encode_uint16(base, idx, f);
retval += encode_uint16(base, idx, sock->port);
retval += encode_buf(base, idx, sock->addr.v6, IPV6_SIZE);
break;
}
Expand All @@ -305,7 +306,7 @@ int decode_sock (n2n_sock_t * sock,
uint16_t f = 0;

decode_uint16(&f, base, rem, idx);
decode_uint16(&(sock->port), base, rem, idx);
decode_buf((unsigned char *)&(sock->port), 2, base, rem, idx);

if(f & 0x8000) {
// IPv6
Expand Down

0 comments on commit 1edb03b

Please sign in to comment.