mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-11-14 13:28:31 +00:00
FS-9775: First round of integration of DHT into libblade, requires ongoing changes to DHT for proper exposure to blade level
This commit is contained in:
1 parent
42bfcc3d46
commit
743a768a3f
17 files changed
+991
-4864
No files matched your search
@@ -35,12 +35,14 @@
|
||||
|
||||
typedef enum {
|
||||
BH_NONE = 0,
|
||||
BH_MYPOOL = (1 << 0)
|
||||
BH_MYPOOL = (1 << 0),
|
||||
BH_MYTPOOL = (1 << 1)
|
||||
} bhpvt_flag_t;
|
||||
|
||||
struct blade_handle_s {
|
||||
ks_pool_t *pool;
|
||||
bhpvt_flag_t flags;
|
||||
ks_pool_t *pool;
|
||||
ks_thread_pool_t *tpool;
|
||||
blade_peer_t *peer;
|
||||
};
|
||||
|
||||
@@ -62,6 +64,7 @@ KS_DECLARE(ks_status_t) blade_handle_destroy(blade_handle_t **bhP)
|
||||
pool = bh->pool;
|
||||
|
||||
blade_peer_destroy(&bh->peer);
|
||||
if (bh->tpool && (flags & BH_MYTPOOL)) ks_thread_pool_destroy(&bh->tpool);
|
||||
|
||||
ks_pool_free(bh->pool, &bh);
|
||||
|
||||
@@ -72,26 +75,78 @@ KS_DECLARE(ks_status_t) blade_handle_destroy(blade_handle_t **bhP)
|
||||
return KS_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
KS_DECLARE(ks_status_t) blade_handle_create(blade_handle_t **bhP, ks_pool_t *pool)
|
||||
KS_DECLARE(ks_status_t) blade_handle_create(blade_handle_t **bhP, ks_pool_t *pool, ks_thread_pool_t *tpool, const char *nodeid)
|
||||
{
|
||||
bhpvt_flag_t newflags = BH_NONE;
|
||||
blade_handle_t *bh = NULL;
|
||||
ks_dht_nodeid_t nid;
|
||||
|
||||
ks_assert(nodeid);
|
||||
ks_assert(strlen(nodeid) == (KS_DHT_NODEID_SIZE * 2));
|
||||
|
||||
if (!pool) {
|
||||
newflags |= BH_MYPOOL;
|
||||
ks_pool_open(&pool);
|
||||
}
|
||||
|
||||
if (!tpool) {
|
||||
newflags |= BH_MYTPOOL;
|
||||
ks_thread_pool_create(&tpool, BLADE_HANDLE_TPOOL_MIN, BLADE_HANDLE_TPOOL_MAX, BLADE_HANDLE_TPOOL_STACK, KS_PRI_NORMAL, BLADE_HANDLE_TPOOL_IDLE);
|
||||
ks_assert(tpool);
|
||||
}
|
||||
|
||||
bh = ks_pool_alloc(pool, sizeof(*bh));
|
||||
bh->pool = pool;
|
||||
bh->flags = newflags;
|
||||
blade_peer_create(&bh->peer, bh->pool);
|
||||
bh->pool = pool;
|
||||
bh->tpool = tpool;
|
||||
ks_dht_dehex(nid.id, nodeid, KS_DHT_NODEID_SIZE);
|
||||
blade_peer_create(&bh->peer, bh->pool, bh->tpool, &nid);
|
||||
|
||||
*bhP = bh;
|
||||
|
||||
return KS_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
KS_DECLARE(void) blade_handle_myid(blade_handle_t *bh, char *buffer)
|
||||
{
|
||||
ks_dht_nodeid_t *nodeid = NULL;
|
||||
|
||||
ks_assert(bh);
|
||||
ks_assert(bh->peer);
|
||||
|
||||
nodeid = blade_peer_myid(bh->peer);
|
||||
ks_dht_hex(nodeid->id, buffer, KS_DHT_NODEID_SIZE);
|
||||
}
|
||||
|
||||
KS_DECLARE(void) blade_handle_autoroute(blade_handle_t *bh, ks_bool_t autoroute, ks_port_t port)
|
||||
{
|
||||
ks_assert(bh);
|
||||
ks_assert(bh->peer);
|
||||
|
||||
blade_peer_autoroute(bh->peer, autoroute, port);
|
||||
}
|
||||
|
||||
KS_DECLARE(ks_status_t) blade_handle_bind(blade_handle_t *bh, const char *ip, ks_port_t port, ks_dht_endpoint_t **endpoint)
|
||||
{
|
||||
ks_sockaddr_t addr;
|
||||
int family = AF_INET;
|
||||
|
||||
ks_assert(bh);
|
||||
ks_assert(ip);
|
||||
ks_assert(port);
|
||||
|
||||
if (ip[1] != '.' && ip[2] != '.' && ip[3] != '.') family = AF_INET6;
|
||||
|
||||
ks_addr_set(&addr, ip, port, family);
|
||||
return blade_peer_bind(bh->peer, &addr, endpoint);
|
||||
}
|
||||
|
||||
KS_DECLARE(void) blade_handle_pulse(blade_handle_t *bh, int32_t timeout)
|
||||
{
|
||||
ks_assert(bh);
|
||||
ks_assert(timeout >= 0);
|
||||
|
||||
blade_peer_pulse(bh->peer, timeout);
|
||||
}
|
||||
|
||||
|
||||
/* For Emacs:
|
||||
|
||||
Reference in new issue
Block a user