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

📄 sip_msg.c

📁 VoIP use SIP protocol interface
💻 C
📖 第 1 页 / 共 5 页
字号:
	return (ret);}/* * Error-Info  =  "Error-Info" HCOLON error-uri *(COMMA error-uri) * error-uri   =  LAQUOT absoluteURI RAQUOT *( SEMI generic-param ) * */intsip_add_error_info(sip_msg_t sip_msg, char *uri, char *plist){	char		*tmp;	boolean_t	alloc;	int		r;	if (uri == NULL)		return (EINVAL);	tmp = sip_add_aquot_to_str(uri, &alloc);	if (tmp == NULL)		return (EINVAL);	r = sip_add_str_to_msg(sip_msg, SIP_ERROR_INFO, tmp, plist, SIP_SEMI);	if (alloc)		free(tmp);	return (r);}/* * Expires     =  "Expires" HCOLON delta-seconds * delta-seconds      =  1*DIGIT * */intsip_add_expires(sip_msg_t sip_msg, int secs){	int	ret;	if (sip_msg == NULL || (int)secs < 0)		return (EINVAL);	ret = sip_add_int_to_msg(sip_msg, SIP_EXPIRE, secs, NULL);	return (ret);}/* * In-Reply-To  =  "In-Reply-To" HCOLON callid *(COMMA callid) * callid   =  word [ "@" word ] * */intsip_add_in_reply_to(sip_msg_t sip_msg, char *reply_id){	int		r;	if (reply_id == NULL)		return (EINVAL);	r = sip_add_str_to_msg(sip_msg, SIP_IN_REPLY_TO, reply_id, NULL,	    (char)NULL);	return (r);}/* * RSeq          =  "RSeq" HCOLON response-num * */intsip_add_rseq(sip_msg_t sip_msg, int resp_num){	int	ret;	if (sip_msg == NULL || resp_num <= 0)		return (EINVAL);	ret = sip_add_int_to_msg(sip_msg, SIP_RSEQ, resp_num, NULL);	return (ret);}/* * Min-Expires  =  "Min-Expires" HCOLON delta-seconds * */intsip_add_min_expires(sip_msg_t sip_msg, int secs){	int	ret;	if (sip_msg == NULL || (int)secs < 0)		return (EINVAL);	ret = sip_add_int_to_msg(sip_msg, SIP_MIN_EXPIRE, secs, NULL);	return (ret);}/* * MIME-Version  =  "MIME-Version" HCOLON 1*DIGIT "." 1*DIGIT * */intsip_add_mime_version(sip_msg_t sip_msg, char *version){	int	ret;	if (version == NULL)		return (EINVAL);	ret = sip_add_str_to_msg(sip_msg, SIP_MIME_VERSION, version, NULL,	    (char)NULL);	return (ret);}/* * Organization  =  "Organization" HCOLON [TEXT-UTF8-TRIM] * */intsip_add_org(sip_msg_t sip_msg, char *org){	int	ret;	if (org == NULL) {		ret = sip_add_empty_hdr(sip_msg, SIP_ORGANIZATION);	} else {		ret = sip_add_str_to_msg(sip_msg, SIP_ORGANIZATION, org, NULL,		    (char)NULL);	}	return (ret);}/* * Priority        =  "Priority" HCOLON priority-value * priority-value  =  "emergency" / "urgent" / "normal" *			/ "non-urgent" / other-priority * other-priority  =  token * */intsip_add_priority(sip_msg_t sip_msg, char *prio){	int	ret;	if (prio == NULL)		return (EINVAL);	ret = sip_add_str_to_msg(sip_msg, SIP_PRIORITY, prio, NULL, (char)NULL);	return (ret);}/* * Reply-To      =  "Reply-To" HCOLON rplyto-spec * rplyto-spec   =  ( name-addr / addr-spec ) *			*( SEMI rplyto-param ) * rplyto-param  =  generic-param * */intsip_add_reply_to(sip_msg_t sip_msg, char *uname, char *addr, char *plist,    boolean_t add_aquot){	return (sip_add_name_aspec(sip_msg, uname, addr, NULL, add_aquot,	    SIP_REPLYTO, plist));}/* * Privacy-hdr  =  "Privacy" HCOLON priv-value *(";" priv-value) * priv-value   =   "header" / "session" / "user" / "none" / "critical" *			/ token */intsip_add_privacy(sip_msg_t sip_msg, char *priv_val){	int	ret;	if (priv_val == NULL)		return (EINVAL);	ret = sip_add_str_to_msg(sip_msg, SIP_PRIVACY, priv_val, NULL,	    (char)NULL);	return (ret);}/* * Require       =  "Require" HCOLON option-tag *(COMMA option-tag) * option-tag     =  token * */intsip_add_require(sip_msg_t sip_msg, char *req){	int	ret;	if (req == NULL)		return (EINVAL);	ret = sip_add_str_to_msg(sip_msg, SIP_REQUIRE, req, NULL, (char)NULL);	return (ret);}/* * Retry-After  =  "Retry-After" HCOLON delta-seconds *			[ comment ] *( SEMI retry-param ) * retry-param  =  ("duration" EQUAL delta-seconds) *			/ generic-param */intsip_add_retry_after(sip_msg_t sip_msg, int secs, char *cmt, char *plist){	int	r;	if (secs <= 0)		return (EINVAL);	if (cmt == NULL) {		r = sip_add_int_to_msg(sip_msg, SIP_RETRY_AFTER, secs, plist);		return (r);	}	r = sip_add_intstr_to_msg(sip_msg, SIP_RETRY_AFTER, secs, cmt, plist);	return (r);}/* * Server           =  "Server" HCOLON server-val *(LWS server-val) * server-val       =  product / comment * product          =  token [SLASH product-version] * product-version  =  token * */intsip_add_server(sip_msg_t sip_msg, char *svr){	int	ret;	if (svr == NULL)		return (EINVAL);	ret = sip_add_str_to_msg(sip_msg, SIP_SERVER, svr, NULL, (char)NULL);	return (ret);}/* * Subject  =  ( "Subject" / "s" ) HCOLON [TEXT-UTF8-TRIM] * */intsip_add_subject(sip_msg_t sip_msg, char *subject){	int	ret;	if (subject == NULL) {		ret = sip_add_empty_hdr(sip_msg, SIP_SUBJECT);	} else {		ret = sip_add_str_to_msg(sip_msg, SIP_SUBJECT, subject, NULL,		    (char)NULL);	}	return (ret);}/* * Supported  =  ( "Supported" / "k" ) HCOLON *		[option-tag *(COMMA option-tag)] * */intsip_add_supported(sip_msg_t sip_msg, char *support){	int	ret;	if (support == NULL) {		ret = sip_add_empty_hdr(sip_msg, SIP_SUPPORT);	} else {		ret = sip_add_str_to_msg(sip_msg, SIP_SUPPORT, support, NULL,		    (char)NULL);	}	return (ret);}/* * Timestamp  =  "Timestamp" HCOLON 1*(DIGIT) *		[ "." *(DIGIT) ] [ LWS delay ] * delay      =  *(DIGIT) [ "." *(DIGIT) ] * */intsip_add_tstamp(sip_msg_t sip_msg, char *time, char *delay){	int	ret;	if (delay == NULL) {		ret = sip_add_str_to_msg(sip_msg, SIP_TIMESTAMP, time, NULL,		    (char)NULL);	} else {		ret = sip_add_2strs_to_msg(sip_msg, SIP_TIMESTAMP, time,		    B_FALSE, delay, NULL, ' ');	}	return (ret);}/* * Unsupported  =  "Unsupported" HCOLON option-tag *(COMMA option-tag) * */intsip_add_unsupported(sip_msg_t sip_msg, char *unsupport){	int	ret;	if (unsupport == NULL)		return (EINVAL);	ret = sip_add_str_to_msg(sip_msg, SIP_UNSUPPORT, unsupport, NULL,	    (char)NULL);	return (ret);}/* * User-Agent  =  "User-Agent" HCOLON server-val *(LWS server-val) * */intsip_add_user_agent(sip_msg_t sip_msg, char *usr){	int	r;	if (usr == NULL)		return (EINVAL);	r = sip_add_str_to_msg(sip_msg, SIP_USER_AGENT, usr, NULL, (char)NULL);	return (r);}/* * Warning        =  "Warning" HCOLON warning-value *(COMMA warning-value) * warning-value  =  warn-code SP warn-agent SP warn-text * warn-code      =  3DIGIT * warn-agent     =  hostport / pseudonym *			;  the name or pseudonym of the server adding *			;  the Warning header, for use in debugging * warn-text      =  quoted-string * pseudonym      =  token * */intsip_add_warning(sip_msg_t sip_msg, int code, char *addr, char *msg){	_sip_header_t	*new_header;	int 		header_size;	_sip_msg_t 	*_sip_msg;	char		*hdr_name = SIP_WARNING;	if (sip_msg == NULL || addr == NULL || msg == NULL ||	    addr[0] == '\0' || msg == '\0' || code < 100 || code > 999) {		return (EINVAL);	}	_sip_msg = (_sip_msg_t *)sip_msg;	(void) pthread_mutex_lock(&_sip_msg->sip_msg_mutex);	if (!sip_ok_to_modify_message(_sip_msg)) {		(void) pthread_mutex_unlock(&_sip_msg->sip_msg_mutex);		return (ENOTSUP);	}	header_size = strlen(hdr_name) + SIP_SPACE + sizeof (char) + SIP_SPACE +	    sip_num_of_bytes(code) + SIP_SPACE + strlen(addr) + SIP_SPACE +	    sizeof (char) + strlen(msg) + sizeof (char) + strlen(SIP_CRLF);	new_header = sip_new_header(header_size);	if (new_header == NULL) {		(void) pthread_mutex_unlock(&_sip_msg->sip_msg_mutex);		return (ENOMEM);	}	(void) snprintf(new_header->sip_hdr_start, header_size + 1,	    "%s %c %d %s \"%s\"%s", hdr_name, SIP_HCOLON, code, addr,	    msg, SIP_CRLF);	_sip_add_header(_sip_msg, new_header, B_TRUE, B_FALSE, NULL);	(void) pthread_mutex_unlock(&_sip_msg->sip_msg_mutex);	return (0);}/* * RAck          =  "RAck" HCOLON response-num LWS CSeq-num LWS Method * response-num  =  1*DIGIT * CSeq-num      =  1*DIGIT * */intsip_add_rack(sip_msg_t sip_msg, int resp_num, int cseq, sip_method_t method){	_sip_header_t	*new_header;	int 		header_size;	_sip_msg_t 	*_sip_msg;	char		*hdr_name = SIP_RACK;	if (sip_msg == NULL || resp_num <= 0 || cseq < 0 || method <= 0 ||	    method >= MAX_SIP_METHODS) {		return (EINVAL);	}	_sip_msg = (_sip_msg_t *)sip_msg;	(void) pthread_mutex_lock(&_sip_msg->sip_msg_mutex);	if (!sip_ok_to_modify_message(_sip_msg)) {		(void) pthread_mutex_unlock(&_sip_msg->sip_msg_mutex);		return (ENOTSUP);	}	header_size = strlen(hdr_name) + SIP_SPACE + sizeof (char) + SIP_SPACE +	    sip_num_of_bytes(resp_num) + SIP_SPACE + sip_num_of_bytes(cseq) +	    SIP_SPACE + strlen(sip_methods[method].name) + strlen(SIP_CRLF);	new_header = sip_new_header(header_size);	if (new_header == NULL) {		(void) pthread_mutex_unlock(&_sip_msg->sip_msg_mutex);		return (ENOMEM);	}	(void) snprintf(new_header->sip_hdr_start, header_size + 1,	    "%s %c %d %d %s%s", hdr_name, SIP_HCOLON, resp_num, cseq,	    sip_methods[method].name, SIP_CRLF);	_sip_add_header(_sip_msg, new_header, B_TRUE, B_FALSE, NULL);	(void) pthread_mutex_unlock(&_sip_msg->sip_msg_mutex);	return (0);}/* * Allow-Events =  ( "Allow-Events" / "u" ) HCOLON event-type *			*(COMMA event-type) */intsip_add_allow_events(sip_msg_t sip_msg, char *t_event){	return (sip_add_str_to_msg(sip_msg, SIP_ALLOW_EVENTS, t_event, NULL,	    (char)NULL));}/* * Event             =  ( "Event" / "o" ) HCOLON event-type *			*( SEMI event-param ) * event-type        =  event-package *( "." event-template ) * event-package     =  token-nodot * event-template    =  token-nodot * token-nodot       =  1*( alphanum / "-"  / "!" / "%" / "*" *			/ "_" / "+" / "`" / "'" / "~" ) * event-param       =  generic-param / ( "id" EQUAL token ) */intsip_add_event(sip_msg_t sip_msg, char *t_event, char *plist){	return (sip_add_str_to_msg(sip_msg, SIP_EVENT, t_event, plist,	    SIP_SEMI));}/* * Subscription-State   = "Subscription-State" HCOLON substate-value * 			*( SEMI subexp-params ) * substate-value       = "active" / "pending" / "terminated" *			/ extension-substate * extension-substate   = token * subexp-params        =   ("reason" EQUAL event-reason-value) *			/ ("expires" EQUAL delta-seconds)* * 			/ ("retry-after" EQUAL delta-seconds) *			/ generic-param * event-reason-value   =   "deactivated" *				/ "probation" *				/ "rejected" *				/ "timeout" *				/ "giveup" *				/ "noresource" *				/ event-reason-extension * event-reason-extension = token */intsip_add_substate(sip_msg_t sip_msg, char *sub, char *plist){	return (sip_add_str_to_msg(sip_msg, SIP_SUBSCRIPTION_STATE, sub, plist,	    SIP_SEMI));}/* * Authorization     =  "Authorization" HCOLON credentials * credentials       =  ("Digest" LWS digest-response) *			/ other-response * digest-response   =  dig-resp *(COMMA dig-resp) * dig-resp          =  username / realm / nonce / digest-uri *			/ dresponse / algorithm / cnonce *			/ opaque / message-qop *			/ nonce-count / auth-param * username          =  "username" EQUAL username-value * username-value    =  quoted-string * digest-uri        =  "uri" EQUAL LDQUOT digest-uri-value RDQUOT * digest-uri-value  =  rquest-uri ; Equal to request-uri as specified *			by HTTP/1.1 * message-qop       =  "qop" EQUAL qop-value * cnonce            =  "cnonce" EQUAL cnonce-value * cnonce-value      =  nonce-value * nonce-count       =  "nc" EQUAL nc-value * nc-value          =  8LHEX * dresponse         =  "response" EQUAL request-digest * request-digest    =  LDQUOT 32LHEX RDQUOT * auth-param        =  auth-param-name EQUAL * 			( token / quoted-string ) * auth-param-name   =  token * other-response    =  auth-scheme LWS auth-param *			*(COMMA auth-param) * auth-scheme       =  token *

⌨️ 快捷键说明

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