Tasmota/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_httpd.h
2021-03-11 14:48:59 +01:00

137 lines
4.5 KiB
C

/*
* ESPRESSIF MIT License
*
* Copyright (c) 2019 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
*
* Permission is hereby granted for use on ESPRESSIF SYSTEMS products only, in which case,
* it is free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
* to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or
* substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
#ifndef _HAP_PLATFORM_HTTPD_H_
#define _HAP_PLATFORM_HTTPD_H_
#include <esp_http_server.h>
#ifdef __cplusplus
extern "C" {
#endif
/** Start the webserver
*
* This API will be called by the HAP Core to start the webserver.
*
* @param[out] handle Pointer to the handle that should be populated by this
* function on a success.
*
* @return ESP_OK on success
* @return error code otherwise
*/
int hap_platform_httpd_start(httpd_handle_t *handle);
/** Stop the webserver
*
* This API will be called by the HAP Core to stop the webserver.
*
* @param[in] handle Pointer to the handle created in hap_platform_httpd_start
*
* @return ESP_OK on success
* @return error code otherwise
*/
int hap_platform_httpd_stop(httpd_handle_t *handle);
/** Get the current HTTP Port
*
* This API will be called by the HAP Core to get the HTTP Port being used. This will
* be used for the mDNS announcement
*
* @return Configured HTTP Port
*/
int hap_platform_httpd_get_port();
/** Get the HTTPD session context
*
* This API will be called by the HAP Core to get the context associated with a given
* session. It is generally used to maintain pairing information.
*
* @param[in] req HTTPD Request structure.
*
* @return pointer to the session context.
*/
void * hap_platform_httpd_get_sess_ctx(httpd_req_t *req);
/** Set the HTTPD session context
*
* This API will be called by the HAP Core to set the context associated with a given
* session. It is generally used to maintain pairing information.
*
* @param[in] req HTTPD Request structure.
* @param[in] ctx The context to be set for the given session.
* @param[in] free_fn Pointer to a function that will be used by the HTTP Server to clear the context when the session closes
* @param[in] ignore_ctx_changes Flag to indicate if the HTTP Server should ignore changes to the context across different requests.
* If set to false, the server will try clearing the old context, if it detects any change.
*
* @return ESP_OK in success
* @return ESP_FAIL if req is nULL
*/
esp_err_t hap_platform_httpd_set_sess_ctx(httpd_req_t *req, void *ctx, httpd_free_ctx_fn_t free_ctx, bool ignore_ctx_changes);
/** Get the HTTP request method
*
* This API will be called by the HAP Core to get the HTTP request method
* in string format (Eg. GET, POST, etc.)
*
* @param[in] HTTPD Request structure.
*
* @return Pointer to a string indicating the HTTP method.
*/
const char *hap_platform_httpd_get_req_method(httpd_req_t *req);
/** Get the HTTP request URI
*
* This API will be called by the HAP Core to get the request URI string.
*
* @param[in] HTTPD Request structure.
*
* @return Pointer to the URI string.
*/
const char *hap_platform_httpd_get_req_uri(httpd_req_t *req);
/** Get the HTTP request content length
*
* This API will be called by the HAP Core to get the content length of the request.
*
* @param[in] HTTPD Request structure.
*
* @return Content length.
*/
int hap_platform_httpd_get_content_len(httpd_req_t *req);
/**
* Get the HAP HTTPD Handle
*
* If an application wants to register additional HTTPD endpoints on the same server
* instance being used by HomeKit, this API can be used to get the handle. This
* should be used only after hap_start().
*
* @return HomeKit HTTPD Handle
*/
httpd_handle_t *hap_platform_httpd_get_handle();
#ifdef __cplusplus
}
#endif
#endif /* _HAP_PLATFORM_HTTPD_H_ */