⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sip_parse.c

📁 VoIP use SIP protocol interface
💻 C
📖 第 1 页 / 共 4 页
字号:
				value->int_val = 0;				value->sip_value_state = SIP_VALUE_BAD;				goto next_val;			}			value->int_val = i;			goto end;		}	next_val:		if (sip_find_token(hdr, SIP_COMMA) != 0)			break;		value->sip_value_end = hdr->sip_hdr_current - 1;		last_value = value;		(void) sip_skip_white_space(hdr);	}end:	*phdr = parsed_header;	return (0);}/* * Call-Info = "Call-Info" HCOLON info * (COMMA info) * info = LAQUOT absoluteURI RAQUOT * (SEMI info-param) * info-param = ("purpose" EQUAL ("icon" | "info" | "card" | token)) | *		 generic-param */intsip_parse_callinfo_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser3(sip_header, header, SIP_STR_VAL, B_TRUE);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * Content-Disposition = "Content-Disposition" HCOLON disp-type * *			(SEMI disp-param) * disp-type = "render" | "session" | "icon" | "alert" | disp-ext-token * disp-param = handling-param | generic-param * handling-param = "handling" EQUAL("optional" | "required" | other-handling) * other-handling = token * disp-ext-token = token * */intsip_parse_contentdis_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser1(sip_header, header, (char)NULL);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * Content-Encoding = ("Content-Encoding" | "e") HCOLON content-coding * *			(COMMA content-coding) */intsip_parse_contentencode_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser1(sip_header, header, (char)NULL);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * Content-Language = ("Content-Language" | "l") HCOLON lang-tag * *		 (COMMA lang-tag) * lang-tag = primary-tag *("-" subtag) * prmary-tag = 1*8ALPHA * subtag = 1*8ALPHA */intsip_parse_contentlang_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser1(sip_header, header, (char)NULL);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * Error-Info = "Error-Info" HCOLON error-uri *(COMMA error-uri) * error-uri = LAQUOT absoluteURI RAQUOT *(SEMI generic-param) */intsip_parse_errorinfo_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser3(sip_header, header, SIP_STR_VAL, B_TRUE);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * Expires = "Expires" HCOLON delta-seconds */intsip_parse_expire_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser2(sip_header, header, SIP_INT_VAL);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * In-Reply-To = "In-Reply-To" HCOLON callid *(COMMA callid) */intsip_parse_inreplyto_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser1(sip_header, header, (char)NULL);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * RSeq          =  "RSeq" HCOLON response-num */intsip_parse_rseq(_sip_header_t *sip_header, sip_parsed_header_t **header){	int		r;	sip_hdr_value_t	*rseq_value;	r = sip_parse_hdr_parser2(sip_header, header, SIP_INT_VAL);	sip_header->sip_hdr_parsed = *header;	/* Additionally, a value of 0 is bad_value */	if (sip_header->sip_hdr_parsed != NULL &&	    sip_header->sip_hdr_parsed->value != NULL) {		rseq_value = (sip_hdr_value_t *)		    sip_header->sip_hdr_parsed->value;		if (rseq_value->int_val == 0)			rseq_value->sip_value_state = SIP_VALUE_BAD;	}	return (r);}/* min-expires, same as expires */intsip_parse_minexpire_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser2(sip_header, header, SIP_INT_VAL);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * MIME-Version = "MIME-Version" HCOLON 1*DIGIT "." 1*DIGIT */intsip_parse_mimeversion_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser4(sip_header, header);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * Organization = "Organization" HCOLON [TEXT-UTF8-TRIM] */intsip_parse_org_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	if (!sip_is_empty_hdr(sip_header)) {		r = sip_parse_hdr_empty(sip_header, header);		return (r);	}	r = sip_parse_hdr_parser4(sip_header, header);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * Priority = "Priority" HCOLON priority-val * priority-val = "emergency" | "urgent" | "normal" | "non-urgent" | other * other = token */intsip_parse_priority_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser1(sip_header, header, (char)NULL);	sip_header->sip_hdr_parsed = *header;	return (r);}intsip_parse_ainfo_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser1(sip_header, header, (char)NULL);	sip_header->sip_hdr_parsed = *header;	return (r);}intsip_parse_preq_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int r;	r = sip_parse_hdr_parser1(sip_header, header, (char)NULL);	sip_header->sip_hdr_parsed = *header;	return (r);}intsip_parse_author_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int r;	r = sip_parse_hdr_parser5(sip_header, header, B_TRUE);	sip_header->sip_hdr_parsed = *header;	return (r);}intsip_parse_pauthor_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int r;	r = sip_parse_hdr_parser5(sip_header, header, B_TRUE);	sip_header->sip_hdr_parsed = *header;	return (r);}intsip_parse_pauthen_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int r;	r = sip_parse_hdr_parser5(sip_header, header, B_TRUE);	sip_header->sip_hdr_parsed = *header;	return (r);}intsip_parse_wauthen_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int r;	r = sip_parse_hdr_parser5(sip_header, header, B_TRUE);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * Reply-To = "Reply-To" HCOLON rplyto-spec * rplyto-spec = (name-addr | addr-spec) *(SEMI rplyto-param) * rplyto-param = generic-param * name-addr = [ display-name ] LAQUOT addr-spec RAQUOT * addr-spec = SIP-URI | SIPS-URI | absolute URI */intsip_parse_replyto_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser3(sip_header, header, SIP_STRS_VAL, B_TRUE);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * PAssertedID = "P-Asserted-Identity" HCOLON PAssertedID-value *               *(COMMA PAssertedID-value) * PAssertedID-value = name-addr / addr-spec */intsip_parse_passertedid(_sip_header_t *sip_header, sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser3(sip_header, header, SIP_STRS_VAL, B_TRUE);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * PPreferredID = "P-Preferred-Identity" HCOLON PPreferredID-value *               *(COMMA PAssertedID-value) * PPreferredID-value = name-addr / addr-spec */intsip_parse_ppreferredid(_sip_header_t *sip_header, sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser3(sip_header, header, SIP_STRS_VAL, B_TRUE);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * PRIVACY = "Privacy" HCOLON priv-value *(COMMA priv-value) * priv-value   =   "header" / "session" / "user" / "none" / "critical" *                  / token / id */intsip_parse_privacy_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser1(sip_header, header, (char)NULL);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * Require = "Require" HCOLON option-tag * (COMMA option-tag) */intsip_parse_require_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser1(sip_header, header, (char)NULL);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * Retry-After = "Retry-After" HCOLON delta-seconds [ comment ] * *		(SEMI retry-param) * retry-param = "duration" EQUAL delta-seconds */intsip_parse_retryaft_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	sip_parsed_header_t	*parsed_header;	sip_hdr_value_t		*value = NULL;	int			ret;	if (sip_header == NULL || header == NULL)		return (EINVAL);	/* check if already parsed */	if (sip_header->sip_hdr_parsed != NULL) {		*header = sip_header->sip_hdr_parsed;		return (0);	}	*header = NULL;	assert(sip_header->sip_hdr_start == sip_header->sip_hdr_current);	if (sip_parse_goto_values(sip_header))		return (EPROTO);	parsed_header = calloc(1, sizeof (sip_parsed_header_t));	if (parsed_header == NULL)		return (ENOMEM);	parsed_header->sip_header = sip_header;	value = calloc(1, sizeof (sip_hdr_value_t));	if (value == NULL) {		sip_free_phdr(parsed_header);		return (ENOMEM);	}	parsed_header->value = (sip_value_t *)value;	value->sip_value_start = sip_header->sip_hdr_current;	value->sip_value_header = parsed_header;	ret = sip_atoi(sip_header, &(value->intstr_int));	if (ret != 0)		value->sip_value_state = SIP_VALUE_BAD;	if (sip_find_token(sip_header, SIP_LPAR) == 0) {		value->intstr_str_ptr = sip_header->sip_hdr_current;		if (sip_find_token(sip_header, SIP_RPAR) == 0) {			value->intstr_str_len =			    sip_header->sip_hdr_current -				value->intstr_str_ptr - 1;			if (sip_find_token(sip_header, SIP_SEMI) == 0) {				sip_header->sip_hdr_current--;				(void) sip_parse_params(sip_header,				    &(value->sip_param_list));			}		} else {			value->sip_value_state = SIP_VALUE_BAD;			return (EPROTO);		}	} else {		value->intstr_str_ptr = NULL;		value->intstr_str_len = 0;		/* from value start, search if parameter list */		sip_header->sip_hdr_current = value->sip_value_start;		if (sip_find_token(sip_header, SIP_SEMI) == 0) {			sip_header->sip_hdr_current--;			(void) sip_parse_params(sip_header,			    &(value->sip_param_list));		}	}	*header = parsed_header;	sip_header->sip_hdr_parsed = *header;	return (0);}/* * Server = "Server" HCOLON servel-val *(LWS server-val) * servel-val = product|comment * product = token [SLASH version] * version = token * Treated as one single string */intsip_parse_server_header(_sip_header_t *sip_header, sip_parsed_header_t **header){	int	r;	r = sip_parse_hdr_parser4(sip_header, header);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * Subject = ("Subject" | "s")HCOLON [TEXT-UTF8-TRIM] */intsip_parse_subject_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	if (!sip_is_empty_hdr(sip_header)) {		r = sip_parse_hdr_empty(sip_header, header);		return (r);	}	r = sip_parse_hdr_parser4(sip_header, header);	sip_header->sip_hdr_parsed = *header;	return (r);}/* * XXXXX supported, same as require * Supported = ("Supported" | "k") HCOLON [option-tag * (COMMA option-tag) ] */intsip_parse_support_header(_sip_header_t *sip_header,    sip_parsed_header_t **header){	int	r;	if (!sip_is_empty_hdr(sip_header)) {		r = sip_parse_hdr_empty(sip_header, header);		return (r);	}	r = sip_parse_hdr_parser1(sip_header, header, (char)NULL);	sip_header->sip_hdr_parsed = *header;	return (r);}/*

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -