53 lines
1.2 KiB
C
53 lines
1.2 KiB
C
|
#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);
|
||
|
|
||
|
#endif // WITH_RUDP
|
||
|
|
||
|
#endif // HV_RUDP_H_
|