Commit c361d8e1 authored by Youness Alaoui's avatar Youness Alaoui

Remove iovec dependency for crc32. Use a custom simple structure to do that

parent c4a0384b
...@@ -49,20 +49,20 @@ ...@@ -49,20 +49,20 @@
uint32_t stun_fingerprint (const uint8_t *msg, size_t len) uint32_t stun_fingerprint (const uint8_t *msg, size_t len)
{ {
struct iovec iov[3]; crc_data data[3];
uint16_t fakelen = htons (len - 20u); uint16_t fakelen = htons (len - 20u);
// assert (len >= 28u); // assert (len >= 28u);
iov[0].iov_base = (void *)msg; data[0].buf = (void *)msg;
iov[0].iov_len = 2; data[0].len = 2;
iov[1].iov_base = &fakelen; data[1].buf = &fakelen;
iov[1].iov_len = 2; data[1].len = 2;
iov[2].iov_base = (void *)(msg + 4); data[2].buf = (void *)(msg + 4);
/* first 4 bytes done, last 8 bytes not summed */ /* first 4 bytes done, last 8 bytes not summed */
iov[2].iov_len = len - 12u; data[2].len = len - 12u;
return htonl (crc32 (iov, sizeof (iov) / sizeof (iov[0])) ^ 0x5354554e); return htonl (crc32 (data, 3) ^ 0x5354554e);
} }
bool stun_has_cookie (const StunMessage *msg) bool stun_has_cookie (const StunMessage *msg)
......
...@@ -137,15 +137,15 @@ static const uint32_t crc32_tab[] = { ...@@ -137,15 +137,15 @@ static const uint32_t crc32_tab[] = {
}; };
uint32_t crc32 (const struct iovec *iov, size_t n) uint32_t crc32 (const crc_data data, size_t n)
{ {
size_t i; size_t i;
uint32_t crc = 0xffffffff; uint32_t crc = 0xffffffff;
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
{ {
const uint8_t *p = iov[i].iov_base; const uint8_t *p = data[i].buf;
size_t size = iov[i].iov_len; size_t size = data[i].len;
while (size--) while (size--)
crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8); crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8);
......
...@@ -40,8 +40,13 @@ ...@@ -40,8 +40,13 @@
#include <stdint.h> #include <stdint.h>
#include <stdlib.h> #include <stdlib.h>
#include <sys/uio.h>
uint32_t crc32 (const struct iovec *iov, size_t n); typedef struct {
uint8_t *buf;
size_t len;
} crc_data;
uint32_t crc32 (const crc_data *data, size_t n);
#endif /* _CRC32_H */ #endif /* _CRC32_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment