changeset 1197:886e14903c1e

better Content-Type handling
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 27 Feb 2018 01:35:09 -0700
parents 44491798e431
children 9d3835e88204
files src/luan/webserver/Connection.java src/luan/webserver/RequestParser.java
diffstat 2 files changed, 18 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/luan/webserver/Connection.java	Mon Feb 26 21:06:28 2018 -0700
+++ b/src/luan/webserver/Connection.java	Tue Feb 27 01:35:09 2018 -0700
@@ -60,7 +60,7 @@
 						}
 					}
 					String rawHead = new String(a,0,endOfHeader);
-//System.out.println(rawHead);
+					//System.out.println(rawHead);
 					request.rawHead = rawHead;
 					RequestParser parser = new RequestParser(request);
 					parser.parseHead();
@@ -79,21 +79,17 @@
 							size += n;
 						}
 						request.body = body;
-//System.out.println(new String(request.body));
+						//System.out.println(new String(request.body));
 					}
 	
 					String contentType = (String)request.headers.get("content-type");
 					if( contentType != null ) {
-						if( request.body == null ) {
-							logger.error("body is null\n"+request.rawHead);
+						if( "application/x-www-form-urlencoded".equals(contentType) ) {
+							parser.parseUrlencoded();
+						} else if( contentType.startsWith("multipart/form-data;") ) {
+							parser.parseMultipart();
 						} else {
-							if( "application/x-www-form-urlencoded".equals(contentType) ) {
-								parser.parseUrlencoded();
-							} else if( contentType.startsWith("multipart/form-data;") ) {
-								parser.parseMultipart();
-							} else {
-								logger.error("unknown content type: "+contentType);
-							}
+							logger.warn("unknown content type: "+contentType);
 						}
 					}
 				}
--- a/src/luan/webserver/RequestParser.java	Mon Feb 26 21:06:28 2018 -0700
+++ b/src/luan/webserver/RequestParser.java	Tue Feb 27 01:35:09 2018 -0700
@@ -2,11 +2,14 @@
 
 import java.util.List;
 import java.util.ArrayList;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import luan.lib.parser.Parser;
 import luan.lib.parser.ParseException;
 
 
 final class RequestParser {
+	private static final Logger logger = LoggerFactory.getLogger(Connection.class);
 	private final Request request;
 	private Parser parser;
 
@@ -15,6 +18,10 @@
 	}
 
 	void parseUrlencoded() throws ParseException {
+		if( request.body == null ) {
+			logger.error("body is null\n"+request.rawHead);
+			return;
+		}
 		this.parser = new Parser(Util.toString(request.body));
 		parseQuery();
 		require( parser.endOfInput() );
@@ -187,6 +194,10 @@
 	private static final String contentTypeStart = "multipart/form-data; boundary=";
 
 	void parseMultipart() throws ParseException {
+		if( request.body == null ) {
+			logger.error("body is null\n"+request.rawHead);
+			return;
+		}
 		String contentType = (String)request.headers.get("content-type");
 		if( !contentType.startsWith(contentTypeStart) )
 			throw new RuntimeException(contentType);