12#include "lwip/apps/fs.h"
27static uint16_t num_rest_endpoints = 0;
29void rest_init_endpoints(
const struct rest_endpoint *endpoints, uint16_t num_endpoints)
32 num_rest_endpoints = num_endpoints;
35int restfs_printf(
struct restfs_file *rest_file,
const char *fmt, ...)
37 struct fs_file *file = rest_file->
fs_file;
40 char *data = (
char *)file->pextension;
45 bytes_written = vsnprintf(data + file->index, (file->len - file->index), fmt, args);
48 file->index += bytes_written;
52int restfs_write(
struct restfs_file *rest_file,
const uint8_t *buff, uint16_t len)
54 struct fs_file *file = rest_file->
fs_file;
58 char *data = (
char *)file->pextension;
59 uint16_t bytes_written = (len < (file->len - file->index) ? len : (file->len - file->index));
61 memcpy(data + file->index, buff, bytes_written);
62 file->index += bytes_written;
67int restfs_alloc_buffer(
struct restfs_file *rest_file, uint16_t size)
69 struct fs_file *file = rest_file->
fs_file;
71 MMOSAL_ASSERT((file->pextension == NULL) && (file->data == NULL));
73 file->pextension = mem_malloc(size);
75 if (file->pextension != NULL)
77 memset(file->pextension, 0, size);
78 file->data = (
const char *)file->pextension;
85void restfs_write_const(
struct restfs_file *rest_file,
const char *str)
87 struct fs_file *file = rest_file->
fs_file;
89 MMOSAL_ASSERT((file->pextension == NULL) && (file->data == NULL));
92 file->index = strlen(str);
95char *restfs_claim_raw_buffer(
struct restfs_file *rest_file)
97 struct fs_file *file = rest_file->
fs_file;
99 MMOSAL_ASSERT((file->pextension != NULL) && (file->data != NULL));
101 char *buff = (
char *)file->pextension;
102 file->pextension = NULL;
103 return buff + file->index;
106void restfs_release_raw_buffer(
struct restfs_file *rest_file, uint16_t wr_len)
108 struct fs_file *file = rest_file->
fs_file;
110 MMOSAL_ASSERT((file->pextension == NULL) && (file->data != NULL));
112 file->index += wr_len;
113 file->pextension = (
char *)file->data;
119int fs_open_custom(
struct fs_file *file,
const char *name)
121 for (
int i = 0; i < num_rest_endpoints; i++)
126 memset(file, 0,
sizeof(*file));
130 file->len = file->index;
133 file->flags |= FS_FILE_FLAGS_HEADER_PERSISTENT;
141void fs_close_custom(
struct fs_file *file)
143 if (file && file->pextension)
145 mem_free(file->pextension);
146 file->pextension = NULL;
150int 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