Module: sip-router Branch: tmp/ruri_branch Commit: b4ea43935347d8e8c0b73f3972177670127f7e50 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=b4ea4393...
Author: Andrei Pelinescu-Onciul andrei@iptel.org Committer: Andrei Pelinescu-Onciul andrei@iptel.org Date: Thu May 27 10:51:51 2010 +0200
core: support for marking a "consumed" r-uri
The main/message r-uri can now be marked as "consumed" during forking or as "new". New function introduced (dset.h): ruri_mark_new(), ruri_mark_consumed(), ruri_get_forking_state(). rewrite_uri() will now automatically mark the uri as "new".
---
dset.c | 15 ++++++++++----- dset.h | 10 ++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/dset.c b/dset.c index 8223615..1e5c9e7 100644 --- a/dset.c +++ b/dset.c @@ -27,11 +27,10 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/*! - * \file - * \brief SIP-router core :: - * \ingroup core - * Module: \ref core +/** destination set / branches support. + * @file dset.c + * @ingroup core + * Module: @ref core */
#include <string.h> @@ -68,6 +67,9 @@ unsigned int nr_branches = 0; /* branch iterator */ static int branch_iterator = 0;
+/* used to mark ruris "consumed" when branching (1 new, 0 consumed) */ +int ruri_is_new = 0; + /* The q parameter of the Request-URI */ static qvalue_t ruri_q = Q_UNSPECIFIED;
@@ -266,6 +268,7 @@ void clear_branches(void) nr_branches = 0; ruri_q = Q_UNSPECIFIED; ruri_bflags = 0; + ruri_mark_consumed(); }
@@ -493,6 +496,8 @@ int rewrite_uri(struct sip_msg* _m, str* _s)
_m->new_uri.s = buf; _m->new_uri.len = _s->len; + /* mark ruri as new and available for forking */ + ruri_mark_new();
return 1; } diff --git a/dset.h b/dset.h index ca91211..6f9f067 100644 --- a/dset.h +++ b/dset.h @@ -37,6 +37,7 @@
extern unsigned int nr_branches; +extern int ruri_is_new;
/*! \brief * Structure for storing branch attributes @@ -166,6 +167,15 @@ inline static int get_request_uri(struct sip_msg* _m, str* _u) }
+#define ruri_mark_new() (ruri_is_new = 1) + +#define ruri_mark_consumed() (ruri_is_new = 0) + +/** returns whether or not ruri should be used when forking. + * (usefull for serial forking) + * @return 0 if already marked as consumed, 1 if not. + */ +#define ruri_get_forking_state() (ruri_is_new)
int rewrite_uri(struct sip_msg* _m, str* _s);