annotate src/luan/modules/http/HttpServicer.java @ 1265:3f4644246e39

LuanHandler cleanup and add Server.serve_for_proxy
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 25 Sep 2018 19:51:34 -0600
parents 382c444a6c77
children 9fa8b8389578
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1171
794ddcfbee20 remove http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1167
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
436
52a6295e92c9 support old jetty
Franklin Schmidt <fschmidt@gmail.com>
parents: 433
diff changeset
3 import org.slf4j.Logger;
52a6295e92c9 support old jetty
Franklin Schmidt <fschmidt@gmail.com>
parents: 433
diff changeset
4 import org.slf4j.LoggerFactory;
1160
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
5 import luan.webserver.Request;
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
6 import luan.webserver.Response;
76
97b03fc807ad add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
7 import luan.LuanState;
97b03fc807ad add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
8 import luan.LuanFunction;
97b03fc807ad add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
9 import luan.LuanException;
97b03fc807ad add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
10 import luan.LuanTable;
781
fbbdd369a13a rename DeepCloner to LuanCloner
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
11 import luan.LuanCloner;
169
9169581dc8fc add luan.modules.web
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 168
diff changeset
12 import luan.modules.PackageLuan;
76
97b03fc807ad add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
13
97b03fc807ad add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
14
1263
382c444a6c77 add Http.eval_in_root and Http.handle_error
Franklin Schmidt <fschmidt@gmail.com>
parents: 1256
diff changeset
15 public final class HttpServicer {
436
52a6295e92c9 support old jetty
Franklin Schmidt <fschmidt@gmail.com>
parents: 433
diff changeset
16 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
17
1265
3f4644246e39 LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents: 1263
diff changeset
18 public static Response service(LuanState luan,Request request,String modName)
3f4644246e39 LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents: 1263
diff changeset
19 throws LuanException
3f4644246e39 LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents: 1263
diff changeset
20 {
1256
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1240
diff changeset
21 try {
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1240
diff changeset
22 return serviceLuan(luan,request,modName);
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1240
diff changeset
23 } catch(LuanException e) {
1263
382c444a6c77 add Http.eval_in_root and Http.handle_error
Franklin Schmidt <fschmidt@gmail.com>
parents: 1256
diff changeset
24 return handleError(luan,request,e);
1256
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1240
diff changeset
25 }
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1240
diff changeset
26 }
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1240
diff changeset
27
1265
3f4644246e39 LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents: 1263
diff changeset
28 private static Response handleError(LuanState luan,Request request,LuanException e)
3f4644246e39 LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents: 1263
diff changeset
29 throws LuanException
3f4644246e39 LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents: 1263
diff changeset
30 {
1256
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1240
diff changeset
31 //e.printStackTrace();
1263
382c444a6c77 add Http.eval_in_root and Http.handle_error
Franklin Schmidt <fschmidt@gmail.com>
parents: 1256
diff changeset
32 synchronized(luan) {
382c444a6c77 add Http.eval_in_root and Http.handle_error
Franklin Schmidt <fschmidt@gmail.com>
parents: 1256
diff changeset
33 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL);
382c444a6c77 add Http.eval_in_root and Http.handle_error
Franklin Schmidt <fschmidt@gmail.com>
parents: 1256
diff changeset
34 luan = (LuanState)cloner.clone(luan);
382c444a6c77 add Http.eval_in_root and Http.handle_error
Franklin Schmidt <fschmidt@gmail.com>
parents: 1256
diff changeset
35 }
1265
3f4644246e39 LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents: 1263
diff changeset
36 LuanTable module = (LuanTable)PackageLuan.require(luan,"luan:http/Http.luan");
3f4644246e39 LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents: 1263
diff changeset
37 LuanFunction fn = (LuanFunction)module.rawGet("handle_error");
3f4644246e39 LuanHandler cleanup and add Server.serve_for_proxy
Franklin Schmidt <fschmidt@gmail.com>
parents: 1263
diff changeset
38 return (Response)fn.call( luan, new Object[]{request,e.table()} );
1256
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1240
diff changeset
39 }
c147e2e877e3 allow subclassing of HttpServicer
Franklin Schmidt <fschmidt@gmail.com>
parents: 1240
diff changeset
40
1263
382c444a6c77 add Http.eval_in_root and Http.handle_error
Franklin Schmidt <fschmidt@gmail.com>
parents: 1256
diff changeset
41 private static Response serviceLuan(LuanState luan,Request request,String modName)
136
7e160d2f6d9c update HttpLib, untested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 135
diff changeset
42 throws LuanException
76
97b03fc807ad add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
43 {
138
06159094b802 replace WebRun.java with web_run.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 136
diff changeset
44 LuanFunction fn;
136
7e160d2f6d9c update HttpLib, untested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 135
diff changeset
45 synchronized(luan) {
798
9eccfede1094 fix cloning bug
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
46 PackageLuan.enableLoad(luan,"luan:http/Http.luan",modName);
1240
Franklin Schmidt <fschmidt@gmail.com>
parents: 1171
diff changeset
47 PackageLuan.require(luan,"luan:http/Http.luan");
175
bdbd4740121f finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 173
diff changeset
48 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
49 if( mod.equals(Boolean.FALSE) )
1160
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
50 return null;
505
7bc63886d4f2 web page modules now return a function
Franklin Schmidt <fschmidt@gmail.com>
parents: 504
diff changeset
51 if( !(mod instanceof LuanFunction) )
646
cdc70de628b5 simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents: 645
diff changeset
52 throw new LuanException( "module '"+modName+"' must return a function" );
1159
3ef883468fd0 remove Http.per_session_pages
Franklin Schmidt <fschmidt@gmail.com>
parents: 1154
diff changeset
53 LuanCloner cloner = new LuanCloner(LuanCloner.Type.INCREMENTAL);
3ef883468fd0 remove Http.per_session_pages
Franklin Schmidt <fschmidt@gmail.com>
parents: 1154
diff changeset
54 luan = (LuanState)cloner.clone(luan);
3ef883468fd0 remove Http.per_session_pages
Franklin Schmidt <fschmidt@gmail.com>
parents: 1154
diff changeset
55 fn = (LuanFunction)cloner.get(mod);
136
7e160d2f6d9c update HttpLib, untested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 135
diff changeset
56 }
139
3b384dc5ca91 replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 138
diff changeset
57
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");
497
55f9f74f1e55 Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 496
diff changeset
59
55f9f74f1e55 Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 496
diff changeset
60 // request
574
6cc2f047019b remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents: 572
diff changeset
61 LuanFunction newRequestFn = (LuanFunction)module.rawGet("new_request");
1160
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
62 newRequestFn.call( luan, new Object[]{request} );
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
63
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
64 // response
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
65 LuanFunction newResponseFn = (LuanFunction)module.rawGet("new_response");
1163
Franklin Schmidt <fschmidt@gmail.com>
parents: 1160
diff changeset
66 newResponseFn.call(luan);
1160
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
67
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
68 fn.call(luan);
497
55f9f74f1e55 Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 496
diff changeset
69
1163
Franklin Schmidt <fschmidt@gmail.com>
parents: 1160
diff changeset
70 LuanFunction finishFn = (LuanFunction)module.rawGet("finish");
Franklin Schmidt <fschmidt@gmail.com>
parents: 1160
diff changeset
71 Response response = (Response)finishFn.call(luan);
1160
4beabb087be6 add http/impl
Franklin Schmidt <fschmidt@gmail.com>
parents: 1159
diff changeset
72 return response;
217
a608066395c5 clean up HttpLuan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
73 }
a608066395c5 clean up HttpLuan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 202
diff changeset
74
1263
382c444a6c77 add Http.eval_in_root and Http.handle_error
Franklin Schmidt <fschmidt@gmail.com>
parents: 1256
diff changeset
75 private HttpServicer() {} // never
76
97b03fc807ad add HttpLib and WebServlet
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
76 }