Changeset 980
- Timestamp:
- Feb 19, 2007 6:37:42 PM (18 years ago)
- Location:
- pjproject/branches/pjproject-0.5-stable/pjsip
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/branches/pjproject-0.5-stable/pjsip/include/pjsip/sip_dialog.h
r974 r980 125 125 pjsip_dlg_party remote; /**< Remote party info. */ 126 126 pjsip_role_e role; /**< Initial role. */ 127 pj_bool_t uac_has_2xx;/**< UAC has received 2xx response? */ 127 128 pj_bool_t secure; /**< Use secure transport? */ 128 129 pjsip_cid_hdr *call_id; /**< Call-ID header. */ -
pjproject/branches/pjproject-0.5-stable/pjsip/src/pjsip/sip_dialog.c
r974 r980 1519 1519 /* When we receive response that establishes dialog, update To tag, 1520 1520 * route set and dialog target. 1521 */ 1522 if (dlg->state == PJSIP_DIALOG_STATE_NULL && 1523 pjsip_method_creates_dialog(&rdata->msg_info.cseq->method) && 1524 (res_code > 100 && res_code < 300) && 1525 rdata->msg_info.to->tag.slen) 1521 * 1522 * The second condition of the "if" is a workaround for forking. 1523 * Originally, the dialog takes the first To tag seen and set it as 1524 * the remote tag. If the tag in 2xx response is different than this 1525 * tag, ACK will be sent with wrong To tag and incoming request with 1526 * this tag will be rejected with 481. 1527 * 1528 * The workaround for this is to take the To tag received in the 1529 * 2xx response and set it as remote tag. 1530 */ 1531 if ((dlg->state == PJSIP_DIALOG_STATE_NULL && 1532 pjsip_method_creates_dialog(&rdata->msg_info.cseq->method) && 1533 (res_code > 100 && res_code < 300) && 1534 rdata->msg_info.to->tag.slen) 1535 || 1536 (dlg->role==PJSIP_ROLE_UAC && 1537 !dlg->uac_has_2xx && 1538 res_code/100 == 2 && 1539 pjsip_method_creates_dialog(&rdata->msg_info.cseq->method) && 1540 pj_strcmp(&dlg->remote.info->tag, &rdata->msg_info.to->tag))) 1526 1541 { 1527 1542 pjsip_hdr *hdr, *end_hdr; … … 1564 1579 1565 1580 dlg->state = PJSIP_DIALOG_STATE_ESTABLISHED; 1581 1582 1583 /* Prevent dialog from being updated just in case more 2xx 1584 * gets through this dialog (it shouldn't happen). 1585 */ 1586 if (dlg->role==PJSIP_ROLE_UAC && !dlg->uac_has_2xx && 1587 res_code/100==2) 1588 { 1589 dlg->uac_has_2xx = PJ_TRUE; 1590 } 1566 1591 } 1567 1592
Note: See TracChangeset
for help on using the changeset viewer.