mstover1    02/04/28 09:40:40

  Modified:    src/org/apache/jmeter/protocol/http/proxy
                        HttpRequestHdr.java Proxy.java ProxyControl.java
  Log:
  Big improvement to the Proxy server
  
  Revision  Changes    Path
  1.8       +82 -79    
jakarta-jmeter/src/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java
  
  Index: HttpRequestHdr.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- HttpRequestHdr.java       20 Feb 2002 01:35:32 -0000      1.7
  +++ HttpRequestHdr.java       28 Apr 2002 16:40:40 -0000      1.8
  @@ -11,6 +11,8 @@
   import org.apache.jmeter.samplers.Entry;
   import org.apache.jmeter.protocol.http.config.*;
   import org.apache.jmeter.protocol.http.sampler.*;
  +import org.apache.jmeter.protocol.http.control.HeaderManager;
  +import org.apache.jmeter.protocol.http.control.Header;
   
   //
   // Class:     HttpRequestHdr
  @@ -21,8 +23,8 @@
    * !ToDo (Class description)
    *
    *@author    $Author: mstover1 $
  - *@created   $Date: 2002/02/20 01:35:32 $
  - *@version   $Revision: 1.7 $
  + *@created   $Date: 2002/04/28 16:40:40 $
  + *@version   $Revision: 1.8 $
    ***************************************/
   public class HttpRequestHdr
   {
  @@ -61,80 +63,98 @@
         *@param in  The stream to parse.
         *@return    true if parsing sucsessfull.
         ***************************************/
  -     public boolean parse(InputStream in)
  +     public byte[] parse(InputStream in) throws IOException
        {
  +             boolean inHeaders = true;
  +             int readLength = 0;
  +             int dataLength = 0;
                String CR = "\r\n";
  -
  -             /*
  -              * Read by lines
  -              */
  -             BufferedReader lines;
  -             StringTokenizer tz;
  -             try
  -             {
  -                     lines = new BufferedReader(new InputStreamReader(new 
DataInputStream(in)));
  -                     String firstLine = lines.readLine();
  -                     tz = new StringTokenizer(firstLine);
  +             boolean first = true;
  +             ByteArrayOutputStream clientRequest = new ByteArrayOutputStream();
  +             ByteArrayOutputStream line = new ByteArrayOutputStream();
  +             int x;
  +             while((inHeaders || readLength < dataLength) && ((x = in.read()) != 
-1))
  +             {
  +                     line.write(x);
  +                     clientRequest.write(x);
  +                     if(inHeaders && (byte)x == (byte)'\n')
  +                     {
  +                             if(line.size() < 3)
  +                             {
  +                                     inHeaders = false;
  +                             }
  +                             if(first)
  +                             {
  +                                     parseFirstLine(line.toString());
  +                                     first = false;
  +                             }
  +                             else
  +                             {
  +                                     dataLength = 
Math.max(parseLine(line.toString()),dataLength);
  +                             }
  +                             line.reset();
  +                     }
  +                     else if(!inHeaders)
  +                     {
  +                             readLength++;
  +                     }
                }
  -             catch(Exception e)
  +             return clientRequest.toByteArray();
  +     }
  +     
  +     public HeaderManager getHeaderManager()
  +     {
  +             HeaderManager manager = new HeaderManager();
  +             Iterator keys = headers.keySet().iterator();
  +             while(keys.hasNext())
                {
  -                     return false;
  +                     String key = (String)keys.next();
  +                     if(!key.equalsIgnoreCase("cookie"))
  +                     {
  +                             Header h = new Header(key,(String)headers.get(key));
  +                             manager.add(h);
  +                     }
                }
  -
  -             /*
  -              * HTTP COMMAND LINE < <METHOD==get> <URL> <HTTP_VERSION> >
  -              */
  +             manager.setName("Browser-derived Headers");
  +             return  manager;
  +     }
  +     
  +     public void parseFirstLine(String firstLine)
  +     {
  +             System.out.println("Command = "+firstLine);
  +             StringTokenizer tz = new StringTokenizer(firstLine);
                method = getToken(tz).toUpperCase();
                url = getToken(tz);
                version = getToken(tz);
  +     }
   
  -             while(true)
  +     public int parseLine(String nextLine)
  +     {
  +             StringTokenizer tz;
  +             tz = new StringTokenizer(nextLine);
  +             String token = getToken(tz);
  +             // look for termination of HTTP command
  +             if(0 == token.length())
                {
  -                     String nextLine = null;
  -                     try
  -                     {
  -                             nextLine = lines.readLine();
  -                             tz = new StringTokenizer(nextLine);
  -                     }
  -                     catch(Exception e)
  -                     {
  -                             return false;
  -                     }
  -                     String Token = getToken(tz);
  -
  -                     // look for termination of HTTP command
  -                     if(0 == Token.length())
  -                     {
  -                             try
  -                             {
  -                                     if(method.equals("POST"))
  -                                     {
  -                                             postData = readPostData(lines);
  -                                     }
  -
  -                             }
  -                             catch(Exception e)
  -                             {
  -                                     break;
  -                             }
  -                             break;
  -                     }
  -                     else
  +                     return 0;
  +             }
  +             else
  +             {
  +                     String name = 
token.trim().substring(0,token.trim().length()-1);
  +                     String value = getRemainder(tz);
  +                     headers.put(name,value);
  +                     if(name.equalsIgnoreCase("content-length"))
                        {
  -                             if(!Token.trim().equalsIgnoreCase("host:") && 
!Token.trim().equalsIgnoreCase("referer:") &&
  -                                             
!Token.trim().equalsIgnoreCase("proxy-connection:"))
  -                             {
  -                                     
headers.put(Token.trim().substring(0,Token.trim().length()-1),getRemainder(tz));
  -                             }
  +                             return Integer.parseInt(value);
                        }
                }
  -             return true;
  +             return 0;
        }
   
  -     public Entry getEntry(UrlConfig config) throws 
MalformedURLException,IOException,ProtocolException
  +     public Entry getEntry() throws 
MalformedURLException,IOException,ProtocolException
        {
                Entry entry = new Entry();
  -             config = createUrlConfig(config);
  +             UrlConfig config = createUrlConfig();
                if(config instanceof MultipartUrlConfig)
                {
                        entry.setSamplerClass(MultipartFormSampler.class);
  @@ -152,9 +172,9 @@
                return (String)headers.get("Content-Type");
        }
   
  -     private UrlConfig createUrlConfig(UrlConfig urlConfig)
  +     private UrlConfig createUrlConfig()
        {
  -             urlConfig = UrlConfig.createConfig(getContentType());
  +             UrlConfig urlConfig = UrlConfig.createConfig(getContentType());
                urlConfig.setDomain(serverName());
                urlConfig.setMethod(method);
                urlConfig.setPath(serverUrl());
  @@ -163,7 +183,7 @@
                urlConfig.setPort(serverPort());
                urlConfig.parseArguments(postData);
                return urlConfig;
  -      }
  +     }
   
        //
        // Parsing Methods
  @@ -296,23 +316,6 @@
                }
   
                return str;
  -     }
  -
  -     private String readPostData(Reader in) throws IOException
  -     {
  -             StringWriter string = new StringWriter();
  -             char[] buf = new char[4096];
  -             int x = 0;
  -             while((x = in.read(buf)) > 0)
  -             {
  -                     string.write(buf, 0, x);
  -                     if(!in.ready())
  -                     {
  -                             break;
  -                     }
  -             }
  -             string.close();
  -             return string.toString().trim();
        }
   
   }
  
  
  
  1.13      +40 -22    
