rudp.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #ifndef HV_RUDP_H_
  2. #define HV_RUDP_H_
  3. #include "hloop.h"
  4. #if WITH_RUDP
  5. #include "rbtree.h"
  6. #include "hsocket.h"
  7. #include "hmutex.h"
  8. #if WITH_KCP
  9. #include "kcp/hkcp.h"
  10. #endif
  11. typedef struct rudp_s {
  12. struct rb_root rb_root;
  13. hmutex_t mutex;
  14. } rudp_t;
  15. typedef struct rudp_entry_s {
  16. struct rb_node rb_node;
  17. sockaddr_u addr; // key
  18. // val
  19. hio_t* io;
  20. #if WITH_KCP
  21. kcp_t kcp;
  22. #endif
  23. } rudp_entry_t;
  24. // NOTE: rudp_entry_t alloc when rudp_get
  25. void rudp_entry_free(rudp_entry_t* entry);
  26. void rudp_init(rudp_t* rudp);
  27. void rudp_cleanup(rudp_t* rudp);
  28. bool rudp_insert(rudp_t* rudp, rudp_entry_t* entry);
  29. // NOTE: just rb_erase, not free
  30. rudp_entry_t* rudp_remove(rudp_t* rudp, struct sockaddr* addr);
  31. rudp_entry_t* rudp_search(rudp_t* rudp, struct sockaddr* addr);
  32. #define rudp_has(rudp, addr) (rudp_search(rudp, addr) != NULL)
  33. // rudp_search + malloc + rudp_insert
  34. rudp_entry_t* rudp_get(rudp_t* rudp, struct sockaddr* addr);
  35. // rudp_remove + free
  36. void rudp_del(rudp_t* rudp, struct sockaddr* addr);
  37. // rudp_get(&io->rudp, io->peeraddr)
  38. rudp_entry_t* hio_get_rudp(hio_t* io);
  39. #endif // WITH_RUDP
  40. #endif // HV_RUDP_H_