diff options
author | Benny Prijono <bennylp@teluu.com> | 2007-05-22 21:55:31 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2007-05-22 21:55:31 +0000 |
commit | 9d72f1aa58317d2667feef40e54eef4d9fb5df29 (patch) | |
tree | 08f705b5f4413ffe0364a066fe3a1b1c3d6af179 /pjnath | |
parent | a8a95675cba90ecd5ba2b7b36432641d4bf5703d (diff) |
Fixed ticket #286: Bug in STUN FINGERPRINT verification and logging STUN message
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1289 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjnath')
-rw-r--r-- | pjnath/src/pjnath/stun_msg.c | 8 | ||||
-rw-r--r-- | pjnath/src/pjnath/stun_msg_dump.c | 8 | ||||
-rw-r--r-- | pjnath/src/pjstun-srv-test/main.c | 2 | ||||
-rw-r--r-- | pjnath/src/pjstun-srv-test/server.h | 1 | ||||
-rw-r--r-- | pjnath/src/pjstun-srv-test/turn_usage.c | 7 |
5 files changed, 16 insertions, 10 deletions
diff --git a/pjnath/src/pjnath/stun_msg.c b/pjnath/src/pjnath/stun_msg.c index 74dbcfa9..5088954d 100644 --- a/pjnath/src/pjnath/stun_msg.c +++ b/pjnath/src/pjnath/stun_msg.c @@ -1656,15 +1656,15 @@ PJ_DEF(pj_status_t) pj_stun_msg_check(const pj_uint8_t *pdu, unsigned pdu_len, if (GETVAL32H(pdu, 4) == PJ_STUN_MAGIC) { /* Check if FINGERPRINT attribute is present */ - if (GETVAL16H(pdu, msg_len + 20) == PJ_STUN_ATTR_FINGERPRINT) { - pj_uint16_t attr_len = GETVAL16H(pdu, msg_len + 22); - pj_uint32_t fingerprint = GETVAL32H(pdu, msg_len + 24); + if (GETVAL16H(pdu, msg_len + 20 - 8) == PJ_STUN_ATTR_FINGERPRINT) { + pj_uint16_t attr_len = GETVAL16H(pdu, msg_len + 20 - 8 + 2); + pj_uint32_t fingerprint = GETVAL32H(pdu, msg_len + 20 - 8 + 4); pj_uint32_t crc; if (attr_len != 4) return PJNATH_ESTUNINATTRLEN; - crc = pj_crc32_calc(pdu, msg_len + 20); + crc = pj_crc32_calc(pdu, msg_len + 20 - 8); crc ^= STUN_XOR_FINGERPRINT; if (crc != fingerprint) diff --git a/pjnath/src/pjnath/stun_msg_dump.c b/pjnath/src/pjnath/stun_msg_dump.c index cbf29a00..d8aab42c 100644 --- a/pjnath/src/pjnath/stun_msg_dump.c +++ b/pjnath/src/pjnath/stun_msg_dump.c @@ -96,6 +96,7 @@ static int print_attr(char *buffer, unsigned length, len = pj_ansi_snprintf(p, end-p, ", INVALID ADDRESS FAMILY!\n"); } + APPLY(); } break; @@ -117,6 +118,7 @@ static int print_attr(char *buffer, unsigned length, ", value=%d (0x%x)\n", (pj_uint32_t)attr->value, (pj_uint32_t)attr->value); + APPLY(); } break; @@ -133,6 +135,7 @@ static int print_attr(char *buffer, unsigned length, ", value=\"%.*s\"\n", (int)attr->value.slen, attr->value.ptr); + APPLY(); } break; @@ -146,6 +149,7 @@ static int print_attr(char *buffer, unsigned length, attr->err_code, (int)attr->reason.slen, attr->reason.ptr); + APPLY(); } break; @@ -191,12 +195,10 @@ static int print_attr(char *buffer, unsigned length, case PJ_STUN_ATTR_USE_CANDIDATE: default: len = pj_ansi_snprintf(p, end-p, "\n"); - + APPLY(); break; } - APPLY(); - return (p-buffer); on_return: diff --git a/pjnath/src/pjstun-srv-test/main.c b/pjnath/src/pjstun-srv-test/main.c index aad1c0f2..bfad859f 100644 --- a/pjnath/src/pjstun-srv-test/main.c +++ b/pjnath/src/pjstun-srv-test/main.c @@ -132,7 +132,7 @@ int main(int argc, char *argv[]) */ status = pj_stun_turn_usage_create(srv, PJ_SOCK_DGRAM, NULL, - 3478, &turn); + 3478, o.use_fingerprint, &turn); if (status != PJ_SUCCESS) { pj_stun_perror(THIS_FILE, "Unable to create bind usage", status); return 1; diff --git a/pjnath/src/pjstun-srv-test/server.h b/pjnath/src/pjstun-srv-test/server.h index f06d7f85..2be148d8 100644 --- a/pjnath/src/pjstun-srv-test/server.h +++ b/pjnath/src/pjstun-srv-test/server.h @@ -122,6 +122,7 @@ PJ_DECL(pj_status_t) pj_stun_turn_usage_create(pj_stun_server *srv, int type, const pj_str_t *ip_addr, unsigned port, + pj_bool_t use_fingerprint, pj_stun_usage **p_bu); PJ_DECL(pj_status_t) pj_stun_turn_usage_set_credential(pj_stun_usage *turn, diff --git a/pjnath/src/pjstun-srv-test/turn_usage.c b/pjnath/src/pjstun-srv-test/turn_usage.c index c3e53577..bbed6480 100644 --- a/pjnath/src/pjstun-srv-test/turn_usage.c +++ b/pjnath/src/pjstun-srv-test/turn_usage.c @@ -79,6 +79,7 @@ struct turn_usage pj_stun_session *default_session; pj_hash_table_t *client_htable; pj_stun_auth_cred *cred; + pj_bool_t use_fingerprint; unsigned max_bw_kbps; unsigned max_lifetime; @@ -146,6 +147,7 @@ PJ_DEF(pj_status_t) pj_stun_turn_usage_create(pj_stun_server *srv, int type, const pj_str_t *ip_addr, unsigned port, + pj_bool_t use_fingerprint, pj_stun_usage **p_bu) { pj_pool_t *pool; @@ -172,6 +174,7 @@ PJ_DEF(pj_status_t) pj_stun_turn_usage_create(pj_stun_server *srv, tu->next_port = START_PORT; tu->max_bw_kbps = 64; tu->max_lifetime = 10 * 60; + tu->use_fingerprint = use_fingerprint; status = pj_sockaddr_in_init(&local_addr, ip_addr, (pj_uint16_t)port); if (status != PJ_SUCCESS) @@ -199,7 +202,7 @@ PJ_DEF(pj_status_t) pj_stun_turn_usage_create(pj_stun_server *srv, sess_cb.on_send_msg = &tu_sess_on_send_msg; sess_cb.on_rx_request = &tu_sess_on_rx_request; status = pj_stun_session_create(&si->stun_cfg, "turns%p", &sess_cb, - PJ_FALSE, &tu->default_session); + use_fingerprint, &tu->default_session); if (status != PJ_SUCCESS) { pj_stun_usage_destroy(tu->usage); return status; @@ -637,7 +640,7 @@ static pj_status_t client_create(struct turn_usage *tu, sess_cb.on_rx_request = &client_sess_on_rx_msg; sess_cb.on_rx_indication = &client_sess_on_rx_msg; status = pj_stun_session_create(tu->cfg, client->obj_name, - &sess_cb, PJ_FALSE, + &sess_cb, tu->use_fingerprint, &client->session); if (status != PJ_SUCCESS) { pj_pool_release(pool); |