| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #ifndef HV_RUDP_H_
- #define HV_RUDP_H_
- #include "hloop.h"
- #if WITH_RUDP
- #include "rbtree.h"
- #include "hsocket.h"
- #include "hmutex.h"
- #if WITH_KCP
- #include "kcp/hkcp.h"
- #endif
- typedef struct rudp_s {
- struct rb_root rb_root;
- hmutex_t mutex;
- } rudp_t;
- typedef struct rudp_entry_s {
- struct rb_node rb_node;
- sockaddr_u addr; // key
- // val
- hio_t* io;
- #if WITH_KCP
- kcp_t kcp;
- #endif
- } rudp_entry_t;
- // NOTE: rudp_entry_t alloc when rudp_get
- void rudp_entry_free(rudp_entry_t* entry);
- void rudp_init(rudp_t* rudp);
- void rudp_cleanup(rudp_t* rudp);
- bool rudp_insert(rudp_t* rudp, rudp_entry_t* entry);
- // NOTE: just rb_erase, not free
- rudp_entry_t* rudp_remove(rudp_t* rudp, struct sockaddr* addr);
- rudp_entry_t* rudp_search(rudp_t* rudp, struct sockaddr* addr);
- #define rudp_has(rudp, addr) (rudp_search(rudp, addr) != NULL)
- // rudp_search + malloc + rudp_insert
- rudp_entry_t* rudp_get(rudp_t* rudp, struct sockaddr* addr);
- // rudp_remove + free
- void rudp_del(rudp_t* rudp, struct sockaddr* addr);
- // rudp_get(&io->rudp, io->peeraddr)
- rudp_entry_t* hio_get_rudp(hio_t* io, struct sockaddr* addr DEFAULT(NULL));
- #endif // WITH_RUDP
- #endif // HV_RUDP_H_
|