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/sip_transaction.c

    r491 r500  
    13271327 
    13281328/* 
     1329 * Set transaction status code and reason. 
     1330 */ 
     1331static tsx_set_status_code(pjsip_transaction *tsx, 
     1332                           int code, const pj_str_t *reason) 
     1333{ 
     1334    tsx->status_code = code; 
     1335    if (reason) 
     1336        pj_strdup(tsx->pool, &tsx->status_text, reason); 
     1337    else 
     1338        tsx->status_text = *pjsip_get_status_text(code); 
     1339} 
     1340 
     1341 
     1342/* 
    13291343 * Forcely terminate transaction. 
    13301344 */ 
     
    13421356 
    13431357    lock_tsx(tsx, &lck); 
    1344     tsx->status_code = code; 
     1358    tsx_set_status_code(tsx, code, NULL); 
    13451359    tsx_set_state( tsx, PJSIP_TSX_STATE_TERMINATED, PJSIP_EVENT_USER, NULL); 
    13461360    unlock_tsx(tsx, &lck); 
     
    14921506        if (!*cont) { 
    14931507            char errmsg[PJ_ERR_MSG_SIZE]; 
     1508            pj_str_t err; 
    14941509 
    14951510            tsx->transport_err = -sent; 
     1511 
     1512            err =pj_strerror(-sent, errmsg, sizeof(errmsg)); 
    14961513 
    14971514            PJ_LOG(4,(tsx->obj_name,  
    14981515                      "Failed to send %s! err=%d (%s)", 
    14991516                      pjsip_tx_data_get_info(send_state->tdata), -sent, 
    1500                       pj_strerror(-sent, errmsg, sizeof(errmsg)).ptr)); 
     1517                      errmsg)); 
    15011518 
    15021519            /* Clear pending transport flag. */ 
     
    15071524 
    15081525            /* Terminate transaction, if it's not already terminated. */ 
    1509             tsx->status_code = PJSIP_SC_TSX_TRANSPORT_ERROR; 
     1526            tsx_set_status_code(tsx, PJSIP_SC_TSX_TRANSPORT_ERROR, &err); 
    15101527            if (tsx->state != PJSIP_TSX_STATE_TERMINATED && 
    15111528                tsx->state != PJSIP_TSX_STATE_DESTROYED) 
     
    15381555        struct tsx_lock_data lck; 
    15391556        char errmsg[PJ_ERR_MSG_SIZE]; 
     1557        pj_str_t err; 
    15401558 
    15411559        tsx->transport_err = -sent; 
    15421560 
     1561        err = pj_strerror(-sent, errmsg, sizeof(errmsg)); 
     1562 
    15431563        PJ_LOG(4,(tsx->obj_name, "Transport failed to send %s! Err=%d (%s)", 
    1544                   pjsip_tx_data_get_info(tdata), -sent, 
    1545                   pj_strerror(-sent, errmsg, sizeof(errmsg)).ptr)); 
     1564                  pjsip_tx_data_get_info(tdata), -sent, errmsg)); 
    15461565 
    15471566        lock_tsx(tsx, &lck); 
     
    15521571 
    15531572        /* Terminate transaction. */ 
    1554         tsx->status_code = PJSIP_SC_TSX_TRANSPORT_ERROR; 
     1573        tsx_set_status_code(tsx, PJSIP_SC_TSX_TRANSPORT_ERROR, &err); 
    15551574        tsx_set_state( tsx, PJSIP_TSX_STATE_TERMINATED,  
    15561575                       PJSIP_EVENT_TRANSPORT_ERROR, tdata ); 
     
    16221641         
    16231642        char errmsg[PJ_ERR_MSG_SIZE]; 
     1643        pj_str_t err; 
    16241644 
    16251645        if (status == PJ_SUCCESS) { 
     
    16311651         * Treat this as permanent transport error. 
    16321652         */ 
     1653        err = pj_strerror(status, errmsg, sizeof(errmsg)); 
     1654 
    16331655        PJ_LOG(4,(tsx->obj_name,  
    16341656                  "Transport error, terminating transaction. " 
    16351657                  "Err=%d (%s)", 
    1636                   status,  
    1637                   pj_strerror(status, errmsg, sizeof(errmsg)).ptr)); 
    1638  
    1639         tsx->status_code = PJSIP_SC_TSX_TRANSPORT_ERROR; 
     1658                  status, errmsg)); 
     1659 
     1660        tsx_set_status_code(tsx, PJSIP_SC_TSX_TRANSPORT_ERROR, &err); 
    16401661        tsx_set_state( tsx, PJSIP_TSX_STATE_TERMINATED,  
    16411662                       PJSIP_EVENT_TRANSPORT_ERROR, NULL ); 
     
    18601881 
    18611882        /* Set status code */ 
    1862         tsx->status_code = PJSIP_SC_TSX_TIMEOUT; 
     1883        tsx_set_status_code(tsx, PJSIP_SC_TSX_TIMEOUT, NULL); 
    18631884 
    18641885        /* Inform TU. */ 
     
    20022023 
    20032024        /* Update last status */ 
    2004         tsx->status_code = msg->line.status.code; 
     2025        tsx_set_status_code(tsx, msg->line.status.code,  
     2026                            &msg->line.status.reason); 
    20052027 
    20062028        /* Discard the saved last response (it will be updated later as 
     
    21642186        pj_assert(!"Should not happen(?)"); 
    21652187 
    2166         tsx->status_code = PJSIP_SC_TSX_TIMEOUT; 
     2188        tsx_set_status_code(tsx, PJSIP_SC_TSX_TIMEOUT, NULL); 
    21672189 
    21682190        tsx_set_state( tsx, PJSIP_TSX_STATE_TERMINATED,  
     
    22112233        } 
    22122234 
    2213         tsx->status_code = msg->line.status.code; 
     2235        tsx_set_status_code(tsx, msg->line.status.code,  
     2236                            &msg->line.status.reason); 
     2237 
    22142238    } else { 
    2215         tsx->status_code = PJSIP_SC_TSX_TIMEOUT; 
     2239        tsx_set_status_code(tsx, PJSIP_SC_TSX_TIMEOUT, NULL); 
    22162240    } 
    22172241 
     
    24412465                 */ 
    24422466 
    2443                 tsx->status_code = PJSIP_SC_TSX_TIMEOUT; 
     2467                tsx_set_status_code(tsx, PJSIP_SC_TSX_TIMEOUT, NULL); 
    24442468 
    24452469                tsx_set_state( tsx, PJSIP_TSX_STATE_TERMINATED,  
Note: See TracChangeset for help on using the changeset viewer.