summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-01-20 18:35:17 +0000
committerBenny Prijono <bennylp@teluu.com>2007-01-20 18:35:17 +0000
commit0b083b61f09764d30aa8ae97857aa889877c1983 (patch)
treef39974b12215031552c3d517fdda54aacdb27bdd /pjmedia
parent409fa3cf296f5a0af9fb02913ada0ada231a4a52 (diff)
Ticket #64: more lenient SDP parsing (take only what we need and ignore anything else)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@889 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/src/pjmedia/sdp.c35
1 files changed, 18 insertions, 17 deletions
diff --git a/pjmedia/src/pjmedia/sdp.c b/pjmedia/src/pjmedia/sdp.c
index 211838d5..78050551 100644
--- a/pjmedia/src/pjmedia/sdp.c
+++ b/pjmedia/src/pjmedia/sdp.c
@@ -770,8 +770,8 @@ static void parse_version(pj_scanner *scanner, parse_context *ctx)
return;
}
- pj_scan_advance_n(scanner, 3, SKIP_WS);
- pj_scan_get_newline(scanner);
+ /* We've got what we're looking for, skip anything until newline */
+ pj_scan_skip_line(scanner);
}
static void parse_origin(pj_scanner *scanner, pjmedia_sdp_session *ses,
@@ -813,10 +813,11 @@ static void parse_origin(pj_scanner *scanner, pjmedia_sdp_session *ses,
pj_scan_get_char(scanner);
/* address */
- pj_scan_get_until_ch(scanner, '\r', &ses->origin.addr);
+ pj_scan_get_until_chr(scanner, " \t\r", &ses->origin.addr);
+
+ /* We've got what we're looking for, skip anything until newline */
+ pj_scan_skip_line(scanner);
- /* newline */
- pj_scan_get_newline(scanner);
}
static void parse_time(pj_scanner *scanner, pjmedia_sdp_session *ses,
@@ -842,11 +843,11 @@ static void parse_time(pj_scanner *scanner, pjmedia_sdp_session *ses,
pj_scan_get_char(scanner);
/* stop time */
- pj_scan_get_until_ch(scanner, '\r', &str);
+ pj_scan_get_until_chr(scanner, " \t\r", &str);
ses->time.stop = pj_strtoul(&str);
- /* newline */
- pj_scan_get_newline(scanner);
+ /* We've got what we're looking for, skip anything until newline */
+ pj_scan_skip_line(scanner);
}
static void parse_generic_line(pj_scanner *scanner, pj_str_t *str,
@@ -863,7 +864,7 @@ static void parse_generic_line(pj_scanner *scanner, pj_str_t *str,
/* x= */
pj_scan_advance_n(scanner, 2, SKIP_WS);
- /* get anything until newline. */
+ /* get anything until newline (including whitespaces). */
pj_scan_get_until_ch(scanner, '\r', str);
/* newline. */
@@ -887,10 +888,10 @@ static void parse_connection_info(pj_scanner *scanner, pjmedia_sdp_conn *conn,
pj_scan_get_char(scanner);
/* address. */
- pj_scan_get_until_ch(scanner, '\r', &conn->addr);
+ pj_scan_get_until_chr(scanner, " \t\r", &conn->addr);
- /* newline */
- pj_scan_get_newline(scanner);
+ /* We've got what we're looking for, skip anything until newline */
+ pj_scan_skip_line(scanner);
}
static void parse_media(pj_scanner *scanner, pjmedia_sdp_media *med,
@@ -940,8 +941,8 @@ static void parse_media(pj_scanner *scanner, pjmedia_sdp_media *med,
pj_scan_get(scanner, &cs_token, &med->desc.fmt[med->desc.fmt_count++]);
}
- /* newline */
- pj_scan_get_newline(scanner);
+ /* We've got what we're looking for, skip anything until newline */
+ pj_scan_skip_line(scanner);
}
static void on_scanner_error(pj_scanner *scanner)
@@ -990,8 +991,8 @@ static pjmedia_sdp_attr *parse_attr( pj_pool_t *pool, pj_scanner *scanner,
attr->value.slen = 0;
}
- /* newline */
- pj_scan_get_newline(scanner);
+ /* We've got what we're looking for, skip anything until newline */
+ pj_scan_skip_line(scanner);
return attr;
}
@@ -1096,7 +1097,7 @@ PJ_DEF(pj_status_t) pjmedia_sdp_parse( pj_pool_t *pool,
session = NULL;
- pj_assert(ctx.last_error == PJ_SUCCESS);
+ pj_assert(ctx.last_error != PJ_SUCCESS);
}
PJ_END;