[sr-dev] git:andrei/send_flags: core: new close after send and reuse only script functions

Klaus Darilion klaus.mailinglists at pernau.at
Mon Sep 21 12:16:18 CEST 2009


Great!

I have documented the new function.
http://sip-router.org/wiki/cookbooks/core-cookbook/devel#set_forward_no_connect

Andrei, please verify if I understood correct and the examples are correct.

I suspect those functions work with TLS too? What about SCTP?

What happens if the functions are called for UDP transport - I hope they 
will be ignored and do not make noisy log-statements.

regards
klaus

Andrei Pelinescu-Onciul schrieb:
> Module: sip-router
> Branch: andrei/send_flags
> Commit: 58cbf7f7e13fa383a76d9f67d38a686ae5e8babe
> URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=58cbf7f7e13fa383a76d9f67d38a686ae5e8babe
> 
> Author: Andrei Pelinescu-Onciul <andrei at iptel.org>
> Committer: Andrei Pelinescu-Onciul <andrei at iptel.org>
> Date:   Tue Sep 15 17:47:33 2009 +0200
> 
> core: new close after send and reuse only script functions
> 
> Added new script functions for setting send options for the
> current message or its replies:
> 
> - set_forward_no_connect() - the message will be forwarded only if
>   there is already an open connection to the destination.
> - set_reply_no_connect() - like above but for replies to the
>   current message.
> - set_forward_close() - hint that after forwarding the current
>   message the connection should be closed.
> - set reply_close() - like above but for replies.
> 
> ---
> 
>  action.c       |   17 +++++++++++++++++
>  cfg.lex        |   12 ++++++++++++
>  cfg.y          |   28 ++++++++++++++++++++++++++++
>  route_struct.h |    6 +++++-
>  4 files changed, 62 insertions(+), 1 deletions(-)
> 
> diff --git a/action.c b/action.c
> index 352dd90..13a9817 100644
> --- a/action.c
> +++ b/action.c
> @@ -50,6 +50,7 @@
>   *  2008-12-03  use lvalues/rvalues for assignments (andrei)
>   *  2008-12-17  added UDP_MTU_TRY_PROTO_T (andrei)
>   *  2009-05-04  switched IF_T to rval_expr (andrei)
> + *  2009-09-15  added SET_{FWD,RPL}_NO_CONNECT, SET_{FWD,RPL}_CLOSE (andrei)
>   */
>  
>  
> @@ -1214,6 +1215,22 @@ match_cleanup:
>  			else
>  				ret=v;
>  			break;
> +		case SET_FWD_NO_CONNECT_T:
> +			msg->fwd_send_flags|= SND_F_FORCE_CON_REUSE;
> +			ret=1; /* continue processing */
> +			break;
> +		case SET_RPL_NO_CONNECT_T:
> +			msg->rpl_send_flags|= SND_F_FORCE_CON_REUSE;
> +			ret=1; /* continue processing */
> +			break;
> +		case SET_FWD_CLOSE_T:
> +			msg->fwd_send_flags|= SND_F_CON_CLOSE;
> +			ret=1; /* continue processing */
> +			break;
> +		case SET_RPL_CLOSE_T:
> +			msg->rpl_send_flags|= SND_F_CON_CLOSE;
> +			ret=1; /* continue processing */
> +			break;
>  /*
>  		default:
>  			LOG(L_CRIT, "BUG: do_action: unknown type %d\n", a->type);
> diff --git a/cfg.lex b/cfg.lex
> index 9723877..bedf79c 100644
> --- a/cfg.lex
> +++ b/cfg.lex
> @@ -215,6 +215,10 @@ ELSE			"else"
>  SET_ADV_ADDRESS	"set_advertised_address"
>  SET_ADV_PORT	"set_advertised_port"
>  FORCE_SEND_SOCKET	"force_send_socket"
> +SET_FWD_NO_CONNECT		"set_forward_no_connect"
> +SET_RPL_NO_CONNECT	"set_reply_no_connect"
> +SET_FWD_CLOSE	"set_forward_close"
> +SET_RPL_CLOSE	"set_reply_close"
>  SWITCH			"switch"
>  CASE			"case"
>  DEFAULT			"default"
> @@ -572,6 +576,14 @@ EAT_ABLE	[\ \t\b\r]
>  										return SET_ADV_PORT; }
>  <INITIAL>{FORCE_SEND_SOCKET}	{	count(); yylval.strval=yytext;
>  									return FORCE_SEND_SOCKET; }
> +<INITIAL>{SET_FWD_NO_CONNECT}	{ count(); yylval.strval=yytext;
> +									return SET_FWD_NO_CONNECT; }
> +<INITIAL>{SET_RPL_NO_CONNECT}	{ count(); yylval.strval=yytext;
> +									return SET_RPL_NO_CONNECT; }
> +<INITIAL>{SET_FWD_CLOSE}		{ count(); yylval.strval=yytext;
> +									return SET_FWD_CLOSE; }
> +<INITIAL>{SET_RPL_CLOSE}		{ count(); yylval.strval=yytext;
> +									return SET_RPL_CLOSE; }
>  <INITIAL>{SWITCH}	{ count(); yylval.strval=yytext; return SWITCH; }
>  <INITIAL>{CASE}	{ count(); yylval.strval=yytext; return CASE; }
>  <INITIAL>{DEFAULT}	{ count(); yylval.strval=yytext; return DEFAULT; }
> diff --git a/cfg.y b/cfg.y
> index 3344b03..af5335c 100644
> --- a/cfg.y
> +++ b/cfg.y
> @@ -319,6 +319,10 @@ extern char *finame;
>  %token SET_ADV_ADDRESS
>  %token SET_ADV_PORT
>  %token FORCE_SEND_SOCKET
> +%token SET_FWD_NO_CONNECT
> +%token SET_RPL_NO_CONNECT
> +%token SET_FWD_CLOSE
> +%token SET_RPL_CLOSE
>  %token SWITCH
>  %token CASE
>  %token DEFAULT
> @@ -2990,6 +2994,30 @@ cmd:
>  		$$=0; yyerror("bad argument, [proto:]host[:port] expected");
>  	}
>  	| FORCE_SEND_SOCKET error {$$=0; yyerror("missing '(' or ')' ?"); }
> +	| SET_FWD_NO_CONNECT LPAREN RPAREN	{
> +		$$=mk_action(SET_FWD_NO_CONNECT_T, 0); set_cfg_pos($$);
> +	}
> +	| SET_FWD_NO_CONNECT	{
> +		$$=mk_action(SET_FWD_NO_CONNECT_T, 0); set_cfg_pos($$);
> +	}
> +	| SET_RPL_NO_CONNECT LPAREN RPAREN	{
> +		$$=mk_action(SET_RPL_NO_CONNECT_T, 0); set_cfg_pos($$);
> +	}
> +	| SET_RPL_NO_CONNECT	{
> +		$$=mk_action(SET_RPL_NO_CONNECT_T, 0); set_cfg_pos($$);
> +	}
> +	| SET_FWD_CLOSE LPAREN RPAREN	{
> +		$$=mk_action(SET_FWD_CLOSE_T, 0); set_cfg_pos($$);
> +	}
> +	| SET_FWD_CLOSE	{
> +		$$=mk_action(SET_FWD_CLOSE_T, 0); set_cfg_pos($$);
> +	}
> +	| SET_RPL_CLOSE LPAREN RPAREN	{
> +		$$=mk_action(SET_RPL_CLOSE_T, 0); set_cfg_pos($$);
> +	}
> +	| SET_RPL_CLOSE	{
> +		$$=mk_action(SET_RPL_CLOSE_T, 0); set_cfg_pos($$);
> +	}
>  	| ID {mod_func_action = mk_action(MODULE_T, 2, MODEXP_ST, NULL, NUMBER_ST,
>  			0); } LPAREN func_params RPAREN	{
>  		mod_func_action->val[0].u.data = 
> diff --git a/route_struct.h b/route_struct.h
> index 4dc84e9..4894bd5 100644
> --- a/route_struct.h
> +++ b/route_struct.h
> @@ -106,7 +106,11 @@ enum action_type{
>  		FORCE_SEND_SOCKET_T,
>  		ASSIGN_T,
>  		ADD_T,
> -		UDP_MTU_TRY_PROTO_T
> +		UDP_MTU_TRY_PROTO_T,
> +		SET_FWD_NO_CONNECT_T,
> +		SET_RPL_NO_CONNECT_T,
> +		SET_FWD_CLOSE_T,
> +		SET_RPL_CLOSE_T
>  };
>  /* parameter types for actions or types for expression right operands
>     (WARNING right operands only, not working for left operands) */
> 
> 
> _______________________________________________
> sr-dev mailing list
> sr-dev at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev



More information about the sr-dev mailing list