#ifndef LLARP_LINK_H_ #define LLARP_LINK_H_ #include #include #include #include #ifdef __cplusplus extern "C" { #endif struct llarp_link; struct llarp_link * llarp_link_alloc(); void llarp_link_free(struct llarp_link ** link); bool llarp_link_configure(struct llarp_link * link, const char * ifname, int af); /** get link listener for events */ struct llarp_udp_listener * llarp_link_udp_listener(struct llarp_link * link); void llarp_link_stop(struct llarp_link * link); struct llarp_link_session; struct llarp_link_session_listener { void * user; /** set by llarp_try_establish_session */ struct llarp_link * link; /** set by llarp_try_establish_session */ struct llarp_rc * rc; void (*result)(struct llarp_link_session_listener *, struct llarp_link_session *); }; /** information for establishing an outbound session */ struct llarp_link_establish_job { struct llarp_rc * rc; uint64_t timeout; }; void llarp_link_try_establish_session(struct llarp_link * link, struct llarp_link_establish_job * job, struct llarp_link_session_listener * l); struct llarp_link_session_iter { void * user; struct llarp_link * link; bool (*visit)(struct llarp_link_session_iter *, struct llarp_link_session *); }; void llarp_link_iter_sessions(struct llarp_link * l, struct llarp_link_session_iter * i); struct llarp_rc * llarp_link_session_rc(struct llarp_link_session * s); #ifdef __cplusplus } #endif #endif