1 /******************************************************************************
4 * Copyright (c) 2021, longpanda <admin@ventoy.net>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 3 of the
9 * License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
20 #ifndef __VENTOY_HTTP_H__
21 #define __VENTOY_HTTP_H__
25 #define MAX_LANGUAGE 256
32 typedef enum bios_mode
44 typedef enum plugin_type
46 plugin_type_control
= 0,
48 plugin_type_menu_alias
,
50 plugin_type_menu_class
,
51 plugin_type_auto_install
,
52 plugin_type_persistence
,
53 plugin_type_injection
,
54 plugin_type_conf_replace
,
56 plugin_type_image_list
,
57 plugin_type_auto_memdisk
,
63 typedef struct data_control
65 int default_menu_mode
;
67 int filter_dot_underscore
;
68 int sort_casesensitive
;
77 int win11_bypass_check
;
79 int secondary_menu_timeout
;
82 int password_asterisk
;
83 char default_search_root
[MAX_PATH
];
84 char default_image
[MAX_PATH
];
85 char default_kbd_layout
[32];
86 char help_text_language
[32];
87 char menu_language
[32];
90 #define display_mode_gui 0
91 #define display_mode_cli 1
92 #define display_mode_serial 2
93 #define display_mode_ser_console 3
95 typedef struct path_node
98 struct path_node
*next
;
101 typedef struct data_theme
108 char ventoy_left
[32];
110 char ventoy_color
[32];
111 char serial_param
[256];
113 path_node
*fontslist
;
116 #define path_type_file 0
117 #define path_type_dir 1
119 typedef struct data_alias_node
124 struct data_alias_node
*next
;
127 typedef struct data_alias
129 data_alias_node
*list
;
133 typedef struct data_tip_node
138 struct data_tip_node
*next
;
141 typedef struct data_tip
150 #define class_type_key 0
151 #define class_type_dir 1
152 #define class_type_parent 2
153 typedef struct data_class_node
158 struct data_class_node
*next
;
161 typedef struct data_class
163 data_class_node
*list
;
167 typedef struct data_auto_memdisk
172 typedef struct data_image_list
178 typedef struct menu_password
183 struct menu_password
*next
;
186 typedef struct data_password
199 typedef struct conf_replace_node
205 struct conf_replace_node
*next
;
207 typedef struct data_conf_replace
209 conf_replace_node
*list
;
212 typedef struct injection_node
216 char archive
[MAX_PATH
];
217 struct injection_node
*next
;
219 typedef struct data_injection
221 injection_node
*list
;
226 typedef struct dud_node
231 struct dud_node
*next
;
234 typedef struct data_dud
239 typedef struct auto_install_node
249 struct auto_install_node
*next
;
252 typedef struct data_auto_install
254 auto_install_node
*list
;
257 typedef struct persistence_node
267 struct persistence_node
*next
;
270 typedef struct data_persistence
272 persistence_node
*list
;
278 #define ventoy_save_plug(plug) \
280 for (i = 0; i < bios_max; i++) \
282 scnprintf(title, sizeof(title), "%s%s", #plug, g_json_title_postfix[i]);\
283 g_json_exist[plugin_type_##plug][i] = 0;\
284 if (ventoy_data_cmp_##plug(g_data_##plug + i, g_data_##plug + bios_max))\
286 g_json_exist[plugin_type_##plug][i] = 1;\
287 pos += ventoy_data_save_##plug(g_data_##plug + i, title, JSON_SAVE_BUFFER + pos, JSON_BUF_MAX - pos);\
294 #define api_get_func(conn, json, name) \
301 VTOY_JSON_FMT_BEGIN(pos, JSON_BUFFER, JSON_BUF_MAX);\
302 VTOY_JSON_FMT_ARY_BEGIN();\
304 for (i = 0; i <= bios_max; i++)\
306 __uiCurPos += ventoy_data_json_##name(g_data_##name + i, JSON_BUFFER + __uiCurPos, JSON_BUF_MAX - __uiCurPos);\
307 VTOY_JSON_FMT_COMA();\
310 VTOY_JSON_FMT_ARY_END();\
311 VTOY_JSON_FMT_END(pos);\
313 ventoy_json_buffer(conn, JSON_BUFFER, pos);\
317 #define vtoy_list_free(type, list) \
319 type *__next = NULL;\
320 type *__node = list;\
323 __next = __node->next;\
330 #define vtoy_list_del(last, node, LIST, field) \
331 for (last = node = LIST; node; node = node->next) \
333 if (strcmp(node->field, field) == 0)\
341 last->next = node->next;\
351 #define vtoy_list_del_ex(last, node, LIST, field, cb) \
352 for (last = node = LIST; node; node = node->next) \
354 if (strcmp(node->field, field) == 0)\
362 last->next = node->next;\
372 #define vtoy_list_add(LIST, cur, node) \
376 while (cur && cur->next)\
389 #define ventoy_parse_json(name) \
392 int __len = strlen(#name);\
393 if (strncmp(#name, node->pcName, __len) == 0)\
395 for (__loop = 0; __loop < bios_max; __loop++)\
397 if (strcmp(g_json_title_postfix[__loop], node->pcName + __len) == 0)\
399 vlog("json parse <%s>\n", node->pcName);\
400 ventoy_parse_##name(node, g_data_##name + __loop);\
407 #define CONTROL_PARSE_INT_DEF_0(node, val) \
408 if (node->unData.pcStrVal[0] == '1') val = 1
410 #define CONTROL_PARSE_INT_DEF_1(node, val) \
411 if (node->unData.pcStrVal[0] == '0') val = 0
413 #define VTOY_JSON_INT(key, val) vtoy_json_get_int(json, key, &val)
414 #define VTOY_JSON_STR(key, buf) vtoy_json_get_string(json, key, sizeof(buf), buf)
415 #define VTOY_JSON_STR_EX(key) vtoy_json_get_string_ex(json, key)
417 typedef int (*ventoy_json_callback
)(struct mg_connection
*conn
, VTOY_JSON
*json
);
418 typedef struct JSON_CB
421 ventoy_json_callback callback
;
424 int ventoy_http_init(void);
425 void ventoy_http_exit(void);
426 int ventoy_http_start(const char *ip
, const char *port
);
427 int ventoy_http_stop(void);
428 int ventoy_data_save_all(void);
429 int ventoy_data_real_save_all(int apilock
);
431 #endif /* __VENTOY_HTTP_H__ */