diff src/luan/webserver/Connection.java @ 1144:ae0a048f3bc7

webserver - handle POST params
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 31 Jan 2018 00:29:50 -0700
parents 0f59eab45f3d
children 12ececf30597
line wrap: on
line diff
--- a/src/luan/webserver/Connection.java	Tue Jan 30 23:53:28 2018 -0700
+++ b/src/luan/webserver/Connection.java	Wed Jan 31 00:29:50 2018 -0700
@@ -26,39 +26,68 @@
 
 	private void handle() {
 		try {
-			InputStream in = socket.getInputStream();
-			byte[] a = new byte[8192];
-			int endOfHeader;
-			int size = 0;
-			int left = a.length;
-			outer: while(true) {
-				int n = in.read(a,size,left);
-				if( n == -1 ) {
-					if( size == 0 ) {
-						socket.close();
-						return;
+			Request request = new Request();
+			{
+				InputStream in = socket.getInputStream();
+				byte[] a = new byte[8192];
+				int endOfHeader;
+				int size = 0;
+				int left = a.length;
+				outer: while(true) {
+					int n = in.read(a,size,left);
+					if( n == -1 ) {
+						if( size == 0 ) {
+							socket.close();
+							return;
+						}
+						throw new IOException("unexpected end of input at "+size);
 					}
-					throw new IOException("unexpected end of input at "+size);
-				}
-				size += n;
-				for( int i=0; i<=size-4; i++ ) {
-					if( a[i]=='\r' && a[i+1]=='\n' && a[i+2]=='\r' && a[i+3]=='\n' ) {
-						endOfHeader = i + 4;
-						break outer;
+					size += n;
+					for( int i=0; i<=size-4; i++ ) {
+						if( a[i]=='\r' && a[i+1]=='\n' && a[i+2]=='\r' && a[i+3]=='\n' ) {
+							endOfHeader = i + 4;
+							break outer;
+						}
+					}
+					left -= n;
+					if( left == 0 ) {
+						byte[] a2 = new byte[2*a.length];
+						System.arraycopy(a,0,a2,0,size);
+						a = a2;
+						left = a.length - size;
 					}
 				}
-				left -= n;
-				if( left == 0 ) {
-					byte[] a2 = new byte[2*a.length];
-					System.arraycopy(a,0,a2,0,size);
-					a = a2;
-					left = a.length - size;
+				String rawHead = new String(a,0,endOfHeader);
+//System.out.println(rawHead);
+				request.rawHead = rawHead;
+				RequestParser parser = new RequestParser(request);
+				parser.parseHead();
+	
+				String lenStr = request.headers.get("Content-Length");
+				if( lenStr != null ) {
+					int len = Integer.parseInt(lenStr);
+					byte[] body = new byte[len];
+					size -= endOfHeader;
+					System.arraycopy(a,endOfHeader,body,0,size);
+					while( size < len ) {
+						int n = in.read(body,size,len-size);
+						if( n == -1 ) {
+							throw new IOException("unexpected end of input at "+size);
+						}
+						size += n;
+					}
+					request.body = new String(body);
+//System.out.println(request.body);
+				}
+	
+				if( request.method.equals("POST") ) {
+					if( request.body == null ) {
+						logger.error("post body is null");
+					} else {
+						parser.parsePost();
+					}
 				}
 			}
-			String rawRequest = new String(a,0,endOfHeader);
-//System.out.println(rawRequest);
-			Request request = RequestHeadParser.parse(rawRequest);
-//System.out.println(request.headers);
 
 			Response response = server.handler.handle(request);
 			response.headers.put("Connection","close");
@@ -73,7 +102,7 @@
 		} catch(IOException e) {
 			logger.info("",e);
 		} catch(ParseException e) {
-			logger.info("",e);
+			logger.warn("",e);
 		}
 	}