redo UDP handling

This commit is contained in:
Michael Davidsaver
2019-10-27 16:19:59 -07:00
parent 3a1123e3b9
commit c886205110
7 changed files with 350 additions and 352 deletions
-29
View File
@@ -244,35 +244,6 @@ void to_wire(sbuf<uint8_t>& buf, const SockAddr &val, bool be)
buf += 16;
}
void from_wire(sbuf<const uint8_t> &buf, SockAddr& val, bool be)
{
if(buf.err || buf.size()<16) {
buf.err = true;
return;
}
// win32 lacks IN6_IS_ADDR_V4MAPPED()
bool ismapped = true;
for(unsigned i=0u; i<10; i++)
ismapped &= buf[i]==0;
ismapped &= buf[10]==0xff;
ismapped &= buf[11]==0xff;
if(ismapped) {
val->in = {};
val->in.sin_family = AF_INET;
memcpy(&val->in.sin_addr.s_addr, buf.pos+12, 4);
} else {
val->in6 = {};
val->in6.sin6_family = AF_INET6;
static_assert (sizeof(val->in6.sin6_addr)==16, "");
memcpy(&val->in6.sin6_addr, buf.pos, 16);
}
buf += 16;
}
evsocket::evsocket(evutil_socket_t sock)
:sock(sock)
{