diff --git a/modules/rr/record.c b/modules/rr/record.c index 3af771d130f..b8f526e17bd 100644 --- a/modules/rr/record.c +++ b/modules/rr/record.c @@ -40,6 +40,7 @@ #include "../../data_lump.h" #include "record.h" #include "rr_mod.h" +#include "loose.h" #define RR_PREFIX_SIP "Record-Route: to->parsed)->tag_value; + } else { + if (parse_from_header(_m) < 0) { + LM_ERR("From parsing failed\n"); + ret = -2; + goto error; + } + tag = &((struct to_body*)_m->from->parsed)->tag_value; } - from = (struct to_body*)_m->from->parsed; - tag = &from->tag_value; } else { tag = 0; } @@ -777,12 +785,23 @@ int record_route_advertised_address(struct sip_msg* _m, str* _data) } if (append_fromtag) { - if (parse_from_header(_m) < 0) { - LM_ERR("From parsing failed\n"); - ret = -2; - goto error; + if (is_direction(_m, RR_FLOW_UPSTREAM) == 0) { + if (parse_to_header(_m) < 0) { + LM_ERR("To parsing failed\n"); + ret = -2; + goto error; + } + tag = &((struct to_body*)_m->to->parsed)->tag_value; + } else { + if (parse_from_header(_m) < 0) { + LM_ERR("From parsing failed\n"); + ret = -2; + goto error; + } + tag = &((struct to_body*)_m->from->parsed)->tag_value; } - tag = &((struct to_body*)_m->from->parsed)->tag_value; + } else { + tag = 0; } sips = rr_is_sips(_m);