]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9844: [mod_sofia] populate sip_full_route var with all of the route headers, not...
authorMike Jerris <mike@jerris.com>
Thu, 5 Jan 2017 22:02:17 +0000 (16:02 -0600)
committerMike Jerris <mike@jerris.com>
Thu, 5 Jan 2017 22:02:17 +0000 (16:02 -0600)
src/mod/endpoints/mod_sofia/sofia.c

index de780ef41ac8f7c8361ae9c2e8828110433ec003..00938395783fadd090d9af43cf096f445144ce6c 100644 (file)
@@ -227,12 +227,23 @@ static void extract_header_vars(sofia_profile_t *profile, sip_t const *sip,
 
        if (sip) {
                if (sip->sip_route) {
-                       if ((full = sip_header_as_string(nh->nh_home, (void *) sip->sip_route))) {
-                               const char *v = switch_channel_get_variable(channel, "sip_full_route");
-                               if (!v) {
-                                       switch_channel_set_variable(channel, "sip_full_route", full);
+                       const char *v = switch_channel_get_variable(channel, "sip_full_route");
+
+                       if (!v) {
+                               sip_route_t *rp;
+                               switch_stream_handle_t stream = { 0 };
+                               int x = 0;
+
+                               SWITCH_STANDARD_STREAM(stream);
+
+                               for (rp = sip->sip_route; rp; rp = rp->r_next) {
+                                       char *route = sip_header_as_string(nh->nh_home, (void *) rp);
+                                       stream.write_function(&stream, x == 0 ? "%s" : ",%s", route);
+                                       su_free(nh->nh_home, route);
+                                       x++;
                                }
-                               su_free(nh->nh_home, full);
+                               switch_channel_set_variable(channel, "sip_full_route", stream.data);
+                               free(stream.data);
                        }
                }