comparison 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
comparison
equal deleted inserted replaced
1149:1b7c20e20ca7 1150:0842b9b570f8
85 requestTbl.rawPut("port",request.getServerPort()); 85 requestTbl.rawPut("port",request.getServerPort());
86 86
87 LuanTable headersTbl = (LuanTable)requestTbl.rawGet("headers"); 87 LuanTable headersTbl = (LuanTable)requestTbl.rawGet("headers");
88 for( Enumeration<String> enKeys = request.getHeaderNames(); enKeys.hasMoreElements(); ) { 88 for( Enumeration<String> enKeys = request.getHeaderNames(); enKeys.hasMoreElements(); ) {
89 String key = enKeys.nextElement(); 89 String key = enKeys.nextElement();
90 LuanTable values = new LuanTable(); 90 List<String> values = new ArrayList<String>();
91 for( Enumeration<String> en = request.getHeaders(key); en.hasMoreElements(); ) { 91 for( Enumeration<String> en = request.getHeaders(key); en.hasMoreElements(); ) {
92 values.rawPut(values.rawLength()+1,en.nextElement()); 92 values.add(en.nextElement());
93 } 93 }
94 key = toLuanHeaderName(key); 94 int size = values.size();
95 headersTbl.rawPut(key,values); 95 if(size==0) throw new RuntimeException();
96 key = key.toLowerCase();
97 Object value = size==1 ? values.get(0) : new LuanTable(values);
98 headersTbl.rawPut(key,value);
96 } 99 }
97 100
98 LuanTable parametersTbl = (LuanTable)requestTbl.rawGet("parameters"); 101 LuanTable parametersTbl = (LuanTable)requestTbl.rawGet("parameters");
99 String contentType = request.getContentType(); 102 String contentType = request.getContentType();
100 if( contentType==null || !contentType.startsWith("multipart/form-data") ) { 103 if( contentType==null || !contentType.startsWith("multipart/form-data") ) {
197 int status = Luan.asInteger(responseTbl.rawGet("status")); 200 int status = Luan.asInteger(responseTbl.rawGet("status"));
198 response.setStatus(status); 201 response.setStatus(status);
199 LuanTable responseHeaders = (LuanTable)responseTbl.rawGet("headers"); 202 LuanTable responseHeaders = (LuanTable)responseTbl.rawGet("headers");
200 for( Map.Entry<Object,Object> entry : responseHeaders.rawIterable() ) { 203 for( Map.Entry<Object,Object> entry : responseHeaders.rawIterable() ) {
201 String name = (String)entry.getKey(); 204 String name = (String)entry.getKey();
202 name = toHttpHeaderName(name); 205 Object val = entry.getValue();
203 LuanTable values = (LuanTable)entry.getValue(); 206 if( val instanceof LuanTable ) {
204 for( Object value : values.asList() ) { 207 LuanTable values = (LuanTable)val;
205 if( value instanceof String ) { 208 for( Object value : values.asList() ) {
206 response.setHeader(name,(String)value); 209 setResponse(response,name,value);
207 continue;
208 } 210 }
209 Integer i = Luan.asInteger(value); 211 } else {
210 if( i != null ) { 212 setResponse(response,name,val);
211 response.setIntHeader(name,i); 213 }
212 continue; 214 }
213 } 215 }
214 throw new IllegalArgumentException("value must be string or integer for headers table"); 216
215 } 217 private static void setResponse(HttpServletResponse response,String name,Object value) throws LuanException {
216 } 218 if( value instanceof String ) {
219 response.setHeader(name,(String)value);
220 return;
221 }
222 Integer i = Luan.asInteger(value);
223 if( i != null ) {
224 response.setIntHeader(name,i);
225 return;
226 }
227 throw new IllegalArgumentException("value must be string or integer for headers table");
217 } 228 }
218 229
219 230
220 231
221 // static utils 232 // static utils
222
223 public static String toLuanHeaderName(String httpName) {
224 return httpName.toLowerCase().replace('-','_');
225 }
226
227 public static String toHttpHeaderName(String luanName) {
228 /*
229 StringBuilder buf = new StringBuilder();
230 boolean capitalize = true;
231 char[] a = luanName.toCharArray();
232 for( int i=0; i<a.length; i++ ) {
233 char c = a[i];
234 if( c == '_' ) {
235 a[i] = '-';
236 capitalize = true;
237 } else if( capitalize ) {
238 a[i] = Character.toUpperCase(c);
239 capitalize = false;
240 }
241 }
242 return String.valueOf(a);
243 */
244 return LuanUrl.toHttpHeaderName(luanName);
245 }
246 233
247 private static String escape(String value) { 234 private static String escape(String value) {
248 return value.replaceAll(";", "%3B"); 235 return value.replaceAll(";", "%3B");
249 } 236 }
250 237