/* ********************************************************************************************************* * EXAMPLE CODE * * This file is provided as an example on how to use Micrium products. * * Please feel free to use any application code labeled as 'EXAMPLE CODE' in * your application products. Example code may be used as is, in whole or in * part, or may be used as a reference only. This file can be modified as * required to meet the end-product requirements. * ********************************************************************************************************* */ /* ********************************************************************************************************* * * HTTP CLIENT MEMORY LIBRARY MODULE * * Filename : http-c_mem.c * Version : V3.01.00 ********************************************************************************************************* */ /* ********************************************************************************************************* ********************************************************************************************************* * INCLUDE FILES ********************************************************************************************************* ********************************************************************************************************* */ #define MICRIUM_SOURCE #define HTTPs_MEM_MODULE #include #include "http-c_mem.h" /* ********************************************************************************************************* ********************************************************************************************************* * MODULE ********************************************************************************************************* ********************************************************************************************************* */ #ifdef HTTPc_MEM_MODULE_EN /* ********************************************************************************************************* ********************************************************************************************************* * LOCAL DEFINES ********************************************************************************************************* ********************************************************************************************************* */ /* ********************************************************************************************************* ********************************************************************************************************* * LOCAL CONSTANTS ********************************************************************************************************* ********************************************************************************************************* */ /* ********************************************************************************************************* ********************************************************************************************************* * LOCAL DATA TYPES ********************************************************************************************************* ********************************************************************************************************* */ /* ********************************************************************************************************* ********************************************************************************************************* * LOCAL GLOBAL VARIABLES ********************************************************************************************************* ********************************************************************************************************* */ MEM_DYN_POOL HTTPcMem_PoolConn; MEM_DYN_POOL HTTPcMem_PoolBuf; MEM_DYN_POOL HTTPcMem_PoolReq; MEM_DYN_POOL HTTPcMem_PoolResp; /* ********************************************************************************************************* ********************************************************************************************************* * LOCAL FUNCTION PROTOTYPES ********************************************************************************************************* ********************************************************************************************************* */ /* ********************************************************************************************************* * HTTPcMem_PoolInit() * * Description : $$$$ Add function description. * * Argument(s) : p_err $$$$ Add description for 'p_err' * * Return(s) : $$$$ Add return value description. * * Caller(s) : none. * * Note(s) : none. ********************************************************************************************************* */ void HTTPcMem_PoolInit(const HTTPc_MEM_CFG *p_cfg, HTTPc_MEM_ERR *p_err) { LIB_ERR err_lib; /* ----------------- CREATE CONN POOL ----------------- */ Mem_DynPoolCreate(DEF_NULL, &HTTPcMem_PoolConn, DEF_NULL, sizeof(HTTPc_CONN_OBJ), sizeof(CPU_SIZE_T), 1, p_cfg->ConnNbrMax, &err_lib); if (err_lib != LIB_MEM_ERR_NONE) { *p_err = HTTPc_MEM_ERR_POOL_INIT_CONN; goto exit; } /* ---------------- CREATE BUFFER POOL ---------------- */ Mem_DynPoolCreate(DEF_NULL, &HTTPcMem_PoolBuf, DEF_NULL, p_cfg->BufSize, sizeof(CPU_SIZE_T), 1, p_cfg->ConnNbrMax, &err_lib); if (err_lib != LIB_MEM_ERR_NONE) { *p_err = HTTPc_MEM_ERR_POOL_INIT_BUF; goto exit; } /* ----------------- CREATE REQ POOL ------------------ */ Mem_DynPoolCreate(DEF_NULL, &HTTPcMem_PoolReq, DEF_NULL, sizeof(HTTPc_REQ_OBJ), sizeof(CPU_SIZE_T), 1, p_cfg->ReqNbrMax, &err_lib); if (err_lib != LIB_MEM_ERR_NONE) { *p_err = HTTPc_MEM_ERR_POOL_INIT_REQ; goto exit; } /* ----------------- CREATE RESP POOL ----------------- */ Mem_DynPoolCreate(DEF_NULL, &HTTPcMem_PoolResp, DEF_NULL, sizeof(HTTPc_RESP_OBJ), sizeof(CPU_SIZE_T), 1, p_cfg->ReqNbrMax, &err_lib); if (err_lib != LIB_MEM_ERR_NONE) { *p_err = HTTPc_MEM_ERR_POOL_INIT_RESP; goto exit; } *p_err = HTTPc_MEM_ERR_NONE; exit: return; } /* ********************************************************************************************************* * HTTPcMem_ConnGet() * * Description : $$$$ Add function description. * * Argument(s) : p_err $$$$ Add description for 'p_err' * * Return(s) : $$$$ Add return value description. * * Caller(s) : none. * * Note(s) : none. ********************************************************************************************************* */ HTTPc_CONN_OBJ *HTTPcMem_ConnGet(HTTPc_MEM_ERR *p_err) { HTTPc_CONN_OBJ *p_conn; LIB_ERR err_lib; p_conn = (HTTPc_CONN_OBJ *)Mem_DynPoolBlkGet(&HTTPcMem_PoolConn, &err_lib); switch (err_lib) { case LIB_MEM_ERR_NONE: break; case LIB_MEM_ERR_POOL_EMPTY: p_conn = DEF_NULL; *p_err = HTTPc_MEM_ERR_POOL_CONN_EMPTY; goto exit; default: p_conn = DEF_NULL; *p_err = HTTPc_MEM_ERR_POOL_CONN_FAULT; goto exit; } *p_err = HTTPc_MEM_ERR_NONE; exit: return (p_conn); } /* ********************************************************************************************************* * HTTPcMem_ConnRelease() * * Description : $$$$ Add function description. * * Argument(s) : p_err $$$$ Add description for 'p_err' * * Return(s) : $$$$ Add return value description. * * Caller(s) : none. * * Note(s) : none. ********************************************************************************************************* */ void HTTPcMem_ConnRelease(HTTPc_CONN_OBJ *p_conn, HTTPc_MEM_ERR *p_err) { LIB_ERR err_lib; Mem_DynPoolBlkFree(&HTTPcMem_PoolConn, p_conn, &err_lib); if (err_lib != LIB_MEM_ERR_NONE) { *p_err = HTTPc_MEM_ERR_POOL_CONN_FREE; goto exit; } *p_err = HTTPc_MEM_ERR_NONE; exit: return; } /* ********************************************************************************************************* * HTTPcMem_BufGet() * * Description : $$$$ Add function description. * * Argument(s) : p_err $$$$ Add description for 'p_err' * * Return(s) : $$$$ Add return value description. * * Caller(s) : none. * * Note(s) : none. ********************************************************************************************************* */ CPU_CHAR *HTTPcMem_BufGet(HTTPc_MEM_ERR *p_err) { CPU_CHAR *p_buf; LIB_ERR err_lib; p_buf = (CPU_CHAR *)Mem_DynPoolBlkGet(&HTTPcMem_PoolBuf, &err_lib); switch (err_lib) { case LIB_MEM_ERR_NONE: break; case LIB_MEM_ERR_POOL_EMPTY: p_buf = DEF_NULL; *p_err = HTTPc_MEM_ERR_POOL_BUF_EMPTY; goto exit; default: p_buf = DEF_NULL; *p_err = HTTPc_MEM_ERR_POOL_BUF_FAULT; goto exit; } *p_err = HTTPc_MEM_ERR_NONE; exit: return (p_buf); } /* ********************************************************************************************************* * HTTPcMem_BufRelease() * * Description : $$$$ Add function description. * * Argument(s) : p_buf * * p_err $$$$ Add description for 'p_err' * * Return(s) : $$$$ Add return value description. * * Caller(s) : none. * * Note(s) : none. ********************************************************************************************************* */ void HTTPcMem_BufRelease(CPU_CHAR *p_buf, HTTPc_MEM_ERR *p_err) { LIB_ERR err_lib; Mem_DynPoolBlkFree(&HTTPcMem_PoolBuf, p_buf, &err_lib); if (err_lib != LIB_MEM_ERR_NONE) { *p_err = HTTPc_MEM_ERR_POOL_BUF_FREE; goto exit; } *p_err = HTTPc_MEM_ERR_NONE; exit: return; } /* ********************************************************************************************************* * HTTPcMem_ReqGet() * * Description : $$$$ Add function description. * * Argument(s) : p_err $$$$ Add description for 'p_err' * * Return(s) : $$$$ Add return value description. * * Caller(s) : none. * * Note(s) : none. ********************************************************************************************************* */ HTTPc_REQ_OBJ *HTTPcMem_ReqGet(HTTPc_MEM_ERR *p_err) { HTTPc_REQ_OBJ *p_req; LIB_ERR err_lib; p_req = (HTTPc_REQ_OBJ *)Mem_DynPoolBlkGet(&HTTPcMem_PoolReq, &err_lib); switch (err_lib) { case LIB_MEM_ERR_NONE: break; case LIB_MEM_ERR_POOL_EMPTY: p_req = DEF_NULL; *p_err = HTTPc_MEM_ERR_POOL_REQ_EMPTY; goto exit; default: p_req = DEF_NULL; *p_err = HTTPc_MEM_ERR_POOL_REQ_FAULT; goto exit; } *p_err = HTTPc_MEM_ERR_NONE; exit: return (p_req); } /* ********************************************************************************************************* * HTTPcMem_ReqRelease() * * Description : $$$$ Add function description. * * Argument(s) : p_buf * * p_err $$$$ Add description for 'p_err' * * Return(s) : $$$$ Add return value description. * * Caller(s) : none. * * Note(s) : none. ********************************************************************************************************* */ void HTTPcMem_ReqRelease(HTTPc_REQ_OBJ *p_req, HTTPc_MEM_ERR *p_err) { LIB_ERR err_lib; Mem_DynPoolBlkFree(&HTTPcMem_PoolReq, p_req, &err_lib); if (err_lib != LIB_MEM_ERR_NONE) { *p_err = HTTPc_MEM_ERR_POOL_BUF_FREE; goto exit; } *p_err = HTTPc_MEM_ERR_NONE; exit: return; } /* ********************************************************************************************************* * HTTPcMem_RespGet() * * Description : $$$$ Add function description. * * Argument(s) : p_err $$$$ Add description for 'p_err' * * Return(s) : $$$$ Add return value description. * * Caller(s) : none. * * Note(s) : none. ********************************************************************************************************* */ HTTPc_RESP_OBJ *HTTPcMem_RespGet(HTTPc_MEM_ERR *p_err) { HTTPc_RESP_OBJ *p_resp; LIB_ERR err_lib; p_resp = (HTTPc_RESP_OBJ *)Mem_DynPoolBlkGet(&HTTPcMem_PoolResp, &err_lib); switch (err_lib) { case LIB_MEM_ERR_NONE: break; case LIB_MEM_ERR_POOL_EMPTY: p_resp = DEF_NULL; *p_err = HTTPc_MEM_ERR_POOL_REQ_EMPTY; goto exit; default: p_resp = DEF_NULL; *p_err = HTTPc_MEM_ERR_POOL_REQ_FAULT; goto exit; } *p_err = HTTPc_MEM_ERR_NONE; exit: return (p_resp); } /* ********************************************************************************************************* * HTTPcMem_RespRelease() * * Description : $$$$ Add function description. * * Argument(s) : p_resp * * p_err $$$$ Add description for 'p_err' * * Return(s) : $$$$ Add return value description. * * Caller(s) : none. * * Note(s) : none. ********************************************************************************************************* */ void HTTPcMem_RespRelease(HTTPc_RESP_OBJ *p_resp, HTTPc_MEM_ERR *p_err) { LIB_ERR err_lib; Mem_DynPoolBlkFree(&HTTPcMem_PoolResp, p_resp, &err_lib); if (err_lib != LIB_MEM_ERR_NONE) { *p_err = HTTPc_MEM_ERR_POOL_BUF_FREE; goto exit; } *p_err = HTTPc_MEM_ERR_NONE; exit: return; } /* ********************************************************************************************************* ********************************************************************************************************* * MODULE END ********************************************************************************************************* ********************************************************************************************************* */ #endif /* HTTPc_MEM_MODULE_EN */