summaryrefslogtreecommitdiff
path: root/pjnath/src/pjturn-srv/listener_udp.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjnath/src/pjturn-srv/listener_udp.c')
-rw-r--r--pjnath/src/pjturn-srv/listener_udp.c43
1 files changed, 28 insertions, 15 deletions
diff --git a/pjnath/src/pjturn-srv/listener_udp.c b/pjnath/src/pjturn-srv/listener_udp.c
index d8f90ca4..b634d092 100644
--- a/pjnath/src/pjturn-srv/listener_udp.c
+++ b/pjnath/src/pjturn-srv/listener_udp.c
@@ -21,25 +21,25 @@
struct read_op
{
pj_ioqueue_op_key_t op_key;
- pjturn_pkt pkt;
+ pj_turn_pkt pkt;
};
struct udp_listener
{
- pjturn_listener base;
+ pj_turn_listener base;
pj_ioqueue_key_t *key;
unsigned read_cnt;
struct read_op **read_op; /* Array of read_op's */
};
-static pj_status_t udp_sendto(pjturn_listener *listener,
+static pj_status_t udp_sendto(pj_turn_listener *listener,
const void *packet,
pj_size_t size,
unsigned flag,
const pj_sockaddr_t *addr,
int addr_len);
-static pj_status_t udp_destroy(pjturn_listener *udp);
+static pj_status_t udp_destroy(pj_turn_listener *udp);
static void on_read_complete(pj_ioqueue_key_t *key,
pj_ioqueue_op_key_t *op_key,
pj_ssize_t bytes_read);
@@ -48,13 +48,13 @@ static void on_read_complete(pj_ioqueue_key_t *key,
/*
* Create a new listener on the specified port.
*/
-PJ_DEF(pj_status_t) pjturn_listener_create_udp( pjturn_srv *srv,
+PJ_DEF(pj_status_t) pj_turn_listener_create_udp( pj_turn_srv *srv,
int af,
const pj_str_t *bound_addr,
unsigned port,
unsigned concurrency_cnt,
unsigned flags,
- pjturn_listener **p_listener)
+ pj_turn_listener **p_listener)
{
pj_pool_t *pool;
struct udp_listener *udp;
@@ -63,11 +63,12 @@ PJ_DEF(pj_status_t) pjturn_listener_create_udp( pjturn_srv *srv,
pj_status_t status;
/* Create structure */
- pool = pj_pool_create(srv->core.pf, "udplis%p", 1000, 1000, NULL);
+ pool = pj_pool_create(srv->core.pf, "udp%p", 1000, 1000, NULL);
udp = PJ_POOL_ZALLOC_T(pool, struct udp_listener);
udp->base.pool = pool;
+ udp->base.obj_name = pool->obj_name;
udp->base.server = srv;
- udp->base.tp_type = PJTURN_TP_UDP;
+ udp->base.tp_type = PJ_TURN_TP_UDP;
udp->base.sock = PJ_INVALID_SOCKET;
udp->base.sendto = &udp_sendto;
udp->base.destroy = &udp_destroy;
@@ -85,6 +86,11 @@ PJ_DEF(pj_status_t) pjturn_listener_create_udp( pjturn_srv *srv,
if (status != PJ_SUCCESS)
goto on_error;
+ /* Create info */
+ pj_ansi_strcpy(udp->base.info, "UDP:");
+ pj_sockaddr_print(&udp->base.addr, udp->base.info+4,
+ sizeof(udp->base.info)-4, 3);
+
/* Bind socket */
status = pj_sock_bind(udp->base.sock, &udp->base.addr,
pj_sockaddr_get_len(&udp->base.addr));
@@ -104,7 +110,8 @@ PJ_DEF(pj_status_t) pjturn_listener_create_udp( pjturn_srv *srv,
/* Create each read_op and kick off read operation */
for (i=0; i<concurrency_cnt; ++i) {
pj_pool_t *rpool = pj_pool_create(srv->core.pf, "rop%p",
- 1000, 1000, NULL);
+ sizeof(struct read_op)+1000,
+ 1000, NULL);
udp->read_op[i] = PJ_POOL_ZALLOC_T(rpool, struct read_op);
udp->read_op[i]->pkt.pool = rpool;
@@ -113,6 +120,8 @@ PJ_DEF(pj_status_t) pjturn_listener_create_udp( pjturn_srv *srv,
}
/* Done */
+ PJ_LOG(4,(udp->base.obj_name, "Listener %s created", udp->base.info));
+
*p_listener = &udp->base;
return PJ_SUCCESS;
@@ -126,7 +135,7 @@ on_error:
/*
* Destroy listener.
*/
-static pj_status_t udp_destroy(pjturn_listener *listener)
+static pj_status_t udp_destroy(pj_turn_listener *listener)
{
struct udp_listener *udp = (struct udp_listener *)listener;
unsigned i;
@@ -149,8 +158,13 @@ static pj_status_t udp_destroy(pjturn_listener *listener)
}
if (udp->base.pool) {
- pj_pool_release(udp->base.pool);
+ pj_pool_t *pool = udp->base.pool;
+
+ PJ_LOG(4,(udp->base.obj_name, "Listener %s destroyed",
+ udp->base.info));
+
udp->base.pool = NULL;
+ pj_pool_release(pool);
}
return PJ_SUCCESS;
}
@@ -158,7 +172,7 @@ static pj_status_t udp_destroy(pjturn_listener *listener)
/*
* Callback to send packet.
*/
-static pj_status_t udp_sendto(pjturn_listener *listener,
+static pj_status_t udp_sendto(pj_turn_listener *listener,
const void *packet,
pj_size_t size,
unsigned flag,
@@ -166,8 +180,7 @@ static pj_status_t udp_sendto(pjturn_listener *listener,
int addr_len)
{
pj_ssize_t len = size;
- return pj_sock_sendto(listener->sock, packet, &len, flag, addr,
- pj_sockaddr_get_len(addr));
+ return pj_sock_sendto(listener->sock, packet, &len, flag, addr, addr_len);
}
/*
@@ -191,7 +204,7 @@ static void on_read_complete(pj_ioqueue_key_t *key,
read_op->pkt.len = bytes_read;
pj_gettimeofday(&read_op->pkt.rx_time);
- pjturn_srv_on_rx_pkt(udp->base.server, &read_op->pkt);
+ pj_turn_srv_on_rx_pkt(udp->base.server, &read_op->pkt);
}
/* Reset pool */