implemented HTTP REST API interface over POST requests
This commit is contained in:
parent
d007976274
commit
d307a365a9
|
|
@ -30,6 +30,7 @@ idf_component_register(
|
|||
"src/spifs.c"
|
||||
"src/HTTPServer.c"
|
||||
"src/FileServer.c"
|
||||
"src/HTTPAPISystem.c"
|
||||
"src/HTTPPrintSystem.c"
|
||||
"src/HTTPPostSystem.c"
|
||||
"src/Helpers.c"
|
||||
|
|
@ -39,7 +40,7 @@ idf_component_register(
|
|||
"src/SNTP.c"
|
||||
"src/MQTT.c"
|
||||
"src/MQTTSysHandler.c"
|
||||
"src/OTA.c"
|
||||
src/OTA.c
|
||||
# "src/mDNS.c"
|
||||
|
||||
INCLUDE_DIRS "."
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit a646e3ee0594ec2301e9b3fe6373ea274eb39e39
|
||||
Subproject commit 03ff681a61cb03a43c6f008601a6e6090e9df2bd
|
||||
|
|
@ -56,7 +56,7 @@
|
|||
#define SCRATCH_BUFSIZE 4096
|
||||
#define AUTH_DATA_MAX_LENGTH 16
|
||||
|
||||
#define HTTP_SERVER_DEBUG_LEVEL 0
|
||||
#define HTTP_SERVER_DEBUG_LEVEL 1
|
||||
|
||||
typedef enum
|
||||
{
|
||||
|
|
@ -64,7 +64,8 @@ typedef enum
|
|||
HTTP_IO_NEED_DATA, // More data needed to continue, call again later
|
||||
HTTP_IO_WAITING, // Waiting for asynchronous process to complete, call again later
|
||||
HTTP_IO_REDIRECT,
|
||||
HTTP_IO_DONE_NOREFRESH
|
||||
HTTP_IO_DONE_NOREFRESH,
|
||||
HTTP_IO_DONE_API
|
||||
} HTTP_IO_RESULT;
|
||||
|
||||
|
||||
|
|
@ -89,6 +90,7 @@ typedef struct
|
|||
esp_err_t start_file_server(void);
|
||||
HTTP_IO_RESULT HTTPPostApp(httpd_req_t *req, const char *filename, char *PostData);
|
||||
int HTTPPrint(httpd_req_t *req, char* buf, char* var);
|
||||
HTTP_IO_RESULT HTTPPostSysAPI(httpd_req_t *req, char *PostData);
|
||||
|
||||
esp_err_t download_get_handler(httpd_req_t *req);
|
||||
esp_err_t upload_post_handler(httpd_req_t *req);
|
||||
|
|
|
|||
|
|
@ -38,5 +38,4 @@ void regHTTPPrintCustom(int (*print_handler)(httpd_req_t *req, char *buf, char *
|
|||
//User handler of variables 'var1=value1&var2=value2' styled in POST requests.
|
||||
void regAfterPostHandlerCustom(HTTP_IO_RESULT (*post_handler)(httpd_req_t *req, const char *filename, char *PostData));
|
||||
|
||||
|
||||
#endif /* COMPONENTS_WEBGUIAPP_INCLUDE_USERCALLBACKS_H_ */
|
||||
|
|
|
|||
56
src/HTTPAPISystem.c
Normal file
56
src/HTTPAPISystem.c
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
/* Copyright 2023 Bogdan Pilyugin
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* File name: HTTPAPISystem.c
|
||||
* Project: webguiapp_ref_implement
|
||||
* Created on: 2023-06-10
|
||||
* Author: bogdan
|
||||
* Description:
|
||||
*/
|
||||
|
||||
#include "HTTPServer.h"
|
||||
#include "jWrite.h"
|
||||
#include "jRead.h"
|
||||
|
||||
#define API_VER "1.00"
|
||||
|
||||
HTTP_IO_RESULT HTTPPostSysAPI(httpd_req_t *req, char *PostData)
|
||||
{
|
||||
char data[1024];
|
||||
httpd_req_get_hdr_value_str(req, "Content-Type", (char*) data, 31);
|
||||
if (!memcmp(data, "application/json", sizeof("application/json")))
|
||||
{
|
||||
char key[32] = {0};
|
||||
struct jReadElement result;
|
||||
jRead(PostData, "", &result);
|
||||
if (result.dataType == JREAD_OBJECT)
|
||||
{
|
||||
jRead_string(PostData, "{'key'", key, sizeof(key), NULL);
|
||||
}
|
||||
|
||||
//ESP_LOGI(TAG, "JSON data:%s", PostData);
|
||||
jwOpen(data, sizeof(data), JW_OBJECT, JW_COMPACT);
|
||||
jwObj_string("apiver", API_VER);
|
||||
jwObj_string("key", key);;
|
||||
jwObj_raw("result", "OK");
|
||||
jwEnd();
|
||||
jwClose();
|
||||
httpd_resp_sendstr(req, data);
|
||||
return HTTP_IO_DONE_API;
|
||||
}
|
||||
|
||||
httpd_resp_set_status(req, HTTPD_400);
|
||||
return HTTP_IO_DONE_API;
|
||||
}
|
||||
|
||||
|
|
@ -35,6 +35,7 @@ const char url_adapters[] = "adapters.html";
|
|||
const char url_services[] = "services.html";
|
||||
const char url_system[] = "system.html";
|
||||
const char url_reboot[] = "reboot.html";
|
||||
const char url_sysapi[] = "sysapi";
|
||||
|
||||
static HTTP_IO_RESULT AfterPostHandler(httpd_req_t *req, const char *filename, char *PostData);
|
||||
static HTTP_IO_RESULT HTTPPostAdaptersSettings(httpd_req_t *req, char *PostData);
|
||||
|
|
@ -49,6 +50,7 @@ void regAfterPostHandlerCustom(HTTP_IO_RESULT (*post_handler)(httpd_req_t *req,
|
|||
AfterPostHandlerCust = post_handler;
|
||||
}
|
||||
|
||||
|
||||
HTTP_IO_RESULT HTTPPostApp(httpd_req_t *req, const char *filename, char *PostData)
|
||||
{
|
||||
const char *pt = filename + 1;
|
||||
|
|
@ -74,6 +76,8 @@ HTTP_IO_RESULT HTTPPostApp(httpd_req_t *req, const char *filename, char *PostDat
|
|||
break;
|
||||
case HTTP_IO_DONE_NOREFRESH:
|
||||
break;
|
||||
case HTTP_IO_DONE_API:
|
||||
break;
|
||||
break;
|
||||
}
|
||||
return res;
|
||||
|
|
@ -81,6 +85,8 @@ HTTP_IO_RESULT HTTPPostApp(httpd_req_t *req, const char *filename, char *PostDat
|
|||
|
||||
static HTTP_IO_RESULT AfterPostHandler(httpd_req_t *req, const char *filename, char *PostData)
|
||||
{
|
||||
if (!memcmp(filename, url_sysapi, sizeof(url_sysapi)))
|
||||
return HTTPPostSysAPI(req, PostData);
|
||||
if (!memcmp(filename, url_adapters, sizeof(url_adapters)))
|
||||
return HTTPPostAdaptersSettings(req, PostData);
|
||||
if (!memcmp(filename, url_services, sizeof(url_services)))
|
||||
|
|
@ -91,6 +97,7 @@ static HTTP_IO_RESULT AfterPostHandler(httpd_req_t *req, const char *filename, c
|
|||
if (!memcmp(filename, url_reboot, sizeof(url_reboot)))
|
||||
return HTTPPostReboot(req, PostData);
|
||||
|
||||
|
||||
// If not found target URL here, try to call custom code
|
||||
if (AfterPostHandlerCust != NULL)
|
||||
return AfterPostHandlerCust(req, filename, PostData);
|
||||
|
|
@ -98,6 +105,9 @@ static HTTP_IO_RESULT AfterPostHandler(httpd_req_t *req, const char *filename, c
|
|||
return HTTP_IO_DONE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static HTTP_IO_RESULT HTTPPostAdaptersSettings(httpd_req_t *req, char *PostData)
|
||||
{
|
||||
char tmp[33];
|
||||
|
|
|
|||
|
|
@ -220,11 +220,6 @@ static esp_err_t POSTHandler(httpd_req_t *req)
|
|||
req->uri,
|
||||
sizeof(filepath));
|
||||
|
||||
if (!memcmp(filename, "/api", 4))
|
||||
{
|
||||
return RestApiHandler(req);
|
||||
}
|
||||
|
||||
http_res = HTTPPostApp(req, filename, buf);
|
||||
|
||||
if (http_res == HTTP_IO_DONE)
|
||||
|
|
@ -247,6 +242,11 @@ static esp_err_t POSTHandler(httpd_req_t *req)
|
|||
httpd_resp_send(req, NULL, 0); // Response body can be empty
|
||||
return ESP_OK;
|
||||
}
|
||||
else if (http_res == HTTP_IO_DONE_API)
|
||||
{
|
||||
httpd_resp_send(req, NULL, 0); // Response body can be empty
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user