Mercurial Hosting > luan
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); } }