From 531ed6f2903db478754d18d5f4e6439cdf54ea4d Mon Sep 17 00:00:00 2001 From: Luigi Rizzo <rizzo@icir.org> Date: Sun, 4 Jun 2006 00:09:13 +0000 Subject: [PATCH] add a bit of comment on what build_route does, plus minor code simplification. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@31895 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 0d1c828df3..b54ace7e6d 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -6622,7 +6622,11 @@ static void build_route(struct sip_pvt *p, struct sip_request *req, int backward p->route_persistant = backwards; - /* We build up head, then assign it to p->route when we're done */ + /* Build a tailq, then assign it to p->route when done. + * If backwards, we add entries from the head so they end up + * in reverse order. However, we do need to maintain a correct + * tail pointer because the contact is always at the end. + */ head = NULL; tail = head; /* 1st we pass through all the hops in any Record-Route headers */ @@ -6631,12 +6635,7 @@ static void build_route(struct sip_pvt *p, struct sip_request *req, int backward rr = __get_header(req, "Record-Route", &start); if (*rr == '\0') break; - for (;;) { - /* Each route entry */ - /* Find < */ - rr = strchr(rr, '<'); - if (!rr) - break; /* No more hops */ + for (; (rr = strchr(rr, '<')) ; rr += len) { /* Each route entry */ ++rr; len = strcspn(rr, ">") + 1; /* Make a struct route */ @@ -6650,7 +6649,8 @@ static void build_route(struct sip_pvt *p, struct sip_request *req, int backward thishop->next = head; head = thishop; /* If this was the first then it'll be the tail */ - if (!tail) tail = thishop; + if (!tail) + tail = thishop; } else { thishop->next = NULL; /* Link in at the end */ @@ -6661,7 +6661,6 @@ static void build_route(struct sip_pvt *p, struct sip_request *req, int backward tail = thishop; } } - rr += len; } } -- GitLab