summaryrefslogtreecommitdiff
path: root/usr/src/lib/libsip/common/sip_parse_generic.c
diff options
context:
space:
mode:
authorgm209912 <none@none>2007-09-19 10:20:24 -0700
committergm209912 <none@none>2007-09-19 10:20:24 -0700
commitdf4705eab9c873eae60bada4f2138e6f22a76e11 (patch)
tree18bcec368473bd23d93e280fc891180ff1fd60a1 /usr/src/lib/libsip/common/sip_parse_generic.c
parent06fc3f99dd009e8cb3632e91d9f502de89b96c38 (diff)
downloadillumos-gate-df4705eab9c873eae60bada4f2138e6f22a76e11.tar.gz
PSARC 2007/447 SIP Contact API
6503334 SIP library should support "*" as a valid contact header value 6587481 add a SIP API to retrieve the the local contact information from sip_dialog structure 6589677 add a SIP API to create a request inside a dialog, without a Contact header
Diffstat (limited to 'usr/src/lib/libsip/common/sip_parse_generic.c')
-rw-r--r--usr/src/lib/libsip/common/sip_parse_generic.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/usr/src/lib/libsip/common/sip_parse_generic.c b/usr/src/lib/libsip/common/sip_parse_generic.c
index b8d0ba0200..98f459b1b0 100644
--- a/usr/src/lib/libsip/common/sip_parse_generic.c
+++ b/usr/src/lib/libsip/common/sip_parse_generic.c
@@ -108,10 +108,14 @@ sip_find_cr(_sip_header_t *sip_header)
*/
int
sip_find_separator(_sip_header_t *sip_header, char separator_1st,
- char separator_2nd, char separator_3rd)
+ char separator_2nd, char separator_3rd, boolean_t ignore_space)
{
assert(separator_1st != (char)NULL || separator_2nd != (char)NULL);
while (sip_header->sip_hdr_current < sip_header->sip_hdr_end) {
+ if (ignore_space && (*sip_header->sip_hdr_current == SIP_SP)) {
+ sip_header->sip_hdr_current++;
+ continue;
+ }
if (isspace(*sip_header->sip_hdr_current) ||
(separator_1st != (char)NULL &&
(*sip_header->sip_hdr_current == separator_1st)) ||
@@ -267,7 +271,7 @@ sip_parse_params(_sip_header_t *sip_header, sip_param_t **parsed_list)
param->param_name.sip_str_ptr = tmp_ptr;
if (sip_find_separator(sip_header, SIP_EQUAL, SIP_SEMI,
- SIP_COMMA) != 0) {
+ SIP_COMMA, B_FALSE) != 0) {
param->param_name.sip_str_len =
sip_header->sip_hdr_current - tmp_ptr;
param->param_value.sip_str_ptr = NULL;
@@ -316,7 +320,7 @@ sip_parse_params(_sip_header_t *sip_header, sip_param_t **parsed_list)
if (quoted_name && sip_find_token(sip_header, SIP_QUOTE) != 0) {
return (EPROTO);
} else if (sip_find_separator(sip_header, SIP_SEMI, SIP_COMMA,
- (char)NULL) != 0) {
+ (char)NULL, B_FALSE) != 0) {
return (EPROTO);
}
param->param_value.sip_str_len = sip_header->sip_hdr_current -
@@ -527,7 +531,8 @@ sip_parse_hdr_parser1(_sip_header_t *hdr, sip_parsed_header_t **phdr, char sep)
value->sip_value_start = hdr->sip_hdr_current;
value->sip_value_header = parsed_header;
- if (sip_find_separator(hdr, sep, SIP_COMMA, SIP_SEMI) == 0) {
+ if (sip_find_separator(hdr, sep, SIP_COMMA, SIP_SEMI,
+ B_FALSE) == 0) {
char c = *hdr->sip_hdr_current;
if (isspace(c) && sep == (char)NULL) {
@@ -574,11 +579,11 @@ sip_parse_hdr_parser1(_sip_header_t *hdr, sip_parsed_header_t **phdr, char sep)
value->strs2_val_ptr =
(++hdr->sip_hdr_current);
if (sip_find_separator(hdr, SIP_SEMI, SIP_COMMA,
- (char)NULL) == 0) {
+ (char)NULL, B_FALSE) == 0) {
char t = *(hdr->sip_hdr_current);
value->strs2_val_len =
hdr->sip_hdr_current -
- value->strs2_val_ptr;
+ value->strs2_val_ptr;
/*
* if COMMA, no param list, get next val
* if SEMI, need to set params list
@@ -588,7 +593,7 @@ sip_parse_hdr_parser1(_sip_header_t *hdr, sip_parsed_header_t **phdr, char sep)
} else { /* the last part */
value->strs2_val_len =
hdr->sip_hdr_current -
- value->strs2_val_ptr;
+ value->strs2_val_ptr;
value->sip_value_end =
hdr->sip_hdr_current;
goto end;
@@ -822,7 +827,7 @@ sip_parse_hdr_parser3(_sip_header_t *hdr, sip_parsed_header_t **phdr, int type,
cur = value->sip_value_start;
hdr->sip_hdr_current = cur;
if (sip_find_separator(hdr, SIP_COMMA,
- (char)NULL, (char)NULL) != 0) {
+ (char)NULL, (char)NULL, B_FALSE) != 0) {
value->strs2_val_ptr = cur;
value->strs2_val_len =
hdr->sip_hdr_current -
@@ -862,7 +867,7 @@ sip_parse_hdr_parser3(_sip_header_t *hdr, sip_parsed_header_t **phdr, int type,
if (sip_find_token(hdr, SIP_RAQUOT) == 0) {
value->str_val_len =
hdr->sip_hdr_current -
- value->str_val_ptr - 1;
+ value->str_val_ptr - 1;
} else {
value->str_val_ptr = NULL;
value->str_val_len = 0;
@@ -880,7 +885,8 @@ sip_parse_hdr_parser3(_sip_header_t *hdr, sip_parsed_header_t **phdr, int type,
sip_parse_uri_str(&value->str_val, value);
}
- r = sip_find_separator(hdr, SIP_COMMA, SIP_SEMI, (char)NULL);
+ r = sip_find_separator(hdr, SIP_COMMA, SIP_SEMI, (char)NULL,
+ B_FALSE);
if (r != 0) {
value->sip_value_end = hdr->sip_hdr_current;
goto end;
@@ -1037,8 +1043,8 @@ sip_parse_hdr_parser5(_sip_header_t *hdr, sip_parsed_header_t **phdr,
tmp_param = new_param;
tmp_param->param_name.sip_str_ptr = tmp_cur;
- if (sip_find_separator(hdr, SIP_EQUAL, SIP_COMMA, (char)NULL) !=
- 0) {
+ if (sip_find_separator(hdr, SIP_EQUAL, SIP_COMMA, (char)NULL,
+ B_FALSE) != 0) {
tmp_param->param_name.sip_str_len =
hdr->sip_hdr_current - tmp_cur;
tmp_param->param_value.sip_str_ptr = NULL;