[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