Mercurial Hosting > luan
annotate src/luan/modules/http/HttpServicer.java @ 1000:32d4b569567c
simplify handle()
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 19 Oct 2016 04:22:51 -0600 |
parents | 3dcc52e17535 |
children | 0d884377e923 |
rev | line source |
---|---|
494
2b9bc97f0439
change luan:web to luan:http
Franklin Schmidt <fschmidt@gmail.com>
parents:
493
diff
changeset
|
1 package luan.modules.http; |
76
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
2 |
357
496d61b1fb5a
implement Http.request.parts
Franklin Schmidt <fschmidt@gmail.com>
parents:
325
diff
changeset
|
3 import java.io.InputStream; |
496d61b1fb5a
implement Http.request.parts
Franklin Schmidt <fschmidt@gmail.com>
parents:
325
diff
changeset
|
4 import java.io.BufferedInputStream; |
136
7e160d2f6d9c
update HttpLib, untested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
135
diff
changeset
|
5 import java.io.PrintWriter; |
76
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
6 import java.io.IOException; |
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
7 import java.util.Map; |
810 | 8 import java.util.LinkedHashMap; |
76
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
9 import java.util.Set; |
357
496d61b1fb5a
implement Http.request.parts
Franklin Schmidt <fschmidt@gmail.com>
parents:
325
diff
changeset
|
10 import java.util.List; |
496d61b1fb5a
implement Http.request.parts
Franklin Schmidt <fschmidt@gmail.com>
parents:
325
diff
changeset
|
11 import java.util.ArrayList; |
76
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
12 import java.util.Arrays; |
222
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
221
diff
changeset
|
13 import java.util.Iterator; |
89
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
14 import java.util.Enumeration; |
626
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
15 import java.util.concurrent.Executor; |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
16 import java.util.concurrent.Executors; |
810 | 17 import java.util.concurrent.atomic.AtomicInteger; |
76
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
18 import javax.servlet.ServletOutputStream; |
357
496d61b1fb5a
implement Http.request.parts
Franklin Schmidt <fschmidt@gmail.com>
parents:
325
diff
changeset
|
19 import javax.servlet.ServletException; |
89
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
20 import javax.servlet.http.Cookie; |
1000 | 21 import org.eclipse.jetty.server.Request; |
76
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
22 import javax.servlet.http.HttpServletResponse; |
357
496d61b1fb5a
implement Http.request.parts
Franklin Schmidt <fschmidt@gmail.com>
parents:
325
diff
changeset
|
23 import javax.servlet.http.Part; |
436 | 24 import org.slf4j.Logger; |
25 import org.slf4j.LoggerFactory; | |
357
496d61b1fb5a
implement Http.request.parts
Franklin Schmidt <fschmidt@gmail.com>
parents:
325
diff
changeset
|
26 import org.eclipse.jetty.util.MultiPartInputStream; |
140
f4ce03ff6b2f
add per_session for Http
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
139
diff
changeset
|
27 import luan.Luan; |
76
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
28 import luan.LuanState; |
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
29 import luan.LuanFunction; |
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
30 import luan.LuanException; |
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
31 import luan.LuanTable; |
796 | 32 //import luan.LuanPropertyMeta; |
781
fbbdd369a13a
rename DeepCloner to LuanCloner
Franklin Schmidt <fschmidt@gmail.com>
parents:
775
diff
changeset
|
33 import luan.LuanCloner; |
169
9169581dc8fc
add luan.modules.web
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
168
diff
changeset
|
34 import luan.modules.PackageLuan; |
9169581dc8fc
add luan.modules.web
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
168
diff
changeset
|
35 import luan.modules.IoLuan; |
222
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
221
diff
changeset
|
36 import luan.modules.TableLuan; |
357
496d61b1fb5a
implement Http.request.parts
Franklin Schmidt <fschmidt@gmail.com>
parents:
325
diff
changeset
|
37 import luan.modules.Utils; |
725
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
723
diff
changeset
|
38 import luan.modules.url.LuanUrl; |
76
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
39 |
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
40 |
251
705d14f4d8ee
start web testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
249
diff
changeset
|
41 public final class HttpServicer { |
436 | 42 private static final Logger logger = LoggerFactory.getLogger(HttpServicer.class); |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
173
diff
changeset
|
43 |
810 | 44 public static long sessionTimeout = 60*60*1000L; // one hour |
45 private static AtomicInteger sessionCounter = new AtomicInteger(); | |
46 private static Map<String,LuanState> sessionMap = new LinkedHashMap<String,LuanState>() { | |
814 | 47 @Override protected boolean removeEldestEntry(Map.Entry<String,LuanState> eldest) { |
810 | 48 return (Long)eldest.getValue().registry().get("sessionTimeout") < System.currentTimeMillis(); |
49 } | |
50 }; | |
51 | |
1000 | 52 public static boolean service(LuanState luan,Request request,HttpServletResponse response,String modName) |
136
7e160d2f6d9c
update HttpLib, untested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
135
diff
changeset
|
53 throws LuanException |
76
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
54 { |
138
06159094b802
replace WebRun.java with web_run.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
136
diff
changeset
|
55 LuanFunction fn; |
136
7e160d2f6d9c
update HttpLib, untested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
135
diff
changeset
|
56 synchronized(luan) { |
798 | 57 PackageLuan.enableLoad(luan,"luan:http/Http.luan",modName); |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
646
diff
changeset
|
58 LuanTable module = (LuanTable)PackageLuan.require(luan,"luan:http/Http.luan"); |
504
dbdf4b8193a8
add Http.per_session()
Franklin Schmidt <fschmidt@gmail.com>
parents:
500
diff
changeset
|
59 LuanTable per_session_pages = (LuanTable)module.rawGet("per_session_pages"); |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
173
diff
changeset
|
60 Object mod = PackageLuan.load(luan,modName); |
799
9c13a15a4002
Package.load() now returns false instead of null, and caches the result. This cleans up the luan.isLocked issues.
Franklin Schmidt <fschmidt@gmail.com>
parents:
798
diff
changeset
|
61 if( mod.equals(Boolean.FALSE) ) |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
173
diff
changeset
|
62 return false; |
505
7bc63886d4f2
web page modules now return a function
Franklin Schmidt <fschmidt@gmail.com>
parents:
504
diff
changeset
|
63 if( !(mod instanceof LuanFunction) ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
64 throw new LuanException( "module '"+modName+"' must return a function" ); |
504
dbdf4b8193a8
add Http.per_session()
Franklin Schmidt <fschmidt@gmail.com>
parents:
500
diff
changeset
|
65 if( Boolean.TRUE.equals(per_session_pages.rawGet(mod)) ) { |
810 | 66 LuanState sessionLuan = null; |
67 Cookie cookie = getCookie(request,"session"); | |
68 if( cookie != null ) | |
69 sessionLuan = sessionMap.get(cookie.getValue()); | |
140
f4ce03ff6b2f
add per_session for Http
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
139
diff
changeset
|
70 if( sessionLuan!=null ) { |
f4ce03ff6b2f
add per_session for Http
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
139
diff
changeset
|
71 luan = sessionLuan; |
f4ce03ff6b2f
add per_session for Http
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
139
diff
changeset
|
72 } else { |
785
d69d3c51c44e
more work on incremental cloning
Franklin Schmidt <fschmidt@gmail.com>
parents:
782
diff
changeset
|
73 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE); |
782
655280eab1e2
start limited cloning
Franklin Schmidt <fschmidt@gmail.com>
parents:
781
diff
changeset
|
74 luan = (LuanState)cloner.clone(luan); |
810 | 75 luan.registry().put( "sessionTimeout", System.currentTimeMillis() + sessionTimeout ); |
76 String key = Integer.toString(sessionCounter.incrementAndGet()); | |
77 setCookie(request,response,"session",key,false,null); | |
78 sessionMap.put(key,luan); | |
140
f4ce03ff6b2f
add per_session for Http
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
139
diff
changeset
|
79 } |
505
7bc63886d4f2
web page modules now return a function
Franklin Schmidt <fschmidt@gmail.com>
parents:
504
diff
changeset
|
80 fn = (LuanFunction)PackageLuan.require(luan,modName); |
140
f4ce03ff6b2f
add per_session for Http
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
139
diff
changeset
|
81 } else { |
787
c49980cdece6
use incremental cloning to serve web pages
Franklin Schmidt <fschmidt@gmail.com>
parents:
785
diff
changeset
|
82 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL); |
782
655280eab1e2
start limited cloning
Franklin Schmidt <fschmidt@gmail.com>
parents:
781
diff
changeset
|
83 luan = (LuanState)cloner.clone(luan); |
505
7bc63886d4f2
web page modules now return a function
Franklin Schmidt <fschmidt@gmail.com>
parents:
504
diff
changeset
|
84 fn = (LuanFunction)cloner.get(mod); |
140
f4ce03ff6b2f
add per_session for Http
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
139
diff
changeset
|
85 } |
136
7e160d2f6d9c
update HttpLib, untested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
135
diff
changeset
|
86 } |
139
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
138
diff
changeset
|
87 |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
646
diff
changeset
|
88 LuanTable module = (LuanTable)PackageLuan.require(luan,"luan:http/Http.luan"); |
497
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
89 |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
90 // request |
574
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
91 LuanFunction newRequestFn = (LuanFunction)module.rawGet("new_request"); |
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
92 LuanTable requestTbl = (LuanTable)newRequestFn.call(luan); |
497
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
93 module.rawPut("request",requestTbl); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
94 requestTbl.rawPut("java",request); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
95 requestTbl.rawPut("method",request.getMethod()); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
96 requestTbl.rawPut("path",request.getRequestURI()); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
97 requestTbl.rawPut("protocol",request.getProtocol()); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
98 requestTbl.rawPut("scheme",request.getScheme()); |
732
d7371dc8c2e7
add Http.request.port
Franklin Schmidt <fschmidt@gmail.com>
parents:
725
diff
changeset
|
99 requestTbl.rawPut("port",request.getServerPort()); |
497
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
100 |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
101 LuanTable headersTbl = (LuanTable)requestTbl.rawGet("headers"); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
102 for( Enumeration<String> enKeys = request.getHeaderNames(); enKeys.hasMoreElements(); ) { |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
103 String key = enKeys.nextElement(); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
104 LuanTable values = new LuanTable(); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
105 for( Enumeration<String> en = request.getHeaders(key); en.hasMoreElements(); ) { |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
106 values.rawPut(values.rawLength()+1,en.nextElement()); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
107 } |
500
ab9c2afefb47
add response.binary_writer
Franklin Schmidt <fschmidt@gmail.com>
parents:
499
diff
changeset
|
108 key = toLuanHeaderName(key); |
497
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
109 headersTbl.rawPut(key,values); |
76
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
110 } |
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
111 |
497
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
112 LuanTable parametersTbl = (LuanTable)requestTbl.rawGet("parameters"); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
113 String contentType = request.getContentType(); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
114 if( contentType==null || !contentType.startsWith("multipart/form-data") ) { |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
115 for( Map.Entry<String,String[]> entry : request.getParameterMap().entrySet() ) { |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
116 parametersTbl.rawPut(entry.getKey(),new LuanTable(Arrays.asList(entry.getValue()))); |
222
b76fcb72d97d
add AbstractLuanTable and improve HttpLuan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
221
diff
changeset
|
117 } |
497
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
118 } else { // multipart |
361
0581238084ad
fix HTTP parameters for multipart
Franklin Schmidt <fschmidt@gmail.com>
parents:
359
diff
changeset
|
119 try { |
0581238084ad
fix HTTP parameters for multipart
Franklin Schmidt <fschmidt@gmail.com>
parents:
359
diff
changeset
|
120 InputStream in = new BufferedInputStream(request.getInputStream()); |
859 | 121 final MultiPartInputStream mpis = new MultiPartInputStream(in,contentType); |
361
0581238084ad
fix HTTP parameters for multipart
Franklin Schmidt <fschmidt@gmail.com>
parents:
359
diff
changeset
|
122 for( Part p : mpis.getParts() ) { |
0581238084ad
fix HTTP parameters for multipart
Franklin Schmidt <fschmidt@gmail.com>
parents:
359
diff
changeset
|
123 final MultiPartInputStream.MultiPart part = (MultiPartInputStream.MultiPart)p; |
0581238084ad
fix HTTP parameters for multipart
Franklin Schmidt <fschmidt@gmail.com>
parents:
359
diff
changeset
|
124 String name = part.getName(); |
725
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
723
diff
changeset
|
125 /* |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
723
diff
changeset
|
126 System.out.println("name = "+name); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
723
diff
changeset
|
127 System.out.println("getContentType = "+part.getContentType()); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
723
diff
changeset
|
128 System.out.println("getHeaderNames = "+part.getHeaderNames()); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
723
diff
changeset
|
129 System.out.println("content-disposition = "+part.getHeader("content-disposition")); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
723
diff
changeset
|
130 System.out.println(); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
723
diff
changeset
|
131 */ |
362
9dbf3433f70f
remove Http.request.get_parameter_values and Http.request.parts;
Franklin Schmidt <fschmidt@gmail.com>
parents:
361
diff
changeset
|
132 Object value; |
361
0581238084ad
fix HTTP parameters for multipart
Franklin Schmidt <fschmidt@gmail.com>
parents:
359
diff
changeset
|
133 String filename = part.getContentDispositionFilename(); |
0581238084ad
fix HTTP parameters for multipart
Franklin Schmidt <fschmidt@gmail.com>
parents:
359
diff
changeset
|
134 if( filename == null ) { |
362
9dbf3433f70f
remove Http.request.get_parameter_values and Http.request.parts;
Franklin Schmidt <fschmidt@gmail.com>
parents:
361
diff
changeset
|
135 value = new String(part.getBytes()); |
361
0581238084ad
fix HTTP parameters for multipart
Franklin Schmidt <fschmidt@gmail.com>
parents:
359
diff
changeset
|
136 } else { |
796 | 137 /* |
415
ce8e19567911
make LuanPropertyMeta a singleton
Franklin Schmidt <fschmidt@gmail.com>
parents:
413
diff
changeset
|
138 LuanTable partTbl = LuanPropertyMeta.INSTANCE.newTable(); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
139 partTbl.rawPut("filename",filename); |
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
140 partTbl.rawPut("content_type",part.getContentType()); |
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
141 LuanPropertyMeta.INSTANCE.getters(partTbl).rawPut( "content", new LuanFunction() { |
407
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
405
diff
changeset
|
142 @Override public Object call(LuanState luan,Object[] args) throws LuanException { |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
405
diff
changeset
|
143 try { |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
405
diff
changeset
|
144 InputStream in = part.getInputStream(); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
405
diff
changeset
|
145 byte[] content = Utils.readAll(in); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
405
diff
changeset
|
146 in.close(); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
405
diff
changeset
|
147 return content; |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
405
diff
changeset
|
148 } catch(IOException e) { |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
405
diff
changeset
|
149 throw new RuntimeException(e); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
405
diff
changeset
|
150 } |
357
496d61b1fb5a
implement Http.request.parts
Franklin Schmidt <fschmidt@gmail.com>
parents:
325
diff
changeset
|
151 } |
407
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
405
diff
changeset
|
152 } ); |
796 | 153 */ |
154 LuanTable partTbl = new LuanTable(); | |
155 partTbl.rawPut("filename",filename); | |
156 partTbl.rawPut("content_type",part.getContentType()); | |
157 LuanTable mt = new LuanTable(); | |
158 partTbl.setMetatable(mt); | |
159 mt.rawPut( "__index", new LuanFunction() { | |
160 @Override public Object call(LuanState luan,Object[] args) throws LuanException { | |
161 Object key = args[1]; | |
162 if( "content".equals(key) ) { | |
163 try { | |
164 InputStream in = part.getInputStream(); | |
165 byte[] content = Utils.readAll(in); | |
166 in.close(); | |
167 return content; | |
168 } catch(IOException e) { | |
169 throw new RuntimeException(e); | |
170 } | |
171 } | |
172 return null; | |
173 } | |
174 } ); | |
362
9dbf3433f70f
remove Http.request.get_parameter_values and Http.request.parts;
Franklin Schmidt <fschmidt@gmail.com>
parents:
361
diff
changeset
|
175 value = partTbl; |
9dbf3433f70f
remove Http.request.get_parameter_values and Http.request.parts;
Franklin Schmidt <fschmidt@gmail.com>
parents:
361
diff
changeset
|
176 } |
497
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
177 LuanTable list = (LuanTable)parametersTbl.rawGet(name); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
178 if( list == null ) { |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
179 list = new LuanTable(); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
180 parametersTbl.rawPut(name,list); |
357
496d61b1fb5a
implement Http.request.parts
Franklin Schmidt <fschmidt@gmail.com>
parents:
325
diff
changeset
|
181 } |
514 | 182 list.rawPut(parametersTbl.rawLength()+1,value); |
357
496d61b1fb5a
implement Http.request.parts
Franklin Schmidt <fschmidt@gmail.com>
parents:
325
diff
changeset
|
183 } |
361
0581238084ad
fix HTTP parameters for multipart
Franklin Schmidt <fschmidt@gmail.com>
parents:
359
diff
changeset
|
184 } catch(IOException e) { |
0581238084ad
fix HTTP parameters for multipart
Franklin Schmidt <fschmidt@gmail.com>
parents:
359
diff
changeset
|
185 throw new RuntimeException(e); |
0581238084ad
fix HTTP parameters for multipart
Franklin Schmidt <fschmidt@gmail.com>
parents:
359
diff
changeset
|
186 } catch(ServletException e) { |
0581238084ad
fix HTTP parameters for multipart
Franklin Schmidt <fschmidt@gmail.com>
parents:
359
diff
changeset
|
187 throw new RuntimeException(e); |
357
496d61b1fb5a
implement Http.request.parts
Franklin Schmidt <fschmidt@gmail.com>
parents:
325
diff
changeset
|
188 } |
361
0581238084ad
fix HTTP parameters for multipart
Franklin Schmidt <fschmidt@gmail.com>
parents:
359
diff
changeset
|
189 } |
357
496d61b1fb5a
implement Http.request.parts
Franklin Schmidt <fschmidt@gmail.com>
parents:
325
diff
changeset
|
190 |
497
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
191 LuanTable cookieTbl = (LuanTable)requestTbl.rawGet("cookie"); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
192 for( Cookie cookie : request.getCookies() ) { |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
193 cookieTbl.rawPut( cookie.getName(), unescape(cookie.getValue()) ); |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
194 } |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
195 |
498
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
196 |
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
197 // response |
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
198 LuanTable responseTbl = new LuanTable(); |
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
199 responseTbl.rawPut("java",response); |
574
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
200 LuanFunction newResponseFn = (LuanFunction)module.rawGet("new_response"); |
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
201 newResponseFn.call( luan, new Object[]{responseTbl} ); |
498
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
202 module.rawPut("response",responseTbl); |
497
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
203 |
574
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
204 fn.call(luan); |
626
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
205 handle_run_later(luan); |
497
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
206 return true; |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
207 } |
55f9f74f1e55
Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
496
diff
changeset
|
208 |
568
aa17ad66a370
fix http response headers
Franklin Schmidt <fschmidt@gmail.com>
parents:
514
diff
changeset
|
209 public static void setResponse(LuanTable responseTbl,HttpServletResponse response) throws LuanException { |
498
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
210 int status = Luan.asInteger(responseTbl.rawGet("status")); |
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
211 response.setStatus(status); |
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
212 LuanTable responseHeaders = (LuanTable)responseTbl.rawGet("headers"); |
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
213 for( Map.Entry<Object,Object> entry : responseHeaders.rawIterable() ) { |
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
214 String name = (String)entry.getKey(); |
500
ab9c2afefb47
add response.binary_writer
Franklin Schmidt <fschmidt@gmail.com>
parents:
499
diff
changeset
|
215 name = toHttpHeaderName(name); |
498
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
216 LuanTable values = (LuanTable)entry.getValue(); |
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
217 for( Object value : values.asList() ) { |
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
218 if( value instanceof String ) { |
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
219 response.setHeader(name,(String)value); |
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
220 continue; |
223
a9fe265dbac3
upgrade to jetty 8
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
222
diff
changeset
|
221 } |
498
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
222 Integer i = Luan.asInteger(value); |
223
a9fe265dbac3
upgrade to jetty 8
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
222
diff
changeset
|
223 if( i != null ) { |
a9fe265dbac3
upgrade to jetty 8
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
222
diff
changeset
|
224 response.setIntHeader(name,i); |
498
ee55be414a34
Http.response is now mostly luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
497
diff
changeset
|
225 continue; |
223
a9fe265dbac3
upgrade to jetty 8
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
222
diff
changeset
|
226 } |
a9fe265dbac3
upgrade to jetty 8
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
222
diff
changeset
|
227 throw new IllegalArgumentException("value must be string or integer for headers table"); |
a9fe265dbac3
upgrade to jetty 8
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
222
diff
changeset
|
228 } |
436 | 229 } |
217
a608066395c5
clean up HttpLuan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
230 } |
a608066395c5
clean up HttpLuan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
231 |
89
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
232 |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
233 |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
234 // static utils |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
235 |
500
ab9c2afefb47
add response.binary_writer
Franklin Schmidt <fschmidt@gmail.com>
parents:
499
diff
changeset
|
236 public static String toLuanHeaderName(String httpName) { |
ab9c2afefb47
add response.binary_writer
Franklin Schmidt <fschmidt@gmail.com>
parents:
499
diff
changeset
|
237 return httpName.toLowerCase().replace('-','_'); |
ab9c2afefb47
add response.binary_writer
Franklin Schmidt <fschmidt@gmail.com>
parents:
499
diff
changeset
|
238 } |
ab9c2afefb47
add response.binary_writer
Franklin Schmidt <fschmidt@gmail.com>
parents:
499
diff
changeset
|
239 |
ab9c2afefb47
add response.binary_writer
Franklin Schmidt <fschmidt@gmail.com>
parents:
499
diff
changeset
|
240 public static String toHttpHeaderName(String luanName) { |
723 | 241 /* |
499 | 242 StringBuilder buf = new StringBuilder(); |
243 boolean capitalize = true; | |
244 char[] a = luanName.toCharArray(); | |
245 for( int i=0; i<a.length; i++ ) { | |
246 char c = a[i]; | |
247 if( c == '_' ) { | |
248 a[i] = '-'; | |
249 capitalize = true; | |
250 } else if( capitalize ) { | |
251 a[i] = Character.toUpperCase(c); | |
252 capitalize = false; | |
253 } | |
254 } | |
255 return String.valueOf(a); | |
723 | 256 */ |
257 return LuanUrl.toHttpHeaderName(luanName); | |
499 | 258 } |
259 | |
89
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
260 private static String escape(String value) { |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
261 return value.replaceAll(";", "%3B"); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
262 } |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
263 |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
264 private static String unescape(String value) { |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
265 return value.replaceAll("%3B", ";"); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
266 } |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
267 |
1000 | 268 private static Cookie getCookie(Request request,String name) { |
89
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
269 Cookie[] cookies = request.getCookies(); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
270 if( cookies == null ) |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
271 return null; |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
272 for (Cookie cookie : cookies) { |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
273 if (cookie.getName().equals(name)) |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
274 return cookie; |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
275 } |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
276 return null; |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
277 } |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
278 |
1000 | 279 public static void setCookie(Request request,HttpServletResponse response,String name,String value,boolean isPersistent, String domain) { |
89
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
280 Cookie cookie = getCookie(request,name); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
281 if( cookie==null || !cookie.getValue().equals(value) ) { |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
282 cookie = new Cookie(name, escape(value)); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
283 cookie.setPath("/"); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
284 if (domain != null && domain.length() > 0) |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
285 cookie.setDomain(domain); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
286 if( isPersistent ) |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
287 cookie.setMaxAge(10000000); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
288 response.addCookie(cookie); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
289 } |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
290 } |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
291 |
1000 | 292 public static void removeCookie(Request request, |
89
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
293 HttpServletResponse response, |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
294 String name, |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
295 String domain |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
296 ) { |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
297 Cookie cookie = getCookie(request, name); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
298 if(cookie != null) { |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
299 Cookie delCookie = new Cookie(name, "delete"); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
300 delCookie.setPath("/"); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
301 delCookie.setMaxAge(0); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
302 if (domain != null && domain.length() > 0) |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
303 delCookie.setDomain(domain); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
304 response.addCookie(delCookie); |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
305 } |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
306 } |
8ef2d6701541
improve HttpLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
88
diff
changeset
|
307 |
626
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
308 |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
309 |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
310 private static String RUN_LATER_KEY = "Http.run_later"; |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
311 private static final Executor exec = Executors.newSingleThreadExecutor(); |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
312 |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
313 public static void run_later(final LuanState luan,final LuanFunction fn,final Object... args) { |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
314 List list = (List)luan.registry().get(RUN_LATER_KEY); |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
315 if( list == null ) { |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
316 list = new ArrayList(); |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
317 luan.registry().put(RUN_LATER_KEY,list); |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
318 } |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
319 list.add( |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
320 new Runnable(){public void run() { |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
321 try { |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
322 fn.call(luan,args); |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
323 } catch(LuanException e) { |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
324 e.printStackTrace(); |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
325 } |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
326 }} |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
327 ); |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
328 } |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
329 |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
330 private static void handle_run_later(LuanState luan) { |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
331 List list = (List)luan.registry().get(RUN_LATER_KEY); |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
332 if( list==null ) |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
333 return; |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
334 for( Object obj : list ) { |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
335 exec.execute((Runnable)obj); |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
336 } |
53a50c70c5e2
add Luan.assert_function() and Http.run_later()
Franklin Schmidt <fschmidt@gmail.com>
parents:
578
diff
changeset
|
337 } |
76
97b03fc807ad
add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
338 } |