Connection Request
This hook function, if defined, is called every time a new request has been received and processed as shown in the figure Hook Functions. This function can restrict the access to some resource by analyzing the connection parameter such as remote IP address, the method, resource requested, HTTP header fields, etc. It is also possible in this hook function to redirect to another file. If the upper application require memory or any specific resource to process the request it should be allocated into this hook function.
Prototype
CPU_BOOLEAN HTTPs_ReqHook(const HTTPs_INSTANCE *p_instance, HTTPs_CONN *p_conn, const void *p_hook_cfg);
Arguments
p_instance
Pointer to the instance structure (read only).
p_conn
Pointer to the connection structure.
p_hook_cfg
Pointer to hook application data.
Return Values
DEF_YES,
If the client is authorized to access the requested resource
DEF_NO,
otherwise, Status code returned will be set automatically to unauthorized
Required Configuration
See section Hook Configuration.
Notes / Warnings
- The instance structure is for read-only. It must not be modified at any point in this hook function.
- The following connection attributes can be accessed to analyze the connection (see section Control Structures for further details on each parameters):
ClientAddr
Method
PathPtr
ReqHdrCtr
ReqHdrFirstPtr
- In this hook function, only the under-mentioned connection parameters are allowed to be modified (see section Control Structures for further details on each parameters):
StatusCode
PathPtr
FilePtr
FileLen
BodyDataType
ConnDataPtr
Example Template
Listing bellow is shown to demonstrate the µC/HTTPs module capabilities. That code simply read all header field and print the cookie header field value.
static CPU_BOOLEAN HTTPs_ReqHook(const HTTPs_INSTANCE *p_instance, HTTPs_CONN *p_conn, const void *p_hook_cfg) { #if (HTTPs_CFG_HDR_EN == DEF_ENABLED) HTTPs_HDR_BLK *p_req_hdr_blk; #endif #if (HTTPs_CFG_HDR_EN == DEF_ENABLED) p_req_hdr_blk = p_conn->ReqHdrFirstPtr; while (p_req_hdr_blk != DEF_NULL) { switch (p_req_hdr_blk->HdrField) { case HTTP_HDR_FIELD_COOKIE: printf("cookie received: %s\n", (CPU_CHAR *)p_req_hdr_blk->ValPtr); break; default: break; } p_req_hdr_blk = p_req_hdr_blk->HdrBlkNextPtr; } #endif return (DEF_OK); }