jakarta-jmeter/src/org/apache/jmeter/protocol/http/proxy/Proxy.java
  
  Index: Proxy.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/org/apache/jmeter/protocol/http/proxy/Proxy.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Proxy.java        6 Mar 2002 03:51:36 -0000       1.12
  +++ Proxy.java        28 Apr 2002 16:40:40 -0000      1.13
  @@ -61,6 +61,7 @@
   import org.apache.jmeter.protocol.http.config.UrlConfig;
   import org.apache.jmeter.save.xml.TagHandler;
   import org.apache.jmeter.protocol.http.control.CookieManager;
  +import org.apache.jmeter.gui.JMeterComponentModel;
   import org.apache.jmeter.samplers.Entry;
   import org.apache.jmeter.samplers.Sampler;
   import org.apache.jmeter.samplers.SampleResult;
  @@ -148,12 +149,19 @@
                boolean isCachable = false;
                try
                {
  -                     request.parse(new 
BufferedInputStream(ClientSocket.getInputStream()));
  -                     Entry entry = request.getEntry(urlConfig);
  +                     byte[] clientRequest = request.parse(
  +                                     new BufferedInputStream(
  +                                     ClientSocket.getInputStream()));
  +                     Entry entry = request.getEntry();
                        entry.addConfigElement(cookieManager);
  -                     writeFromInToOut(new BufferedInputStream(new 
ByteArrayInputStream(sampleServer(entry))),
  -                                     new 
BufferedOutputStream(ClientSocket.getOutputStream()));
  -                     
target.deliverUrlConfig((UrlConfig)entry.getConfigElement(UrlConfig.class));
  +                     writeToClient(
  +                             request.serverName(),
  +                             request.serverPort(),
  +                             new BufferedInputStream(new 
ByteArrayInputStream(clientRequest)),
  +                             new 
BufferedOutputStream(ClientSocket.getOutputStream()));
  +                     System.out.println("Delivering urlconfig to test tree");
  +                     
target.deliverUrlConfig((UrlConfig)entry.getConfigElement(UrlConfig.class),
  +                                     new 
JMeterComponentModel[]{request.getHeaderManager()});
                }
                catch (UnknownHostException uhe)
                {
  @@ -297,26 +305,36 @@
                }
        }
   
  -     private void writeFromInToOut(InputStream in,OutputStream out) throws 
