Ignore:
Timestamp:
Dec 28, 2016 3:40:07 AM (8 years ago)
Author:
nanang
Message:

Re #1900: More merged from trunk (r5512 mistakenly contains merged changes in third-party dir only).

Location:
pjproject/branches/projects/uwp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/projects/uwp

  • pjproject/branches/projects/uwp/pjsip/src/pjsip/sip_auth_client.c

    r4728 r5513  
    340340        else { 
    341341            pjsip_auth_create_digest( &cred->response, &cred->nonce, 
    342                                       &cred->nc, cnonce, &pjsip_AUTH_STR, 
     342                                      &cred->nc, &cred->cnonce, &pjsip_AUTH_STR, 
    343343                                      uri, &chal->realm, cred_info, method ); 
    344344        } 
     
    358358 * Update authentication session with a challenge. 
    359359 */ 
    360 static void update_digest_session( pj_pool_t *ses_pool, 
    361                                    pjsip_cached_auth *cached_auth, 
     360static void update_digest_session( pjsip_cached_auth *cached_auth, 
    362361                                   const pjsip_www_authenticate_hdr *hdr ) 
    363362{ 
     
    366365        if (!cached_auth->last_chal || pj_stricmp2(&hdr->scheme, "digest")) { 
    367366            cached_auth->last_chal = (pjsip_www_authenticate_hdr*) 
    368                                      pjsip_hdr_clone(ses_pool, hdr); 
     367                                     pjsip_hdr_clone(cached_auth->pool, hdr); 
    369368        } else { 
    370369            /* Only update if the new challenge is "significantly different" 
     
    383382            { 
    384383                cached_auth->last_chal = (pjsip_www_authenticate_hdr*) 
    385                                          pjsip_hdr_clone(ses_pool, hdr); 
     384                                       pjsip_hdr_clone(cached_auth->pool, hdr); 
    386385            } 
    387386        } 
     
    394393        /* Save the whole challenge */ 
    395394        cached_auth->last_chal = (pjsip_www_authenticate_hdr*) 
    396                                  pjsip_hdr_clone(ses_pool, hdr); 
     395                                 pjsip_hdr_clone(cached_auth->pool, hdr); 
    397396 
    398397        /* Create cnonce */ 
    399         pj_create_unique_string( ses_pool, &cached_auth->cnonce ); 
     398        pj_create_unique_string( cached_auth->pool, &cached_auth->cnonce ); 
    400399 
    401400        /* Initialize nonce-count */ 
     
    407406        */ 
    408407        if (cached_auth->realm.slen == 0) { 
    409             pj_strdup(ses_pool, &cached_auth->realm, 
     408            pj_strdup(cached_auth->pool, &cached_auth->realm, 
    410409                      &hdr->challenge.digest.realm); 
    411410        } 
     
    420419        } else { 
    421420            /* Server gives new nonce. */ 
    422             pj_strdup(ses_pool, &cached_auth->last_chal->challenge.digest.nonce, 
     421            pj_strdup(cached_auth->pool,  
     422                      &cached_auth->last_chal->challenge.digest.nonce, 
    423423                      &hdr->challenge.digest.nonce); 
    424424            /* Has the opaque changed? */ 
     
    426426                          &hdr->challenge.digest.opaque)) 
    427427            { 
    428                 pj_strdup(ses_pool, 
     428                pj_strdup(cached_auth->pool, 
    429429                          &cached_auth->last_chal->challenge.digest.opaque, 
    430430                          &hdr->challenge.digest.opaque); 
     
    495495    sess->cred_info = NULL; 
    496496    pj_list_init(&sess->cached_auth); 
     497 
     498    return PJ_SUCCESS; 
     499} 
     500 
     501 
     502/* Deinit client session. */ 
     503PJ_DEF(pj_status_t) pjsip_auth_clt_deinit(pjsip_auth_clt_sess *sess) 
     504{ 
     505    pjsip_cached_auth *auth; 
     506     
     507    PJ_ASSERT_RETURN(sess && sess->endpt, PJ_EINVAL); 
     508     
     509    auth = sess->cached_auth.next; 
     510    while (auth != &sess->cached_auth) { 
     511        pjsip_endpt_release_pool(sess->endpt, auth->pool); 
     512        auth = auth->next; 
     513    } 
    497514 
    498515    return PJ_SUCCESS; 
     
    692709        { 
    693710            if (cached_auth) { 
    694                 update_digest_session( sess_pool, cached_auth, hdr ); 
     711                update_digest_session( cached_auth, hdr ); 
    695712 
    696713                cnonce = &cached_auth->cnonce; 
     
    961978} 
    962979 
     980 
     981static void recreate_cached_auth_pool( pjsip_endpoint *endpt,  
     982                                       pjsip_cached_auth *auth ) 
     983{ 
     984    pj_pool_t *auth_pool = pjsip_endpt_create_pool(endpt, "auth_cli%p", 1024,  
     985                                                   1024); 
     986 
     987    if (auth->realm.slen) { 
     988        pj_str_t realm; 
     989        pj_strdup(auth_pool, &realm, &auth->realm); 
     990        pj_strassign(&auth->realm, &realm); 
     991    } 
     992 
     993    if (auth->cnonce.slen) { 
     994        pj_str_t cnonce; 
     995        pj_strdup(auth_pool, &cnonce, &auth->cnonce); 
     996        pj_strassign(&auth->cnonce, &cnonce); 
     997    } 
     998 
     999    if (auth->last_chal) { 
     1000        auth->last_chal = (pjsip_www_authenticate_hdr*) 
     1001                          pjsip_hdr_clone(auth_pool, auth->last_chal); 
     1002    } 
     1003 
     1004    pjsip_endpt_release_pool(endpt, auth->pool); 
     1005    auth->pool = auth_pool; 
     1006} 
    9631007 
    9641008/* Process authorization challenge */ 
     
    11271171            break; 
    11281172 
    1129         hchal = (const pjsip_www_authenticate_hdr*) hdr; 
     1173        hchal = (const pjsip_www_authenticate_hdr*)hdr; 
    11301174        ++chal_cnt; 
    11311175 
     
    11331177         * if not present. 
    11341178         */ 
    1135         cached_auth = find_cached_auth(sess, &hchal->challenge.common.realm ); 
     1179        cached_auth = find_cached_auth(sess, &hchal->challenge.common.realm); 
    11361180        if (!cached_auth) { 
    1137             cached_auth = PJ_POOL_ZALLOC_T( sess->pool, pjsip_cached_auth); 
    1138             pj_strdup( sess->pool, &cached_auth->realm, &hchal->challenge.common.realm); 
     1181            cached_auth = PJ_POOL_ZALLOC_T(sess->pool, pjsip_cached_auth); 
     1182            cached_auth->pool = pjsip_endpt_create_pool(sess->endpt, 
     1183                                                        "auth_cli%p", 
     1184                                                        1024, 
     1185                                                        1024); 
     1186            pj_strdup(cached_auth->pool, &cached_auth->realm, 
     1187                      &hchal->challenge.common.realm); 
    11391188            cached_auth->is_proxy = (hchal->type == PJSIP_H_PROXY_AUTHENTICATE); 
    11401189#           if (PJSIP_AUTH_HEADER_CACHING) 
     
    11431192            } 
    11441193#           endif 
    1145             pj_list_insert_before( &sess->cached_auth, cached_auth ); 
     1194            pj_list_insert_before(&sess->cached_auth, cached_auth); 
    11461195        } 
    11471196 
     
    11491198         * authorization session. 
    11501199         */ 
    1151         status = process_auth( tdata->pool, hchal, tdata->msg->line.req.uri, 
    1152                                tdata, sess, cached_auth, &hauth); 
     1200        status = process_auth(tdata->pool, hchal, tdata->msg->line.req.uri, 
     1201                              tdata, sess, cached_auth, &hauth); 
    11531202        if (status != PJ_SUCCESS) 
    11541203            return status; 
     1204 
     1205        if (pj_pool_get_used_size(cached_auth->pool) > 
     1206            PJSIP_AUTH_CACHED_POOL_MAX_SIZE)  
     1207        { 
     1208            recreate_cached_auth_pool(sess->endpt, cached_auth); 
     1209        }        
    11551210 
    11561211        /* Add to the message. */ 
Note: See TracChangeset for help on using the changeset viewer.