Logout Hook

This hook will be called by the Application Layer of the Control Layer to found if the request received is a log out request. Depending on the implementation of the this hook, the log out accepted can be a GET or a POST request.

This hook functions will be called at two occasions :

  • when the URL and headers of the request were received and parse by the server (state HTTPs_AUTH_STATE_REQ_URL).
  • when the request body was received and parse (state HTTPs_AUTH_STATE_REQ_COMPLETE).

Prototype

          CPU_BOOLEAN  AppGlobal_Auth_ParseLogoutHook (const  HTTPs_INSTANCE     *p_instance,
                                                       const  HTTPs_CONN         *p_conn,
                                                              HTTPs_AUTH_STATE    state);

Arguments

p_instance

Pointer to the instance structure (read only).

p_conn

Pointer to the connection structure (read only).

state

State of the Authentication module:

HTTPs_AUTH_STATE_REQ_URL
HTTPs_AUTH_STATE_REQ_COMPLETE

Return Values

DEF_YES, if the request is the POST with the log out information in a form.
DEF_NO,   otherwise.

Required Configuration

None.

Notes / Warnings

None.

Example Template

Listing - Logout Hook Example
/*
*********************************************************************************************************
*                                     AppGlobal_Auth_ParseLogoutHook()
*
* Description : Parse requests received for logout URL and form data logout info.
*
* Argument(s) : p_instance  Pointer to HTTPs instance object.
*
*               p_conn      Pointer to HTTPs connection object.
*
*               state       State of the Authentication module:
*                               HTTPs_AUTH_STATE_REQ_URL:      The url and the headers were received and parse.
*                               HTTPs_AUTH_STATE_REQ_COMPLETE: All the request (url + headers + body) was received and parse.
*
* Return(s)   : DEF_YES, if Logout received.
*               DEF_NO,  otherwise.
*
* Caller(s)   : AppGlobal_AppInst_AuthCfg.
*
* Note(s)     : (1) This hook will be called twice for a request processed by the Authentication module:
*                   (a) When the Start line of the request (with the url) and the headers have been
*                       received and parse -> HTTPs_AUTH_STATE_REQ_URL state.
*                   (b) When all the request has been completely received and parse including the body
*                       -> HTTPs_AUTH_STATE_REQ_COMPLETE state.
*********************************************************************************************************
*/
CPU_BOOLEAN  AppGlobal_Auth_ParseLogoutHook (const  HTTPs_INSTANCE    *p_instance,
                                             const  HTTPs_CONN        *p_conn,
                                                    HTTPs_AUTH_STATE   state)
{
    CPU_BOOLEAN     is_logout = DEF_NO;
#if (HTTPs_CFG_FORM_EN == DEF_ENABLED)
    HTTPs_KEY_VAL  *p_current;
    CPU_INT16S       cmp_val;
#endif
    switch (state) {
                                                                /* --------------- REQUEST URL RECEIVED --------------- */
        case HTTPs_AUTH_STATE_REQ_URL:
                                                                /* Check if POST logout received.                       */
             cmp_val = Str_Cmp(p_conn->PathPtr, LOGOUT_PAGE_CMD);
             if (cmp_val == 0) {
                 is_logout = DEF_YES;
             }
             break;
                                                                /* -------------- REQUEST BODY RECEIVED --------------- */
        case HTTPs_AUTH_STATE_REQ_COMPLETE:
#if (HTTPs_CFG_FORM_EN == DEF_ENABLED)
                                                                /* Parse form fields received for logout.               */
             p_current = p_conn->FormDataListPtr;
             while (p_current != DEF_NULL) {
                 if (p_current->DataType == HTTPs_KEY_VAL_TYPE_PAIR) {
                     cmp_val = Str_CmpIgnoreCase_N(p_current->KeyPtr,
                                                   FORM_LOGOUT_FIELD_NAME,
                                                   p_current->KeyLen);
                     if (cmp_val == 0) {
                         is_logout = DEF_YES;
                         break;
                     }
                 }
                 p_current = p_current->NextPtr;
             }
#endif
             break;
        default:
             break;
    }
    return (is_logout);
}