Ignore:
Timestamp:
Jun 13, 2006 10:21:23 PM (18 years ago)
Author:
bennylp
Message:

Added status_text and cause_text in dialog and transaction to capture the real status text in the final response (instead of just the code)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsip-ua/sip_inv.c

    r376 r500  
    159159 
    160160/* 
     161 * Set cause code. 
     162 */ 
     163void inv_set_cause(pjsip_inv_session *inv, int cause_code, 
     164                   const pj_str_t *cause_text) 
     165{ 
     166    if (cause_code > inv->cause) { 
     167        inv->cause = cause_code; 
     168        if (cause_text) 
     169            pj_strdup(inv->pool, &inv->cause_text, cause_text); 
     170        else if (cause_code/100 == 2) 
     171            inv->cause_text = pj_str("Normal call clearing"); 
     172        else 
     173            inv->cause_text = *pjsip_get_status_text(cause_code); 
     174    } 
     175} 
     176 
     177 
     178 
     179/* 
    161180 * Send ACK for 2xx response. 
    162181 */ 
     
    899918 
    900919    /* Set cause. */ 
    901     inv->cause = st_code; 
     920    inv_set_cause(inv, st_code, NULL); 
    902921 
    903922    /* Forcefully terminate the session if state is not DISCONNECTED */ 
     
    13881407 
    13891408    /* Set cause code. */ 
    1390     if (inv->cause==0) inv->cause = st_code; 
     1409    inv_set_cause(inv, st_code, st_text); 
    13911410 
    13921411    /* Create appropriate message. */ 
     
    16981717 
    16991718    if (inv->state != PJSIP_INV_STATE_DISCONNECTED) { 
    1700         if (inv->cause==0) inv->cause=PJSIP_SC_OK; 
     1719        inv_set_cause(inv, PJSIP_SC_OK, NULL); 
    17011720        inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    17021721    } 
     
    17141733     
    17151734    if (e->body.tsx_state.type != PJSIP_EVENT_RX_MSG) { 
    1716         if (inv->cause==0) inv->cause=PJSIP_SC_OK; 
     1735        inv_set_cause(inv, PJSIP_SC_OK, NULL); 
    17171736        inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    17181737        return; 
     
    17341753             * End the session anyway. 
    17351754             */ 
    1736             if (inv->cause==0) inv->cause=PJSIP_SC_OK; 
     1755            inv_set_cause(inv, PJSIP_SC_OK, NULL); 
    17371756            inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    17381757             
     
    17451764 
    17461765        /* End the session. */ 
    1747         if (inv->cause==0) inv->cause=PJSIP_SC_OK; 
     1766        inv_set_cause(inv, PJSIP_SC_OK, NULL); 
    17481767        inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    17491768    } 
     
    18631882                     * End the session. 
    18641883                     */ 
    1865                     if (inv->cause==0) inv->cause = tsx->status_code; 
     1884                    inv_set_cause(inv, tsx->status_code, &tsx->status_text); 
    18661885                    inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    18671886 
     
    18781897            } else { 
    18791898 
    1880                 if (inv->cause==0) inv->cause = tsx->status_code; 
     1899                inv_set_cause(inv, tsx->status_code, &tsx->status_text); 
    18811900                inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    18821901 
     
    19061925 
    19071926            } else  { 
    1908                 if (inv->cause==0) inv->cause = tsx->status_code; 
     1927                inv_set_cause(inv, tsx->status_code, &tsx->status_text); 
    19091928                inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    19101929            } 
     
    19271946            tsx->status_code == PJSIP_SC_REQUEST_TIMEOUT || 
    19281947            tsx->status_code == PJSIP_SC_TSX_TIMEOUT || 
    1929             PJSIP_SC_TSX_TRANSPORT_ERROR) 
     1948            tsx->status_code == PJSIP_SC_TSX_TRANSPORT_ERROR) 
    19301949        { 
    1931             if (inv->cause==0) inv->cause = tsx->status_code; 
     1950            inv_set_cause(inv, tsx->status_code, &tsx->status_text); 
    19321951            inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    19331952        } 
     
    19731992                inv_set_state(inv, PJSIP_INV_STATE_CONNECTING, e); 
    19741993            } else { 
    1975                 if (inv->cause==0) inv->cause = tsx->status_code; 
     1994                inv_set_cause(inv, tsx->status_code, &tsx->status_text); 
    19761995                inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    19771996            } 
     
    19832002             * response) 
    19842003             */ 
    1985             if (inv->cause==0) inv->cause = tsx->status_code; 
     2004            inv_set_cause(inv, tsx->status_code, &tsx->status_text); 
    19862005            inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    19872006            break; 
     
    20452064 
    20462065            } else { 
    2047                 if (inv->cause==0) inv->cause = tsx->status_code; 
     2066                inv_set_cause(inv, tsx->status_code, &tsx->status_text); 
    20482067                inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    20492068            } 
     
    20792098 
    20802099            } else  { 
    2081                 if (inv->cause==0) inv->cause = tsx->status_code; 
     2100                inv_set_cause(inv, tsx->status_code, &tsx->status_text); 
    20822101                inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    20832102            } 
     
    21132132            tsx->status_code == PJSIP_SC_REQUEST_TIMEOUT || 
    21142133            tsx->status_code == PJSIP_SC_TSX_TIMEOUT || 
    2115             PJSIP_SC_TSX_TRANSPORT_ERROR) 
     2134            tsx->status_code == PJSIP_SC_TSX_TRANSPORT_ERROR) 
    21162135        { 
    2117             if (inv->cause==0) inv->cause = tsx->status_code; 
     2136            inv_set_cause(inv, tsx->status_code, &tsx->status_text); 
    21182137            inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    21192138        } 
     
    21492168             */ 
    21502169            if (tsx->status_code/100 != 2) { 
    2151                 if (inv->cause==0) inv->cause = tsx->status_code; 
     2170                inv_set_cause(inv, tsx->status_code, &tsx->status_text); 
    21522171                inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    21532172            } 
     
    23412360             * Handle responses that terminates dialog. 
    23422361             */ 
    2343             if (inv->cause==0) inv->cause = tsx->status_code; 
     2362            inv_set_cause(inv, tsx->status_code, &tsx->status_text); 
    23442363            inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e); 
    23452364        } 
Note: See TracChangeset for help on using the changeset viewer.