67#define ADDRESS_INIT(type, len, data) {type, len, data, NULL}
68#define ADDRESS_INIT_NONE ADDRESS_INIT(AT_NONE, 0, NULL)
88set_address(
address *addr,
int addr_type,
int addr_len,
const void *addr_data) {
91 ws_assert(addr_data == NULL);
94 ws_assert(addr_type != AT_NONE);
96 ws_assert(addr_data != NULL);
98 addr->type = addr_type;
100 addr->data = addr_data;
106 addr->type = AT_IPv4;
108 uint32_t val = g_htonl(ipv4->addr);
109 addr->priv = g_memdup2(&val,
sizeof(val));
110 addr->data = addr->priv;
115 set_address(addr, AT_IPv6,
sizeof(
ws_in6_addr), &ipv6->addr);
134set_address_tvb(
address *addr,
int addr_type,
int addr_len,
tvbuff_t *tvb,
int offset) {
139 ws_assert(addr_type != AT_NONE);
143 set_address(addr, addr_type, addr_len, p);
158 int addr_type,
int addr_len,
const void *addr_data) {
161 addr->type = addr_type;
164 ws_assert(addr_data == NULL);
169 ws_assert(addr_type != AT_NONE);
171 ws_assert(addr_data != NULL);
172 addr->data = addr->priv =
wmem_memdup(scope, addr_data, addr_len);
173 addr->len = addr_len;
190 int addr_type,
int addr_len,
tvbuff_t *tvb,
int offset) {
194 alloc_address_wmem(scope, addr, addr_type, addr_len, p);
207 if (addr1->type > addr2->type)
return 1;
208 if (addr1->type < addr2->type)
return -1;
209 if (addr1->len > addr2->len)
return 1;
210 if (addr1->len < addr2->len)
return -1;
211 if (addr1->len == 0) {
219 return memcmp(addr1->data, addr2->data, addr1->len);
240 if (addr1->type == addr2->type &&
241 addr1->len == addr2->len &&
243 memcmp(addr1->data, addr2->data, addr1->len) == 0))
261 if ( addr1->len == addr2->len
262 && memcmp(addr1->data, addr2->data, addr1->len) == 0
278 set_address(to, from->type, from->len, from->data);
290 alloc_address_wmem(scope, to, from->type, from->len, from->data);
300 copy_address_wmem(NULL, to, from);
311 if (addr->type != AT_NONE && addr->len > 0 && addr->priv != NULL) {
314 ws_assert(addr->data == addr->priv);
326 free_address_wmem(NULL, addr);
335static inline unsigned
336add_address_to_hash(
unsigned hash_val,
const address *addr) {
337 const uint8_t *hash_data = (
const uint8_t *)(addr)->data;
340 for (idx = 0; idx < (addr)->len; idx++) {
341 hash_val += hash_data[idx];
342 hash_val += ( hash_val << 10 );
343 hash_val ^= ( hash_val >> 6 );
355static inline uint64_t
356add_address_to_hash64(uint64_t hash_val,
const address *addr) {
357 const uint8_t *hash_data = (
const uint8_t *)(addr)->data;
360 for (idx = 0; idx < (addr)->len; idx++) {
361 hash_val += hash_data[idx];
362 hash_val += ( hash_val << 10 );
363 hash_val ^= ( hash_val >> 6 );
368WS_DLL_PUBLIC
unsigned address_to_bytes(
const address *addr, uint8_t *buf,
unsigned buf_len);
const uint8_t * tvb_get_ptr(tvbuff_t *tvb, const int offset, const int length)
Definition tvbuff.c:1001
void * wmem_memdup(wmem_allocator_t *allocator, const void *source, const size_t size)
Definition wmem_miscutl.c:19
void wmem_free(wmem_allocator_t *allocator, void *ptr)
Definition wmem_core.c:62
Definition wmem_allocator.h:27
Definition inet_addr.h:27
Definition inet_cidr.h:22
Definition inet_cidr.h:27
Definition tvbuff-int.h:35