Changeset 2859 for pjproject/trunk/pjsip/src/pjsip-ua/sip_timer.c
- Timestamp:
- Aug 11, 2009 4:26:20 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjsip/src/pjsip-ua/sip_timer.c
r2858 r2859 28 28 29 29 30 /* Constant valuesof Session Timers */30 /* Constant of Session Timers */ 31 31 #define ABS_MIN_SE 90 /* Absolute Min-SE, in seconds */ 32 #define DEF_SE 1800 /* Default SE, in seconds */33 32 34 33 … … 61 60 pj_bool_t use_update; /**< Use UPDATE method to 62 61 refresh the session */ 62 pjsip_role_e role; /**< Role in last INVITE/ 63 UPDATE transaction. */ 63 64 64 65 } pjsip_timer; … … 121 122 const pj_str_t *hname = pjsip_use_compact_form? &hdr->sname : &hdr->name; 122 123 124 /* Print header name and value */ 125 if ((endbuf - p) < (hname->slen + 16)) 126 return -1; 127 123 128 copy_advance(p, (*hname)); 124 129 *p++ = ':'; … … 128 133 p += printed; 129 134 130 if (hdr->refresher.slen && (endbuf-p) > (hdr->refresher.slen + 2)) 135 /* Print 'refresher' param */ 136 if (hdr->refresher.slen) 131 137 { 138 if ((endbuf - p) < (STR_REFRESHER.slen + 2 + hdr->refresher.slen)) 139 return -1; 140 132 141 *p++ = ';'; 133 142 copy_advance(p, STR_REFRESHER); … … 136 145 } 137 146 147 /* Print generic params */ 138 148 printed = pjsip_param_print_on(&hdr->other_param, p, endbuf-p, 139 149 &pc->pjsip_TOKEN_SPEC, … … 177 187 const pjsip_parser_const_t *pc = pjsip_parser_const(); 178 188 189 /* Print header name and value */ 190 if ((endbuf - p) < (hdr->name.slen + 16)) 191 return -1; 192 179 193 copy_advance(p, hdr->name); 180 194 *p++ = ':'; … … 184 198 p += printed; 185 199 200 /* Print generic params */ 186 201 printed = pjsip_param_print_on(&hdr->other_param, p, endbuf-p, 187 202 &pc->pjsip_TOKEN_SPEC, … … 324 339 /* Check our role */ 325 340 as_refresher = 326 (inv->timer->refresher == TR_UAC && inv-> role == PJSIP_ROLE_UAC) ||327 (inv->timer->refresher == TR_UAS && inv-> role == PJSIP_ROLE_UAS);341 (inv->timer->refresher == TR_UAC && inv->timer->role == PJSIP_ROLE_UAC) || 342 (inv->timer->refresher == TR_UAS && inv->timer->role == PJSIP_ROLE_UAS); 328 343 329 344 /* Do action based on role, refresher or refreshee */ … … 418 433 419 434 /* Set delay based on role, refresher or refreshee */ 420 if ((timer->refresher == TR_UAC && inv-> role == PJSIP_ROLE_UAC) ||421 (timer->refresher == TR_UAS && inv-> role == PJSIP_ROLE_UAS))435 if ((timer->refresher == TR_UAC && inv->timer->role == PJSIP_ROLE_UAC) || 436 (timer->refresher == TR_UAS && inv->timer->role == PJSIP_ROLE_UAS)) 422 437 { 423 438 /* Next refresh, the delay is half of session expire */ … … 488 503 * Initialize Session Timers setting with default values. 489 504 */ 490 PJ_DEF(pj_status_t) pjsip_timer_ default_setting(pjsip_timer_setting *setting)505 PJ_DEF(pj_status_t) pjsip_timer_setting_default(pjsip_timer_setting *setting) 491 506 { 492 507 pj_bzero(setting, sizeof(pjsip_timer_setting)); 493 508 494 setting->sess_expires = DEF_SE;509 setting->sess_expires = PJSIP_SESS_TIMER_DEF_SE; 495 510 setting->min_se = ABS_MIN_SE; 496 511 … … 527 542 pj_memcpy(s, setting, sizeof(*s)); 528 543 } else { 529 pjsip_timer_ default_setting(s);544 pjsip_timer_setting_default(s); 530 545 } 531 546 … … 605 620 */ 606 621 PJ_DEF(pj_status_t) pjsip_timer_process_resp(pjsip_inv_session *inv, 607 const pjsip_rx_data *rdata) 622 const pjsip_rx_data *rdata, 623 pjsip_status_code *st_code) 608 624 { 609 625 const pjsip_msg *msg; 610 626 611 PJ_ASSERT_RETURN(inv && rdata, PJ_EINVAL); 627 PJ_ASSERT_ON_FAIL(inv && rdata, 628 {if(st_code)*st_code=PJSIP_SC_INTERNAL_SERVER_ERROR;return PJ_EINVAL;}); 612 629 613 630 /* Check if Session Timers is supported */ … … 705 722 */ 706 723 if (inv->options & PJSIP_INV_REQUIRE_TIMER) { 724 if (st_code) 725 *st_code = PJSIP_SC_EXTENSION_REQUIRED; 707 726 pjsip_timer_end_session(inv); 708 727 return PJSIP_ERRNO_FROM_SIP_STATUS( … … 727 746 se_hdr->sess_expires < inv->timer->setting.min_se) 728 747 { 748 if (st_code) 749 *st_code = PJSIP_SC_SESSION_TIMER_TOO_SMALL; 729 750 pjsip_timer_end_session(inv); 730 751 return PJSIP_ERRNO_FROM_SIP_STATUS( … … 758 779 PJ_TODO(CHECK_IF_REMOTE_SUPPORT_UPDATE); 759 780 781 /* Remember our role in this transaction */ 782 inv->timer->role = PJSIP_ROLE_UAC; 783 760 784 /* Finally, set active flag and start the Session Timers */ 761 785 inv->timer->active = PJ_TRUE; … … 770 794 */ 771 795 PJ_DEF(pj_status_t) pjsip_timer_process_req(pjsip_inv_session *inv, 772 const pjsip_rx_data *rdata) 796 const pjsip_rx_data *rdata, 797 pjsip_status_code *st_code) 773 798 { 774 799 pjsip_min_se_hdr *min_se_hdr; … … 777 802 unsigned min_se; 778 803 779 PJ_ASSERT_RETURN(inv && rdata, PJ_EINVAL); 804 PJ_ASSERT_ON_FAIL(inv && rdata, 805 {if(st_code)*st_code=PJSIP_SC_INTERNAL_SERVER_ERROR;return PJ_EINVAL;}); 780 806 781 807 /* Check if Session Timers is supported */ … … 828 854 * (or 90 seconds if Min-SE is not set). 829 855 */ 830 if (se_hdr && se_hdr->sess_expires < min_se) 856 if (se_hdr && se_hdr->sess_expires < min_se) { 857 if (st_code) 858 *st_code = PJSIP_SC_SESSION_TIMER_TOO_SMALL; 831 859 return PJSIP_ERRNO_FROM_SIP_STATUS(PJSIP_SC_SESSION_TIMER_TOO_SMALL); 860 } 832 861 833 862 /* Update SE. Note that there is a case that SE is not available in the … … 882 911 if (msg->line.status.code/100 == 2) 883 912 { 884 /* Add Session-Expires header and start the timer */885 913 if (inv->timer && inv->timer->active) { 914 /* Remember our role in this transaction */ 915 inv->timer->role = PJSIP_ROLE_UAS; 916 917 /* Add Session-Expires header and start the timer */ 886 918 add_timer_headers(inv, tdata, PJ_TRUE, PJ_FALSE); 887 919 start_timer(inv);
Note: See TracChangeset
for help on using the changeset viewer.