From fbad5a077dfa90b0275d683f49cd90244b7d0bee Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Sat, 13 Oct 2007 00:06:59 +0000 Subject: Added "magic" parameter in pj_stun_session_create_req() git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1498 74dad513-b988-da41-8d7b-12977e46ad98 --- pjnath/include/pjnath/stun_session.h | 2 ++ pjnath/src/pjnath/ice_session.c | 2 +- pjnath/src/pjnath/ice_strans.c | 2 ++ pjnath/src/pjnath/nat_detect.c | 39 ++++++++++++++++++++++------------ pjnath/src/pjnath/stun_session.c | 6 ++++-- pjnath/src/pjstun-client/client_main.c | 6 +++--- 6 files changed, 38 insertions(+), 19 deletions(-) diff --git a/pjnath/include/pjnath/stun_session.h b/pjnath/include/pjnath/stun_session.h index 6b5514d4..e0d93d31 100644 --- a/pjnath/include/pjnath/stun_session.h +++ b/pjnath/include/pjnath/stun_session.h @@ -259,6 +259,7 @@ PJ_DECL(void) pj_stun_session_set_credential(pj_stun_session *sess, * @param sess The STUN session instance. * @param msg_type The STUN request message type, from pj_stun_method_e or * from pj_stun_msg_type. + * @param magic STUN magic, use PJ_STUN_MAGIC. * @param tsx_id Optional transaction ID. * @param p_tdata Pointer to receive STUN transmit data instance containing * the request. @@ -267,6 +268,7 @@ PJ_DECL(void) pj_stun_session_set_credential(pj_stun_session *sess, */ PJ_DECL(pj_status_t) pj_stun_session_create_req(pj_stun_session *sess, int msg_type, + pj_uint32_t magic, const pj_uint8_t tsx_id[12], pj_stun_tx_data **p_tdata); diff --git a/pjnath/src/pjnath/ice_session.c b/pjnath/src/pjnath/ice_session.c index 695c66d0..45e1146f 100644 --- a/pjnath/src/pjnath/ice_session.c +++ b/pjnath/src/pjnath/ice_session.c @@ -1376,7 +1376,7 @@ static pj_status_t perform_check(pj_ice_sess *ice, /* Create request */ status = pj_stun_session_create_req(comp->stun_sess, - PJ_STUN_BINDING_REQUEST, + PJ_STUN_BINDING_REQUEST, PJ_STUN_MAGIC, NULL, &check->tdata); if (status != PJ_SUCCESS) { pjnath_perror(ice->obj_name, "Error creating STUN request", status); diff --git a/pjnath/src/pjnath/ice_strans.c b/pjnath/src/pjnath/ice_strans.c index f8a20d19..d44bec0c 100644 --- a/pjnath/src/pjnath/ice_strans.c +++ b/pjnath/src/pjnath/ice_strans.c @@ -577,6 +577,7 @@ static void ka_timer_cb(pj_timer_heap_t *th, pj_timer_entry *te) /* Create STUN binding request */ status = pj_stun_session_create_req(comp->stun_sess, PJ_STUN_BINDING_REQUEST, + PJ_STUN_MAGIC, comp->ka_tsx_id, &tdata); if (status != PJ_SUCCESS) continue; @@ -678,6 +679,7 @@ static pj_status_t get_stun_mapped_addr(pj_ice_strans *ice_st, /* Create STUN binding request */ status = pj_stun_session_create_req(comp->stun_sess, PJ_STUN_BINDING_REQUEST, + PJ_STUN_MAGIC, comp->ka_tsx_id, &tdata); if (status != PJ_SUCCESS) diff --git a/pjnath/src/pjnath/nat_detect.c b/pjnath/src/pjnath/nat_detect.c index 29549465..0d6c1ea0 100644 --- a/pjnath/src/pjnath/nat_detect.c +++ b/pjnath/src/pjnath/nat_detect.c @@ -54,6 +54,14 @@ enum state ST_TEST_3 }; +static const char *test_names[] = +{ + "Test I: Binding request", + "Test II: Binding request with change address and port request", + "Test IB: Binding request to alternate address", + "Test III: Binding request with change port request" +}; + typedef struct nat_detect_session { pj_pool_t *pool; @@ -308,19 +316,17 @@ static pj_status_t start_test(nat_detect_session *sess, /* Create BIND request */ status = pj_stun_session_create_req(sess->stun_sess, - PJ_STUN_BINDING_REQUEST, + PJ_STUN_BINDING_REQUEST, 0x83224, NULL, &tdata); if (status != PJ_SUCCESS) return status; - /* Add CHANGE-REQUEST attribute if necessary */ - if (change_flag) { - status = pj_stun_msg_add_uint_attr(sess->pool, tdata->msg, - PJ_STUN_ATTR_CHANGE_REQUEST, - change_flag); - if (status != PJ_SUCCESS) - return status; - } + /* Add CHANGE-REQUEST attribute */ + status = pj_stun_msg_add_uint_attr(sess->pool, tdata->msg, + PJ_STUN_ATTR_CHANGE_REQUEST, + change_flag); + if (status != PJ_SUCCESS) + return status; /* Configure alternate address */ if (alt_addr) @@ -328,6 +334,12 @@ static pj_status_t start_test(nat_detect_session *sess, else sess->cur_server = &sess->server; + PJ_LOG(5,(sess->pool->obj_name, + "Performing %s to %s:%d", + test_names[state], + pj_inet_ntoa(sess->cur_server->sin_addr), + pj_ntohs(sess->cur_server->sin_port))); + /* Send the request */ status = pj_stun_session_send_msg(sess->stun_sess, PJ_TRUE, sess->cur_server, @@ -561,12 +573,12 @@ static void on_request_complete(pj_stun_session *stun_sess, sizeof(pj_sockaddr_in)); /* Compare mapped address with local address */ - sess->test1_same_ip = (pj_memcmp(&sess->local_addr, &mattr->sockaddr, - sizeof(pj_sockaddr_in))==0); + sess->test1_same_ip=(pj_memcmp(&sess->local_addr, &mattr->sockaddr, + sizeof(pj_sockaddr_in))==0); /* Execute test 2: - * Send BINDING_REQUEST with both the "change IP" and "change port" - * flags from the CHANGE-REQUEST attribute set + * Send BINDING_REQUEST with both the "change IP" and "change port" + * flags from the CHANGE-REQUEST attribute set */ start_test(sess, ST_TEST_2, NULL, CHANGE_ADDR_PORT); @@ -662,3 +674,4 @@ static void on_timer_destroy(pj_timer_heap_t *th, sess_destroy(sess); } + diff --git a/pjnath/src/pjnath/stun_session.c b/pjnath/src/pjnath/stun_session.c index 929f114d..43abb19f 100644 --- a/pjnath/src/pjnath/stun_session.c +++ b/pjnath/src/pjnath/stun_session.c @@ -126,6 +126,7 @@ static pj_status_t create_tdata(pj_stun_session *sess, static pj_status_t create_request_tdata(pj_stun_session *sess, unsigned msg_type, + pj_uint32_t magic, const pj_uint8_t tsx_id[12], pj_stun_tx_data **p_tdata) { @@ -137,7 +138,7 @@ static pj_status_t create_request_tdata(pj_stun_session *sess, return status; /* Create STUN message */ - status = pj_stun_msg_create(tdata->pool, msg_type, PJ_STUN_MAGIC, + status = pj_stun_msg_create(tdata->pool, msg_type, magic, tsx_id, &tdata->msg); if (status != PJ_SUCCESS) { pj_pool_release(tdata->pool); @@ -476,6 +477,7 @@ PJ_DEF(void) pj_stun_session_set_credential(pj_stun_session *sess, PJ_DEF(pj_status_t) pj_stun_session_create_req(pj_stun_session *sess, int method, + pj_uint32_t magic, const pj_uint8_t tsx_id[12], pj_stun_tx_data **p_tdata) { @@ -484,7 +486,7 @@ PJ_DEF(pj_status_t) pj_stun_session_create_req(pj_stun_session *sess, PJ_ASSERT_RETURN(sess && p_tdata, PJ_EINVAL); - status = create_request_tdata(sess, method, tsx_id, &tdata); + status = create_request_tdata(sess, method, magic, tsx_id, &tdata); if (status != PJ_SUCCESS) return status; diff --git a/pjnath/src/pjstun-client/client_main.c b/pjnath/src/pjstun-client/client_main.c index ac828925..d3b21e13 100644 --- a/pjnath/src/pjstun-client/client_main.c +++ b/pjnath/src/pjstun-client/client_main.c @@ -375,7 +375,7 @@ static void send_bind_request(void) pj_status_t rc; rc = pj_stun_session_create_req(g.sess, PJ_STUN_BINDING_REQUEST, - NULL, &tdata); + PJ_STUN_MAGIC, NULL, &tdata); pj_assert(rc == PJ_SUCCESS); rc = pj_stun_session_send_msg(g.sess, PJ_FALSE, @@ -391,7 +391,7 @@ static void send_allocate_request(pj_bool_t allocate) pj_status_t rc; rc = pj_stun_session_create_req(g.sess, PJ_STUN_ALLOCATE_REQUEST, - NULL, &tdata); + PJ_STUN_MAGIC, NULL, &tdata); pj_assert(rc == PJ_SUCCESS); @@ -451,7 +451,7 @@ static void send_sad_request(pj_bool_t set) rc = pj_stun_session_create_req(g.sess, PJ_STUN_SET_ACTIVE_DESTINATION_REQUEST, - NULL, &tdata); + PJ_STUN_MAGIC, NULL, &tdata); pj_assert(rc == PJ_SUCCESS); if (set) { -- cgit v1.2.3