Mercurial Hosting > luan
diff src/luan/modules/http/jetty/HttpServicer.java @ 1150:0842b9b570f8
change http headers interface
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 04 Feb 2018 18:03:37 -0700 |
parents | d30d400fd43d |
children | 21d157b153fe |
line wrap: on
line diff
--- a/src/luan/modules/http/jetty/HttpServicer.java Sun Feb 04 17:23:20 2018 -0700 +++ b/src/luan/modules/http/jetty/HttpServicer.java Sun Feb 04 18:03:37 2018 -0700 @@ -87,12 +87,15 @@ LuanTable headersTbl = (LuanTable)requestTbl.rawGet("headers"); for( Enumeration<String> enKeys = request.getHeaderNames(); enKeys.hasMoreElements(); ) { String key = enKeys.nextElement(); - LuanTable values = new LuanTable(); + List<String> values = new ArrayList<String>(); for( Enumeration<String> en = request.getHeaders(key); en.hasMoreElements(); ) { - values.rawPut(values.rawLength()+1,en.nextElement()); + values.add(en.nextElement()); } - key = toLuanHeaderName(key); - headersTbl.rawPut(key,values); + int size = values.size(); + if(size==0) throw new RuntimeException(); + key = key.toLowerCase(); + Object value = size==1 ? values.get(0) : new LuanTable(values); + headersTbl.rawPut(key,value); } LuanTable parametersTbl = (LuanTable)requestTbl.rawGet("parameters"); @@ -199,51 +202,35 @@ LuanTable responseHeaders = (LuanTable)responseTbl.rawGet("headers"); for( Map.Entry<Object,Object> entry : responseHeaders.rawIterable() ) { String name = (String)entry.getKey(); - name = toHttpHeaderName(name); - LuanTable values = (LuanTable)entry.getValue(); - for( Object value : values.asList() ) { - if( value instanceof String ) { - response.setHeader(name,(String)value); - continue; + Object val = entry.getValue(); + if( val instanceof LuanTable ) { + LuanTable values = (LuanTable)val; + for( Object value : values.asList() ) { + setResponse(response,name,value); } - Integer i = Luan.asInteger(value); - if( i != null ) { - response.setIntHeader(name,i); - continue; - } - throw new IllegalArgumentException("value must be string or integer for headers table"); + } else { + setResponse(response,name,val); } } } + private static void setResponse(HttpServletResponse response,String name,Object value) throws LuanException { + if( value instanceof String ) { + response.setHeader(name,(String)value); + return; + } + Integer i = Luan.asInteger(value); + if( i != null ) { + response.setIntHeader(name,i); + return; + } + throw new IllegalArgumentException("value must be string or integer for headers table"); + } + // static utils - public static String toLuanHeaderName(String httpName) { - return httpName.toLowerCase().replace('-','_'); - } - - public static String toHttpHeaderName(String luanName) { -/* - StringBuilder buf = new StringBuilder(); - boolean capitalize = true; - char[] a = luanName.toCharArray(); - for( int i=0; i<a.length; i++ ) { - char c = a[i]; - if( c == '_' ) { - a[i] = '-'; - capitalize = true; - } else if( capitalize ) { - a[i] = Character.toUpperCase(c); - capitalize = false; - } - } - return String.valueOf(a); -*/ - return LuanUrl.toHttpHeaderName(luanName); - } - private static String escape(String value) { return value.replaceAll(";", "%3B"); }