12#include "lwip/apps/fs.h"
26static uint16_t num_rest_endpoints = 0;
28void rest_init_endpoints(
const struct rest_endpoint* endpoints, uint16_t num_endpoints)
31 num_rest_endpoints = num_endpoints;
34int restfs_printf(
struct restfs_file *rest_file,
const char *fmt, ...)
36 struct fs_file *file = rest_file->
fs_file;
39 char *data = (
char *)file->pextension;
44 bytes_written = vsnprintf(data + file->index, (file->len - file->index), fmt, args);
47 file->index += bytes_written;
51int restfs_write(
struct restfs_file *rest_file,
const uint8_t *buff, uint16_t len)
53 struct fs_file *file = rest_file->
fs_file;
57 char *data = (
char *)file->pextension;
58 uint16_t bytes_written = (len < (file->len - file->index) ? len : (file->len - file->index));
60 memcpy(data + file->index, buff, bytes_written);
61 file->index += bytes_written;
66int restfs_alloc_buffer(
struct restfs_file *rest_file, uint16_t size)
68 struct fs_file *file = rest_file->
fs_file;
70 MMOSAL_ASSERT((file->pextension == NULL) && (file->data == NULL));
72 file->pextension = mem_malloc(size);
74 if (file->pextension != NULL)
76 memset(file->pextension, 0, size);
77 file->data = (
const char *) file->pextension;
84void restfs_write_const(
struct restfs_file *rest_file,
const char* str)
86 struct fs_file *file = rest_file->
fs_file;
88 MMOSAL_ASSERT((file->pextension == NULL) && (file->data == NULL));
91 file->index = strlen(str);
94char* restfs_claim_raw_buffer(
struct restfs_file *rest_file)
96 struct fs_file *file = rest_file->
fs_file;
98 MMOSAL_ASSERT((file->pextension != NULL) && (file->data != NULL));
100 char *buff = (
char *)file->pextension;
101 file->pextension = NULL;
102 return buff + file->index;
105void restfs_release_raw_buffer(
struct restfs_file *rest_file, uint16_t wr_len)
107 struct fs_file *file = rest_file->
fs_file;
109 MMOSAL_ASSERT((file->pextension == NULL) && (file->data != NULL));
111 file->index += wr_len;
112 file->pextension = (
char*) file->data;
118int fs_open_custom(
struct fs_file *file,
const char *name)
120 for (
int i = 0; i < num_rest_endpoints; i++)
127 memset(file, 0,
sizeof(*file));
131 file->len = file->index;
134 file->flags |= FS_FILE_FLAGS_HEADER_PERSISTENT;
142void fs_close_custom(
struct fs_file *file)
144 if (file && file->pextension)
146 mem_free(file->pextension);
147 file->pextension = NULL;
151int fs_read_custom(
struct fs_file *file,
char *buffer,
int count)
#define MMOSAL_ASSERT(expr)
Assert that the given expression evaluates to true and abort execution if not.
static const struct rest_endpoint rest_endpoints[]
Vector table of rest endpoints.
rest_endpoint_handler_t user_function
User defined function to call when this endpoint is requested by a client.
Opaque object used for writing REST output data.
struct fs_file * fs_file
lwIP httpd custom file object