[sr-dev] git:master: uac: Added ability to set Call-Id through $uac_req(callid).

Daniel-Constantin Mierla miconda at gmail.com
Mon May 20 16:32:09 CEST 2013


Hello,

please break the commits if you change many components not related to a 
repetitive operation. Do one commit for each component, in this case 
being two, one for uac and one for tm. Otherwise is not easy to spot 
what you touched from summary.

Also, it is recommended that you ask for review when changing code in 
core or modules that you are not maintaining. The commit introduced a 
bug, resulting in crashing as the new callid field was not initialized 
by many modules using this tm function.

Cheers,
DAniel

On 5/17/13 8:54 PM, Konstantin Mosesov wrote:
> Module: sip-router
> Branch: master
> Commit: 121c5a49f81effdac42977d716332215d6a95e4f
> URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=121c5a49f81effdac42977d716332215d6a95e4f
>
> Author: Konstantin Mosesov <ez at voipgroup.org.ua>
> Committer: Konstantin Mosesov <ez at voipgroup.org.ua>
> Date:   Fri May 17 21:14:29 2013 +0300
>
> uac: Added ability to set Call-Id through $uac_req(callid).
>
> ---
>
>   modules/tm/uac.c              |    5 ++++-
>   modules/tm/uac.h              |    1 +
>   modules/uac/README            |    1 +
>   modules/uac/doc/uac_admin.xml |    1 +
>   modules/uac/uac_send.c        |   27 +++++++++++++++++++++++++++
>   5 files changed, 34 insertions(+), 1 deletions(-)
>
> diff --git a/modules/tm/uac.c b/modules/tm/uac.c
> index c1f8256..38ead71 100644
> --- a/modules/tm/uac.c
> +++ b/modules/tm/uac.c
> @@ -762,7 +762,10 @@ int request(uac_req_t *uac_r, str* ruri, str* to, str* from, str *next_hop)
>   
>   	if (check_params(uac_r, to, from) < 0) goto err;
>   
> -	generate_callid(&callid);
> +	if (uac_r->callid == NULL || uac_r->callid->len <= 0)
> +	    generate_callid(&callid);
> +	else
> +	    callid = *uac_r->callid;
>   	generate_fromtag(&fromtag, &callid);
>   
>   	if (new_dlg_uac(&callid, &fromtag, DEFAULT_CSEQ, from, to, &dialog) < 0) {
> diff --git a/modules/tm/uac.h b/modules/tm/uac.h
> index 619d43e..69376b4 100644
> --- a/modules/tm/uac.h
> +++ b/modules/tm/uac.h
> @@ -58,6 +58,7 @@ typedef struct uac_req {
>   	int	cb_flags;
>   	transaction_cb	*cb;
>   	void	*cbp;
> +	str	*callid;
>   } uac_req_t;
>   
>   /* macro for setting the values of uac_req_t struct */
> diff --git a/modules/uac/README b/modules/uac/README
> index cd5cf5c..fc3846d 100644
> --- a/modules/uac/README
> +++ b/modules/uac/README
> @@ -605,6 +605,7 @@ $uac_req(method)="OPTIONS";
>   $uac_req(ruri)="sip:kamailio.org";
>   $uac_req(furi)="sip:kamailio.org";
>   $uac_req(turi)="sip:kamailio.org";
> +$uac_req(callid)=$(mb{s.md5});
>   uac_req_send();
>   ...
>   
> diff --git a/modules/uac/doc/uac_admin.xml b/modules/uac/doc/uac_admin.xml
> index ec86950..d3a3c54 100644
> --- a/modules/uac/doc/uac_admin.xml
> +++ b/modules/uac/doc/uac_admin.xml
> @@ -713,6 +713,7 @@ $uac_req(method)="OPTIONS";
>   $uac_req(ruri)="sip:kamailio.org";
>   $uac_req(furi)="sip:kamailio.org";
>   $uac_req(turi)="sip:kamailio.org";
> +$uac_req(callid)=$(mb{s.md5});
>   uac_req_send();
>   ...
>   				</programlisting>
> diff --git a/modules/uac/uac_send.c b/modules/uac/uac_send.c
> index 50bff25..91ad56c 100644
> --- a/modules/uac/uac_send.c
> +++ b/modules/uac/uac_send.c
> @@ -61,6 +61,8 @@ typedef struct _uac_send_info {
>   	char  b_apasswd[64];
>   	str   s_apasswd;
>   	unsigned int onreply;
> +	char  b_callid[128];
> +	str   s_callid;
>   } uac_send_info_t;
>   
>   static struct _uac_send_info _uac_req;
> @@ -84,6 +86,7 @@ uac_send_info_t *uac_send_info_clone(uac_send_info_t *ur)
>   	tp->s_ouri.s    = tp->b_ouri;
>   	tp->s_auser.s   = tp->b_auser;
>   	tp->s_apasswd.s = tp->b_apasswd;
> +	tp->s_callid.s  = tp->b_callid;
>   
>   	return tp;
>   }
> @@ -134,6 +137,10 @@ int pv_get_uac_req(struct sip_msg *msg, pv_param_t *param,
>   			if(_uac_req.s_apasswd.len<=0)
>   				return pv_get_null(msg, param, res);
>   			return pv_get_strval(msg, param, res, &_uac_req.s_apasswd);
> +		case 11:
> +			if(_uac_req.s_callid.len<=0)
> +				return pv_get_null(msg, param, res);
> +			return pv_get_strval(msg, param, res, &_uac_req.s_callid);
>   		default:
>   			return pv_get_uintval(msg, param, res, _uac_req.flags);
>   	}
> @@ -160,6 +167,7 @@ int pv_set_uac_req(struct sip_msg* msg, pv_param_t *param,
>   				_uac_req.s_body.len = 0;
>   				_uac_req.s_method.len = 0;
>   				_uac_req.onreply = 0;
> +				_uac_req.s_callid.len = 0;
>   			}
>   			break;
>   		case 1:
> @@ -360,6 +368,21 @@ int pv_set_uac_req(struct sip_msg* msg, pv_param_t *param,
>   			_uac_req.s_apasswd.s[val->rs.len] = '\0';
>   			_uac_req.s_apasswd.len = val->rs.len;
>   			break;
> +		case 11:
> +			if(val==NULL)
> +			{
> +				_uac_req.s_callid.len = 0;
> +				return 0;
> +			}
> +			if(!(val->flags&PV_VAL_STR))
> +			{
> +				LM_ERR("Invalid value type\n");
> +				return -1;
> +			}
> +                        memcpy(_uac_req.s_callid.s, val->rs.s, val->rs.len);
> +                        _uac_req.s_callid.s[val->rs.len] = '\0';
> +                        _uac_req.s_callid.len = val->rs.len;
> +			break;
>   	}
>   	return 0;
>   }
> @@ -399,6 +422,8 @@ int pv_parse_uac_req_name(pv_spec_p sp, str *in)
>   		case 6:
>   			if(strncmp(in->s, "method", 6)==0)
>   				sp->pvp.pvn.u.isname.name.n = 7;
> +			else if(strncmp(in->s, "callid", 6)==0)
> +				sp->pvp.pvn.u.isname.name.n = 11;
>   			else goto error;
>   		break;
>   		case 7:
> @@ -439,6 +464,7 @@ void uac_req_init(void)
>   	_uac_req.s_method.s = _uac_req.b_method;
>   	_uac_req.s_auser.s  = _uac_req.b_auser;
>   	_uac_req.s_apasswd.s  = _uac_req.b_apasswd;
> +	_uac_req.s_callid.s  = _uac_req.b_callid;
>   	return;
>   }
>   
> @@ -612,6 +638,7 @@ int uac_req_send(struct sip_msg *msg, char *s1, char *s2)
>   		/* Callback parameter */
>   		uac_r.cbp = (void*)tp;
>   	}
> +        uac_r.callid = (_uac_req.s_callid.len <= 0) ? NULL : &_uac_req.s_callid;
>   	ret = tmb.t_request(&uac_r,  /* UAC Req */
>   						&_uac_req.s_ruri,        /* Request-URI */
>   						(_uac_req.s_turi.len<=0)?&_uac_req.s_ruri:&_uac_req.s_turi, /* To */
>
>
> _______________________________________________
> sr-dev mailing list
> sr-dev at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

-- 
Daniel-Constantin Mierla - http://www.asipto.com
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Kamailio Advanced Training, San Francisco, USA - June 24-27, 2013
   * http://asipto.com/u/katu *




More information about the sr-dev mailing list