Mercurial Hosting > luan
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 |