[sr-dev] git:master: rr(k): execute callbacks only for local route uri
Daniel-Constantin Mierla
miconda at gmail.com
Wed Sep 14 11:22:26 CEST 2011
Module: sip-router
Branch: master
Commit: 10eac9b125ff2a13a2ae240897a3f17bc1243c71
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=10eac9b125ff2a13a2ae240897a3f17bc1243c71
Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: Wed Sep 14 11:19:56 2011 +0200
rr(k): execute callbacks only for local route uri
- parameters callback are executed only if there is a list with
parameters in Route URI and for loose routing the URI has to match
myself condition
- should fix bogus value of Route URI params in callback function when
URI of top Route is not myself
- reported by Andreas Granig
---
modules_k/rr/loose.c | 20 ++++++++++++++++----
1 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/modules_k/rr/loose.c b/modules_k/rr/loose.c
index 53a52d6..7d2c0e2 100644
--- a/modules_k/rr/loose.c
+++ b/modules_k/rr/loose.c
@@ -497,6 +497,11 @@ static inline int after_strict(struct sip_msg* _m)
rt = (rr_t*)hdr->parsed;
uri = rt->nameaddr.uri;
+ /* reset rr handling static vars for safety in error case */
+ routed_msg_id = 0;
+ routed_params.s = NULL;
+ routed_params.len = 0;
+
if (parse_uri(uri.s, uri.len, &puri) < 0) {
LM_ERR("failed to parse the first route URI\n");
return RR_ERROR;
@@ -651,8 +656,9 @@ static inline int after_strict(struct sip_msg* _m)
}
}
- /* run RR callbacks */
- run_rr_callbacks( _m, &routed_params );
+ /* run RR callbacks only if we have Route URI parameters */
+ if(routed_params.len > 0)
+ run_rr_callbacks( _m, &routed_params );
return RR_DRIVEN;
}
@@ -681,6 +687,11 @@ static inline int after_loose(struct sip_msg* _m, int preloaded)
rt = (rr_t*)hdr->parsed;
uri = rt->nameaddr.uri;
+ /* reset rr handling static vars for safety in error case */
+ routed_msg_id = 0;
+ routed_params.s = NULL;
+ routed_params.len = 0;
+
if (parse_uri(uri.s, uri.len, &puri) < 0) {
LM_ERR("failed to parse the first route URI\n");
return RR_ERROR;
@@ -807,8 +818,9 @@ static inline int after_loose(struct sip_msg* _m, int preloaded)
status = RR_DRIVEN;
done:
- /* run RR callbacks */
- run_rr_callbacks( _m, &routed_params );
+ /* run RR callbacks only if we have Route URI parameters */
+ if(routed_params.len > 0)
+ run_rr_callbacks( _m, &routed_params );
return status;
}
More information about the sr-dev
mailing list