rudp.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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/ikcp.h"
  10. #include "hbuf.h"
  11. #define DEFAULT_KCP_UPDATE_INTERVAL 10 // ms
  12. #define DEFAULT_KCP_READ_BUFSIZE 1400
  13. typedef struct kcp_s {
  14. ikcpcb* ikcp;
  15. htimer_t* update_timer;
  16. hbuf_t readbuf;
  17. } kcp_t;
  18. // NOTE: kcp_create in hio_get_kcp
  19. void kcp_release(kcp_t* kcp);
  20. #endif
  21. typedef struct rudp_s {
  22. struct rb_root rb_root;
  23. hmutex_t mutex;
  24. } rudp_t;
  25. typedef struct rudp_entry_s {
  26. struct rb_node rb_node;
  27. sockaddr_u addr; // key
  28. // val
  29. hio_t* io;
  30. #if WITH_KCP
  31. kcp_t kcp;
  32. #endif
  33. } rudp_entry_t;
  34. // NOTE: rudp_entry_t alloc when rudp_get
  35. void rudp_entry_free(rudp_entry_t* entry);
  36. void rudp_init(rudp_t* rudp);
  37. void rudp_cleanup(rudp_t* rudp);
  38. bool rudp_insert(rudp_t* rudp, rudp_entry_t* entry);
  39. // NOTE: just rb_erase, not free
  40. rudp_entry_t* rudp_remove(rudp_t* rudp, struct sockaddr* addr);
  41. rudp_entry_t* rudp_search(rudp_t* rudp, struct sockaddr* addr);
  42. #define rudp_has(rudp, addr) (rudp_search(rudp, addr) != NULL)
  43. // rudp_search + malloc + rudp_insert
  44. rudp_entry_t* rudp_get(rudp_t* rudp, struct sockaddr* addr);
  45. // rudp_remove + free
  46. void rudp_del(rudp_t* rudp, struct sockaddr* addr);
  47. #endif // WITH_RUDP
  48. #endif // HV_RUDP_H_