diff options
author | Benny Prijono <bennylp@teluu.com> | 2008-08-22 17:46:33 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2008-08-22 17:46:33 +0000 |
commit | bec19e0d3c8fd02ead56676fa540bba024e10113 (patch) | |
tree | d7e65d3245c9aa3bfaf7c9c9b9dcf12b961ac1e7 /pjnath/src/pjturn-srv | |
parent | 3329e6261fba0e1fb9e4e8b23805945683101122 (diff) |
Ticket #598: Update to draft-ietf-behave-rfc3489bis-18 and draft-ietf-behave-turn-09, and fix other things as well. Please see the ticket for more info
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2234 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjnath/src/pjturn-srv')
-rw-r--r-- | pjnath/src/pjturn-srv/allocation.c | 2 | ||||
-rw-r--r-- | pjnath/src/pjturn-srv/listener_udp.c | 5 | ||||
-rw-r--r-- | pjnath/src/pjturn-srv/server.c | 45 |
3 files changed, 48 insertions, 4 deletions
diff --git a/pjnath/src/pjturn-srv/allocation.c b/pjnath/src/pjturn-srv/allocation.c index b2215e0d..3e4b77f6 100644 --- a/pjnath/src/pjturn-srv/allocation.c +++ b/pjnath/src/pjturn-srv/allocation.c @@ -212,7 +212,7 @@ static pj_status_t send_allocate_response(pj_turn_allocation *alloc, /* Add RELAYED-ADDRESS attribute */ pj_stun_msg_add_sockaddr_attr(tdata->pool, tdata->msg, - PJ_STUN_ATTR_RELAY_ADDR, PJ_TRUE, + PJ_STUN_ATTR_RELAYED_ADDR, PJ_TRUE, &alloc->relay.hkey.addr, pj_sockaddr_get_len(&alloc->relay.hkey.addr)); diff --git a/pjnath/src/pjturn-srv/listener_udp.c b/pjnath/src/pjturn-srv/listener_udp.c index 2c0eccdc..9d600589 100644 --- a/pjnath/src/pjturn-srv/listener_udp.c +++ b/pjnath/src/pjturn-srv/listener_udp.c @@ -125,10 +125,9 @@ PJ_DEF(pj_status_t) pj_turn_listener_create_udp( pj_turn_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", - sizeof(struct read_op)+1000, - 1000, NULL); + 1000, 1000, NULL); - udp->read_op[i] = PJ_POOL_ZALLOC_T(rpool, struct read_op); + udp->read_op[i] = PJ_POOL_ZALLOC_T(pool, struct read_op); udp->read_op[i]->pkt.pool = rpool; on_read_complete(udp->key, &udp->read_op[i]->op_key, 0); diff --git a/pjnath/src/pjturn-srv/server.c b/pjnath/src/pjturn-srv/server.c index 1089ec91..c277e11e 100644 --- a/pjnath/src/pjturn-srv/server.c +++ b/pjnath/src/pjturn-srv/server.c @@ -551,6 +551,43 @@ static pj_status_t on_rx_stun_request(pj_stun_session *sess, return PJ_SUCCESS; } +/* Handle STUN Binding request */ +static void handle_binding_request(pj_turn_pkt *pkt, + unsigned options) +{ + pj_stun_msg *request, *response; + pj_uint8_t pdu[200]; + pj_size_t len; + pj_status_t status; + + /* Decode request */ + status = pj_stun_msg_decode(pkt->pool, pkt->pkt, pkt->len, options, + &request, NULL, NULL); + if (status != PJ_SUCCESS) + return; + + /* Create response */ + status = pj_stun_msg_create_response(pkt->pool, request, 0, NULL, + &response); + if (status != PJ_SUCCESS) + return; + + /* Add XOR-MAPPED-ADDRESS */ + pj_stun_msg_add_sockaddr_attr(pkt->pool, response, + PJ_STUN_ATTR_XOR_MAPPED_ADDR, + PJ_TRUE, + &pkt->src.clt_addr, + pkt->src_addr_len); + + /* Encode */ + status = pj_stun_msg_encode(response, pdu, sizeof(pdu), 0, NULL, &len); + if (status != PJ_SUCCESS) + return; + + /* Send response */ + pkt->transport->sendto(pkt->transport, pdu, len, 0, + &pkt->src.clt_addr, pkt->src_addr_len); +} /* * This callback is called by UDP listener on incoming packet. This is @@ -615,6 +652,14 @@ PJ_DEF(void) pj_turn_srv_on_rx_pkt(pj_turn_srv *srv, return; } + /* Special handling for Binding Request. We won't give it to the + * STUN session since this request is not authenticated. + */ + if (pkt->pkt[1] == 1) { + handle_binding_request(pkt, options); + return; + } + /* Hand over processing to STUN session. This will trigger * on_rx_stun_request() callback to be called if the STUN * message is a request. |