You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by ms...@apache.org on 2004/04/03 22:32:40 UTC

cvs commit: jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/sampler HTTPSampler.java

mstover1    2004/04/03 12:32:40

  Modified:    src/protocol/http/org/apache/jmeter/protocol/http/proxy Tag:
                        rel-2_0 Proxy.java
               src/protocol/http/org/apache/jmeter/protocol/http/sampler
                        Tag: rel-2_0 HTTPSampler.java
  Log:
  Fixing proxy + gzip bug.  Some pointless refactorings.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.17.2.2  +28 -3     jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Proxy.java
  
  Index: Proxy.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Proxy.java,v
  retrieving revision 1.17.2.1
  retrieving revision 1.17.2.2
  diff -u -r1.17.2.1 -r1.17.2.2
  --- Proxy.java	2 Apr 2004 23:41:52 -0000	1.17.2.1
  +++ Proxy.java	3 Apr 2004 20:32:40 -0000	1.17.2.2
  @@ -166,7 +166,8 @@
       {
           try
           {
  -        	out.write((res.getResponseHeaders()+"\n").getBytes());
  +            String responseHeaders = massageResponseHeaders(res,res.getResponseHeaders());
  +        	out.write((responseHeaders+"\n").getBytes());
               out.write(res.getResponseData());
               out.flush();
               log.debug("Done writing to client");
  @@ -187,6 +188,30 @@
                   log.warn("Error while closing socket", ex);
               }
           }
  +    }
  +    
  +    /**
  +     * In the event the content was gzipped and unpacked, the content-encoding header must be
  +     * removed and the content-length header should be corrected.
  +     * @param res
  +     * @param headers
  +     * @return
  +     */
  +    private String massageResponseHeaders(SampleResult res,String headers)
  +    {
  +        int encodingHeaderLoc = headers.indexOf(": gzip");
  +        String newHeaders = headers;
  +        if(encodingHeaderLoc > -1)
  +        {
  +            int end = headers.indexOf("\n",encodingHeaderLoc);
  +            int begin = headers.lastIndexOf("\n",encodingHeaderLoc);
  +            newHeaders = newHeaders.substring(0,begin) + newHeaders.substring(end);
  +            int lengthIndex = newHeaders.indexOf("ength: ");
  +            end = newHeaders.indexOf("\n",lengthIndex);
  +            newHeaders = newHeaders.substring(0,lengthIndex+7) + res.getResponseData().length +
  +            		newHeaders.substring(end);
  +        }
  +        return newHeaders;
       }
   
       /**
  
  
  
  No                   revision
  No                   revision
  1.91.2.1  +22 -11    jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampler.java
  
  Index: HTTPSampler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampler.java,v
  retrieving revision 1.91
  retrieving revision 1.91.2.1
  diff -u -r1.91 -r1.91.2.1
  --- HTTPSampler.java	21 Mar 2004 04:20:25 -0000	1.91
  +++ HTTPSampler.java	3 Apr 2004 20:32:40 -0000	1.91.2.1
  @@ -303,17 +303,28 @@
   
           for (int i= 1; conn.getHeaderFieldKey(i) != null; i++)
           {
  -            if (!conn //TODO - why is this not saved?
  -                .getHeaderFieldKey(i)
  -                .equalsIgnoreCase("transfer-encoding"))
  -            {
  -                headerBuf.append(conn.getHeaderFieldKey(i));
  -                headerBuf.append(": ");
  -                headerBuf.append(conn.getHeaderField(i));
  -                headerBuf.append("\n");
  -            }
  +            modifyHeaderValues(conn,i, headerBuf);
           }
           return headerBuf.toString();
  +    }
  +
  +    /**
  +     * @param conn
  +     * @param headerBuf
  +     * @param i
  +     */
  +    protected void modifyHeaderValues(HttpURLConnection conn, int headerIndex, StringBuffer resultBuf) 
  +    {
  +        if ("transfer-encoding" //TODO - why is this not saved? A: it might be a proxy server specific field.
  +                	// If JMeter is using a proxy, the browser wouldn't know about that.
  +            .equalsIgnoreCase(conn.getHeaderFieldKey(headerIndex)))
  +        {
  +           return; 
  +        }
  +        resultBuf.append(conn.getHeaderFieldKey(headerIndex));
  +        resultBuf.append(": ");
  +        resultBuf.append(conn.getHeaderField(headerIndex));
  +        resultBuf.append("\n");
       }
   
       /**
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org