Author: niq Date: Tue Dec 20 12:34:42 2011 New Revision: 1221229 URL: http://svn.apache.org/viewvc?rev=1221229&view=rev Log: TS-998: Distinguish between normal URLs and proxy URLs containing routing info.
Comment: I tried numerous ways to get the URL data more directly rather than reconstruct it. Those approaches were able to fix the original problem but had side-effects. This fix is a line of least resistance. Modified: trafficserver/traffic/trunk/CHANGES trafficserver/traffic/trunk/proxy/hdrs/URL.cc trafficserver/traffic/trunk/proxy/hdrs/URL.h Modified: trafficserver/traffic/trunk/CHANGES URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/CHANGES?rev=1221229&r1=1221228&r2=1221229&view=diff ============================================================================== --- trafficserver/traffic/trunk/CHANGES (original) +++ trafficserver/traffic/trunk/CHANGES Tue Dec 20 12:34:42 2011 @@ -25,6 +25,8 @@ Changes with Apache Traffic Server 3.1.2 *) [TS-1022] Use size specific types for serialized data in binary logs. + *) [TS-998] Distinguish normal URLs from proxy URLs containing routing info. + Changes with Apache Traffic Server 3.1.1 *) [TS-1020] Make logging to a named pipe work on Solaris. Modified: trafficserver/traffic/trunk/proxy/hdrs/URL.cc URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/hdrs/URL.cc?rev=1221229&r1=1221228&r2=1221229&view=diff ============================================================================== --- trafficserver/traffic/trunk/proxy/hdrs/URL.cc (original) +++ trafficserver/traffic/trunk/proxy/hdrs/URL.cc Tue Dec 20 12:34:42 2011 @@ -1061,6 +1061,8 @@ url_parse(HdrHeap * heap, URLImpl * url, cur = *start; + url->is_normal = (*cur == '/'); + skip_ws: if (ParseRules::is_ws(*cur)) { GETNEXT(eof); @@ -1531,34 +1533,36 @@ url_print(URLImpl * url, char *buf_start { #define TRY(x) if (!x) return 0 - if (url->m_ptr_scheme) { - TRY(mime_mem_print(url->m_ptr_scheme, url->m_len_scheme, - buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); - if ((url->m_scheme_wks_idx >= 0) && (hdrtoken_index_to_wks(url->m_scheme_wks_idx) == URL_SCHEME_FILE)) { - TRY(mime_mem_print(":", 1, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); - } else { - TRY(mime_mem_print("://", 3, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); + if (!url_is_normal) { /* URL is proxyreq containing routing components */ + if (url->m_ptr_scheme) { + TRY(mime_mem_print(url->m_ptr_scheme, url->m_len_scheme, + buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); + if ((url->m_scheme_wks_idx >= 0) && (hdrtoken_index_to_wks(url->m_scheme_wks_idx) == URL_SCHEME_FILE)) { + TRY(mime_mem_print(":", 1, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); + } else { + TRY(mime_mem_print("://", 3, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); + } } - } - if (url->m_ptr_user) { - TRY(mime_mem_print(url->m_ptr_user, url->m_len_user, - buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); - if (url->m_ptr_password) { - TRY(mime_mem_print(":", 1, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); - TRY(mime_mem_print(url->m_ptr_password, url->m_len_password, + if (url->m_ptr_user) { + TRY(mime_mem_print(url->m_ptr_user, url->m_len_user, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); + if (url->m_ptr_password) { + TRY(mime_mem_print(":", 1, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); + TRY(mime_mem_print(url->m_ptr_password, url->m_len_password, + buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); + } + TRY(mime_mem_print("@", 1, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); } - TRY(mime_mem_print("@", 1, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); - } - if (url->m_ptr_host) { - TRY(mime_mem_print(url->m_ptr_host, url->m_len_host, - buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); - if (url->m_ptr_port && url->m_port) { - TRY(mime_mem_print(":", 1, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); - TRY(mime_mem_print(url->m_ptr_port, url->m_len_port, + if (url->m_ptr_host) { + TRY(mime_mem_print(url->m_ptr_host, url->m_len_host, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); + if (url->m_ptr_port && url->m_port) { + TRY(mime_mem_print(":", 1, buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); + TRY(mime_mem_print(url->m_ptr_port, url->m_len_port, + buf_start, buf_length, buf_index_inout, buf_chars_to_skip_inout)); + } } } Modified: trafficserver/traffic/trunk/proxy/hdrs/URL.h URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/hdrs/URL.h?rev=1221229&r1=1221228&r2=1221229&view=diff ============================================================================== --- trafficserver/traffic/trunk/proxy/hdrs/URL.h (original) +++ trafficserver/traffic/trunk/proxy/hdrs/URL.h Tue Dec 20 12:34:42 2011 @@ -83,6 +83,9 @@ struct URLImpl:public HdrHeapObjImpl // Sanity Check Functions void check_strings(HeapCheck *heaps, int num_heaps); + + // Is this a normal or a (forward) proxy request? + bool is_normal; };