IOException
  -     {
  -             byte[] buf = new byte[4096];
  -             int x = 0;
  -             try
  -             {
  -                     while((x = in.read(buf)) != -1)
  -                     {
  -                             out.write(buf,0,x);
  +     private void writeToClient(
  +             String server,
  +             int serverPort,
  +             InputStream in,
  +             OutputStream out)
  +             throws IOException {
  +             BufferedInputStream serverIn = null;
  +             BufferedOutputStream serverOut = null;
  +             try {
  +                     int x = 0;
  +                     Socket toServer = new Socket(server, serverPort);
  +                     serverOut = new 
BufferedOutputStream(toServer.getOutputStream());
  +                     serverIn = new BufferedInputStream(toServer.getInputStream());
  +                     while ((x = in.read()) != -1) {
  +                             serverOut.write(x);
                        }
  -             }
  -             finally
  -             {
  -                     try
  -                     {
  -                             in.close();
  +                     serverOut.flush();
  +                     while ((x = serverIn.read()) != -1) {
  +                             out.write(x);
                        }
  -                     catch (Exception ex)
  -                     {}
                        out.flush();
  +             } catch (IOException e) {
  +                     e.printStackTrace();
  +             } finally {
  +                     try {
  +                             in.close();
  +                             out.close();
  +                             serverIn.close();
  +                             serverOut.close();
  +                     } catch (Exception ex) {}
                }
        }
   
  
  
  
  1.13      +12 -9     
jakarta-jmeter/src/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
  
  Index: ProxyControl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/org/apache/jmeter/protocol/http/proxy/ProxyControl.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- ProxyControl.java 6 Mar 2002 03:51:36 -0000       1.12
  +++ ProxyControl.java 28 Apr 2002 16:40:40 -0000      1.13
  @@ -78,7 +78,7 @@
    *  Apache Foundation
    *
    *@author     Michael Stover
  - *@created    $Date: 2002/03/06 03:51:36 $
  + *@created    $Date: 2002/04/28 16:40:40 $
    *@version    1.0
    ***********************************************************/
   
  @@ -249,11 +249,12 @@
         *
         *@param  config  !ToDo (Parameter description)
         ***********************************************************/
  -     public void deliverUrlConfig(UrlConfig config)
  +     public void deliverUrlConfig(UrlConfig config,
  +                     JMeterComponentModel[] subConfigs)
        {
                if (filterUrl(config))
                {
  -                     placeConfigElement(config);
  +                     placeConfigElement(config,subConfigs);
                }
        }
   
  @@ -297,7 +298,8 @@
                return ok;
        }
   
  -     private void placeConfigElement(UrlConfig config)
  +     private void placeConfigElement(UrlConfig config,
  +                     JMeterComponentModel[] subConfigs)
        {
                UrlConfig urlConfig = null;
                JMeterTreeModel treeModel = GuiPackage.getInstance().getTreeModel();
  @@ -328,10 +330,6 @@
                                        }
                                }
                        }
  -                     System.out.println("urlConfig.getDomain = 
"+urlConfig.getDomain());
  -                     System.out.println("config.getDomain = "+config.getDomain());
  -                     System.out.println("urlConfig.getPath = "+urlConfig.getPath());
  -                     System.out.println("config.getPath = "+config.getPath());
                        if(urlConfig == null || (urlConfig.getDomain() == null ||
                                        urlConfig.getDomain().equals("") ||
                                        
urlConfig.getDomain().equals(config.getDomain())) &&
  @@ -353,7 +351,12 @@
                                test.setDefaultUrl(config);
                                try
                                {
  -                                     treeModel.addComponent(test,node);
  +                                     JMeterTreeNode newNode = 
treeModel.addComponent(test,node);
  +                                     for(int i = 0;subConfigs != null &&i < 
subConfigs.length;
  +                                                     i++)
  +                                     {
  +                                             
treeModel.addComponent(subConfigs[i],newNode);
  +                                     }
                                }
                                catch(IllegalUserActionException e)
                                {
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to