2021-05-23 10:55:19 +08:00

185 lines
6.6 KiB
Rust

/*! Handling all attributes of requests (GET/POST/PUT/DELETE) sent by
[`Element.request()`](https://sciter.com/docs/content/sciter/Element.htm) and
[`View.request()`](https://sciter.com/docs/content/sciter/View.htm)
functions and other load requests.
*/
#![allow(non_camel_case_types, non_snake_case)]
use capi::sctypes::{UINT, LPVOID, LPCBYTE, LPCSTR, LPCWSTR};
use capi::scdef::{LPCSTR_RECEIVER, LPCWSTR_RECEIVER, LPCBYTE_RECEIVER};
pub use capi::scdef::RESOURCE_TYPE;
MAKE_HANDLE!(#[doc = "Request native handle."] HREQUEST, _HREQUEST);
#[repr(C)]
#[derive(Debug, PartialEq)]
/// Type of the result value for Sciter Request functions.
pub enum REQUEST_RESULT {
/// E.g. not enough memory.
PANIC = -1,
/// Success.
OK = 0,
/// Bad parameter.
BAD_PARAM = 1,
/// Operation failed, e.g. index out of bounds.
FAILURE = 2,
/// The platform does not support requested feature.
NOTSUPPORTED = 3,
}
impl std::error::Error for REQUEST_RESULT {}
impl std::fmt::Display for REQUEST_RESULT {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{:?}", self)
}
}
#[repr(C)]
#[derive(Debug, PartialEq)]
/// Request methods.
pub enum REQUEST_METHOD {
/// Sends a plain HTTP GET request.
///
/// Url-encoded params (if any) are appended to the url in order to form the request.
GET = 1,
/// Sends an HTTP POST request.
///
/// The params are serialized as `Content-Type: application/x-www-form-urlencoded;charset=utf-8`.
POST = 2,
/// Sends an HTTP PUT request.
///
/// The params are serialized as `Content-Type: multipart/form-data; boundary= ...`.
PUT = 3,
/// Sends an HTTP DELETE request.
DELETE = 4,
}
#[repr(C)]
#[derive(Debug, PartialEq)]
/// HTTP methods for the [`Element::send_request`](../dom/struct.Element.html#method.send_request).
pub enum REQUEST_TYPE {
/// Asynchronous GET.
AsyncGet,
/// Asynchronous POST.
AsyncPost,
/// Synchronous GET.
Get,
/// Synchronous POST.
Post,
}
#[repr(C)]
#[derive(Debug, PartialEq)]
/// Completion state of a request.
pub enum REQUEST_STATE {
/// The request is pending.
PENDING = 0,
/// Completed successfully.
SUCCESS = 1,
/// Completed with failure.
FAILURE = 2,
}
#[repr(C)]
#[derive(Debug)]
pub struct REQUEST_PARAM {
pub name: LPCWSTR,
pub value: LPCWSTR,
}
#[repr(C)]
#[allow(missing_docs)]
pub struct SciterRequestAPI
{
/// a.k.a AddRef()
pub RequestUse: extern "system" fn (rq: HREQUEST) -> REQUEST_RESULT,
/// a.k.a Release()
pub RequestUnUse: extern "system" fn (rq: HREQUEST) -> REQUEST_RESULT,
/// get requested URL
pub RequestUrl: extern "system" fn (rq: HREQUEST, rcv: LPCSTR_RECEIVER, rcv_param: LPVOID) -> REQUEST_RESULT,
/// get real, content URL (after possible redirection)
pub RequestContentUrl: extern "system" fn (rq: HREQUEST, rcv: LPCSTR_RECEIVER, rcv_param: LPVOID) -> REQUEST_RESULT,
/// get requested data type
pub RequestGetRequestType: extern "system" fn (rq: HREQUEST, pType: &mut REQUEST_METHOD) -> REQUEST_RESULT,
/// get requested data type
pub RequestGetRequestedDataType: extern "system" fn (rq: HREQUEST, pData: &mut RESOURCE_TYPE) -> REQUEST_RESULT,
/// get received data type, string, mime type
pub RequestGetReceivedDataType: extern "system" fn (rq: HREQUEST, rcv: LPCSTR_RECEIVER, rcv_param: LPVOID) -> REQUEST_RESULT,
/// get number of request parameters passed
pub RequestGetNumberOfParameters: extern "system" fn (rq: HREQUEST, pNumber: &mut UINT) -> REQUEST_RESULT,
/// get nth request parameter name
pub RequestGetNthParameterName: extern "system" fn (rq: HREQUEST, n: UINT, rcv: LPCWSTR_RECEIVER, rcv_param: LPVOID) -> REQUEST_RESULT,
/// get nth request parameter value
pub RequestGetNthParameterValue: extern "system" fn (rq: HREQUEST, n: UINT, rcv: LPCWSTR_RECEIVER, rcv_param: LPVOID) -> REQUEST_RESULT,
/// get request times , ended - started = milliseconds to get the requst
pub RequestGetTimes: extern "system" fn (rq: HREQUEST, pStarted: &mut UINT, pEnded: &mut UINT) -> REQUEST_RESULT,
/// get number of request headers
pub RequestGetNumberOfRqHeaders: extern "system" fn (rq: HREQUEST, pNumber: &mut UINT) -> REQUEST_RESULT,
/// get nth request header name
pub RequestGetNthRqHeaderName: extern "system" fn (rq: HREQUEST, n: UINT, rcv: LPCWSTR_RECEIVER, rcv_param: LPVOID) -> REQUEST_RESULT,
/// get nth request header value
pub RequestGetNthRqHeaderValue: extern "system" fn (rq: HREQUEST, n: UINT, rcv: LPCWSTR_RECEIVER, rcv_param: LPVOID) -> REQUEST_RESULT,
/// get number of response headers
pub RequestGetNumberOfRspHeaders: extern "system" fn (rq: HREQUEST, pNumber: &mut UINT) -> REQUEST_RESULT,
/// get nth response header name
pub RequestGetNthRspHeaderName: extern "system" fn (rq: HREQUEST, n: UINT, rcv: LPCWSTR_RECEIVER, rcv_param: LPVOID) -> REQUEST_RESULT,
/// get nth response header value
pub RequestGetNthRspHeaderValue: extern "system" fn (rq: HREQUEST, n: UINT, rcv: LPCWSTR_RECEIVER, rcv_param: LPVOID) -> REQUEST_RESULT,
/// get completion status (CompletionStatus - http response code : 200, 404, etc.)
pub RequestGetCompletionStatus: extern "system" fn (rq: HREQUEST, pState: &mut REQUEST_STATE, pCompletionStatus: &mut UINT) -> REQUEST_RESULT,
/// get proxy host
pub RequestGetProxyHost: extern "system" fn (rq: HREQUEST, rcv: LPCSTR_RECEIVER, rcv_param: LPVOID) -> REQUEST_RESULT,
/// get proxy port
pub RequestGetProxyPort: extern "system" fn (rq: HREQUEST, pPort: &mut UINT) -> REQUEST_RESULT,
/// mark reequest as complete with status and data
pub RequestSetSucceeded: extern "system" fn (rq: HREQUEST, status: UINT, dataOrNull: LPCBYTE, dataLength: UINT) -> REQUEST_RESULT,
/// mark reequest as complete with failure and optional data
pub RequestSetFailed: extern "system" fn (rq: HREQUEST, status: UINT, dataOrNull: LPCBYTE, dataLength: UINT) -> REQUEST_RESULT,
/// append received data chunk
pub RequestAppendDataChunk: extern "system" fn (rq: HREQUEST, data: LPCBYTE, dataLength: UINT) -> REQUEST_RESULT,
/// set request header (single item)
pub RequestSetRqHeader: extern "system" fn (rq: HREQUEST, name: LPCWSTR, value: LPCWSTR) -> REQUEST_RESULT,
/// set respone header (single item)
pub RequestSetRspHeader: extern "system" fn (rq: HREQUEST, name: LPCWSTR, value: LPCWSTR) -> REQUEST_RESULT,
/// set received data type, string, mime type
pub RequestSetReceivedDataType: extern "system" fn (rq: HREQUEST, _type: LPCSTR) -> REQUEST_RESULT,
/// set received data encoding, string
pub RequestSetReceivedDataEncoding: extern "system" fn (rq: HREQUEST, encoding: LPCSTR) -> REQUEST_RESULT,
/// get received (so far) data
pub RequestGetData: extern "system" fn (rq: HREQUEST, rcv: LPCBYTE_RECEIVER, rcv_param: LPVOID) -> REQUEST_RESULT,
}