Changeset 5455


Ignore:
Timestamp:
Oct 7, 2016 7:42:22 AM (8 years ago)
Author:
ming
Message:

Fixed #1965: Add support to specify Contact params specific to REGISTER requests

Location:
pjproject/trunk/pjsip
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/include/pjsua-lib/pjsua.h

    r5417 r5455  
    29542954    pjsip_hdr       reg_hdr_list; 
    29552955 
     2956    /** 
     2957     * Additional parameters that will be appended in the Contact header 
     2958     * for this account. This will only affect REGISTER requests and 
     2959     * will be appended after \a contact_params; 
     2960     * 
     2961     * The parameters should be preceeded by semicolon, and all strings must 
     2962     * be properly escaped. Example: 
     2963     *   ";my-param=X;another-param=Hi%20there" 
     2964     */ 
     2965    pj_str_t        reg_contact_params; 
     2966 
    29562967    /**  
    29572968     * The optional custom SIP headers to be put in the presence 
  • pjproject/trunk/pjsip/include/pjsua2/account.hpp

    r5410 r5455  
    7171 
    7272    /** 
     73     * Additional parameters that will be appended in the Contact header 
     74     * of the registration requests. This will be appended after 
     75     * \a AccountSipConfig.contactParams; 
     76     * 
     77     * The parameters should be preceeded by semicolon, and all strings must 
     78     * be properly escaped. Example: 
     79     *   ";my-param=X;another-param=Hi%20there" 
     80     */ 
     81    string              contactParams; 
     82 
     83    /** 
    7384     * Optional interval for registration, in seconds. If the value is zero, 
    7485     * default interval will be used (PJSUA_REG_INTERVAL, 300 seconds). 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_acc.c

    r5366 r5455  
    8888    pj_strdup_with_null(pool, &dst->reg_uri, &src->reg_uri); 
    8989    pj_strdup_with_null(pool, &dst->force_contact, &src->force_contact); 
     90    pj_strdup_with_null(pool, &dst->reg_contact_params, 
     91                        &src->reg_contact_params); 
    9092    pj_strdup_with_null(pool, &dst->contact_params, &src->contact_params); 
    9193    pj_strdup_with_null(pool, &dst->contact_uri_params, 
     
    993995        update_reg = PJ_TRUE; 
    994996        unreg_first = PJ_TRUE; 
     997    } 
     998 
     999    /* Register contact params */ 
     1000    if (pj_strcmp(&acc->cfg.reg_contact_params, &cfg->reg_contact_params)) { 
     1001        pj_strdup_with_null(acc->pool, &acc->cfg.reg_contact_params, 
     1002                            &cfg->reg_contact_params); 
     1003        update_reg = PJ_TRUE; 
    9951004    } 
    9961005 
     
    14781487 
    14791488done: 
    1480     if (!need_outbound) { 
    1481         /* Outbound is not needed/wanted for the account. acc->reg_contact 
    1482          * is set to the same as acc->contact. 
    1483          */ 
    1484         acc->reg_contact = acc->contact; 
    1485         acc->rfc5626_status = OUTBOUND_NA; 
    1486     } else { 
    1487         /* Need to use outbound, append the contact with +sip.instance and 
    1488          * reg-id parameters. 
    1489          */ 
     1489    { 
    14901490        pj_ssize_t len; 
    14911491        pj_str_t reg_contact; 
    14921492 
    14931493        acc->rfc5626_status = OUTBOUND_WANTED; 
    1494         len = acc->contact.slen + acc->rfc5626_instprm.slen + 
    1495               acc->rfc5626_regprm.slen; 
    1496         reg_contact.ptr = (char*) pj_pool_alloc(acc->pool, len); 
    1497  
    1498         pj_strcpy(&reg_contact, &acc->contact); 
    1499         pj_strcat(&reg_contact, &acc->rfc5626_regprm); 
    1500         pj_strcat(&reg_contact, &acc->rfc5626_instprm); 
    1501  
    1502         acc->reg_contact = reg_contact; 
    1503  
    1504         PJ_LOG(4,(THIS_FILE, 
    1505                   "Contact for acc %d updated for SIP outbound: %.*s", 
    1506                   acc->index, 
    1507                   (int)acc->reg_contact.slen, 
    1508                   acc->reg_contact.ptr)); 
     1494        len = acc->contact.slen + acc->cfg.reg_contact_params.slen + 
     1495              (need_outbound? 
     1496               (acc->rfc5626_instprm.slen + acc->rfc5626_regprm.slen): 0); 
     1497        if (len > acc->contact.slen) { 
     1498            reg_contact.ptr = (char*) pj_pool_alloc(acc->pool, len); 
     1499 
     1500            pj_strcpy(&reg_contact, &acc->contact); 
     1501         
     1502            if (need_outbound) { 
     1503                acc->rfc5626_status = OUTBOUND_WANTED; 
     1504 
     1505                /* Need to use outbound, append the contact with 
     1506                 * +sip.instance and reg-id parameters. 
     1507                 */ 
     1508                pj_strcat(&reg_contact, &acc->rfc5626_regprm); 
     1509                pj_strcat(&reg_contact, &acc->rfc5626_instprm); 
     1510            } else { 
     1511                acc->rfc5626_status = OUTBOUND_NA; 
     1512            } 
     1513 
     1514            pj_strcat(&reg_contact, &acc->cfg.reg_contact_params); 
     1515             
     1516            acc->reg_contact = reg_contact; 
     1517 
     1518            PJ_LOG(4,(THIS_FILE, 
     1519                      "Contact for acc %d updated: %.*s", 
     1520                      acc->index, 
     1521                      (int)acc->reg_contact.slen, 
     1522                      acc->reg_contact.ptr)); 
     1523 
     1524        } else { 
     1525             /* Outbound is not needed/wanted for the account and there's 
     1526              * no custom registration Contact params. acc->reg_contact 
     1527              * is set to the same as acc->contact. 
     1528              */ 
     1529             acc->reg_contact = acc->contact; 
     1530             acc->rfc5626_status = OUTBOUND_NA; 
     1531        } 
    15091532    } 
    15101533} 
  • pjproject/trunk/pjsip/src/pjsua2/account.cpp

    r5410 r5455  
    4444    NODE_READ_UNSIGNED  (this_node, unregWaitMsec); 
    4545    NODE_READ_UNSIGNED  (this_node, proxyUse); 
     46    NODE_READ_STRING    (this_node, contactParams); 
    4647 
    4748    readSipHeaders(this_node, "headers", headers); 
     
    6263    NODE_WRITE_UNSIGNED (this_node, unregWaitMsec); 
    6364    NODE_WRITE_UNSIGNED (this_node, proxyUse); 
     65    NODE_WRITE_STRING   (this_node, contactParams); 
    6466 
    6567    writeSipHeaders(this_node, "headers", headers); 
     
    330332    ret.unreg_timeout           = regConfig.unregWaitMsec; 
    331333    ret.reg_use_proxy           = regConfig.proxyUse; 
     334    ret.reg_contact_params      = str2Pj(regConfig.contactParams); 
    332335    for (i=0; i<regConfig.headers.size(); ++i) { 
    333336        pj_list_push_back(&ret.reg_hdr_list, &regConfig.headers[i].toPj()); 
     
    464467    regConfig.unregWaitMsec     = prm.unreg_timeout; 
    465468    regConfig.proxyUse          = prm.reg_use_proxy; 
     469    regConfig.contactParams     = pj2Str(prm.reg_contact_params); 
    466470    regConfig.headers.clear(); 
    467471    hdr = prm.reg_hdr_list.next; 
Note: See TracChangeset for help on using the changeset viewer.