use std::sync::atomic::Ordering;
use ext_php_rs::types::Zval;
use ext_php_rs::zend::{ExecuteData, SapiGlobals};
use crate::engine::{ClavironContext, SAPI_SHUTTING_DOWN};
use crate::sapi::ServerContext;
pub(crate) extern "C" fn claviron_is_cancelled_handler(
_ex: &mut ExecuteData,
retval: &mut Zval,
) {
ext_php_rs::zend::run_handler(std::panic::AssertUnwindSafe(|| {
let globals = SapiGlobals::get();
let cancelled = if globals.server_context.is_null() {
SAPI_SHUTTING_DOWN.load(Ordering::Acquire)
} else {
ClavironContext::from_server_context(globals.server_context)
.is_cancelled()
};
retval.set_bool(cancelled);
}));
}
pub(crate) extern "C" fn claviron_is_on_http_handler(
_ex: &mut ExecuteData,
retval: &mut Zval,
) {
ext_php_rs::zend::run_handler(std::panic::AssertUnwindSafe(|| {
let globals = SapiGlobals::get();
let on_http = !globals.server_context.is_null()
&& ClavironContext::from_server_context(globals.server_context)
.is_on_http();
retval.set_bool(on_http);
}));
}