unsigned char *p;
p = aad;
- *(uint32_t *)p = htonl(version);
+ write_u32(p, htonl(version));
p += sizeof version;
p += quic_saddr_cpy(p, addr);
memcpy(p, cid->data, cid->len);
const unsigned char *end, int server)
{
size_t tp_len = end - *buf;
- const uint32_t *ver, *others;
+ const unsigned char *ver, *others;
/* <tp_len> must be a multiple of sizeof(uint32_t) */
if (tp_len < sizeof tp->chosen || (tp_len & 0x3))
return 0;
- tp->chosen = ntohl(*(uint32_t *)*buf);
+ tp->chosen = ntohl(read_u32(*buf));
/* Must not be null */
if (!tp->chosen)
return 0;
*buf += sizeof tp->chosen;
- others = (const uint32_t *)*buf;
+ others = *buf;
/* Others versions must not be null */
- for (ver = others; ver < (const uint32_t *)end; ver++) {
- if (!*ver)
+ for (ver = others; ver < end; ver += 4) {
+ if (!read_u32(ver))
return 0;
}
/* TODO: not supported */
return 0;
- for (ver = others; ver < (const uint32_t *)end; ver++) {
+ for (ver = others; ver < end; ver += 4) {
if (!tp->negotiated_version) {
int i;
for (i = 0; i < quic_versions_nb; i++) {
- if (ntohl(*ver) == quic_versions[i].num) {
+ if (ntohl(read_u32(ver)) == quic_versions[i].num) {
tp->negotiated_version = &quic_versions[i];
break;
}
}
}
- if (preferred_version && ntohl(*ver) == preferred_version->num) {
+ if (preferred_version && ntohl(read_u32(ver)) == preferred_version->num) {
tp->negotiated_version = preferred_version;
goto out;
}