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]>