#ifndef LLARP_AI_H #define LLARP_AI_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif #define MAX_AI_DIALECT_SIZE 5 struct llarp_ai { uint16_t rank; llarp_pubkey_t enc_key; uint8_t dialect[MAX_AI_DIALECT_SIZE+1]; struct in6_addr ip; uint16_t port; }; /** allocator for address info */ extern struct llarp_alloc * llarp_ai_alloc; bool llarp_ai_bencode(struct llarp_ai * ai, llarp_buffer_t * buff); bool llarp_ai_bdecode(struct llarp_ai * ai, llarp_buffer_t buff); struct llarp_ai_list; struct llarp_ai_list * llarp_ai_list_new(); void llarp_ai_list_free(struct llarp_ai_list * l); struct llarp_ai llarp_ai_list_popfront(struct llarp_ai_list * l); void llarp_ai_list_pushback(struct llarp_ai_list * l, struct llarp_ai * ai); size_t llarp_ai_list_size(struct llarp_ai_list * l); struct llarp_ai * llarp_ai_list_index(struct llarp_ai_list * l, ssize_t idx); struct llarp_ai_list_iter { void * user; /** set by llarp_ai_list_iterate() */ struct llarp_ai_list * list; /** return false to break iteration */ bool (*visit)(struct llarp_ai_list_iter *, struct llarp_ai *); }; void llarp_ai_list_iterate(struct llarp_ai_list * l, struct llarp_ai_list_iter * iter); #ifdef __cplusplus } #endif #endif