Ignore:
Timestamp:
Jul 2, 2006 12:29:54 PM (18 years ago)
Author:
bennylp
Message:

Miscellaneous bug fix and improvements in PJMEDIA: (1) more stricker SDP parsing and validation, (2) fixed bug in RTCP attribute generation in SDP, (3) configurable telephone-event payload type

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia/sdp.c

    r569 r571  
    3535}; 
    3636#define TOKEN           "-.!%*_=`'~" 
     37//#define TOKEN         "'`-./:?\"#$&*;=@[]^_`{|}+~!" 
    3738#define NTP_OFFSET      ((pj_uint32_t)2208988800) 
    3839#define THIS_FILE       "sdp.c" 
     
    6768static int is_initialized; 
    6869static pj_cis_buf_t cis_buf; 
    69 static pj_cis_t cs_token; 
     70static pj_cis_t cs_digit, cs_token; 
    7071 
    7172static void init_sdp_parser(void) 
     
    7980 
    8081    pj_cis_buf_init(&cis_buf); 
     82 
    8183    pj_cis_init(&cis_buf, &cs_token); 
    8284    pj_cis_add_alpha(&cs_token); 
    8385    pj_cis_add_num(&cs_token); 
    8486    pj_cis_add_str(&cs_token, TOKEN); 
     87 
     88    pj_cis_init(&cis_buf, &cs_digit); 
     89    pj_cis_add_num(&cs_digit); 
    8590} 
    8691 
     
    258263    /* Init */ 
    259264    rtpmap->pt.slen = rtpmap->param.slen = rtpmap->enc_name.slen = 0; 
     265    rtpmap->clock_rate = 0; 
    260266 
    261267    /* Parse */ 
     
    283289 
    284290        /* Get the clock rate. */ 
    285         pj_scan_get(&scanner, &cs_token, &token); 
     291        pj_scan_get(&scanner, &cs_digit, &token); 
    286292        rtpmap->clock_rate = pj_strtoul(&token); 
    287293 
     
    761767    ctx->last_error = PJMEDIA_SDP_EINVER; 
    762768 
     769    /* check equal sign */ 
     770    if (*(scanner->curptr+1) != '=') { 
     771        on_scanner_error(scanner); 
     772        return; 
     773    } 
     774 
     775    /* check version is 0 */ 
     776    if (*(scanner->curptr+2) != '0') { 
     777        on_scanner_error(scanner); 
     778        return; 
     779    } 
     780 
    763781    pj_scan_advance_n(scanner, 3, SKIP_WS); 
    764782    pj_scan_get_newline(scanner); 
     
    771789 
    772790    ctx->last_error = PJMEDIA_SDP_EINORIGIN; 
     791 
     792    /* check equal sign */ 
     793    if (*(scanner->curptr+1) != '=') { 
     794        on_scanner_error(scanner); 
     795        return; 
     796    } 
    773797 
    774798    /* o= */ 
     
    811835    ctx->last_error = PJMEDIA_SDP_EINTIME; 
    812836 
     837    /* check equal sign */ 
     838    if (*(scanner->curptr+1) != '=') { 
     839        on_scanner_error(scanner); 
     840        return; 
     841    } 
     842 
    813843    /* t= */ 
    814844    pj_scan_advance_n(scanner, 2, SKIP_WS); 
     
    833863    ctx->last_error = PJMEDIA_SDP_EINSDP; 
    834864 
     865    /* check equal sign */ 
     866    if (*(scanner->curptr+1) != '=') { 
     867        on_scanner_error(scanner); 
     868        return; 
     869    } 
     870 
    835871    /* x= */ 
    836872    pj_scan_advance_n(scanner, 2, SKIP_WS); 
     
    872908 
    873909    ctx->last_error = PJMEDIA_SDP_EINMEDIA; 
     910 
     911    /* check the equal sign */ 
     912    if (*(scanner->curptr+1) != '=') { 
     913        on_scanner_error(scanner); 
     914        return; 
     915    } 
    874916 
    875917    /* m= */ 
     
    926968 
    927969    attr = pj_pool_alloc(pool, sizeof(pjmedia_sdp_attr)); 
     970 
     971    /* check equal sign */ 
     972    if (*(scanner->curptr+1) != '=') { 
     973        on_scanner_error(scanner); 
     974        return NULL; 
     975    } 
    928976 
    929977    /* skip a= */ 
     
    10131061                    break; 
    10141062                default: 
    1015                     parse_generic_line(&scanner, &dummy, &ctx); 
     1063                    if (cur_name >= 'a' && cur_name <= 'z') 
     1064                        parse_generic_line(&scanner, &dummy, &ctx); 
     1065                    else  { 
     1066                        ctx.last_error = PJMEDIA_SDP_EINSDP; 
     1067                        on_scanner_error(&scanner); 
     1068                    } 
    10161069                    break; 
    10171070                } 
     
    11041157 
    11051158#define CHECK(exp,ret)  do {                    \ 
    1106                             pj_assert(exp);     \ 
     1159                            /*pj_assert(exp);*/ \ 
    11071160                            if (!(exp))         \ 
    11081161                                return ret;     \ 
Note: See TracChangeset for help on using the changeset viewer.