diff options
author | Benny Prijono <bennylp@teluu.com> | 2008-03-19 23:00:30 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2008-03-19 23:00:30 +0000 |
commit | 97dfbff2ebfae83b7cb10517247215d38e4a74fd (patch) | |
tree | 0edea19f19049829e444733eced5d892b5a95a84 /pjnath/src/pjturn-srv | |
parent | b15dff0bed0f34a3371bce1b17e5a13ade0fb194 (diff) |
Related to ticket #485: huge changeset to update STUN relating to managing authentication. See the ticket for the details
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1877 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjnath/src/pjturn-srv')
-rw-r--r-- | pjnath/src/pjturn-srv/allocation.c | 65 | ||||
-rw-r--r-- | pjnath/src/pjturn-srv/auth.c | 23 | ||||
-rw-r--r-- | pjnath/src/pjturn-srv/auth.h | 12 | ||||
-rw-r--r-- | pjnath/src/pjturn-srv/server.c | 117 | ||||
-rw-r--r-- | pjnath/src/pjturn-srv/turn.h | 23 |
5 files changed, 47 insertions, 193 deletions
diff --git a/pjnath/src/pjturn-srv/allocation.c b/pjnath/src/pjturn-srv/allocation.c index da35266c..14ed228b 100644 --- a/pjnath/src/pjturn-srv/allocation.c +++ b/pjnath/src/pjturn-srv/allocation.c @@ -72,7 +72,7 @@ static pj_status_t stun_on_send_msg(pj_stun_session *sess, static pj_status_t stun_on_rx_request(pj_stun_session *sess, const pj_uint8_t *pkt, unsigned pkt_len, - const pj_stun_msg *msg, + const pj_stun_rx_data *rdata, const pj_sockaddr_t *src_addr, unsigned src_addr_len); static pj_status_t stun_on_rx_indication(pj_stun_session *sess, @@ -97,10 +97,11 @@ static void alloc_err(pj_turn_allocation *alloc, const char *title, /* Parse ALLOCATE request */ static pj_status_t parse_allocate_req(alloc_request *cfg, pj_stun_session *sess, - const pj_stun_msg *req, + const pj_stun_rx_data *rdata, const pj_sockaddr_t *src_addr, unsigned src_addr_len) { + const pj_stun_msg *req = rdata->msg; pj_stun_bandwidth_attr *attr_bw; pj_stun_req_transport_attr *attr_req_tp; pj_stun_res_token_attr *attr_res_token; @@ -120,7 +121,8 @@ static pj_status_t parse_allocate_req(alloc_request *cfg, /* Check if we can satisfy the bandwidth */ if (cfg->bandwidth > MAX_CLIENT_BANDWIDTH) { - pj_stun_session_respond(sess, req, PJ_STUN_SC_ALLOCATION_QUOTA_REACHED, + pj_stun_session_respond(sess, rdata, + PJ_STUN_SC_ALLOCATION_QUOTA_REACHED, "Invalid bandwidth", PJ_TRUE, src_addr, src_addr_len); return PJ_STATUS_FROM_STUN_CODE(PJ_STUN_SC_ALLOCATION_QUOTA_REACHED); @@ -130,7 +132,7 @@ static pj_status_t parse_allocate_req(alloc_request *cfg, attr_req_tp = (pj_stun_uint_attr*) pj_stun_msg_find_attr(req, PJ_STUN_ATTR_REQ_TRANSPORT, 0); if (attr_req_tp == NULL) { - pj_stun_session_respond(sess, req, PJ_STUN_SC_BAD_REQUEST, + pj_stun_session_respond(sess, rdata, PJ_STUN_SC_BAD_REQUEST, "Missing REQUESTED-TRANSPORT attribute", PJ_TRUE, src_addr, src_addr_len); return PJ_STATUS_FROM_STUN_CODE(PJ_STUN_SC_BAD_REQUEST); @@ -140,7 +142,7 @@ static pj_status_t parse_allocate_req(alloc_request *cfg, /* Can only support UDP for now */ if (cfg->tp_type != PJ_TURN_TP_UDP) { - pj_stun_session_respond(sess, req, PJ_STUN_SC_UNSUPP_TRANSPORT_PROTO, + pj_stun_session_respond(sess, rdata, PJ_STUN_SC_UNSUPP_TRANSPORT_PROTO, NULL, PJ_TRUE, src_addr, src_addr_len); return PJ_STATUS_FROM_STUN_CODE(PJ_STUN_SC_UNSUPP_TRANSPORT_PROTO); } @@ -151,7 +153,7 @@ static pj_status_t parse_allocate_req(alloc_request *cfg, 0); if (attr_res_token) { /* We don't support RESERVATION-TOKEN for now */ - pj_stun_session_respond(sess, req, + pj_stun_session_respond(sess, rdata, PJ_STUN_SC_BAD_REQUEST, "RESERVATION-TOKEN is not supported", PJ_TRUE, src_addr, src_addr_len); @@ -163,7 +165,7 @@ static pj_status_t parse_allocate_req(alloc_request *cfg, pj_stun_msg_find_attr(req, PJ_STUN_ATTR_REQ_PROPS, 0); if (attr_rpp) { /* We don't support REQUESTED-PROPS for now */ - pj_stun_session_respond(sess, req, + pj_stun_session_respond(sess, rdata, PJ_STUN_SC_BAD_REQUEST, "REQUESTED-PROPS is not supported", PJ_TRUE, src_addr, src_addr_len); @@ -176,7 +178,7 @@ static pj_status_t parse_allocate_req(alloc_request *cfg, if (attr_lifetime) { cfg->lifetime = attr_lifetime->value; if (cfg->lifetime < MIN_LIFETIME) { - pj_stun_session_respond(sess, req, PJ_STUN_SC_BAD_REQUEST, + pj_stun_session_respond(sess, rdata, PJ_STUN_SC_BAD_REQUEST, "LIFETIME too short", PJ_TRUE, src_addr, src_addr_len); return PJ_STATUS_FROM_STUN_CODE(PJ_STUN_SC_BAD_REQUEST); @@ -194,13 +196,13 @@ static pj_status_t parse_allocate_req(alloc_request *cfg, /* Respond to ALLOCATE request */ static pj_status_t send_allocate_response(pj_turn_allocation *alloc, pj_stun_session *srv_sess, - const pj_stun_msg *msg) + const pj_stun_rx_data *rdata) { pj_stun_tx_data *tdata; pj_status_t status; /* Respond the original ALLOCATE request */ - status = pj_stun_session_create_res(srv_sess, msg, 0, NULL, &tdata); + status = pj_stun_session_create_res(srv_sess, rdata, 0, NULL, &tdata); if (status != PJ_SUCCESS) return status; @@ -284,11 +286,12 @@ static pj_status_t init_cred(pj_turn_allocation *alloc, const pj_stun_msg *req) PJ_DEF(pj_status_t) pj_turn_allocation_create(pj_turn_listener *listener, const pj_sockaddr_t *src_addr, unsigned src_addr_len, - const pj_stun_msg *msg, + const pj_stun_rx_data *rdata, pj_stun_session *srv_sess, pj_turn_allocation **p_alloc) { pj_turn_srv *srv = listener->server; + const pj_stun_msg *msg = rdata->msg; pj_pool_t *pool; alloc_request req; pj_turn_allocation *alloc; @@ -297,7 +300,7 @@ PJ_DEF(pj_status_t) pj_turn_allocation_create(pj_turn_listener *listener, pj_status_t status; /* Parse ALLOCATE request */ - status = parse_allocate_req(&req, srv_sess, msg, src_addr, src_addr_len); + status = parse_allocate_req(&req, srv_sess, rdata, src_addr, src_addr_len); if (status != PJ_SUCCESS) return status; @@ -354,7 +357,8 @@ PJ_DEF(pj_status_t) pj_turn_allocation_create(pj_turn_listener *listener, } /* Attach authentication credential to STUN session */ - pj_stun_session_set_credential(alloc->sess, &alloc->cred); + pj_stun_session_set_credential(alloc->sess, PJ_STUN_AUTH_LONG_TERM, + &alloc->cred); /* Create the relay resource */ status = create_relay(srv, alloc, msg, &req, &alloc->relay); @@ -366,7 +370,7 @@ PJ_DEF(pj_status_t) pj_turn_allocation_create(pj_turn_listener *listener, pj_turn_srv_register_allocation(srv, alloc); /* Respond to ALLOCATE request */ - status = send_allocate_response(alloc, srv_sess, msg); + status = send_allocate_response(alloc, srv_sess, rdata); if (status != PJ_SUCCESS) goto on_error; @@ -383,7 +387,7 @@ PJ_DEF(pj_status_t) pj_turn_allocation_create(pj_turn_listener *listener, on_error: /* Send reply to the ALLOCATE request */ pj_strerror(status, str_tmp, sizeof(str_tmp)); - pj_stun_session_respond(srv_sess, msg, PJ_STUN_SC_BAD_REQUEST, str_tmp, + pj_stun_session_respond(srv_sess, rdata, PJ_STUN_SC_BAD_REQUEST, str_tmp, PJ_TRUE, src_addr, src_addr_len); /* Cleanup */ @@ -709,13 +713,13 @@ static pj_status_t create_relay(pj_turn_srv *srv, /* Create and send error response */ static void send_reply_err(pj_turn_allocation *alloc, - const pj_stun_msg *req, + const pj_stun_rx_data *rdata, pj_bool_t cache, int code, const char *errmsg) { pj_status_t status; - status = pj_stun_session_respond(alloc->sess, req, code, errmsg, cache, + status = pj_stun_session_respond(alloc->sess, rdata, code, errmsg, cache, &alloc->hkey.clt_addr, pj_sockaddr_get_len(&alloc->hkey.clt_addr.addr)); if (status != PJ_SUCCESS) { @@ -726,13 +730,13 @@ static void send_reply_err(pj_turn_allocation *alloc, /* Create and send successful response */ static void send_reply_ok(pj_turn_allocation *alloc, - const pj_stun_msg *req) + const pj_stun_rx_data *rdata) { pj_status_t status; unsigned interval; pj_stun_tx_data *tdata; - status = pj_stun_session_create_res(alloc->sess, req, 0, NULL, &tdata); + status = pj_stun_session_create_res(alloc->sess, rdata, 0, NULL, &tdata); if (status != PJ_SUCCESS) { alloc_err(alloc, "Error creating STUN success response", status); return; @@ -1072,10 +1076,11 @@ static pj_status_t stun_on_send_msg(pj_stun_session *sess, static pj_status_t stun_on_rx_request(pj_stun_session *sess, const pj_uint8_t *pkt, unsigned pkt_len, - const pj_stun_msg *msg, + const pj_stun_rx_data *rdata, const pj_sockaddr_t *src_addr, unsigned src_addr_len) { + const pj_stun_msg *msg = rdata->msg; pj_turn_allocation *alloc; PJ_UNUSED_ARG(pkt); @@ -1088,7 +1093,7 @@ static pj_status_t stun_on_rx_request(pj_stun_session *sess, /* Refuse to serve any request if we've been shutdown */ if (alloc->relay.lifetime == 0) { /* Reject with 437 if we're shutting down */ - send_reply_err(alloc, msg, PJ_TRUE, + send_reply_err(alloc, rdata, PJ_TRUE, PJ_STUN_SC_ALLOCATION_MISMATCH, NULL); return PJ_SUCCESS; } @@ -1115,7 +1120,7 @@ static pj_status_t stun_on_rx_request(pj_stun_session *sess, alloc->relay.lifetime = 0; /* Respond first */ - send_reply_ok(alloc, msg); + send_reply_ok(alloc, rdata); /* Shutdown allocation */ PJ_LOG(4,(alloc->obj_name, @@ -1141,7 +1146,7 @@ static pj_status_t stun_on_rx_request(pj_stun_session *sess, resched_timeout(alloc); /* Send reply */ - send_reply_ok(alloc, msg); + send_reply_ok(alloc, rdata); } } else if (msg->hdr.type == PJ_STUN_CHANNEL_BIND_REQUEST) { @@ -1158,7 +1163,8 @@ static pj_status_t stun_on_rx_request(pj_stun_session *sess, pj_stun_msg_find_attr(msg, PJ_STUN_ATTR_PEER_ADDR, 0); if (!ch_attr || !peer_attr) { - send_reply_err(alloc, msg, PJ_TRUE, PJ_STUN_SC_BAD_REQUEST, NULL); + send_reply_err(alloc, rdata, PJ_TRUE, + PJ_STUN_SC_BAD_REQUEST, NULL); return PJ_SUCCESS; } @@ -1171,7 +1177,7 @@ static pj_status_t stun_on_rx_request(pj_stun_session *sess, if (p1) { if (pj_sockaddr_cmp(&p1->hkey.peer_addr, &peer_attr->sockaddr)) { /* Address mismatch. Send 400 */ - send_reply_err(alloc, msg, PJ_TRUE, + send_reply_err(alloc, rdata, PJ_TRUE, PJ_STUN_SC_BAD_REQUEST, "Peer address mismatch"); return PJ_SUCCESS; @@ -1190,7 +1196,7 @@ static pj_status_t stun_on_rx_request(pj_stun_session *sess, p2 = lookup_permission_by_addr(alloc, &peer_attr->sockaddr, pj_sockaddr_get_len(&peer_attr->sockaddr)); if (p2 && p2->channel != PJ_TURN_INVALID_CHANNEL) { - send_reply_err(alloc, msg, PJ_TRUE, PJ_STUN_SC_BAD_REQUEST, + send_reply_err(alloc, rdata, PJ_TRUE, PJ_STUN_SC_BAD_REQUEST, "Peer address already assigned a channel number"); return PJ_SUCCESS; } @@ -1210,19 +1216,20 @@ static pj_status_t stun_on_rx_request(pj_stun_session *sess, refresh_permission(p2); /* Reply */ - send_reply_ok(alloc, msg); + send_reply_ok(alloc, rdata); return PJ_SUCCESS; } else if (msg->hdr.type == PJ_STUN_ALLOCATE_REQUEST) { /* Respond with 437 (section 6.3 turn-07) */ - send_reply_err(alloc, msg, PJ_TRUE, PJ_STUN_SC_ALLOCATION_MISMATCH, NULL); + send_reply_err(alloc, rdata, PJ_TRUE, PJ_STUN_SC_ALLOCATION_MISMATCH, + NULL); } else { /* Respond with Bad Request? */ - send_reply_err(alloc, msg, PJ_TRUE, PJ_STUN_SC_BAD_REQUEST, NULL); + send_reply_err(alloc, rdata, PJ_TRUE, PJ_STUN_SC_BAD_REQUEST, NULL); } diff --git a/pjnath/src/pjturn-srv/auth.c b/pjnath/src/pjturn-srv/auth.c index ad930251..3071221c 100644 --- a/pjnath/src/pjturn-srv/auth.c +++ b/pjnath/src/pjturn-srv/auth.c @@ -58,29 +58,6 @@ PJ_DEF(void) pj_turn_auth_dinit(void) } -PJ_DEF(pj_status_t) pj_turn_get_cred( const pj_stun_msg *msg, - void *user_data, - pj_pool_t *pool, - pj_str_t *realm, - pj_str_t *username, - pj_str_t *nonce, - int *data_type, - pj_str_t *data) -{ - PJ_UNUSED_ARG(msg); - PJ_UNUSED_ARG(pool); - PJ_UNUSED_ARG(user_data); - - *realm = pj_str(g_realm); - *username = pj_str(g_cred[0].username); - *nonce = pj_str(THE_NONCE); - *data_type = 0; - *data = pj_str(g_cred[0].passwd); - - return PJ_SUCCESS; -} - - /* * This function is called by pj_stun_verify_credential() when * server needs to challenge the request with 401 response. diff --git a/pjnath/src/pjturn-srv/auth.h b/pjnath/src/pjturn-srv/auth.h index d0b5a0ec..db928051 100644 --- a/pjnath/src/pjturn-srv/auth.h +++ b/pjnath/src/pjturn-srv/auth.h @@ -61,18 +61,6 @@ PJ_DECL(pj_status_t) pj_turn_get_auth(void *user_data, pj_str_t *nonce); /** - * Get credential. - */ -PJ_DECL(pj_status_t) pj_turn_get_cred(const pj_stun_msg *msg, - void *user_data, - pj_pool_t *pool, - pj_str_t *realm, - pj_str_t *username, - pj_str_t *nonce, - int *data_type, - pj_str_t *data); - -/** * This function is called to get the password for the specified username. * This function is also used to check whether the username is valid. * diff --git a/pjnath/src/pjturn-srv/server.c b/pjnath/src/pjturn-srv/server.c index 11180dbf..b22cc53b 100644 --- a/pjnath/src/pjturn-srv/server.c +++ b/pjnath/src/pjturn-srv/server.c @@ -40,7 +40,7 @@ static pj_status_t on_tx_stun_msg( pj_stun_session *sess, static pj_status_t on_rx_stun_request(pj_stun_session *sess, const pj_uint8_t *pkt, unsigned pkt_len, - const pj_stun_msg *msg, + const pj_stun_rx_data *rdata, const pj_sockaddr_t *src_addr, unsigned src_addr_len); @@ -147,7 +147,6 @@ PJ_DEF(pj_status_t) pj_turn_srv_create(pj_pool_factory *pf, srv->core.cred.type = PJ_STUN_AUTH_CRED_DYNAMIC; srv->core.cred.data.dyn_cred.user_data = srv; srv->core.cred.data.dyn_cred.get_auth = &pj_turn_get_auth; - srv->core.cred.data.dyn_cred.get_cred = &pj_turn_get_cred; srv->core.cred.data.dyn_cred.get_password = &pj_turn_get_password; srv->core.cred.data.dyn_cred.verify_nonce = &pj_turn_verify_nonce; @@ -368,7 +367,8 @@ PJ_DEF(pj_status_t) pj_turn_srv_add_listener(pj_turn_srv *srv, } pj_stun_session_set_user_data(sess, lis); - pj_stun_session_set_credential(sess, &srv->core.cred); + pj_stun_session_set_credential(sess, PJ_STUN_AUTH_LONG_TERM, + &srv->core.cred); srv->core.stun_sess[index] = sess; lis->id = index; @@ -483,9 +483,8 @@ static pj_status_t on_tx_stun_msg( pj_stun_session *sess, /* Respond to STUN request */ -static pj_status_t stun_respond(pj_turn_srv *srv, - pj_stun_session *sess, - const pj_stun_msg *req, +static pj_status_t stun_respond(pj_stun_session *sess, + const pj_stun_rx_data *rdata, unsigned code, const char *errmsg, pj_bool_t cache, @@ -497,114 +496,17 @@ static pj_status_t stun_respond(pj_turn_srv *srv, pj_stun_tx_data *tdata; /* Create response */ - status = pj_stun_session_create_res(sess, req, code, + status = pj_stun_session_create_res(sess, rdata, code, (errmsg?pj_cstr(&reason,errmsg):NULL), &tdata); if (status != PJ_SUCCESS) return status; - /* Store the credential for future lookup. */ - if (pj_stun_auth_valid_for_msg(tdata->msg)) { - pj_turn_srv_put_cred(srv, req, tdata); - } - /* Send the response */ return pj_stun_session_send_msg(sess, cache, dst_addr, addr_len, tdata); } -/* - * Store the credential to put placed for the specified message for - * future retrieval. - */ -PJ_DEF(pj_status_t) pj_turn_srv_put_cred(pj_turn_srv *srv, - const pj_stun_msg *req, - pj_stun_tx_data *response) -{ - pj_stun_username_attr *user; - pj_stun_realm_attr *realm; - pj_stun_nonce_attr *nonce; - struct saved_cred *saved_cred; - pj_status_t status; - - realm = (pj_stun_realm_attr*) - pj_stun_msg_find_attr(req, PJ_STUN_ATTR_REALM, 0); - PJ_ASSERT_RETURN(realm != NULL, PJ_EBUG); - - user = (pj_stun_username_attr*) - pj_stun_msg_find_attr(req, PJ_STUN_ATTR_USERNAME, 0); - PJ_ASSERT_RETURN(user != NULL, PJ_EBUG); - - nonce = (pj_stun_nonce_attr*) - pj_stun_msg_find_attr(req, PJ_STUN_ATTR_NONCE, 0); - PJ_ASSERT_RETURN(nonce != NULL, PJ_EBUG); - - saved_cred = PJ_POOL_ALLOC_T(response->pool, struct saved_cred); - - /* Lookup the password */ - status = pj_turn_get_password(response->msg, NULL, &realm->value, - &user->value, response->pool, - &saved_cred->data_type, - &saved_cred->data); - if (status != PJ_SUCCESS) - return status; - - /* Store credential */ - pj_strdup(response->pool, &saved_cred->username, &user->value); - pj_strdup(response->pool, &saved_cred->realm, &realm->value); - pj_strdup(response->pool, &saved_cred->nonce, &nonce->value); - - pj_thread_local_set(srv->core.tls_key, response->msg); - pj_thread_local_set(srv->core.tls_data, saved_cred); - - return PJ_SUCCESS; -} - - -/** - * Retrieve previously stored credential for the specified message. - */ -PJ_DEF(pj_status_t) pj_turn_srv_get_cred(const pj_stun_msg *msg, - void *user_data, - pj_pool_t *pool, - pj_str_t *realm, - pj_str_t *username, - pj_str_t *nonce, - int *data_type, - pj_str_t *data) -{ - pj_turn_srv *srv; - const pj_stun_msg *saved_msg; - struct saved_cred *saved_cred; - - PJ_UNUSED_ARG(pool); - - srv = (pj_turn_srv*)user_data; - - /* Lookup stored message and make sure it's for the same message */ - saved_msg = (const pj_stun_msg*) - pj_thread_local_get(srv->core.tls_key); - PJ_ASSERT_RETURN(saved_msg==msg, PJ_ENOTFOUND); - - /* Lookup saved credential */ - saved_cred = (struct saved_cred*) - pj_thread_local_get(srv->core.tls_data); - PJ_ASSERT_RETURN(saved_cred != NULL, PJ_ENOTFOUND); - - - *realm = saved_cred->realm; - *username = saved_cred->username; - *nonce = saved_cred->nonce; - *data_type = saved_cred->data_type; - *data = saved_cred->data; - - - /* Don't clear saved_cred as this may be called more than once */ - - return PJ_SUCCESS; -} - - /* Callback from our own STUN session when incoming request arrives. * This function is triggered by pj_stun_session_on_rx_pkt() call in * pj_turn_srv_on_rx_pkt() function below. @@ -612,11 +514,12 @@ PJ_DEF(pj_status_t) pj_turn_srv_get_cred(const pj_stun_msg *msg, static pj_status_t on_rx_stun_request(pj_stun_session *sess, const pj_uint8_t *pkt, unsigned pkt_len, - const pj_stun_msg *msg, + const pj_stun_rx_data *rdata, const pj_sockaddr_t *src_addr, unsigned src_addr_len) { pj_turn_listener *listener; + const pj_stun_msg *msg = rdata->msg; pj_turn_srv *srv; pj_turn_allocation *alloc; pj_status_t status; @@ -629,7 +532,7 @@ static pj_status_t on_rx_stun_request(pj_stun_session *sess, /* Respond any requests other than ALLOCATE with 437 response */ if (msg->hdr.type != PJ_STUN_ALLOCATE_REQUEST) { - stun_respond(srv, sess, msg, PJ_STUN_SC_ALLOCATION_MISMATCH, + stun_respond(sess, rdata, PJ_STUN_SC_ALLOCATION_MISMATCH, NULL, PJ_FALSE, src_addr, src_addr_len); return PJ_SUCCESS; } @@ -638,7 +541,7 @@ static pj_status_t on_rx_stun_request(pj_stun_session *sess, * in this function. */ status = pj_turn_allocation_create(listener, src_addr, src_addr_len, - msg, sess, &alloc); + rdata, sess, &alloc); if (status != PJ_SUCCESS) { /* STUN response has been sent, no need to reply here */ return PJ_SUCCESS; diff --git a/pjnath/src/pjturn-srv/turn.h b/pjnath/src/pjturn-srv/turn.h index 871db425..2eb99254 100644 --- a/pjnath/src/pjturn-srv/turn.h +++ b/pjnath/src/pjturn-srv/turn.h @@ -204,7 +204,7 @@ struct pj_turn_permission PJ_DECL(pj_status_t) pj_turn_allocation_create(pj_turn_listener *listener, const pj_sockaddr_t *src_addr, unsigned src_addr_len, - const pj_stun_msg *msg, + const pj_stun_rx_data *rdata, pj_stun_session *srv_sess, pj_turn_allocation **p_alloc); /** @@ -459,26 +459,5 @@ PJ_DECL(void) pj_turn_srv_on_rx_pkt(pj_turn_srv *srv, pj_turn_pkt *pkt); -/** - * Store the credential to put placed for the specified message for - * future retrieval. - */ -PJ_DECL(pj_status_t) pj_turn_srv_put_cred(pj_turn_srv *srv, - const pj_stun_msg *request, - pj_stun_tx_data *response); - -/** - * Retrieve previously stored credential for the specified message. - */ -PJ_DECL(pj_status_t) pj_turn_srv_get_cred(const pj_stun_msg *msg, - void *user_data, - pj_pool_t *pool, - pj_str_t *realm, - pj_str_t *username, - pj_str_t *nonce, - int *data_type, - pj_str_t *data); - - #endif /* __PJ_TURN_SRV_TURN_H__ */ |