Parcourir la source

dispatcher: use always the internal faked message for event routes

- being executed on state change, the config message does not provide
  useful data (e.g., on ds_mark_dst() inside failure route, the UAS
  request is used, not having uri where it was sent)
- the r-uri of the internal faked message is set to the destination uri
  from the dispatcher record
Daniel-Constantin Mierla il y a 2 semaines
Parent
commit
e7bf487cfc
1 fichiers modifiés avec 10 ajouts et 16 suppressions
  1. 10 16
      src/modules/dispatcher/dispatch.c

+ 10 - 16
src/modules/dispatcher/dispatch.c

@@ -3538,7 +3538,7 @@ static void ds_run_route(sip_msg_t *msg, str *uri, char *route, ds_rctx_t *rctx)
 {
 	int rt, backup_rt;
 	struct run_act_ctx ctx;
-	sip_msg_t *fmsg;
+	sip_msg_t *fmsg = NULL;
 	sr_kemi_eng_t *keng = NULL;
 	str evname;
 
@@ -3565,18 +3565,14 @@ static void ds_run_route(sip_msg_t *msg, str *uri, char *route, ds_rctx_t *rctx)
 		}
 	}
 
-	if(msg == NULL || msg == FAKED_REPLY) {
-		if(faked_msg_init() < 0) {
-			LM_ERR("faked_msg_init() failed\n");
-			return;
-		}
-		fmsg = faked_msg_next();
-		if(rewrite_uri(fmsg, uri) < 0) {
-			LM_ERR("failed to set r-uri\n");
-			return;
-		}
-	} else {
-		fmsg = msg;
+	if(faked_msg_init() < 0) {
+		LM_ERR("faked_msg_init() failed\n");
+		return;
+	}
+	fmsg = faked_msg_next();
+	if(rewrite_uri(fmsg, uri) < 0) {
+		LM_ERR("failed to set r-uri\n");
+		return;
 	}
 
 	if(rt >= 0 || ds_event_callback.len > 0) {
@@ -3600,9 +3596,7 @@ static void ds_run_route(sip_msg_t *msg, str *uri, char *route, ds_rctx_t *rctx)
 		set_route_type(backup_rt);
 		_ds_rctx = NULL;
 	}
-	if(fmsg != msg) {
-		reset_uri(fmsg);
-	}
+	reset_uri(fmsg);
 }