On Response Body
Called by the µC/HTTP-client core when body's data of the HTTP response is received.
The parameter HTTPc_PARAM_TYPE_RESP_BODY_HOOK
must be set up using the function HTTPc_ReqSetParam()
for the hook function to be called.
Prototype
CPU_INT32U HTTPc_RespBodyHook (HTTPc_CONN_OBJ *p_conn_obj, HTTPc_REQ_OBJ *p_req_obj, HTTP_CONTENT_TYPE content_type, void *p_data, CPU_INT32U data_len, CPU_BOOLEAN last_chunk);
Arguments
p_conn_obj
Pointer to the current HTTPc Connection Object.
p_req_obj
Pointer to the current HTTPc Request Object.
content_type
HTTP Content Type of the HTTP Response body's data.
p_data
Pointer to a data piece of the HTTP Response body.
p_data_len
Length of the data piece received.
last_chunk
DEF_YES
, if this is the last piece of data.
DEF_NO
, if more data is up coming.
Return Values
The number of bytes read during the callback.
Required Configuration
None.
Notes / Warnings
None.
Example Template
Listing - Response Body Callback Function Example Code
static void HTTPc_RespBodyHook (HTTPc_CONN_OBJ *p_conn, HTTPc_REQ_OBJ *p_req, HTTP_CONTENT_TYPE content_type, void *p_data, CPU_INT32U data_len, CPU_BOOLEAN last_chunk) { FS_FILE *p_file; FS_FLAGS fs_flags; CPU_SIZE_T size_wr; CPU_SIZE_T size_wr_tot; CPU_BOOLEAN is_open; FS_ERR err_fs; is_open = FSFile_IsOpen("\\index.html", &fs_flags, &err_fs); if (err_fs != FS_ERR_NONE) { return; } if (is_open == DEF_NO) { fs_flags = 0; DEF_BIT_SET(fs_flags, FS_FILE_ACCESS_MODE_WR); DEF_BIT_SET(fs_flags, FS_FILE_ACCESS_MODE_CREATE); DEF_BIT_SET(fs_flags, FS_FILE_ACCESS_MODE_TRUNCATE); p_file = FSFile_Open("index.html", fs_flags, &err_fs); if (err_fs != FS_ERR_NONE) { return; } } switch (content_type) { case HTTP_CONTENT_TYPE_HTML: if (p_data != DEF_NULL) { size_wr = 0; size_wr_tot = 0; while (size_wr < data_len) { size_wr = FSFile_Wr(p_file, p_data, data_len, &err_fs); if (err_fs != FS_ERR_NONE) { return; } size_wr_tot += size_wr; } } break; case HTTP_CONTENT_TYPE_OCTET_STREAM: case HTTP_CONTENT_TYPE_PDF: case HTTP_CONTENT_TYPE_ZIP: case HTTP_CONTENT_TYPE_GIF: case HTTP_CONTENT_TYPE_JPEG: case HTTP_CONTENT_TYPE_PNG: case HTTP_CONTENT_TYPE_JS: case HTTP_CONTENT_TYPE_PLAIN: case HTTP_CONTENT_TYPE_CSS: case HTTP_CONTENT_TYPE_JSON: default: break; } if (last_chunk == DEF_YES) { FSFile_Close(p_file, &err_fs); } }