You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by ni...@apache.org on 2011/12/20 13:34:42 UTC

svn commit: r1221229 - in /trafficserver/traffic/trunk: CHANGES proxy/hdrs/URL.cc proxy/hdrs/URL.h

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;
 };