Changeset 799


Ignore:
Timestamp:
Nov 11, 2006 9:25:55 PM (17 years ago)
Author:
bennylp
Message:

Add pjsip_regc_add_headers() APi to set headers to be added
to the REGISTER request. This solves the problem where headers

registered in the initial REGISTER request (such as User-Agent
header) are not sent in subsequent reregistration request.

Location:
pjproject/trunk/pjsip
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/include/pjsip-ua/sip_regc.h

    r515 r799  
    200200 
    201201/** 
     202 * Add headers to be added to outgoing REGISTER requests. 
     203 * 
     204 * @param regc      The client registration structure. 
     205 * @param hdr_list  List containing SIP headers to be added for all outgoing 
     206 *                  REGISTER requests. 
     207 * 
     208 * @return          PJ_SUCCESS on success. 
     209 */ 
     210PJ_DECL(pj_status_t) pjsip_regc_add_headers(pjsip_regc *regc, 
     211                                            const pjsip_hdr *hdr_list); 
     212 
     213 
     214/** 
    202215 * Create REGISTER request for the specified client registration structure. 
    203216 * 
  • pjproject/trunk/pjsip/src/pjsip-ua/sip_reg.c

    r776 r799  
    6666    pj_uint32_t                  expires; 
    6767    pjsip_route_hdr              route_set; 
     68    pjsip_hdr                    hdr_list; 
    6869 
    6970    /* Authorization sessions. */ 
     
    107108 
    108109    pj_list_init(&regc->route_set); 
     110    pj_list_init(&regc->hdr_list); 
    109111 
    110112    /* Done */ 
     
    308310} 
    309311 
     312PJ_DEF(pj_status_t) pjsip_regc_add_headers( pjsip_regc *regc, 
     313                                            const pjsip_hdr *hdr_list) 
     314{ 
     315    const pjsip_hdr *hdr; 
     316 
     317    PJ_ASSERT_RETURN(regc && hdr_list, PJ_EINVAL); 
     318 
     319    //This is "add" operation, so don't remove headers. 
     320    //pj_list_init(&regc->hdr_list); 
     321 
     322    hdr = hdr_list->next; 
     323    while (hdr != hdr_list) { 
     324        pj_list_push_back(&regc->hdr_list, pjsip_hdr_clone(regc->pool, hdr)); 
     325        hdr = hdr->next; 
     326    } 
     327 
     328    return PJ_SUCCESS; 
     329} 
     330 
    310331static pj_status_t create_request(pjsip_regc *regc,  
    311332                                  pjsip_tx_data **p_tdata) 
     
    348369            route_pos = new_hdr; 
    349370            route = route->next; 
     371        } 
     372    } 
     373 
     374    /* Add additional request headers */ 
     375    if (!pj_list_empty(&regc->hdr_list)) { 
     376        const pjsip_hdr *hdr; 
     377 
     378        hdr = regc->hdr_list.next; 
     379        while (hdr != &regc->hdr_list) { 
     380            pjsip_hdr *new_hdr = pjsip_hdr_shallow_clone(tdata->pool, hdr); 
     381            pjsip_msg_add_hdr(tdata->msg, new_hdr); 
     382            hdr = hdr->next; 
    350383        } 
    351384    } 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_acc.c

    r781 r799  
    551551    } 
    552552 
     553    /* Add other request headers. */ 
     554    if (pjsua_var.ua_cfg.user_agent.slen) { 
     555        pjsip_hdr hdr_list; 
     556        const pj_str_t STR_USER_AGENT = { "User-Agent", 10 }; 
     557        pjsip_generic_string_hdr *h; 
     558 
     559        pool = pj_pool_create_on_buf(NULL, contact_buf, sizeof(contact_buf)); 
     560        pj_list_init(&hdr_list); 
     561 
     562        h = pjsip_generic_string_hdr_create(pool, &STR_USER_AGENT,  
     563                                            &pjsua_var.ua_cfg.user_agent); 
     564        pj_list_push_back(&hdr_list, (pjsip_hdr*)h); 
     565 
     566        pjsip_regc_add_headers(acc->regc, &hdr_list); 
     567    } 
     568 
    553569    return PJ_SUCCESS; 
    554570} 
     
    597613 
    598614    if (status == PJ_SUCCESS) { 
    599         pjsua_process_msg_data(tdata, NULL); 
     615        //pjsua_process_msg_data(tdata, NULL); 
    600616        status = pjsip_regc_send( pjsua_var.acc[acc_id].regc, tdata ); 
    601617    } 
Note: See TracChangeset for help on using the changeset viewer.