31
31
let handle_site_exn exn (ri, si, _, aci) sitedata =
32
32
sitedata.Eliom_common.exn_handler
33
(Eliom_common.make_server_params sitedata aci ri [] si None) exn >>=
33
(Eliom_common.make_server_params sitedata aci ri [] si None) exn
37
38
(*****************************************************************************)
199
201
else [Eliom_common.Eliom_Service_session_expired closedservsessions])
204
let gen sitedata (charset, _, _, _) = function
205
| Ocsigen_extensions.Req_found (_, r) -> Lwt.return (Ocsigen_extensions.Ext_found r)
206
| Ocsigen_extensions.Req_not_found (previous_extension_err, ri) ->
204
open Ocsigen_extensions
206
let gen is_eliom_extension sitedata = function
207
| Ocsigen_extensions.Req_found _ ->
208
Lwt.return Ocsigen_extensions.Ext_do_nothing
209
| Ocsigen_extensions.Req_not_found (404 as previous_extension_err, ri) ->
207
210
let now = Unix.time () in
211
Eliom_common.change_request_info ri previous_extension_err
213
let (all_cookie_info, closedsessions) =
214
Eliommod_cookies.get_cookie_info now
216
si.Eliom_common.si_service_session_cookies
217
si.Eliom_common.si_data_session_cookies
218
si.Eliom_common.si_persistent_session_cookies
219
si.Eliom_common.si_secure_cookie_info
221
let exn = compute_exn closedsessions in
208
222
let rec gen_aux ((ri, si, old_cookies_to_set, all_cookie_info) as info) =
210
match si.Eliom_common.si_nonatt_info with
211
| Eliom_common.Na_no ->
213
(* page generation *)
214
Eliommod_services.get_page
218
(* anonymous service *)
219
Eliommod_naservices.make_naservice
228
sitedata >>= fun result_to_send ->
223
match is_eliom_extension with
225
Eliommod_extensions.run_eliom_extension ext now info sitedata
228
match si.Eliom_common.si_nonatt_info with
229
| Eliom_common.Na_no ->
230
(* page generation *)
231
Eliommod_services.get_page
233
(* anonymous service *)
234
Eliommod_naservices.make_naservice
242
sitedata >>= fun result_to_send ->
230
244
match result_to_send with
231
245
| Eliom_common.EliomExn (exnlist, cookies_set_by_page) ->
249
263
(match si.Eliom_common.si_nonatt_info,
250
264
si.Eliom_common.si_state_info,
251
ri.Ocsigen_extensions.ri_method with
265
ri.request_info.ri_method with
252
266
| Eliom_common.Na_no,
253
(None, None), Ocsigen_http_frame.Http_header.GET ->
267
(Eliom_common.Att_no, Eliom_common.Att_no),
268
Ocsigen_http_frame.Http_header.GET ->
254
269
Eliommod_cookies.compute_cookies_to_send
269
284
Eliommod_cookies.compute_new_ri_cookies
271
ri.Ocsigen_extensions.ri_sub_path
272
(Lazy.force ri.Ocsigen_extensions.ri_cookies)
286
ri.request_info.ri_sub_path
287
(Lazy.force ri.request_info.ri_cookies)
274
289
cookies_set_by_page
275
290
(*VVV old_cookies_to_set already are in ri_cookies, right? *)
285
300
si.Eliom_common.si_nonatt_info,
286
301
si.Eliom_common.si_state_info,
287
ri.Ocsigen_extensions.ri_method
302
ri.request_info.ri_method
289
304
| Eliom_common.Na_get_ _,
290
(_, None), Ocsigen_http_frame.Http_header.GET
305
(_, Eliom_common.Att_no), Ocsigen_http_frame.Http_header.GET
291
306
| Eliom_common.Na_get' _,
292
(_, None), Ocsigen_http_frame.Http_header.GET ->
307
(_, Eliom_common.Att_no), Ocsigen_http_frame.Http_header.GET
293
308
(* no post params, GET na coservice *)
296
(Ocsigen_extensions.Ext_retry_with
298
Ocsigen_extensions.ri_get_params =
299
lazy si.Eliom_common.si_other_get_params;
300
Ocsigen_extensions.ri_cookies= lazy ric;
301
Ocsigen_extensions.ri_extension_info= exnlist
302
(* @ri.ri_extension_info *)
303
(*VVV I do not keep the old exceptions any more,
304
otherwise no way to remove them. *)
310
310
| Eliom_common.Na_no,
311
(_, None), Ocsigen_http_frame.Http_header.GET ->
311
(_, Eliom_common.Att_no), Ocsigen_http_frame.Http_header.GET
312
312
(* no post params, GET attached coservice *)
315
315
(* Ext_retry_with, not Eliom_retry_with *)
316
316
(Ocsigen_extensions.Ext_retry_with
318
Ocsigen_extensions.ri_get_params =
319
lazy si.Eliom_common.si_other_get_params;
320
Ocsigen_extensions.ri_cookies= lazy ric;
321
Ocsigen_extensions.ri_extension_info= exnlist
317
({ri with request_info = {
320
lazy si.Eliom_common.si_other_get_params;
321
ri_cookies= lazy ric;
322
ri_extension_info= exnlist
322
323
(* @ri.ri_extension_info *)
323
324
(*VVV I do not keep the old exceptions any more,
324
325
otherwise no way to remove them. *)
329
331
| Eliom_common.Na_post_ _, (_, _), _
330
332
| Eliom_common.Na_post' _, (_, _), _ ->
331
333
(* POST na coservice *)
335
337
(* Ext_retry_with, not Eliom_retry_with *)
336
338
(Ocsigen_extensions.Ext_retry_with
338
Ocsigen_extensions.ri_get_params =
339
lazy si.Eliom_common.si_other_get_params;
341
do we keep GET na_name ?
339
({ri with request_info = {
341
ri_post_params = lazy (return []);
343
lazy si.Eliom_common.si_other_get_params;
344
ri_method = Ocsigen_http_frame.Http_header.GET;
345
ri_cookies= lazy ric;
346
ri_extension_info= exnlist
353
(* retry without POST params *)
355
Warning: is it possible to have POST method but no POST parameter?
344
Ocsigen_extensions.ri_post_params = lazy (return []);
345
Ocsigen_extensions.ri_method = Ocsigen_http_frame.Http_header.GET;
346
Ocsigen_extensions.ri_cookies= lazy ric;
347
Ocsigen_extensions.ri_extension_info= exnlist
348
(* @ri.ri_extension_info *)
349
(*VVV I do not keep the old exceptions any more,
350
otherwise no way to remove them. *)
356
(* retry without POST params *)
359
359
(* Ext_retry_with, not Eliom_retry_with *)
360
360
(Ocsigen_extensions.Ext_retry_with
362
Ocsigen_extensions.ri_post_params = lazy (return []);
363
Ocsigen_extensions.ri_method = Ocsigen_http_frame.Http_header.GET;
364
Ocsigen_extensions.ri_cookies= lazy ric;
365
Ocsigen_extensions.ri_extension_info= exnlist
366
(* @ri.ri_extension_info *)
367
(*VVV I do not keep the old exceptions any more,
368
otherwise no way to remove them. *)
361
({ri with request_info = {
363
ri_post_params = lazy (return []);
364
ri_method = Ocsigen_http_frame.Http_header.GET;
365
ri_cookies= lazy ric;
366
ri_extension_info= exnlist
406
404
Ocsigen_http_frame.res_code= 500;
408
406
| Eliom_common.Eliom_Wrong_parameter ->
409
Lazy.force ri.Ocsigen_extensions.ri_post_params >>= fun ripp ->
407
Lazy.force ri.request_info.ri_post_params >>= fun ripp ->
410
408
Ocsigen_senders.Xhtml_content.result_of_content
411
409
(Error_pages.page_bad_param (List.map fst ripp)) >>= fun r ->
412
410
return (Ocsigen_extensions.Ext_found
420
418
return (Ocsigen_extensions.Ext_next previous_extension_err)
421
419
| Eliom_common.Eliom_retry_with a -> gen_aux a
425
Eliom_common.change_request_info
426
ri charset previous_extension_err >>= fun (ri, si) ->
427
let (all_cookie_info, closedsessions) =
428
Eliommod_cookies.get_cookie_info now
430
si.Eliom_common.si_service_session_cookies
431
si.Eliom_common.si_data_session_cookies
432
si.Eliom_common.si_persistent_session_cookies
433
si.Eliom_common.si_secure_cookie_info
435
let exn = compute_exn closedsessions in
436
gen_aux ({ri with Ocsigen_extensions.ri_extension_info=
437
exn@ri.Ocsigen_extensions.ri_extension_info},
439
Ocsigen_http_frame.Cookies.empty,
423
({ri with request_info = {
426
exn@ri.request_info.ri_extension_info}},
428
Ocsigen_http_frame.Cookies.empty,
430
| Ocsigen_extensions.Req_not_found (_, ri) ->
431
Lwt.return Ocsigen_extensions.Ext_do_nothing