You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by jp...@apache.org on 2012/06/12 17:51:37 UTC
[46/50] git commit: TS-1277: Parse the port from the URL on the remap
path.
TS-1277: Parse the port from the URL on the remap path.
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/705b48ed
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/705b48ed
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/705b48ed
Branch: refs/heads/jpeach/lua
Commit: 705b48ed450df2f74242cb63ea4b14839573df70
Parents: 9a1fab3
Author: Alan M. Carroll <am...@network-geographics.com>
Authored: Wed May 30 18:12:44 2012 -0500
Committer: Alan M. Carroll <am...@network-geographics.com>
Committed: Wed May 30 18:12:44 2012 -0500
----------------------------------------------------------------------
proxy/hdrs/URL.cc | 28 ++++++++++++++++++++++++++--
1 files changed, 26 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/705b48ed/proxy/hdrs/URL.cc
----------------------------------------------------------------------
diff --git a/proxy/hdrs/URL.cc b/proxy/hdrs/URL.cc
index af07543..33416b5 100644
--- a/proxy/hdrs/URL.cc
+++ b/proxy/hdrs/URL.cc
@@ -1465,12 +1465,36 @@ url_parse_http_no_path_component_breakdown(HdrHeap * heap,
} else {
host_end = cur = end;
}
- if (base != host_end)
+
+ // Did we find something for the host?
+ if (base != host_end) {
+ char const* port = 0;
+ int port_len = 0;
+
+ // Check for port. Search from the end stopping on the first non-digit
+ // or more than 5 digits and a delimiter.
+ port = host_end - 1;
+ char const* port_limit = host_end - 6;
+ if (port_limit < base) port_limit = base; // don't go past start.
+ while (port >= port_limit && isdigit(*port))
+ --port;
+ // A port if we're still in the host area and we found a ':' as
+ // the immediately preceeding character.
+ if (port >= base && ':' == *port) {
+ port_len = host_end - port - 1; // must compute this first.
+ host_end = port; // then point at colon.
+ ++port; // drop colon from port.
+ url_port_set(heap, url, port, port_len, copy_strings);
+ }
+ // Now we can set the host.
url_host_set(heap, url, base, host_end - base, copy_strings);
+ }
// path is anything that's left.
- if (cur < end)
+ if (cur < end) {
url_path_set(heap, url, cur, end - cur, copy_strings);
+ cur = end;
+ }
*start = cur;
return PARSE_DONE;
}