185 lines
6.6 KiB
Rust
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,
|
|
}
|