network/http_server/requests/json_parser.c
/*
* EVALUATION AND USE OF THIS SOFTWARE IS SUBJECT TO THE TERMS AND
* CONDITIONS OF THE CONTROLLING LICENSE AGREEMENT FOUND AT LICENSE.md
* IN THIS SDK. IF YOU DO NOT AGREE TO THE LICENSE TERMS AND CONDITIONS,
* PLEASE RETURN ALL SOURCE FILES TO SILICON LABORATORIES.
* (c) Copyright 2018, Silicon Laboratories Inc. All rights reserved.
*/
#include "gos.h"
#include "common.h"
extern bool led_value;
/*************************************************************************************************
* This handles a POST request with JSON formated data
* POST http://<domain>/json_parser
*
* {
* "light" : <true/false>,
* "msg" : "<msg_str>",
* "retval": "<retval_str>"
* }
*/
{
gos_result_t result;
char json_str[256];
uint16_t bytes_read;
gos_json_parse_context_t *context;
{
}
else if (GOS_FAILED(result, gos_hs_read_post_data(request, (uint8_t*)json_str, sizeof(json_str)-1, &bytes_read)))
{
}
else if (bytes_read == 0)
{
}
{
.buffer = json_str,
.buffer_len = bytes_read
};
gos_json_parse_context_init(&context, &cfg);
{
gos_hs_return_status_code(request, 400, "<h1>Failed to parse JSON</h1>");
goto exit;
}
(light_tok == NULL) || (light_tok->next == NULL) ||
(retval_tok == NULL) || (retval_tok->next == NULL))
{
gos_hs_return_status_code(request, 400, "<h1>JSON not formatted correctly</h1>" \
"Must be of the form:<br />" \
"{\"light\":<true/false>,\"msg\":\"<msg_str>\",\"retval\":\"<retval_str>\"}");
goto exit;
}
led_value = light_tok->next->data.boolean;
gos_gpio_set(PLATFORM_STD_LED, led_value ? PLATFORM_LED_ACTIVE_STATE : !PLATFORM_LED_ACTIVE_STATE);
char buffer[64];
int len = snprintf(buffer, sizeof(buffer), "<h1>Led value: %d</h1>", led_value);
if (GOS_FAILED(result, gos_hs_write_reply_header(request, "text/html", len, GOS_HS_RESPONSE_FLAG_NONE)))
{
}
{
}
exit:
gos_json_parse_context_deinit(context);
return result;
}