[Httpunit-commit] CVS: httpunit/src/com/meterware/pseudoserver HttpRequest.java,1.6,1.7 PseudoServer
Brought to you by:
russgold
|
From: Russell G. <rus...@us...> - 2003-09-30 00:16:52
|
Update of /cvsroot/httpunit/httpunit/src/com/meterware/pseudoserver
In directory sc8-pr-cvs1:/tmp/cvs-serv22169/src/com/meterware/pseudoserver
Modified Files:
HttpRequest.java PseudoServer.java PseudoServlet.java
ReceivedHttpMessage.java
Log Message:
Handle message terminator for chunked encoding
Index: HttpRequest.java
===================================================================
RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/pseudoserver/HttpRequest.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- HttpRequest.java 17 Sep 2003 01:21:15 -0000 1.6
+++ HttpRequest.java 30 Sep 2003 00:15:05 -0000 1.7
@@ -31,7 +31,7 @@
/**
* Represents a single HTTP request, extracted from the input stream.
*/
-class HttpRequest extends ReceivedHttpMessage {
+public class HttpRequest extends ReceivedHttpMessage {
private String _protocol;
private String _command;
@@ -44,7 +44,7 @@
}
- protected void interpretMessageHeader( String messageHeader ) {
+ void interpretMessageHeader( String messageHeader ) {
StringTokenizer st = new StringTokenizer( messageHeader );
_command = st.nextToken();
_uri = st.nextToken();
@@ -52,21 +52,31 @@
}
- protected void appendMessageHeader( StringBuffer sb ) {
+ void appendMessageHeader( StringBuffer sb ) {
sb.append( _command ).append( ' ' ).append( _uri ).append( ' ' ).append( _protocol );
}
- String getCommand() {
+ /**
+ * Returns the command associated with this request.
+ */
+ public String getCommand() {
return _command;
}
- String getURI() {
+
+ /**
+ * Returns the URI specified in the message header for this request.
+ */
+ public String getURI() {
return _uri;
}
- String getProtocol() {
+ /**
+ * Returns the protocol string specified in the message header for this request.
+ */
+ public String getProtocol() {
return _protocol;
}
@@ -75,11 +85,20 @@
* Returns the parameter with the specified name. If no such parameter exists, will
* return null.
**/
- String[] getParameter( String name ) {
+ public String[] getParameter( String name ) {
if (_parameters == null) {
- _parameters = readParameters( new String( getBody() ) );
+ if (_command.equalsIgnoreCase( "GET" ) || _command.equalsIgnoreCase( "HEAD" )) {
+ _parameters = readParameters( getParameterString( _uri ) );
+ } else {
+ _parameters = readParameters( new String( getBody() ) );
+ }
}
return (String[]) _parameters.get( name );
+ }
+
+
+ private String getParameterString( String uri ) {
+ return uri.indexOf( '?' ) < 0 ? "" : uri.substring( uri.indexOf( '?' )+1 );
}
Index: PseudoServer.java
===================================================================
RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/pseudoserver/PseudoServer.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- PseudoServer.java 17 Sep 2003 01:21:15 -0000 1.12
+++ PseudoServer.java 30 Sep 2003 00:15:05 -0000 1.13
@@ -327,6 +327,7 @@
private WebResource getResource( HttpRequest request ) throws IOException {
Object resource = _resources.get( request.getURI() );
+ if (resource == null) resource = _resources.get( withoutParameters( request.getURI() ) );
if (request.getCommand().equals( "GET" ) && resource instanceof WebResource) {
return (WebResource) resource;
@@ -361,6 +362,11 @@
} else {
return null;
}
+ }
+
+
+ private String withoutParameters( String uri ) {
+ return uri.indexOf( '?' ) < 0 ? uri : uri.substring( 0, uri.indexOf( '?' ) );
}
Index: PseudoServlet.java
===================================================================
RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/pseudoserver/PseudoServlet.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- PseudoServlet.java 17 Sep 2003 01:21:15 -0000 1.4
+++ PseudoServlet.java 30 Sep 2003 00:15:05 -0000 1.5
@@ -73,7 +73,7 @@
void init( HttpRequest requestStream ) {
- _requestStream = requestStream;
+ _request = requestStream;
}
@@ -81,7 +81,7 @@
* Returns the header with the specified name. If no such header exists, will return null.
**/
protected String getHeader( String name ) {
- return _requestStream.getHeader( name );
+ return _request.getHeader( name );
}
@@ -90,7 +90,7 @@
* will return null.
**/
protected String[] getParameter( String name ) {
- return _requestStream.getParameter( name );
+ return _request.getParameter( name );
}
@@ -98,21 +98,21 @@
* Returns a reader for the body of the request.
**/
protected Reader getReader() {
- return _requestStream.getReader();
+ return _request.getReader();
}
protected byte[] getBody() {
- return _requestStream.getBody();
+ return _request.getBody();
}
protected HttpRequest getRequest() {
- return _requestStream;
+ return _request;
}
- private HttpRequest _requestStream;
+ private HttpRequest _request;
}
Index: ReceivedHttpMessage.java
===================================================================
RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/pseudoserver/ReceivedHttpMessage.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ReceivedHttpMessage.java 17 Sep 2003 01:21:15 -0000 1.1
+++ ReceivedHttpMessage.java 30 Sep 2003 00:15:05 -0000 1.2
@@ -78,7 +78,7 @@
}
- protected void appendContents( StringBuffer sb ) {
+ void appendContents( StringBuffer sb ) {
for (Enumeration e = _headers.keys(); e.hasMoreElements();) {
Object key = e.nextElement();
sb.append( " " ).append( key ).append( ": " ).append( _headers.get( key ) ).append( "\n" );
@@ -106,6 +106,7 @@
if ("chunked".equalsIgnoreCase( getHeader( "Transfer-Encoding") )) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while (getNextChunkLength( inputStream ) > 0) { baos.write( readDelimitedChunk( inputStream ) ); }
+ flushChunkTrailer( inputStream );
_requestBody = baos.toByteArray();
} else {
_requestBody = new byte[ getContentLength() ];
@@ -115,6 +116,12 @@
}
+ private void flushChunkTrailer( InputStream inputStream ) throws IOException {
+ byte[] line;
+ do { line = readDelimitedChunk( inputStream ); } while (line.length > 0);
+ }
+
+
private int getNextChunkLength( InputStream inputStream ) throws IOException {
try {
return Integer.parseInt( readHeaderLine( inputStream ) );
@@ -155,10 +162,10 @@
}
- protected abstract void appendMessageHeader( StringBuffer sb );
+ abstract void appendMessageHeader( StringBuffer sb );
- protected abstract void interpretMessageHeader( String messageHeader );
+ abstract void interpretMessageHeader( String messageHeader );
}
|