2#line 1 "mongoose/src/mg_common.h"
23#ifndef CS_MONGOOSE_SRC_COMMON_H_
24#define CS_MONGOOSE_SRC_COMMON_H_
26#define MG_VERSION "6.14"
35#line 1 "common/platform.h"
37#ifndef CS_COMMON_PLATFORM_H_
38#define CS_COMMON_PLATFORM_H_
53#define CS_P_TM4C129 14
56#define CS_P_NXP_LPC 13
57#define CS_P_NXP_KINETIS 9
67#if defined(TARGET_IS_MSP432P4XX) || defined(__MSP432P401R__)
68#define CS_PLATFORM CS_P_MSP432
69#elif defined(cc3200) || defined(TARGET_IS_CC3200)
70#define CS_PLATFORM CS_P_CC3200
71#elif defined(cc3220) || defined(TARGET_IS_CC3220)
72#define CS_PLATFORM CS_P_CC3220
73#elif defined(__unix__) || defined(__APPLE__)
74#define CS_PLATFORM CS_P_UNIX
76#define CS_PLATFORM CS_P_WINCE
78#define CS_PLATFORM CS_P_WINDOWS
79#elif defined(__MBED__)
80#define CS_PLATFORM CS_P_MBED
81#elif defined(__USE_LPCOPEN)
82#define CS_PLATFORM CS_P_NXP_LPC
83#elif defined(FRDM_K64F) || defined(FREEDOM)
84#define CS_PLATFORM CS_P_NXP_KINETIS
86#define CS_PLATFORM CS_P_PIC32
87#elif defined(ESP_PLATFORM)
88#define CS_PLATFORM CS_P_ESP32
89#elif defined(ICACHE_FLASH)
90#define CS_PLATFORM CS_P_ESP8266
91#elif defined(TARGET_IS_TM4C129_RA0) || defined(TARGET_IS_TM4C129_RA1) || \
92 defined(TARGET_IS_TM4C129_RA2)
93#define CS_PLATFORM CS_P_TM4C129
95#define CS_PLATFORM CS_P_STM32
99#error "CS_PLATFORM is not specified and we couldn't guess it."
104#define MG_NET_IF_SOCKET 1
105#define MG_NET_IF_SIMPLELINK 2
106#define MG_NET_IF_LWIP_LOW_LEVEL 3
107#define MG_NET_IF_PIC32 4
108#define MG_NET_IF_NULL 5
110#define MG_SSL_IF_OPENSSL 1
111#define MG_SSL_IF_MBEDTLS 2
112#define MG_SSL_IF_SIMPLELINK 3
132#if !defined(PRINTF_LIKE)
133#if defined(__GNUC__) || defined(__clang__) || defined(__TI_COMPILER_VERSION__)
134#define PRINTF_LIKE(f, a) __attribute__((format(printf, f, a)))
136#define PRINTF_LIKE(f, a)
141#if (defined(__GNUC__) || defined(__clang__) || \
142 defined(__TI_COMPILER_VERSION__)) && \
144#define WEAK __attribute__((weak))
151#define NORETURN __attribute__((noreturn))
152#define NOINLINE __attribute__((noinline))
153#define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
154#define NOINSTR __attribute__((no_instrument_function))
155#define DO_NOT_WARN_UNUSED __attribute__((unused))
159#define WARN_UNUSED_RESULT
161#define DO_NOT_WARN_UNUSED
165#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
169#ifdef MG_MODULE_LINES
170#line 1 "common/platforms/platform_windows.h"
172#ifndef CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_
173#define CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_
174#if CS_PLATFORM == CS_P_WINDOWS
189#pragma warning(disable : 4127)
190#pragma warning(disable : 4204)
193#ifndef _WINSOCK_DEPRECATED_NO_WARNINGS
194#define _WINSOCK_DEPRECATED_NO_WARNINGS 1
197#ifndef _CRT_SECURE_NO_WARNINGS
198#define _CRT_SECURE_NO_WARNINGS
216#pragma comment(lib, "ws2_32.lib")
230#if defined(_MSC_VER) && _MSC_VER >= 1800
231#define strdup _strdup
235#define EINPROGRESS WSAEINPROGRESS
238#define EWOULDBLOCK WSAEWOULDBLOCK
242#define STR(x) STRX(x)
243#define __func__ __FILE__ ":" STR(__LINE__)
245#define snprintf _snprintf
246#define vsnprintf _vsnprintf
247#define to64(x) _atoi64(x)
248#if !defined(__MINGW32__) && !defined(__MINGW64__)
249#define popen(x, y) _popen((x), (y))
250#define pclose(x) _pclose(x)
251#define fileno _fileno
253#if defined(_MSC_VER) && _MSC_VER >= 1400
254#define fseeko(x, y, z) _fseeki64((x), (y), (z))
256#define fseeko(x, y, z) fseek((x), (y), (z))
258#if defined(_MSC_VER) && _MSC_VER <= 1200
266typedef signed char int8_t;
278#define UINT16_MAX 65535
281#define UINT32_MAX 4294967295
286#define INT64_FMT "I64d"
287#define INT64_X_FMT "I64x"
288#define SIZE_T_FMT "Iu"
291#define S_ISDIR(x) (((x) &_S_IFMT) == _S_IFDIR)
294#define S_ISREG(x) (((x) &_S_IFMT) == _S_IFREG)
297#define CS_DEFINE_DIRENT
301#define va_copy __va_copy
303#define va_copy(x, y) (x) = (y)
307#ifndef MG_MAX_HTTP_REQUEST_SIZE
308#define MG_MAX_HTTP_REQUEST_SIZE 8192
311#ifndef MG_MAX_HTTP_SEND_MBUF
312#define MG_MAX_HTTP_SEND_MBUF 4096
315#ifndef MG_MAX_HTTP_HEADERS
316#define MG_MAX_HTTP_HEADERS 40
319#ifndef CS_ENABLE_STDIO
320#define CS_ENABLE_STDIO 1
323#ifndef MG_ENABLE_BROADCAST
324#define MG_ENABLE_BROADCAST 1
327#ifndef MG_ENABLE_DIRECTORY_LISTING
328#define MG_ENABLE_DIRECTORY_LISTING 1
331#ifndef MG_ENABLE_FILESYSTEM
332#define MG_ENABLE_FILESYSTEM 1
335#ifndef MG_ENABLE_HTTP_CGI
336#define MG_ENABLE_HTTP_CGI MG_ENABLE_FILESYSTEM
340#define MG_NET_IF MG_NET_IF_SOCKET
346#define timegm _mkgmtime
348#define gmtime_r(a, b) \
355#ifdef MG_MODULE_LINES
356#line 1 "common/platforms/platform_unix.h"
358#ifndef CS_COMMON_PLATFORMS_PLATFORM_UNIX_H_
359#define CS_COMMON_PLATFORMS_PLATFORM_UNIX_H_
360#if CS_PLATFORM == CS_P_UNIX
363#define _XOPEN_SOURCE 600
367#ifndef __STDC_FORMAT_MACROS
368#define __STDC_FORMAT_MACROS
372#ifndef __STDC_LIMIT_MACROS
373#define __STDC_LIMIT_MACROS
377#ifndef _LARGEFILE_SOURCE
378#define _LARGEFILE_SOURCE
382#ifndef _FILE_OFFSET_BITS
383#define _FILE_OFFSET_BITS 64
386#include <arpa/inet.h>
397#include <netinet/in.h>
405#include <sys/param.h>
406#include <sys/socket.h>
407#include <sys/select.h>
410#include <sys/types.h>
414#include <machine/endian.h>
416#define LITTLE_ENDIAN __DARWIN_LITTLE_ENDIAN
417#define BIG_ENDIAN __DARWIN_BIG_ENDIAN
418#define PDP_ENDIAN __DARWIN_PDP_ENDIAN
419#define BYTE_ORDER __DARWIN_BYTE_ORDER
429#if !(defined(__cplusplus) && __cplusplus >= 201103L) && \
430 !(defined(__DARWIN_C_LEVEL) && __DARWIN_C_LEVEL >= 200809L)
431long long strtoll(
const char *,
char **,
int);
435#define INVALID_SOCKET (-1)
436#define SIZE_T_FMT "zu"
439#define to64(x) strtoll(x, NULL, 10)
440#define INT64_FMT PRId64
441#define INT64_X_FMT PRIx64
449#define va_copy __va_copy
451#define va_copy(x, y) (x) = (y)
455#define closesocket(x) close(x)
457#ifndef MG_MAX_HTTP_REQUEST_SIZE
458#define MG_MAX_HTTP_REQUEST_SIZE 8192
461#ifndef MG_MAX_HTTP_SEND_MBUF
462#define MG_MAX_HTTP_SEND_MBUF 4096
465#ifndef MG_MAX_HTTP_HEADERS
466#define MG_MAX_HTTP_HEADERS 40
469#ifndef CS_ENABLE_STDIO
470#define CS_ENABLE_STDIO 1
473#ifndef MG_ENABLE_BROADCAST
474#define MG_ENABLE_BROADCAST 1
477#ifndef MG_ENABLE_DIRECTORY_LISTING
478#define MG_ENABLE_DIRECTORY_LISTING 1
481#ifndef MG_ENABLE_FILESYSTEM
482#define MG_ENABLE_FILESYSTEM 1
485#ifndef MG_ENABLE_HTTP_CGI
486#define MG_ENABLE_HTTP_CGI MG_ENABLE_FILESYSTEM
490#define MG_NET_IF MG_NET_IF_SOCKET
493#ifndef MG_HOSTS_FILE_NAME
494#define MG_HOSTS_FILE_NAME "/etc/hosts"
497#ifndef MG_RESOLV_CONF_FILE_NAME
498#define MG_RESOLV_CONF_FILE_NAME "/etc/resolv.conf"
503#ifdef MG_MODULE_LINES
504#line 1 "common/platforms/platform_esp32.h"
523#ifndef CS_COMMON_PLATFORMS_PLATFORM_ESP32_H_
524#define CS_COMMON_PLATFORMS_PLATFORM_ESP32_H_
525#if CS_PLATFORM == CS_P_ESP32
532#include <machine/endian.h>
539#define SIZE_T_FMT "u"
542#define to64(x) strtoll(x, NULL, 10)
543#define INT64_FMT PRId64
544#define INT64_X_FMT PRIx64
546#define _FILE_OFFSET_BITS 32
551#define MG_NET_IF MG_NET_IF_SOCKET
554#ifndef CS_ENABLE_STDIO
555#define CS_ENABLE_STDIO 1
560#ifdef MG_MODULE_LINES
561#line 1 "common/platforms/platform_esp8266.h"
580#ifndef CS_COMMON_PLATFORMS_PLATFORM_ESP8266_H_
581#define CS_COMMON_PLATFORMS_PLATFORM_ESP8266_H_
582#if CS_PLATFORM == CS_P_ESP8266
588#include <machine/endian.h>
594#define SIZE_T_FMT "u"
597#if !defined(MGOS_VFS_DEFINE_DIRENT)
598#define CS_DEFINE_DIRENT
601#define to64(x) strtoll(x, NULL, 10)
602#define INT64_FMT PRId64
603#define INT64_X_FMT PRIx64
605#define _FILE_OFFSET_BITS 32
610#define LWIP_TIMEVAL_PRIVATE 0
615#define MG_NET_IF MG_NET_IF_SOCKET
617#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL
621#ifndef CS_ENABLE_STDIO
622#define CS_ENABLE_STDIO 1
625#define inet_ntop(af, src, dst, size) \
626 (((af) == AF_INET) ? ipaddr_ntoa_r((const ip_addr_t *) (src), (dst), (size)) \
628#define inet_pton(af, src, dst) \
629 (((af) == AF_INET) ? ipaddr_aton((src), (ip_addr_t *) (dst)) : 0)
633#ifdef MG_MODULE_LINES
634#line 1 "common/platforms/platform_cc3100.h"
653#ifndef CS_COMMON_PLATFORMS_PLATFORM_CC3100_H_
654#define CS_COMMON_PLATFORMS_PLATFORM_CC3100_H_
655#if CS_PLATFORM == CS_P_CC3100
665#define MG_NET_IF MG_NET_IF_SIMPLELINK
666#define MG_SSL_IF MG_SSL_IF_SIMPLELINK
674#include <simplelink.h>
679#define INVALID_SOCKET (-1)
681#define to64(x) strtoll(x, NULL, 10)
682#define INT64_FMT PRId64
683#define INT64_X_FMT PRIx64
684#define SIZE_T_FMT "u"
694#ifdef MG_MODULE_LINES
695#line 1 "common/platforms/platform_cc3200.h"
714#ifndef CS_COMMON_PLATFORMS_PLATFORM_CC3200_H_
715#define CS_COMMON_PLATFORMS_PLATFORM_CC3200_H_
716#if CS_PLATFORM == CS_P_CC3200
727#ifndef __TI_COMPILER_VERSION__
732#define MG_NET_IF MG_NET_IF_SIMPLELINK
733#define MG_SSL_IF MG_SSL_IF_SIMPLELINK
736#if defined(CC3200_FS_SPIFFS) && !defined(MG_ENABLE_DIRECTORY_LISTING)
737#define MG_ENABLE_DIRECTORY_LISTING 1
743#define INVALID_SOCKET (-1)
744#define SIZE_T_FMT "u"
747#define to64(x) strtoll(x, NULL, 10)
748#define INT64_FMT PRId64
749#define INT64_X_FMT PRIx64
760#ifdef __TI_COMPILER_VERSION__
762#define timeval SlTimeval_t
771#ifdef __TI_COMPILER_VERSION__
775typedef unsigned int mode_t;
790#define __S_IFMT 0170000
792#define __S_IFDIR 0040000
793#define __S_IFCHR 0020000
794#define __S_IFREG 0100000
796#define __S_ISTYPE(mode, mask) (((mode) &__S_IFMT) == (mask))
798#define S_IFDIR __S_IFDIR
799#define S_IFCHR __S_IFCHR
800#define S_IFREG __S_IFREG
801#define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR)
802#define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG)
805#if __TI_COMPILER_VERSION__ < 16000000
806#define va_copy(apc, ap) ((apc) = (ap))
815#if (defined(CC3200_FS_SPIFFS) || defined(CC3200_FS_SLFS)) && \
816 !defined(MG_ENABLE_FILESYSTEM)
817#define MG_ENABLE_FILESYSTEM 1
818#define CS_DEFINE_DIRENT
821#ifndef CS_ENABLE_STDIO
822#define CS_ENABLE_STDIO 1
831#ifdef MG_MODULE_LINES
832#line 1 "common/platforms/platform_cc3220.h"
851#ifndef CS_COMMON_PLATFORMS_PLATFORM_CC3220_H_
852#define CS_COMMON_PLATFORMS_PLATFORM_CC3220_H_
853#if CS_PLATFORM == CS_P_CC3220
864#ifndef __TI_COMPILER_VERSION__
869#define MG_NET_IF MG_NET_IF_SIMPLELINK
871#define MG_SSL_IF MG_SSL_IF_SIMPLELINK
875#if defined(CC3220_FS_SPIFFS) && !defined(MG_ENABLE_DIRECTORY_LISTING)
876#define MG_ENABLE_DIRECTORY_LISTING 1
882#define INVALID_SOCKET (-1)
883#define SIZE_T_FMT "u"
886#define to64(x) strtoll(x, NULL, 10)
887#define INT64_FMT PRId64
888#define INT64_X_FMT PRIx64
899#ifdef __TI_COMPILER_VERSION__
901#define timeval SlTimeval_t
910#ifdef __TI_COMPILER_VERSION__
914typedef unsigned int mode_t;
929#define __S_IFMT 0170000
931#define __S_IFDIR 0040000
932#define __S_IFCHR 0020000
933#define __S_IFREG 0100000
935#define __S_ISTYPE(mode, mask) (((mode) &__S_IFMT) == (mask))
937#define S_IFDIR __S_IFDIR
938#define S_IFCHR __S_IFCHR
939#define S_IFREG __S_IFREG
940#define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR)
941#define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG)
945#ifndef CS_ENABLE_STDIO
946#define CS_ENABLE_STDIO 1
955#ifdef MG_MODULE_LINES
956#line 1 "common/platforms/platform_msp432.h"
975#ifndef CS_COMMON_PLATFORMS_PLATFORM_MSP432_H_
976#define CS_COMMON_PLATFORMS_PLATFORM_MSP432_H_
977#if CS_PLATFORM == CS_P_MSP432
987#ifndef __TI_COMPILER_VERSION__
992#define MG_NET_IF MG_NET_IF_SIMPLELINK
993#define MG_SSL_IF MG_SSL_IF_SIMPLELINK
998#define INVALID_SOCKET (-1)
999#define SIZE_T_FMT "u"
1002#define to64(x) strtoll(x, NULL, 10)
1003#define INT64_FMT PRId64
1004#define INT64_X_FMT PRIx64
1015#ifdef __TI_COMPILER_VERSION__
1017#define timeval SlTimeval_t
1022#ifdef __TI_COMPILER_VERSION__
1026typedef unsigned int mode_t;
1039#define stat(a, b) _stat(a, b)
1041#define __S_IFMT 0170000
1043#define __S_IFDIR 0040000
1044#define __S_IFCHR 0020000
1045#define __S_IFREG 0100000
1047#define __S_ISTYPE(mode, mask) (((mode) &__S_IFMT) == (mask))
1049#define S_IFDIR __S_IFDIR
1050#define S_IFCHR __S_IFCHR
1051#define S_IFREG __S_IFREG
1052#define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR)
1053#define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG)
1056#define va_copy(apc, ap) ((apc) = (ap))
1060#ifndef CS_ENABLE_STDIO
1061#define CS_ENABLE_STDIO 1
1064#if (defined(CC3200_FS_SPIFFS) || defined(CC3200_FS_SLFS)) && \
1065 !defined(MG_ENABLE_FILESYSTEM)
1066#define MG_ENABLE_FILESYSTEM 1
1075#ifdef MG_MODULE_LINES
1076#line 1 "common/platforms/platform_tm4c129.h"
1095#ifndef CS_COMMON_PLATFORMS_PLATFORM_TM4C129_H_
1096#define CS_COMMON_PLATFORMS_PLATFORM_TM4C129_H_
1097#if CS_PLATFORM == CS_P_TM4C129
1102#include <inttypes.h>
1107#ifndef __TI_COMPILER_VERSION__
1109#include <sys/time.h>
1112#define SIZE_T_FMT "u"
1115#define to64(x) strtoll(x, NULL, 10)
1116#define INT64_FMT PRId64
1117#define INT64_X_FMT PRIx64
1121#include <lwip/opt.h>
1123#define MG_NET_IF MG_NET_IF_SOCKET
1125#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL
1128#elif MG_NET_IF == MG_NET_IF_SIMPLELINK
1132#ifndef CS_ENABLE_STDIO
1133#define CS_ENABLE_STDIO 1
1136#ifdef __TI_COMPILER_VERSION__
1138#define va_copy(apc, ap) ((apc) = (ap))
1147#ifdef MG_MODULE_LINES
1148#line 1 "common/platforms/platform_mbed.h"
1167#ifndef CS_COMMON_PLATFORMS_PLATFORM_MBED_H_
1168#define CS_COMMON_PLATFORMS_PLATFORM_MBED_H_
1169#if CS_PLATFORM == CS_P_MBED
1182#include <inttypes.h>
1186#include <sys/stat.h>
1187#include <sys/types.h>
1194#ifndef CS_ENABLE_STDIO
1195#define CS_ENABLE_STDIO 1
1204#if defined(__ARMCC_VERSION) || defined(__ICCARM__)
1205#define _TIMEVAL_DEFINED
1206#define gettimeofday _gettimeofday
1217#if MG_NET_IF == MG_NET_IF_SIMPLELINK
1219#define MG_SIMPLELINK_NO_OSI 1
1221#include <simplelink.h>
1224#define INVALID_SOCKET (-1)
1226#define to64(x) strtoll(x, NULL, 10)
1227#define INT64_FMT PRId64
1228#define INT64_X_FMT PRIx64
1229#define SIZE_T_FMT "u"
1243#ifdef MG_MODULE_LINES
1244#line 1 "common/platforms/platform_nrf51.h"
1262#ifndef CS_COMMON_PLATFORMS_PLATFORM_NRF51_H_
1263#define CS_COMMON_PLATFORMS_PLATFORM_NRF51_H_
1264#if CS_PLATFORM == CS_P_NRF51
1268#include <inttypes.h>
1273#define to64(x) strtoll(x, NULL, 10)
1275#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL
1277#define MG_ENABLE_IPV6 1
1283#if !defined(__ARMCC_VERSION)
1284#define LWIP_TIMEVAL_PRIVATE 0
1290#define INT64_FMT PRId64
1291#define SIZE_T_FMT "u"
1296#define CS_ENABLE_STRDUP defined(__ARMCC_VERSION)
1300#ifdef MG_MODULE_LINES
1301#line 1 "common/platforms/platform_nrf52.h"
1319#ifndef CS_COMMON_PLATFORMS_PLATFORM_NRF52_H_
1320#define CS_COMMON_PLATFORMS_PLATFORM_NRF52_H_
1321#if CS_PLATFORM == CS_P_NRF52
1326#include <inttypes.h>
1332#define to64(x) strtoll(x, NULL, 10)
1334#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL
1336#define MG_ENABLE_IPV6 1
1346#if !defined(__ARMCC_VERSION)
1347#define LWIP_TIMEVAL_PRIVATE 0
1350#define INT64_FMT PRId64
1351#define SIZE_T_FMT "u"
1356#define CS_ENABLE_STRDUP defined(__ARMCC_VERSION)
1360#ifdef MG_MODULE_LINES
1361#line 1 "common/platforms/simplelink/cs_simplelink.h"
1380#ifndef CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_
1381#define CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_
1383#if defined(MG_NET_IF) && MG_NET_IF == MG_NET_IF_SIMPLELINK
1386#if !defined(__SIMPLELINK_H__)
1390#ifndef __TI_COMPILER_VERSION__
1400#if CS_PLATFORM == CS_P_CC3220
1401#include <ti/drivers/net/wifi/porting/user.h>
1402#include <ti/drivers/net/wifi/simplelink.h>
1403#include <ti/drivers/net/wifi/sl_socket.h>
1404#include <ti/drivers/net/wifi/netapp.h>
1408#define PROVISIONING_API_H_
1409#include <simplelink/user.h>
1410#undef PROVISIONING_API_H_
1411#undef SL_INC_STD_BSD_API_NAMING
1413#include <simplelink/include/simplelink.h>
1414#include <simplelink/include/netapp.h>
1419#define AF_INET SL_AF_INET
1421#define socklen_t SlSocklen_t
1422#define sockaddr SlSockAddr_t
1423#define sockaddr_in SlSockAddrIn_t
1424#define in_addr SlInAddr_t
1426#define SOCK_STREAM SL_SOCK_STREAM
1427#define SOCK_DGRAM SL_SOCK_DGRAM
1429#define htonl sl_Htonl
1430#define ntohl sl_Ntohl
1431#define htons sl_Htons
1432#define ntohs sl_Ntohs
1435#define EACCES SL_EACCES
1438#define EAFNOSUPPORT SL_EAFNOSUPPORT
1441#define EAGAIN SL_EAGAIN
1444#define EBADF SL_EBADF
1447#define EINVAL SL_EINVAL
1450#define ENOMEM SL_ENOMEM
1453#define EWOULDBLOCK SL_EWOULDBLOCK
1487#if SL_MAJOR_VERSION_NUM < 2
1489#define SL_ERROR_BSD_EAGAIN SL_EAGAIN
1490#define SL_ERROR_BSD_EALREADY SL_EALREADY
1491#define SL_ERROR_BSD_ENOPROTOOPT SL_ENOPROTOOPT
1492#define SL_ERROR_BSD_ESECDATEERROR SL_ESECDATEERROR
1493#define SL_ERROR_BSD_ESECSNOVERIFY SL_ESECSNOVERIFY
1494#define SL_ERROR_FS_FAILED_TO_ALLOCATE_MEM SL_FS_ERR_FAILED_TO_ALLOCATE_MEM
1495#define SL_ERROR_FS_FILE_HAS_NOT_BEEN_CLOSE_CORRECTLY \
1496 SL_FS_FILE_HAS_NOT_BEEN_CLOSE_CORRECTLY
1497#define SL_ERROR_FS_FILE_NAME_EXIST SL_FS_FILE_NAME_EXIST
1498#define SL_ERROR_FS_FILE_NOT_EXISTS SL_FS_ERR_FILE_NOT_EXISTS
1499#define SL_ERROR_FS_NO_AVAILABLE_NV_INDEX SL_FS_ERR_NO_AVAILABLE_NV_INDEX
1500#define SL_ERROR_FS_NOT_ENOUGH_STORAGE_SPACE SL_FS_ERR_NO_AVAILABLE_BLOCKS
1501#define SL_ERROR_FS_NOT_SUPPORTED SL_FS_ERR_NOT_SUPPORTED
1502#define SL_ERROR_FS_WRONG_FILE_NAME SL_FS_WRONG_FILE_NAME
1503#define SL_ERROR_FS_INVALID_HANDLE SL_FS_ERR_INVALID_HANDLE
1504#define SL_NETCFG_MAC_ADDRESS_GET SL_MAC_ADDRESS_GET
1505#define SL_SOCKET_FD_ZERO SL_FD_ZERO
1506#define SL_SOCKET_FD_SET SL_FD_SET
1507#define SL_SOCKET_FD_ISSET SL_FD_ISSET
1508#define SL_SO_SECURE_DOMAIN_NAME_VERIFICATION SO_SECURE_DOMAIN_NAME_VERIFICATION
1510#define SL_FS_READ FS_MODE_OPEN_READ
1511#define SL_FS_WRITE FS_MODE_OPEN_WRITE
1513#define SL_FI_FILE_SIZE(fi) ((fi).FileLen)
1514#define SL_FI_FILE_MAX_SIZE(fi) ((fi).AllocatedLen)
1516#define SlDeviceVersion_t SlVersionFull
1517#define sl_DeviceGet sl_DevGet
1518#define SL_DEVICE_GENERAL SL_DEVICE_GENERAL_CONFIGURATION
1519#define SL_LEN_TYPE _u8
1520#define SL_OPT_TYPE _u8
1524#define FS_MODE_OPEN_CREATE(max_size, flag) \
1525 (SL_FS_CREATE | SL_FS_CREATE_MAX_SIZE(max_size))
1526#define SL_FI_FILE_SIZE(fi) ((fi).Len)
1527#define SL_FI_FILE_MAX_SIZE(fi) ((fi).MaxSize)
1529#define SL_LEN_TYPE _u16
1530#define SL_OPT_TYPE _u16
1539#ifdef MG_MODULE_LINES
1540#line 1 "common/platforms/platform_wince.h"
1542#ifndef CS_COMMON_PLATFORMS_PLATFORM_WINCE_H_
1543#define CS_COMMON_PLATFORMS_PLATFORM_WINCE_H_
1545#if CS_PLATFORM == CS_P_WINCE
1559#pragma warning(disable : 4127)
1560#pragma warning(disable : 4204)
1562#ifndef _WINSOCK_DEPRECATED_NO_WARNINGS
1563#define _WINSOCK_DEPRECATED_NO_WARNINGS 1
1566#ifndef _CRT_SECURE_NO_WARNINGS
1567#define _CRT_SECURE_NO_WARNINGS
1577#pragma comment(lib, "ws2.lib")
1579#include <winsock2.h>
1580#include <ws2tcpip.h>
1583#define strdup _strdup
1586#define EINPROGRESS WSAEINPROGRESS
1590#define EWOULDBLOCK WSAEWOULDBLOCK
1594#define EAGAIN EWOULDBLOCK
1599#define STR(x) STRX(x)
1600#define __func__ __FILE__ ":" STR(__LINE__)
1603#define snprintf _snprintf
1604#define fileno _fileno
1605#define vsnprintf _vsnprintf
1606#define sleep(x) Sleep((x) *1000)
1607#define to64(x) _atoi64(x)
1610#if defined(_MSC_VER) && _MSC_VER >= 1400
1611#define fseeko(x, y, z) _fseeki64((x), (y), (z))
1613#define fseeko(x, y, z) fseek((x), (y), (z))
1621typedef signed char int8_t;
1635#define UINT16_MAX 65535
1639#define UINT32_MAX 4294967295
1646#define INT64_FMT "I64d"
1647#define INT64_X_FMT "I64x"
1649#define SIZE_T_FMT "u"
1652#define CS_DEFINE_DIRENT
1656#define va_copy __va_copy
1658#define va_copy(x, y) (x) = (y)
1662#ifndef MG_MAX_HTTP_REQUEST_SIZE
1663#define MG_MAX_HTTP_REQUEST_SIZE 8192
1666#ifndef MG_MAX_HTTP_SEND_MBUF
1667#define MG_MAX_HTTP_SEND_MBUF 4096
1670#ifndef MG_MAX_HTTP_HEADERS
1671#define MG_MAX_HTTP_HEADERS 40
1674#ifndef CS_ENABLE_STDIO
1675#define CS_ENABLE_STDIO 1
1678#define abort() DebugBreak();
1687#ifndef MG_ENABLE_THREADS
1688#define MG_ENABLE_THREADS 0
1691#ifndef MG_ENABLE_FILESYSTEM
1692#define MG_ENABLE_FILESYSTEM 1
1696#define MG_NET_IF MG_NET_IF_SOCKET
1711#define ENOENT ERROR_PATH_NOT_FOUND
1715#define EACCES ERROR_ACCESS_DENIED
1719#define ENOMEM ERROR_NOT_ENOUGH_MEMORY
1722#ifndef _UINTPTR_T_DEFINED
1730#define S_ISDIR(x) (((x) &_S_IFDIR) != 0)
1734#define S_ISREG(x) (((x) &_S_IFREG) != 0)
1737int open(
const char *filename,
int oflag,
int pmode);
1743#ifdef MG_MODULE_LINES
1744#line 1 "common/platforms/platform_nxp_lpc.h"
1763#ifndef CS_COMMON_PLATFORMS_PLATFORM_NXP_LPC_H_
1764#define CS_COMMON_PLATFORMS_PLATFORM_NXP_LPC_H_
1766#if CS_PLATFORM == CS_P_NXP_LPC
1772#define SIZE_T_FMT "u"
1774#define INT64_FMT "lld"
1775#define INT64_X_FMT "llx"
1780#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL
1789#ifdef __REDLIB_INTERFACE_VERSION__
1792#define LWIP_TIMEVAL_PRIVATE 1
1794#define va_copy(d, s) __builtin_va_copy(d, s)
1796#define CS_ENABLE_TO64 1
1797#define to64(x) cs_to64(x)
1799#define CS_ENABLE_STRDUP 1
1803#include <sys/time.h>
1804#define LWIP_TIMEVAL_PRIVATE 0
1805#define to64(x) strtoll(x, NULL, 10)
1811#ifdef MG_MODULE_LINES
1812#line 1 "common/platforms/platform_nxp_kinetis.h"
1831#ifndef CS_COMMON_PLATFORMS_PLATFORM_NXP_KINETIS_H_
1832#define CS_COMMON_PLATFORMS_PLATFORM_NXP_KINETIS_H_
1834#if CS_PLATFORM == CS_P_NXP_KINETIS
1837#include <inttypes.h>
1839#include <sys/time.h>
1841#define SIZE_T_FMT "u"
1843#define to64(x) strtoll(x, NULL, 10)
1844#define INT64_FMT "lld"
1845#define INT64_X_FMT "llx"
1850#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL
1853#define LWIP_TIMEVAL_PRIVATE 0
1857#ifdef MG_MODULE_LINES
1858#line 1 "common/platforms/platform_pic32.h"
1877#ifndef CS_COMMON_PLATFORMS_PLATFORM_PIC32_H_
1878#define CS_COMMON_PLATFORMS_PLATFORM_PIC32_H_
1880#if CS_PLATFORM == CS_P_PIC32
1882#define MG_NET_IF MG_NET_IF_PIC32
1889#include <system_config.h>
1890#include <system_definitions.h>
1892#include <sys/types.h>
1895#define to64(x) strtoll(x, NULL, 10)
1897#define SIZE_T_FMT "lu"
1898#define INT64_FMT "lld"
1900#ifndef CS_ENABLE_STDIO
1901#define CS_ENABLE_STDIO 1
1909#ifdef MG_MODULE_LINES
1910#line 1 "common/platforms/platform_stm32.h"
1929#ifndef CS_COMMON_PLATFORMS_PLATFORM_STM32_H_
1930#define CS_COMMON_PLATFORMS_PLATFORM_STM32_H_
1931#if CS_PLATFORM == CS_P_STM32
1939#include <sys/stat.h>
1940#include <sys/time.h>
1941#include <sys/types.h>
1945#include <stm32_sdk_hal.h>
1947#define to64(x) strtoll(x, NULL, 10)
1948#define INT64_FMT "lld"
1949#define SIZE_T_FMT "u"
1953#ifndef CS_ENABLE_STDIO
1954#define CS_ENABLE_STDIO 1
1957#ifndef MG_ENABLE_FILESYSTEM
1958#define MG_ENABLE_FILESYSTEM 1
1963#ifdef MG_MODULE_LINES
1964#line 1 "common/platforms/lwip/mg_lwip.h"
1983#ifndef CS_COMMON_PLATFORMS_LWIP_MG_LWIP_H_
1984#define CS_COMMON_PLATFORMS_LWIP_MG_LWIP_H_
2001#if CS_PLATFORM == CS_P_NRF51 || CS_PLATFORM == CS_P_NRF52
2005#include <lwip/opt.h>
2006#include <lwip/err.h>
2007#include <lwip/ip_addr.h>
2008#include <lwip/inet.h>
2009#include <lwip/netdb.h>
2010#include <lwip/dns.h>
2012#ifndef LWIP_PROVIDE_ERRNO
2017#include <lwip/sockets.h>
2021#define LWIP_SOCKET 1
2022#include <lwip/sockets.h>
2024#define LWIP_SOCKET 0
2027#define INVALID_SOCKET (-1)
2031#if MG_NET_IF == MG_NET_IF_LWIP_LOW_LEVEL
2040#define ipX_2_ip(x) (x)
2046#ifdef MG_MODULE_LINES
2047#line 1 "common/cs_md5.h"
2066#ifndef CS_COMMON_MD5_H_
2067#define CS_COMMON_MD5_H_
2071#ifndef CS_DISABLE_MD5
2072#define CS_DISABLE_MD5 0
2082 unsigned char in[64];
2094#ifdef MG_MODULE_LINES
2095#line 1 "common/cs_sha1.h"
2114#ifndef CS_COMMON_SHA1_H_
2115#define CS_COMMON_SHA1_H_
2117#ifndef CS_DISABLE_SHA1
2118#define CS_DISABLE_SHA1 0
2132 unsigned char buffer[64];
2139 const unsigned char *text,
size_t text_len,
2140 unsigned char out[20]);
2148#ifdef MG_MODULE_LINES
2149#line 1 "common/cs_time.h"
2168#ifndef CS_COMMON_CS_TIME_H_
2169#define CS_COMMON_CS_TIME_H_
2193#ifdef MG_MODULE_LINES
2194#line 1 "common/mg_str.h"
2213#ifndef CS_COMMON_MG_STR_H_
2214#define CS_COMMON_MG_STR_H_
2240#define MG_MK_STR(str_literal) \
2241 { str_literal, sizeof(str_literal) - 1 }
2242#define MG_MK_STR_N(str_literal, len) \
2243 { str_literal, len }
2244#define MG_NULL_STR \
2304#ifdef MG_MODULE_LINES
2305#line 1 "common/mbuf.h"
2331#ifndef CS_COMMON_MBUF_H_
2332#define CS_COMMON_MBUF_H_
2337#if defined(__cplusplus)
2341#ifndef MBUF_SIZE_MULTIPLIER
2342#define MBUF_SIZE_MULTIPLIER 1.5
2345#ifndef MBUF_SIZE_MAX_HEADROOM
2347#define MBUF_SIZE_MAX_HEADROOM BUFSIZ
2349#define MBUF_SIZE_MAX_HEADROOM 1024
2413#if defined(__cplusplus)
2418#ifdef MG_MODULE_LINES
2419#line 1 "common/cs_base64.h"
2438#ifndef CS_COMMON_CS_BASE64_H_
2439#define CS_COMMON_CS_BASE64_H_
2441#ifndef DISABLE_BASE64
2442#define DISABLE_BASE64 0
2458 unsigned char chunk[3];
2487#ifdef MG_MODULE_LINES
2488#line 1 "common/str_util.h"
2507#ifndef CS_COMMON_STR_UTIL_H_
2508#define CS_COMMON_STR_UTIL_H_
2516#ifndef CS_ENABLE_STRDUP
2517#define CS_ENABLE_STRDUP 0
2520#ifndef CS_ENABLE_TO64
2521#define CS_ENABLE_TO64 0
2528#if !defined(_MSC_VER) || _MSC_VER >= 1900
2529#define CS_STRINGIFY_LIT(...) #__VA_ARGS__
2531#define CS_STRINGIFY_LIT(x) #x
2543#define CS_STRINGIFY_MACRO(x) CS_STRINGIFY_LIT(x)
2557int c_snprintf(
char *buf,
size_t buf_size,
const char *format, ...)
2576void cs_to_hex(
char *
to,
const unsigned char *p,
size_t len);
2588char *
strdup(
const char *src);
2626int mg_asprintf(
char **buf,
size_t size,
const char *fmt, ...)
2688#ifdef MG_MODULE_LINES
2689#line 1 "common/queue.h"
2724#ifndef _SYS_QUEUE_H_
2725#define _SYS_QUEUE_H_
2800#ifdef QUEUE_MACRO_DEBUG
2809#define TRACEBUF struct qm_trace trace;
2810#define TRACEBUF_INITIALIZER { __LINE__, 0, __FILE__, NULL } ,
2811#define TRASHIT(x) do {(x) = (void *)-1;} while (0)
2812#define QMD_SAVELINK(name, link) void **name = (void *)&(link)
2814#define QMD_TRACE_HEAD(head) do { \
2815 (head)->trace.prevline = (head)->trace.lastline; \
2816 (head)->trace.prevfile = (head)->trace.lastfile; \
2817 (head)->trace.lastline = __LINE__; \
2818 (head)->trace.lastfile = __FILE__; \
2821#define QMD_TRACE_ELEM(elem) do { \
2822 (elem)->trace.prevline = (elem)->trace.lastline; \
2823 (elem)->trace.prevfile = (elem)->trace.lastfile; \
2824 (elem)->trace.lastline = __LINE__; \
2825 (elem)->trace.lastfile = __FILE__; \
2829#define QMD_TRACE_ELEM(elem)
2830#define QMD_TRACE_HEAD(head)
2831#define QMD_SAVELINK(name, link)
2833#define TRACEBUF_INITIALIZER
2841#define QUEUE_TYPEOF(type) type
2843#define QUEUE_TYPEOF(type) struct type
2849#define SLIST_HEAD(name, type) \
2851 struct type *slh_first; \
2854#define SLIST_CLASS_HEAD(name, type) \
2856 class type *slh_first; \
2859#define SLIST_HEAD_INITIALIZER(head) \
2862#define SLIST_ENTRY(type) \
2864 struct type *sle_next; \
2867#define SLIST_CLASS_ENTRY(type) \
2869 class type *sle_next; \
2875#define SLIST_EMPTY(head) ((head)->slh_first == NULL)
2877#define SLIST_FIRST(head) ((head)->slh_first)
2879#define SLIST_FOREACH(var, head, field) \
2880 for ((var) = SLIST_FIRST((head)); \
2882 (var) = SLIST_NEXT((var), field))
2884#define SLIST_FOREACH_FROM(var, head, field) \
2885 for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \
2887 (var) = SLIST_NEXT((var), field))
2889#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
2890 for ((var) = SLIST_FIRST((head)); \
2891 (var) && ((tvar) = SLIST_NEXT((var), field), 1); \
2894#define SLIST_FOREACH_FROM_SAFE(var, head, field, tvar) \
2895 for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \
2896 (var) && ((tvar) = SLIST_NEXT((var), field), 1); \
2899#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \
2900 for ((varp) = &SLIST_FIRST((head)); \
2901 ((var) = *(varp)) != NULL; \
2902 (varp) = &SLIST_NEXT((var), field))
2904#define SLIST_INIT(head) do { \
2905 SLIST_FIRST((head)) = NULL; \
2908#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \
2909 SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \
2910 SLIST_NEXT((slistelm), field) = (elm); \
2913#define SLIST_INSERT_HEAD(head, elm, field) do { \
2914 SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \
2915 SLIST_FIRST((head)) = (elm); \
2918#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
2920#define SLIST_REMOVE(head, elm, type, field) do { \
2921 QMD_SAVELINK(oldnext, (elm)->field.sle_next); \
2922 if (SLIST_FIRST((head)) == (elm)) { \
2923 SLIST_REMOVE_HEAD((head), field); \
2926 QUEUE_TYPEOF(type) *curelm = SLIST_FIRST(head); \
2927 while (SLIST_NEXT(curelm, field) != (elm)) \
2928 curelm = SLIST_NEXT(curelm, field); \
2929 SLIST_REMOVE_AFTER(curelm, field); \
2931 TRASHIT(*oldnext); \
2934#define SLIST_REMOVE_AFTER(elm, field) do { \
2935 SLIST_NEXT(elm, field) = \
2936 SLIST_NEXT(SLIST_NEXT(elm, field), field); \
2939#define SLIST_REMOVE_HEAD(head, field) do { \
2940 SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \
2943#define SLIST_SWAP(head1, head2, type) do { \
2944 QUEUE_TYPEOF(type) *swap_first = SLIST_FIRST(head1); \
2945 SLIST_FIRST(head1) = SLIST_FIRST(head2); \
2946 SLIST_FIRST(head2) = swap_first; \
2952#define STAILQ_HEAD(name, type) \
2954 struct type *stqh_first; \
2955 struct type **stqh_last; \
2958#define STAILQ_CLASS_HEAD(name, type) \
2960 class type *stqh_first; \
2961 class type **stqh_last; \
2964#define STAILQ_HEAD_INITIALIZER(head) \
2965 { NULL, &(head).stqh_first }
2967#define STAILQ_ENTRY(type) \
2969 struct type *stqe_next; \
2972#define STAILQ_CLASS_ENTRY(type) \
2974 class type *stqe_next; \
2980#define STAILQ_CONCAT(head1, head2) do { \
2981 if (!STAILQ_EMPTY((head2))) { \
2982 *(head1)->stqh_last = (head2)->stqh_first; \
2983 (head1)->stqh_last = (head2)->stqh_last; \
2984 STAILQ_INIT((head2)); \
2988#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL)
2990#define STAILQ_FIRST(head) ((head)->stqh_first)
2992#define STAILQ_FOREACH(var, head, field) \
2993 for((var) = STAILQ_FIRST((head)); \
2995 (var) = STAILQ_NEXT((var), field))
2997#define STAILQ_FOREACH_FROM(var, head, field) \
2998 for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \
3000 (var) = STAILQ_NEXT((var), field))
3002#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
3003 for ((var) = STAILQ_FIRST((head)); \
3004 (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
3007#define STAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \
3008 for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \
3009 (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
3012#define STAILQ_INIT(head) do { \
3013 STAILQ_FIRST((head)) = NULL; \
3014 (head)->stqh_last = &STAILQ_FIRST((head)); \
3017#define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \
3018 if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\
3019 (head)->stqh_last = &STAILQ_NEXT((elm), field); \
3020 STAILQ_NEXT((tqelm), field) = (elm); \
3023#define STAILQ_INSERT_HEAD(head, elm, field) do { \
3024 if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \
3025 (head)->stqh_last = &STAILQ_NEXT((elm), field); \
3026 STAILQ_FIRST((head)) = (elm); \
3029#define STAILQ_INSERT_TAIL(head, elm, field) do { \
3030 STAILQ_NEXT((elm), field) = NULL; \
3031 *(head)->stqh_last = (elm); \
3032 (head)->stqh_last = &STAILQ_NEXT((elm), field); \
3035#define STAILQ_LAST(head, type, field) \
3036 (STAILQ_EMPTY((head)) ? NULL : \
3037 __containerof((head)->stqh_last, \
3038 QUEUE_TYPEOF(type), field.stqe_next))
3040#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
3042#define STAILQ_REMOVE(head, elm, type, field) do { \
3043 QMD_SAVELINK(oldnext, (elm)->field.stqe_next); \
3044 if (STAILQ_FIRST((head)) == (elm)) { \
3045 STAILQ_REMOVE_HEAD((head), field); \
3048 QUEUE_TYPEOF(type) *curelm = STAILQ_FIRST(head); \
3049 while (STAILQ_NEXT(curelm, field) != (elm)) \
3050 curelm = STAILQ_NEXT(curelm, field); \
3051 STAILQ_REMOVE_AFTER(head, curelm, field); \
3053 TRASHIT(*oldnext); \
3056#define STAILQ_REMOVE_AFTER(head, elm, field) do { \
3057 if ((STAILQ_NEXT(elm, field) = \
3058 STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \
3059 (head)->stqh_last = &STAILQ_NEXT((elm), field); \
3062#define STAILQ_REMOVE_HEAD(head, field) do { \
3063 if ((STAILQ_FIRST((head)) = \
3064 STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \
3065 (head)->stqh_last = &STAILQ_FIRST((head)); \
3068#define STAILQ_SWAP(head1, head2, type) do { \
3069 QUEUE_TYPEOF(type) *swap_first = STAILQ_FIRST(head1); \
3070 QUEUE_TYPEOF(type) **swap_last = (head1)->stqh_last; \
3071 STAILQ_FIRST(head1) = STAILQ_FIRST(head2); \
3072 (head1)->stqh_last = (head2)->stqh_last; \
3073 STAILQ_FIRST(head2) = swap_first; \
3074 (head2)->stqh_last = swap_last; \
3075 if (STAILQ_EMPTY(head1)) \
3076 (head1)->stqh_last = &STAILQ_FIRST(head1); \
3077 if (STAILQ_EMPTY(head2)) \
3078 (head2)->stqh_last = &STAILQ_FIRST(head2); \
3085#define LIST_HEAD(name, type) \
3087 struct type *lh_first; \
3090#define LIST_CLASS_HEAD(name, type) \
3092 class type *lh_first; \
3095#define LIST_HEAD_INITIALIZER(head) \
3098#define LIST_ENTRY(type) \
3100 struct type *le_next; \
3101 struct type **le_prev; \
3104#define LIST_CLASS_ENTRY(type) \
3106 class type *le_next; \
3107 class type **le_prev; \
3114#if (defined(_KERNEL) && defined(INVARIANTS))
3115#define QMD_LIST_CHECK_HEAD(head, field) do { \
3116 if (LIST_FIRST((head)) != NULL && \
3117 LIST_FIRST((head))->field.le_prev != \
3118 &LIST_FIRST((head))) \
3119 panic("Bad list head %p first->prev != head", (head)); \
3122#define QMD_LIST_CHECK_NEXT(elm, field) do { \
3123 if (LIST_NEXT((elm), field) != NULL && \
3124 LIST_NEXT((elm), field)->field.le_prev != \
3125 &((elm)->field.le_next)) \
3126 panic("Bad link elm %p next->prev != elm", (elm)); \
3129#define QMD_LIST_CHECK_PREV(elm, field) do { \
3130 if (*(elm)->field.le_prev != (elm)) \
3131 panic("Bad link elm %p prev->next != elm", (elm)); \
3134#define QMD_LIST_CHECK_HEAD(head, field)
3135#define QMD_LIST_CHECK_NEXT(elm, field)
3136#define QMD_LIST_CHECK_PREV(elm, field)
3139#define LIST_EMPTY(head) ((head)->lh_first == NULL)
3141#define LIST_FIRST(head) ((head)->lh_first)
3143#define LIST_FOREACH(var, head, field) \
3144 for ((var) = LIST_FIRST((head)); \
3146 (var) = LIST_NEXT((var), field))
3148#define LIST_FOREACH_FROM(var, head, field) \
3149 for ((var) = ((var) ? (var) : LIST_FIRST((head))); \
3151 (var) = LIST_NEXT((var), field))
3153#define LIST_FOREACH_SAFE(var, head, field, tvar) \
3154 for ((var) = LIST_FIRST((head)); \
3155 (var) && ((tvar) = LIST_NEXT((var), field), 1); \
3158#define LIST_FOREACH_FROM_SAFE(var, head, field, tvar) \
3159 for ((var) = ((var) ? (var) : LIST_FIRST((head))); \
3160 (var) && ((tvar) = LIST_NEXT((var), field), 1); \
3163#define LIST_INIT(head) do { \
3164 LIST_FIRST((head)) = NULL; \
3167#define LIST_INSERT_AFTER(listelm, elm, field) do { \
3168 QMD_LIST_CHECK_NEXT(listelm, field); \
3169 if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\
3170 LIST_NEXT((listelm), field)->field.le_prev = \
3171 &LIST_NEXT((elm), field); \
3172 LIST_NEXT((listelm), field) = (elm); \
3173 (elm)->field.le_prev = &LIST_NEXT((listelm), field); \
3176#define LIST_INSERT_BEFORE(listelm, elm, field) do { \
3177 QMD_LIST_CHECK_PREV(listelm, field); \
3178 (elm)->field.le_prev = (listelm)->field.le_prev; \
3179 LIST_NEXT((elm), field) = (listelm); \
3180 *(listelm)->field.le_prev = (elm); \
3181 (listelm)->field.le_prev = &LIST_NEXT((elm), field); \
3184#define LIST_INSERT_HEAD(head, elm, field) do { \
3185 QMD_LIST_CHECK_HEAD((head), field); \
3186 if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \
3187 LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\
3188 LIST_FIRST((head)) = (elm); \
3189 (elm)->field.le_prev = &LIST_FIRST((head)); \
3192#define LIST_NEXT(elm, field) ((elm)->field.le_next)
3194#define LIST_PREV(elm, head, type, field) \
3195 ((elm)->field.le_prev == &LIST_FIRST((head)) ? NULL : \
3196 __containerof((elm)->field.le_prev, \
3197 QUEUE_TYPEOF(type), field.le_next))
3199#define LIST_REMOVE(elm, field) do { \
3200 QMD_SAVELINK(oldnext, (elm)->field.le_next); \
3201 QMD_SAVELINK(oldprev, (elm)->field.le_prev); \
3202 QMD_LIST_CHECK_NEXT(elm, field); \
3203 QMD_LIST_CHECK_PREV(elm, field); \
3204 if (LIST_NEXT((elm), field) != NULL) \
3205 LIST_NEXT((elm), field)->field.le_prev = \
3206 (elm)->field.le_prev; \
3207 *(elm)->field.le_prev = LIST_NEXT((elm), field); \
3208 TRASHIT(*oldnext); \
3209 TRASHIT(*oldprev); \
3212#define LIST_SWAP(head1, head2, type, field) do { \
3213 QUEUE_TYPEOF(type) *swap_tmp = LIST_FIRST(head1); \
3214 LIST_FIRST((head1)) = LIST_FIRST((head2)); \
3215 LIST_FIRST((head2)) = swap_tmp; \
3216 if ((swap_tmp = LIST_FIRST((head1))) != NULL) \
3217 swap_tmp->field.le_prev = &LIST_FIRST((head1)); \
3218 if ((swap_tmp = LIST_FIRST((head2))) != NULL) \
3219 swap_tmp->field.le_prev = &LIST_FIRST((head2)); \
3225#define TAILQ_HEAD(name, type) \
3227 struct type *tqh_first; \
3228 struct type **tqh_last; \
3232#define TAILQ_CLASS_HEAD(name, type) \
3234 class type *tqh_first; \
3235 class type **tqh_last; \
3239#define TAILQ_HEAD_INITIALIZER(head) \
3240 { NULL, &(head).tqh_first, TRACEBUF_INITIALIZER }
3242#define TAILQ_ENTRY(type) \
3244 struct type *tqe_next; \
3245 struct type **tqe_prev; \
3249#define TAILQ_CLASS_ENTRY(type) \
3251 class type *tqe_next; \
3252 class type **tqe_prev; \
3259#if (defined(_KERNEL) && defined(INVARIANTS))
3260#define QMD_TAILQ_CHECK_HEAD(head, field) do { \
3261 if (!TAILQ_EMPTY(head) && \
3262 TAILQ_FIRST((head))->field.tqe_prev != \
3263 &TAILQ_FIRST((head))) \
3264 panic("Bad tailq head %p first->prev != head", (head)); \
3267#define QMD_TAILQ_CHECK_TAIL(head, field) do { \
3268 if (*(head)->tqh_last != NULL) \
3269 panic("Bad tailq NEXT(%p->tqh_last) != NULL", (head)); \
3272#define QMD_TAILQ_CHECK_NEXT(elm, field) do { \
3273 if (TAILQ_NEXT((elm), field) != NULL && \
3274 TAILQ_NEXT((elm), field)->field.tqe_prev != \
3275 &((elm)->field.tqe_next)) \
3276 panic("Bad link elm %p next->prev != elm", (elm)); \
3279#define QMD_TAILQ_CHECK_PREV(elm, field) do { \
3280 if (*(elm)->field.tqe_prev != (elm)) \
3281 panic("Bad link elm %p prev->next != elm", (elm)); \
3284#define QMD_TAILQ_CHECK_HEAD(head, field)
3285#define QMD_TAILQ_CHECK_TAIL(head, headname)
3286#define QMD_TAILQ_CHECK_NEXT(elm, field)
3287#define QMD_TAILQ_CHECK_PREV(elm, field)
3290#define TAILQ_CONCAT(head1, head2, field) do { \
3291 if (!TAILQ_EMPTY(head2)) { \
3292 *(head1)->tqh_last = (head2)->tqh_first; \
3293 (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
3294 (head1)->tqh_last = (head2)->tqh_last; \
3295 TAILQ_INIT((head2)); \
3296 QMD_TRACE_HEAD(head1); \
3297 QMD_TRACE_HEAD(head2); \
3301#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)
3303#define TAILQ_FIRST(head) ((head)->tqh_first)
3305#define TAILQ_FOREACH(var, head, field) \
3306 for ((var) = TAILQ_FIRST((head)); \
3308 (var) = TAILQ_NEXT((var), field))
3310#define TAILQ_FOREACH_FROM(var, head, field) \
3311 for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \
3313 (var) = TAILQ_NEXT((var), field))
3315#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
3316 for ((var) = TAILQ_FIRST((head)); \
3317 (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
3320#define TAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \
3321 for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \
3322 (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
3325#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
3326 for ((var) = TAILQ_LAST((head), headname); \
3328 (var) = TAILQ_PREV((var), headname, field))
3330#define TAILQ_FOREACH_REVERSE_FROM(var, head, headname, field) \
3331 for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \
3333 (var) = TAILQ_PREV((var), headname, field))
3335#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
3336 for ((var) = TAILQ_LAST((head), headname); \
3337 (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
3340#define TAILQ_FOREACH_REVERSE_FROM_SAFE(var, head, headname, field, tvar) \
3341 for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \
3342 (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
3345#define TAILQ_INIT(head) do { \
3346 TAILQ_FIRST((head)) = NULL; \
3347 (head)->tqh_last = &TAILQ_FIRST((head)); \
3348 QMD_TRACE_HEAD(head); \
3351#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
3352 QMD_TAILQ_CHECK_NEXT(listelm, field); \
3353 if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\
3354 TAILQ_NEXT((elm), field)->field.tqe_prev = \
3355 &TAILQ_NEXT((elm), field); \
3357 (head)->tqh_last = &TAILQ_NEXT((elm), field); \
3358 QMD_TRACE_HEAD(head); \
3360 TAILQ_NEXT((listelm), field) = (elm); \
3361 (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \
3362 QMD_TRACE_ELEM(&(elm)->field); \
3363 QMD_TRACE_ELEM(&(listelm)->field); \
3366#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
3367 QMD_TAILQ_CHECK_PREV(listelm, field); \
3368 (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
3369 TAILQ_NEXT((elm), field) = (listelm); \
3370 *(listelm)->field.tqe_prev = (elm); \
3371 (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \
3372 QMD_TRACE_ELEM(&(elm)->field); \
3373 QMD_TRACE_ELEM(&(listelm)->field); \
3376#define TAILQ_INSERT_HEAD(head, elm, field) do { \
3377 QMD_TAILQ_CHECK_HEAD(head, field); \
3378 if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \
3379 TAILQ_FIRST((head))->field.tqe_prev = \
3380 &TAILQ_NEXT((elm), field); \
3382 (head)->tqh_last = &TAILQ_NEXT((elm), field); \
3383 TAILQ_FIRST((head)) = (elm); \
3384 (elm)->field.tqe_prev = &TAILQ_FIRST((head)); \
3385 QMD_TRACE_HEAD(head); \
3386 QMD_TRACE_ELEM(&(elm)->field); \
3389#define TAILQ_INSERT_TAIL(head, elm, field) do { \
3390 QMD_TAILQ_CHECK_TAIL(head, field); \
3391 TAILQ_NEXT((elm), field) = NULL; \
3392 (elm)->field.tqe_prev = (head)->tqh_last; \
3393 *(head)->tqh_last = (elm); \
3394 (head)->tqh_last = &TAILQ_NEXT((elm), field); \
3395 QMD_TRACE_HEAD(head); \
3396 QMD_TRACE_ELEM(&(elm)->field); \
3399#define TAILQ_LAST(head, headname) \
3400 (*(((struct headname *)((head)->tqh_last))->tqh_last))
3402#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
3404#define TAILQ_PREV(elm, headname, field) \
3405 (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
3407#define TAILQ_REMOVE(head, elm, field) do { \
3408 QMD_SAVELINK(oldnext, (elm)->field.tqe_next); \
3409 QMD_SAVELINK(oldprev, (elm)->field.tqe_prev); \
3410 QMD_TAILQ_CHECK_NEXT(elm, field); \
3411 QMD_TAILQ_CHECK_PREV(elm, field); \
3412 if ((TAILQ_NEXT((elm), field)) != NULL) \
3413 TAILQ_NEXT((elm), field)->field.tqe_prev = \
3414 (elm)->field.tqe_prev; \
3416 (head)->tqh_last = (elm)->field.tqe_prev; \
3417 QMD_TRACE_HEAD(head); \
3419 *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \
3420 TRASHIT(*oldnext); \
3421 TRASHIT(*oldprev); \
3422 QMD_TRACE_ELEM(&(elm)->field); \
3425#define TAILQ_SWAP(head1, head2, type, field) do { \
3426 QUEUE_TYPEOF(type) *swap_first = (head1)->tqh_first; \
3427 QUEUE_TYPEOF(type) **swap_last = (head1)->tqh_last; \
3428 (head1)->tqh_first = (head2)->tqh_first; \
3429 (head1)->tqh_last = (head2)->tqh_last; \
3430 (head2)->tqh_first = swap_first; \
3431 (head2)->tqh_last = swap_last; \
3432 if ((swap_first = (head1)->tqh_first) != NULL) \
3433 swap_first->field.tqe_prev = &(head1)->tqh_first; \
3435 (head1)->tqh_last = &(head1)->tqh_first; \
3436 if ((swap_first = (head2)->tqh_first) != NULL) \
3437 swap_first->field.tqe_prev = &(head2)->tqh_first; \
3439 (head2)->tqh_last = &(head2)->tqh_first; \
3443#ifdef MG_MODULE_LINES
3444#line 1 "mongoose/src/mg_features.h"
3451#ifndef CS_MONGOOSE_SRC_FEATURES_H_
3452#define CS_MONGOOSE_SRC_FEATURES_H_
3454#ifndef MG_DISABLE_HTTP_DIGEST_AUTH
3455#define MG_DISABLE_HTTP_DIGEST_AUTH 0
3458#ifndef MG_DISABLE_HTTP_KEEP_ALIVE
3459#define MG_DISABLE_HTTP_KEEP_ALIVE 0
3462#ifndef MG_DISABLE_PFS
3463#define MG_DISABLE_PFS 0
3466#ifndef MG_DISABLE_WS_RANDOM_MASK
3467#define MG_DISABLE_WS_RANDOM_MASK 0
3470#ifndef MG_ENABLE_ASYNC_RESOLVER
3471#define MG_ENABLE_ASYNC_RESOLVER 1
3474#ifndef MG_ENABLE_BROADCAST
3475#define MG_ENABLE_BROADCAST 0
3478#ifndef MG_ENABLE_COAP
3479#define MG_ENABLE_COAP 0
3482#ifndef MG_ENABLE_DEBUG
3483#define MG_ENABLE_DEBUG 0
3486#ifndef MG_ENABLE_DIRECTORY_LISTING
3487#define MG_ENABLE_DIRECTORY_LISTING 0
3490#ifndef MG_ENABLE_DNS
3491#define MG_ENABLE_DNS 1
3494#ifndef MG_ENABLE_DNS_SERVER
3495#define MG_ENABLE_DNS_SERVER 0
3498#ifndef MG_ENABLE_FAKE_DAVLOCK
3499#define MG_ENABLE_FAKE_DAVLOCK 0
3502#ifndef MG_ENABLE_FILESYSTEM
3503#define MG_ENABLE_FILESYSTEM 0
3506#ifndef MG_ENABLE_GETADDRINFO
3507#define MG_ENABLE_GETADDRINFO 0
3510#ifndef MG_ENABLE_HEXDUMP
3511#define MG_ENABLE_HEXDUMP CS_ENABLE_STDIO
3514#ifndef MG_ENABLE_HTTP
3515#define MG_ENABLE_HTTP 1
3518#ifndef MG_ENABLE_HTTP_CGI
3519#define MG_ENABLE_HTTP_CGI 0
3522#ifndef MG_ENABLE_HTTP_SSI
3523#define MG_ENABLE_HTTP_SSI MG_ENABLE_FILESYSTEM
3526#ifndef MG_ENABLE_HTTP_SSI_EXEC
3527#define MG_ENABLE_HTTP_SSI_EXEC 0
3530#ifndef MG_ENABLE_HTTP_STREAMING_MULTIPART
3531#define MG_ENABLE_HTTP_STREAMING_MULTIPART 0
3534#ifndef MG_ENABLE_HTTP_WEBDAV
3535#define MG_ENABLE_HTTP_WEBDAV 0
3538#ifndef MG_ENABLE_HTTP_WEBSOCKET
3539#define MG_ENABLE_HTTP_WEBSOCKET MG_ENABLE_HTTP
3542#ifndef MG_ENABLE_IPV6
3543#define MG_ENABLE_IPV6 0
3546#ifndef MG_ENABLE_MQTT
3547#define MG_ENABLE_MQTT 1
3550#ifndef MG_ENABLE_SOCKS
3551#define MG_ENABLE_SOCKS 0
3554#ifndef MG_ENABLE_MQTT_BROKER
3555#define MG_ENABLE_MQTT_BROKER 0
3558#ifndef MG_ENABLE_SSL
3559#define MG_ENABLE_SSL 0
3562#ifndef MG_ENABLE_SYNC_RESOLVER
3563#define MG_ENABLE_SYNC_RESOLVER 0
3566#ifndef MG_ENABLE_STDIO
3567#define MG_ENABLE_STDIO CS_ENABLE_STDIO
3571#define MG_NET_IF MG_NET_IF_SOCKET
3575#define MG_SSL_IF MG_SSL_IF_OPENSSL
3578#ifndef MG_ENABLE_THREADS
3580#define MG_ENABLE_THREADS 1
3582#define MG_ENABLE_THREADS 0
3586#if MG_ENABLE_DEBUG && !defined(CS_ENABLE_DEBUG)
3587#define CS_ENABLE_DEBUG 1
3591#if MG_ENABLE_MQTT_BROKER && !MG_ENABLE_MQTT
3592#undef MG_ENABLE_MQTT
3593#define MG_ENABLE_MQTT 1
3596#ifndef MG_ENABLE_HTTP_URL_REWRITES
3597#define MG_ENABLE_HTTP_URL_REWRITES \
3598 (CS_PLATFORM == CS_P_WINDOWS || CS_PLATFORM == CS_P_UNIX)
3601#ifndef MG_ENABLE_SNTP
3602#define MG_ENABLE_SNTP 0
3605#ifndef MG_ENABLE_EXTRA_ERRORS_DESC
3606#define MG_ENABLE_EXTRA_ERRORS_DESC 0
3609#ifndef MG_ENABLE_CALLBACK_USERDATA
3610#define MG_ENABLE_CALLBACK_USERDATA 0
3613#if MG_ENABLE_CALLBACK_USERDATA
3614#define MG_UD_ARG(ud) , ud
3615#define MG_CB(cb, ud) cb, ud
3617#define MG_UD_ARG(ud)
3618#define MG_CB(cb, ud) cb
3622#ifdef MG_MODULE_LINES
3623#line 1 "mongoose/src/mg_net_if.h"
3630#ifndef CS_MONGOOSE_SRC_NET_IF_H_
3631#define CS_MONGOOSE_SRC_NET_IF_H_
3649#define MG_MAIN_IFACE 0
3756#ifdef MG_MODULE_LINES
3757#line 1 "mongoose/src/mg_ssl_if.h"
3764#ifndef CS_MONGOOSE_SRC_SSL_IF_H_
3765#define CS_MONGOOSE_SRC_SSL_IF_H_
3814#ifdef MG_MODULE_LINES
3815#line 1 "mongoose/src/mg_net.h"
3844#ifndef CS_MONGOOSE_SRC_NET_H_
3845#define CS_MONGOOSE_SRC_NET_H_
3851#ifndef MG_VPRINTF_BUFFER_SIZE
3852#define MG_VPRINTF_BUFFER_SIZE 100
3855#ifdef MG_USE_READ_WRITE
3856#define MG_RECV_FUNC(s, b, l, f) read(s, b, l)
3857#define MG_SEND_FUNC(s, b, l, f) write(s, b, l)
3859#define MG_RECV_FUNC(s, b, l, f) recv(s, b, l, f)
3860#define MG_SEND_FUNC(s, b, l, f) send(s, b, l, f)
3888#define MG_EV_ACCEPT 1
3889#define MG_EV_CONNECT 2
3892#define MG_EV_CLOSE 5
3893#define MG_EV_TIMER 6
3900#if MG_ENABLE_HEXDUMP
3903#if MG_ENABLE_BROADCAST
3948 unsigned long flags;
3950#define MG_F_LISTENING (1 << 0)
3951#define MG_F_UDP (1 << 1)
3952#define MG_F_RESOLVING (1 << 2)
3953#define MG_F_CONNECTING (1 << 3)
3954#define MG_F_SSL (1 << 4)
3955#define MG_F_SSL_HANDSHAKE_DONE (1 << 5)
3956#define MG_F_WANT_READ (1 << 6)
3957#define MG_F_WANT_WRITE (1 << 7)
3958#define MG_F_IS_WEBSOCKET (1 << 8)
3959#define MG_F_RECV_AND_CLOSE (1 << 9)
3962#define MG_F_SEND_AND_CLOSE (1 << 10)
3963#define MG_F_CLOSE_IMMEDIATELY (1 << 11)
3964#define MG_F_WEBSOCKET_NO_DEFRAG (1 << 12)
3965#define MG_F_DELETE_CHUNK (1 << 13)
3966#define MG_F_ENABLE_BROADCAST (1 << 14)
3968#define MG_F_USER_1 (1 << 20)
3969#define MG_F_USER_2 (1 << 21)
3970#define MG_F_USER_3 (1 << 22)
3971#define MG_F_USER_4 (1 << 23)
3972#define MG_F_USER_5 (1 << 24)
3973#define MG_F_USER_6 (1 << 25)
4034#if MG_ENABLE_BROADCAST
4287#if MG_ENABLE_SSL && MG_NET_IF != MG_NET_IF_SIMPLELINK
4316#if defined(__GNUC__)
4338#if MG_ENABLE_SYNC_RESOLVER
4410#ifdef MG_MODULE_LINES
4411#line 1 "mongoose/src/mg_uri.h"
4422#ifndef CS_MONGOOSE_SRC_URI_H_
4423#define CS_MONGOOSE_SRC_URI_H_
4456 unsigned int *port,
struct mg_str *path,
struct mg_str *query,
4469 const struct mg_str *host,
unsigned int port,
4480#ifdef MG_MODULE_LINES
4481#line 1 "mongoose/src/mg_util.h"
4492#ifndef CS_MONGOOSE_SRC_UTIL_H_
4493#define CS_MONGOOSE_SRC_UTIL_H_
4506#define MG_MAX_PATH PATH_MAX
4508#define MG_MAX_PATH 256
4543#if MG_ENABLE_FILESYSTEM
4587#if MG_ENABLE_THREADS
4599#define MG_SOCK_STRINGIFY_IP 1
4600#define MG_SOCK_STRINGIFY_PORT 2
4601#define MG_SOCK_STRINGIFY_REMOTE 4
4618#if MG_NET_IF == MG_NET_IF_SOCKET
4631#if MG_ENABLE_HEXDUMP
4686#define MG_URL_ENCODE_F_SPACE_AS_PLUS (1 << 0)
4687#define MG_URL_ENCODE_F_UPPERCASE_HEX (1 << 1)
4698#ifdef MG_MODULE_LINES
4699#line 1 "mongoose/src/mg_http.h"
4710#ifndef CS_MONGOOSE_SRC_HTTP_H_
4711#define CS_MONGOOSE_SRC_HTTP_H_
4722#ifndef MG_MAX_HTTP_HEADERS
4723#define MG_MAX_HTTP_HEADERS 20
4726#ifndef MG_MAX_HTTP_REQUEST_SIZE
4727#define MG_MAX_HTTP_REQUEST_SIZE 1024
4730#ifndef MG_MAX_HTTP_SEND_MBUF
4731#define MG_MAX_HTTP_SEND_MBUF 1024
4734#ifndef MG_CGI_ENVIRONMENT_SIZE
4735#define MG_CGI_ENVIRONMENT_SIZE 8192
4767#if MG_ENABLE_HTTP_WEBSOCKET
4770 unsigned char *
data;
4772 unsigned char flags;
4801#define MG_EV_HTTP_REQUEST 100
4802#define MG_EV_HTTP_REPLY 101
4803#define MG_EV_HTTP_CHUNK 102
4804#define MG_EV_SSI_CALL 105
4805#define MG_EV_SSI_CALL_CTX 106
4807#if MG_ENABLE_HTTP_WEBSOCKET
4808#define MG_EV_WEBSOCKET_HANDSHAKE_REQUEST 111
4809#define MG_EV_WEBSOCKET_HANDSHAKE_DONE 112
4810#define MG_EV_WEBSOCKET_FRAME 113
4811#define MG_EV_WEBSOCKET_CONTROL_FRAME 114
4814#if MG_ENABLE_HTTP_STREAMING_MULTIPART
4815#define MG_EV_HTTP_MULTIPART_REQUEST 121
4816#define MG_EV_HTTP_PART_BEGIN 122
4817#define MG_EV_HTTP_PART_DATA 123
4818#define MG_EV_HTTP_PART_END 124
4820#define MG_EV_HTTP_MULTIPART_REQUEST_END 125
4879#if MG_ENABLE_HTTP_WEBSOCKET
4895 const char *extra_headers);
4908 const char *host,
const char *
protocol,
4909 const char *extra_headers);
4913 const char *host,
const char *
protocol,
4914 const char *extra_headers,
const char *user,
4920 const struct mg_str path,
4921 const struct mg_str host,
4923 const struct mg_str extra_headers,
4924 const struct mg_str user,
4951 const char *extra_headers);
4962 const char *extra_headers);
4999 const char *fmt, ...);
5002#define WEBSOCKET_OP_CONTINUE 0
5003#define WEBSOCKET_OP_TEXT 1
5004#define WEBSOCKET_OP_BINARY 2
5005#define WEBSOCKET_OP_CLOSE 8
5006#define WEBSOCKET_OP_PING 9
5007#define WEBSOCKET_OP_PONG 10
5021#define WEBSOCKET_DONT_FIN 0x100
5047#define MG_AUTH_FLAG_IS_DIRECTORY (1 << 0)
5048#define MG_AUTH_FLAG_IS_GLOBAL_PASS_FILE (1 << 1)
5049#define MG_AUTH_FLAG_ALLOW_MISSING_FILE (1 << 2)
5075#ifdef MG_MODULE_LINES
5076#line 1 "mongoose/src/mg_http_server.h"
5082#ifndef CS_MONGOOSE_SRC_HTTP_SERVER_H_
5083#define CS_MONGOOSE_SRC_HTTP_SERVER_H_
5218#if MG_ENABLE_FILESYSTEM
5320#if MG_ENABLE_HTTP_URL_REWRITES
5423 const struct mg_str extra_headers);
5425#if MG_ENABLE_HTTP_STREAMING_MULTIPART
5571 const char *extra_headers);
5592 const struct mg_str extra_headers);
5616#if MG_ENABLE_HTTP_URL_REWRITES
5639#ifdef MG_MODULE_LINES
5640#line 1 "mongoose/src/mg_http_client.h"
5646#ifndef CS_MONGOOSE_SRC_HTTP_CLIENT_H_
5647#define CS_MONGOOSE_SRC_HTTP_CLIENT_H_
5680 const char *extra_headers,
const char *
post_data);
5696 const char *method,
const char *uri,
5697 const char *auth_domain,
const char *user,
5698 const char *
passwd,
const char *nonce);
5704#ifdef MG_MODULE_LINES
5705#line 1 "mongoose/src/mg_mqtt.h"
5728#ifndef CS_MONGOOSE_SRC_MQTT_H_
5729#define CS_MONGOOSE_SRC_MQTT_H_
5761 unsigned char flags;
5776#define MG_MQTT_CMD_CONNECT 1
5777#define MG_MQTT_CMD_CONNACK 2
5778#define MG_MQTT_CMD_PUBLISH 3
5779#define MG_MQTT_CMD_PUBACK 4
5780#define MG_MQTT_CMD_PUBREC 5
5781#define MG_MQTT_CMD_PUBREL 6
5782#define MG_MQTT_CMD_PUBCOMP 7
5783#define MG_MQTT_CMD_SUBSCRIBE 8
5784#define MG_MQTT_CMD_SUBACK 9
5785#define MG_MQTT_CMD_UNSUBSCRIBE 10
5786#define MG_MQTT_CMD_UNSUBACK 11
5787#define MG_MQTT_CMD_PINGREQ 12
5788#define MG_MQTT_CMD_PINGRESP 13
5789#define MG_MQTT_CMD_DISCONNECT 14
5792#define MG_MQTT_EVENT_BASE 200
5793#define MG_EV_MQTT_CONNECT (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_CONNECT)
5794#define MG_EV_MQTT_CONNACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_CONNACK)
5795#define MG_EV_MQTT_PUBLISH (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBLISH)
5796#define MG_EV_MQTT_PUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBACK)
5797#define MG_EV_MQTT_PUBREC (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBREC)
5798#define MG_EV_MQTT_PUBREL (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBREL)
5799#define MG_EV_MQTT_PUBCOMP (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBCOMP)
5800#define MG_EV_MQTT_SUBSCRIBE (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_SUBSCRIBE)
5801#define MG_EV_MQTT_SUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_SUBACK)
5802#define MG_EV_MQTT_UNSUBSCRIBE (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_UNSUBSCRIBE)
5803#define MG_EV_MQTT_UNSUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_UNSUBACK)
5804#define MG_EV_MQTT_PINGREQ (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PINGREQ)
5805#define MG_EV_MQTT_PINGRESP (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PINGRESP)
5806#define MG_EV_MQTT_DISCONNECT (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_DISCONNECT)
5809#define MG_MQTT_RETAIN 0x1
5810#define MG_MQTT_DUP 0x4
5811#define MG_MQTT_QOS(qos) ((qos) << 1)
5812#define MG_MQTT_GET_QOS(flags) (((flags) &0x6) >> 1)
5813#define MG_MQTT_SET_QOS(flags, qos) (flags) = ((flags) & ~0x6) | ((qos) << 1)
5816#define MG_MQTT_CLEAN_SESSION 0x02
5817#define MG_MQTT_HAS_WILL 0x04
5818#define MG_MQTT_WILL_RETAIN 0x20
5819#define MG_MQTT_HAS_PASSWORD 0x40
5820#define MG_MQTT_HAS_USER_NAME 0x80
5821#define MG_MQTT_GET_WILL_QOS(flags) (((flags) &0x18) >> 3)
5822#define MG_MQTT_SET_WILL_QOS(flags, qos) \
5823 (flags) = ((flags) & ~0x18) | ((qos) << 3)
5826#define MG_EV_MQTT_CONNACK_ACCEPTED 0
5827#define MG_EV_MQTT_CONNACK_UNACCEPTABLE_VERSION 1
5828#define MG_EV_MQTT_CONNACK_IDENTIFIER_REJECTED 2
5829#define MG_EV_MQTT_CONNACK_SERVER_UNAVAILABLE 3
5830#define MG_EV_MQTT_CONNACK_BAD_AUTH 4
5831#define MG_EV_MQTT_CONNACK_NOT_AUTHORIZED 5
5935#ifdef MG_MODULE_LINES
5936#line 1 "mongoose/src/mg_mqtt_server.h"
5959#ifndef CS_MONGOOSE_SRC_MQTT_BROKER_H_
5960#define CS_MONGOOSE_SRC_MQTT_BROKER_H_
5962#if MG_ENABLE_MQTT_BROKER
5971#ifndef MG_MQTT_MAX_SESSION_SUBSCRIPTIONS
5972#define MG_MQTT_MAX_SESSION_SUBSCRIPTIONS 512
6042#ifdef MG_MODULE_LINES
6043#line 1 "mongoose/src/mg_dns.h"
6054#ifndef CS_MONGOOSE_SRC_DNS_H_
6055#define CS_MONGOOSE_SRC_DNS_H_
6063#define MG_DNS_A_RECORD 0x01
6064#define MG_DNS_CNAME_RECORD 0x05
6065#define MG_DNS_PTR_RECORD 0x0c
6066#define MG_DNS_TXT_RECORD 0x10
6067#define MG_DNS_AAAA_RECORD 0x1c
6068#define MG_DNS_SRV_RECORD 0x21
6069#define MG_DNS_MX_RECORD 0x0f
6070#define MG_DNS_ANY_RECORD 0xff
6071#define MG_DNS_NSEC_RECORD 0x2f
6073#define MG_MAX_DNS_QUESTIONS 32
6074#define MG_MAX_DNS_ANSWERS 32
6076#define MG_DNS_MESSAGE 100
6209#ifdef MG_MODULE_LINES
6210#line 1 "mongoose/src/mg_dns_server.h"
6223#ifndef CS_MONGOOSE_SRC_DNS_SERVER_H_
6224#define CS_MONGOOSE_SRC_DNS_SERVER_H_
6226#if MG_ENABLE_DNS_SERVER
6234#define MG_DNS_SERVER_DEFAULT_TTL 3600
6283 const char *
name,
int rtype,
int ttl,
const void *rdata,
6306#ifdef MG_MODULE_LINES
6307#line 1 "mongoose/src/mg_resolv.h"
6318#ifndef CS_MONGOOSE_SRC_RESOLV_H_
6319#define CS_MONGOOSE_SRC_RESOLV_H_
6390#ifdef MG_MODULE_LINES
6391#line 1 "mongoose/src/mg_coap.h"
6424#ifndef CS_MONGOOSE_SRC_COAP_H_
6425#define CS_MONGOOSE_SRC_COAP_H_
6429#define MG_COAP_MSG_TYPE_FIELD 0x2
6430#define MG_COAP_CODE_CLASS_FIELD 0x4
6431#define MG_COAP_CODE_DETAIL_FIELD 0x8
6432#define MG_COAP_MSG_ID_FIELD 0x10
6433#define MG_COAP_TOKEN_FIELD 0x20
6434#define MG_COAP_OPTIOMG_FIELD 0x40
6435#define MG_COAP_PAYLOAD_FIELD 0x80
6437#define MG_COAP_ERROR 0x10000
6438#define MG_COAP_FORMAT_ERROR (MG_COAP_ERROR | 0x20000)
6439#define MG_COAP_IGNORE (MG_COAP_ERROR | 0x40000)
6440#define MG_COAP_NOT_ENOUGH_DATA (MG_COAP_ERROR | 0x80000)
6441#define MG_COAP_NETWORK_ERROR (MG_COAP_ERROR | 0x100000)
6443#define MG_COAP_MSG_CON 0
6444#define MG_COAP_MSG_NOC 1
6445#define MG_COAP_MSG_ACK 2
6446#define MG_COAP_MSG_RST 3
6447#define MG_COAP_MSG_MAX 3
6449#define MG_COAP_CODECLASS_REQUEST 0
6450#define MG_COAP_CODECLASS_RESP_OK 2
6451#define MG_COAP_CODECLASS_CLIENT_ERR 4
6452#define MG_COAP_CODECLASS_SRV_ERR 5
6454#define MG_COAP_EVENT_BASE 300
6455#define MG_EV_COAP_CON (MG_COAP_EVENT_BASE + MG_COAP_MSG_CON)
6456#define MG_EV_COAP_NOC (MG_COAP_EVENT_BASE + MG_COAP_MSG_NOC)
6457#define MG_EV_COAP_ACK (MG_COAP_EVENT_BASE + MG_COAP_MSG_ACK)
6458#define MG_EV_COAP_RST (MG_COAP_EVENT_BASE + MG_COAP_MSG_RST)
6558#ifdef MG_MODULE_LINES
6559#line 1 "mongoose/src/mg_sntp.h"
6566#ifndef CS_MONGOOSE_SRC_SNTP_H_
6567#define CS_MONGOOSE_SRC_SNTP_H_
6571#define MG_SNTP_EVENT_BASE 500
6577#define MG_SNTP_REPLY (MG_SNTP_EVENT_BASE + 1)
6580#define MG_SNTP_MALFORMED_REPLY (MG_SNTP_EVENT_BASE + 2)
6583#define MG_SNTP_FAILED (MG_SNTP_EVENT_BASE + 3)
6615#ifdef MG_MODULE_LINES
6616#line 1 "mongoose/src/mg_socks.h"
6623#ifndef CS_MONGOOSE_SRC_SOCKS_H_
6624#define CS_MONGOOSE_SRC_SOCKS_H_
6628#define MG_SOCKS_VERSION 5
6630#define MG_SOCKS_HANDSHAKE_DONE MG_F_USER_1
6631#define MG_SOCKS_CONNECT_DONE MG_F_USER_2
int mg_start_thread(mg_thread_func_t f, void *p)
int mg_url_decode(const char *src, int src_len, char *dst, int dst_len, int is_form_url_encoded)
int(* mg_event_handler_t)(struct mg_event *event)
int mg_mgr_poll(struct mg_mgr *mgr, int milli)
void mg_mqtt_ping(struct mg_connection *nc)
void mg_set_protocol_mqtt(struct mg_connection *nc)
void mg_mgr_free(struct mg_mgr *mgr)
const char * hexdump_file
int mg_resolve_from_hosts_file(const char *host, union socket_address *usa)
void cs_base64_update(struct cs_base64_ctx *ctx, const char *str, size_t len)
void cs_to_hex(char *to, const unsigned char *p, size_t len)
void mg_send_dns_query(struct mg_connection *nc, const char *name, int query_type)
void mg_mqtt_disconnect(struct mg_connection *nc)
void mg_mqtt_publish(struct mg_connection *nc, const char *topic, uint16_t message_id, int flags, const void *data, size_t len)
struct mg_str header_names[MG_MAX_HTTP_HEADERS]
int int mg_avprintf(char **buf, size_t size, const char *fmt, va_list ap)
int int c_vsnprintf(char *buf, size_t buf_size, const char *format, va_list ap)
const char * will_message
int mg_stat(const char *path, cs_stat_t *st)
const char * global_auth_file
int mg_resolve_async_opt(struct mg_mgr *mgr, const char *name, int query, mg_resolve_callback_t cb, void *data, struct mg_resolve_async_opts opts)
mg_event_handler_t handler
struct mg_connection * active_connections
void mg_mqtt_connack(struct mg_connection *nc, uint8_t return_code)
int mg_dns_encode_record(struct mbuf *io, struct mg_dns_resource_record *rr, const char *name, size_t nlen, const void *rdata, size_t rlen)
void mg_mqtt_pong(struct mg_connection *nc)
struct mg_connection ** dns_conn
int mg_is_big_endian(void)
size_t mbuf_insert(struct mbuf *, size_t, const void *, size_t)
size_t mg_parse_multipart(const char *buf, size_t buf_len, char *var_name, size_t var_name_len, char *file_name, size_t file_name_len, const char **chunk, size_t *chunk_len)
void mbuf_remove(struct mbuf *, size_t data_size)
void mg_mgr_init(struct mg_mgr *mgr, void *user_data)
int mg_dns_insert_header(struct mbuf *io, size_t pos, struct mg_dns_message *msg)
const char * extra_headers
void mg_send_head(struct mg_connection *n, int status_code, int64_t content_length, const char *extra_headers)
void mg_mqtt_pubcomp(struct mg_connection *nc, uint16_t message_id)
void(* proto_data_destructor)(void *proto_data)
struct mg_connection * mg_next(struct mg_mgr *mgr, struct mg_connection *c)
int mg_resolve_async(struct mg_mgr *mgr, const char *name, int query, mg_resolve_callback_t cb, void *data)
void mg_if_accept_tcp_cb(struct mg_connection *nc, union socket_address *sa, size_t sa_len)
int mg_normalize_uri_path(const struct mg_str *in, struct mg_str *out)
const char * c_strnstr(const char *s, const char *find, size_t slen)
int mg_vprintf(struct mg_connection *, const char *fmt, va_list ap)
const char * mg_set_ssl(struct mg_connection *nc, const char *cert, const char *ca_cert)
void mg_broadcast(struct mg_mgr *, mg_event_handler_t func, void *, size_t)
void mg_send_response_line(struct mg_connection *nc, int status_code, const char *extra_headers)
void mg_send_mqtt_handshake(struct mg_connection *nc, const char *client_id)
struct mg_str header_values[MG_MAX_HTTP_HEADERS]
void mg_if_recv_udp_cb(struct mg_connection *nc, void *buf, int len, union socket_address *sa, size_t sa_len)
void mbuf_free(struct mbuf *)
const char * url_rewrites
void mg_serve_http(struct mg_connection *nc, struct http_message *hm, struct mg_serve_http_opts opts)
const char ** error_string
int mg_open(const char *path, int flag, int mode)
double mg_set_timer(struct mg_connection *c, double timestamp)
int mg_conn_addr_to_str(struct mg_connection *c, char *buf, size_t len, int flags)
int mg_parse_http(const char *s, int n, struct http_message *hm, int is_req)
size_t mg_match_prefix_n(const struct mg_str pattern, const struct mg_str str)
union mg_connection::@11 priv_1
void mbuf_resize(struct mbuf *, size_t new_size)
void mg_printf_html_escape(struct mg_connection *nc, const char *fmt,...)
cs_base64_putc_t b64_putc
struct mg_connection * mg_if_accept_new_conn(struct mg_connection *lc)
const char * cgi_file_pattern
int mg_casecmp(const char *s1, const char *s2)
void mg_send(struct mg_connection *, const void *buf, int len)
int mg_socketpair(sock_t[2], int sock_type)
struct mg_connection * next
void mg_send_http_chunk(struct mg_connection *nc, const char *buf, size_t len)
const char * cgi_interpreter
void mg_hexdump_connection(struct mg_connection *nc, const char *path, const void *buf, int num_bytes, int ev)
enum mg_dns_resource_record_kind kind
void mg_if_connect_cb(struct mg_connection *nc, int err)
void mg_send_websocket_handshake2(struct mg_connection *nc, const char *path, const char *host, const char *protocol, const char *extra_headers)
void cs_base64_finish(struct cs_base64_ctx *ctx)
void mg_sock_to_str(sock_t sock, char *buf, size_t len, int flags)
void mg_mqtt_puback(struct mg_connection *nc, uint16_t message_id)
struct mg_str query_string
void mg_printf_websocket_frame(struct mg_connection *nc, int op_and_flags, const char *fmt,...)
struct mg_dns_resource_record questions[MG_MAX_DNS_QUESTIONS]
const char * enable_directory_listing
size_t c_strnlen(const char *s, size_t maxlen)
size_t mg_match_prefix(const char *pattern, int pattern_len, const char *str)
void cs_hmac_sha1(const unsigned char *key, size_t key_len, const unsigned char *text, size_t text_len, unsigned char out[20])
const char * dav_auth_file
void mg_set_protocol_http_websocket(struct mg_connection *nc)
void mg_send_websocket_framev(struct mg_connection *nc, int op_and_flags, const struct mg_str *strings, int num_strings)
void cs_fprint_base64(FILE *f, const unsigned char *src, int src_len)
int mg_hexdump(const void *buf, int len, char *dst, int dst_len)
int mg_vcasecmp(const struct mg_str *str2, const char *str1)
int mg_base64_decode(const unsigned char *s, int len, char *dst)
struct mg_connection * listener
struct mg_connection * prev
void mg_mqtt_pubrec(struct mg_connection *nc, uint16_t message_id)
void mg_set_close_on_exec(sock_t)
int mg_resolve(const char *domain_name, char *ip_addr_buf, size_t buf_len)
void mg_set_protocol_dns(struct mg_connection *nc)
const char * mg_skip(const char *s, const char *end_string, const char *delimiters, struct mg_str *v)
void mg_mqtt_suback(struct mg_connection *nc, uint8_t *qoss, size_t qoss_len, uint16_t message_id)
int mg_parse_dns(const char *buf, int len, struct mg_dns_message *msg)
const char * hidden_file_pattern
int c_snprintf(char *buf, size_t buf_size, const char *format,...) PRINTF_LIKE(3
mg_dns_resource_record_kind
void mg_mqtt_unsuback(struct mg_connection *nc, uint16_t message_id)
void cs_base64_init(struct cs_base64_ctx *ctx, cs_base64_putc_t putc, void *user_data)
const char * custom_mime_types
struct mg_dns_resource_record * mg_dns_next_record(struct mg_dns_message *msg, int query, struct mg_dns_resource_record *prev)
const char * document_root
void mbuf_init(struct mbuf *, size_t initial_capacity)
void mg_send_mqtt_handshake_opt(struct mg_connection *nc, const char *client_id, struct mg_send_mqtt_handshake_opts)
size_t mbuf_append(struct mbuf *, const void *data, size_t data_size)
int mg_sock_addr_to_str(const union socket_address *sa, char *buf, size_t len, int flags)
const char * per_directory_auth_file
void mg_base64_encode(const unsigned char *src, int src_len, char *dst)
void mg_send_websocket_frame(struct mg_connection *nc, int op_and_flags, const void *data, size_t data_len)
void cs_sha1_final(unsigned char digest[20], cs_sha1_ctx *)
const char ** error_string
int mg_http_parse_header(struct mg_str *hdr, const char *var_name, char *buf, size_t buf_size)
struct mg_str mg_mk_str(const char *s)
const char ** error_string
void cs_base64_encode(const unsigned char *src, int src_len, char *dst)
int mg_get_http_var(const struct mg_str *buf, const char *name, char *dst, size_t dst_len)
void mg_send_websocket_handshake(struct mg_connection *nc, const char *uri, const char *extra_headers)
void mg_printf_http_chunk(struct mg_connection *nc, const char *fmt,...)
const char * mg_next_comma_list_entry(const char *list, struct mg_str *val, struct mg_str *eq_val)
size_t mg_dns_uncompress_name(struct mg_dns_message *msg, struct mg_str *name, char *dst, int dst_len)
void mbuf_trim(struct mbuf *)
FILE * mg_fopen(const char *path, const char *mode)
struct mg_str * mg_get_http_header(struct http_message *hm, const char *name)
void cs_sha1_update(cs_sha1_ctx *, const unsigned char *data, uint32_t len)
int mg_vcmp(const struct mg_str *str2, const char *str1)
int mg_parse_uri(const struct mg_str uri, struct mg_str *scheme, struct mg_str *user_info, struct mg_str *host, unsigned int *port, struct mg_str *path, struct mg_str *query, struct mg_str *fragment)
int mg_check_ip_acl(const char *acl, uint32_t remote_ip)
struct mg_dns_resource_record answers[MG_MAX_DNS_ANSWERS]
mg_event_handler_t proto_handler
const char * dav_document_root
struct mg_str resp_status_msg
void cs_sha1_init(cs_sha1_ctx *)
int mg_ncasecmp(const char *s1, const char *s2, size_t len)
int mg_dns_parse_record_data(struct mg_dns_message *msg, struct mg_dns_resource_record *rr, void *data, size_t data_len)
void mg_mqtt_unsubscribe(struct mg_connection *nc, char **topics, size_t topics_len, uint16_t message_id)
int mg_printf(struct mg_connection *, const char *fmt,...)
void mg_mqtt_subscribe(struct mg_connection *nc, const struct mg_mqtt_topic_expression *topics, size_t topics_len, uint16_t message_id)
void mg_mqtt_pubrel(struct mg_connection *nc, uint16_t message_id)
int mg_mqtt_next_subscribe_topic(struct mg_mqtt_message *msg, struct mg_str *topic, uint8_t *qos, int pos)
void sl_restart_cb(struct mg_mgr *mgr)
bool mg_start_task(int priority, int stack_size, mg_init_cb mg_init)
char * inet_ntoa(struct in_addr n)
const char * inet_ntop(int af, const void *src, char *dst, socklen_t size)
int inet_pton(int af, const char *src, void *dst)
void mg_run_in_task(void(*cb)(struct mg_mgr *mgr, void *arg), void *cb_arg)
void mg_set_nameserver(struct mg_mgr *mgr, const char *nameserver)
const struct mg_iface_vtable * mg_ifaces[]
double cs_timegm(const struct tm *tm)
const char * mg_strstr(const struct mg_str haystack, const struct mg_str needle)
void mg_strfree(struct mg_str *s)
void mg_http_send_error(struct mg_connection *nc, int code, const char *reason)
void mg_mbuf_append_base64_putc(char ch, void *user_data)
void mg_basic_auth_header(const struct mg_str user, const struct mg_str pass, struct mbuf *buf)
int mg_get_http_basic_auth(struct http_message *hm, char *user, size_t user_len, char *pass, size_t pass_len)
double mg_mgr_min_timer(const struct mg_mgr *mgr)
int mg_parse_http_basic_auth(struct mg_str *hdr, char *user, size_t user_len, char *pass, size_t pass_len)
void cs_md5_update(cs_md5_ctx *c, const unsigned char *data, size_t len)
void mg_hash_sha1_v(size_t num_msgs, const uint8_t *msgs[], const size_t *msg_lens, uint8_t *digest)
struct mg_str mg_url_encode(const struct mg_str src)
int mg_str_starts_with(struct mg_str s, struct mg_str prefix)
void mg_send_websocket_handshake3v(struct mg_connection *nc, const struct mg_str path, const struct mg_str host, const struct mg_str protocol, const struct mg_str extra_headers, const struct mg_str user, const struct mg_str pass)
@ MG_RESOLVE_EXCEEDED_RETRY_COUNT
struct mg_str mg_strdup_nul(const struct mg_str s)
struct mg_str mg_url_encode_opt(const struct mg_str src, const struct mg_str safe, unsigned int flags)
int mg_if_poll(struct mg_connection *nc, double now)
struct mg_str mg_strdup(const struct mg_str s)
void mg_register_http_endpoint(struct mg_connection *nc, const char *uri_path, MG_CB(mg_event_handler_t handler, void *user_data))
void mbuf_move(struct mbuf *from, struct mbuf *to)
int mg_asprintf(char **buf, size_t size, const char *fmt,...) PRINTF_LIKE(3
const char * mg_strchr(const struct mg_str s, int c)
struct mg_connection * mg_bind(struct mg_mgr *mgr, const char *address, MG_CB(mg_event_handler_t handler, void *user_data))
void mg_http_send_digest_auth_request(struct mg_connection *c, const char *domain)
void mg_mgr_init_opt(struct mg_mgr *mgr, void *user_data, struct mg_mgr_init_opts opts)
void mg_if_can_recv_cb(struct mg_connection *nc)
int mg_strcmp(const struct mg_str str1, const struct mg_str str2)
void mg_mbuf_append_base64(struct mbuf *mbuf, const void *data, size_t len)
#define PRINTF_LIKE(f, a)
struct mg_connection * mg_connect_http_opt(struct mg_mgr *mgr, MG_CB(mg_event_handler_t ev_handler, void *user_data), struct mg_connect_opts opts, const char *url, const char *extra_headers, const char *post_data)
int cs_base64_decode(const unsigned char *s, int len, char *dst, int *dec_len)
struct mg_connection * mg_add_sock_opt(struct mg_mgr *mgr, sock_t sock, MG_CB(mg_event_handler_t handler, void *user_data), struct mg_add_sock_opts opts)
int mg_assemble_uri(const struct mg_str *scheme, const struct mg_str *user_info, const struct mg_str *host, unsigned int port, const struct mg_str *path, const struct mg_str *query, const struct mg_str *fragment, int normalize_path, struct mg_str *uri)
void mg_http_send_redirect(struct mg_connection *nc, int status_code, const struct mg_str location, const struct mg_str extra_headers)
int mg_check_digest_auth(struct mg_str method, struct mg_str uri, struct mg_str username, struct mg_str cnonce, struct mg_str response, struct mg_str qop, struct mg_str nc, struct mg_str nonce, struct mg_str auth_domain, FILE *fp)
struct mg_iface * mg_if_create_iface(const struct mg_iface_vtable *vtable, struct mg_mgr *mgr)
struct mg_str mg_mk_str_n(const char *s, size_t len)
struct mg_connection * mg_connect_ws_opt(struct mg_mgr *mgr, MG_CB(mg_event_handler_t ev_handler, void *user_data), struct mg_connect_opts opts, const char *url, const char *protocol, const char *extra_headers)
struct mg_connection * mg_connect_ws(struct mg_mgr *mgr, MG_CB(mg_event_handler_t event_handler, void *user_data), const char *url, const char *protocol, const char *extra_headers)
int mg_mqtt_match_topic_expression(struct mg_str exp, struct mg_str topic)
int mg_http_check_digest_auth(struct http_message *hm, const char *auth_domain, FILE *fp)
void(* cs_base64_putc_t)(char, void *)
int mg_strncmp(const struct mg_str str1, const struct mg_str str2, size_t n)
int mg_http_parse_header2(struct mg_str *hdr, const char *var_name, char **buf, size_t buf_size)
void mg_hash_md5_v(size_t num_msgs, const uint8_t *msgs[], const size_t *msg_lens, uint8_t *digest)
struct mg_connection * mg_connect_opt(struct mg_mgr *mgr, const char *address, MG_CB(mg_event_handler_t handler, void *user_data), struct mg_connect_opts opts)
int mg_http_create_digest_auth_header(char *buf, size_t buf_len, const char *method, const char *uri, const char *auth_domain, const char *user, const char *passwd, const char *nonce)
struct mg_iface * mg_find_iface(struct mg_mgr *mgr, const struct mg_iface_vtable *vtable, struct mg_iface *from)
int mg_dns_encode_name(struct mbuf *io, const char *name, size_t len)
void(* mg_resolve_callback_t)(struct mg_dns_message *dns_message, void *user_data, enum mg_resolve_err)
void cs_md5_final(unsigned char *md, cs_md5_ctx *c)
int mg_mqtt_vmatch_topic_expression(const char *exp, struct mg_str topic)
void mg_send_websocket_handshake3(struct mg_connection *nc, const char *path, const char *host, const char *protocol, const char *extra_headers, const char *user, const char *pass)
int mg_dns_copy_questions(struct mbuf *io, struct mg_dns_message *msg)
void mg_if_can_send_cb(struct mg_connection *nc)
struct mg_connection * mg_add_sock(struct mg_mgr *mgr, sock_t sock, MG_CB(mg_event_handler_t handler, void *user_data))
struct mg_connection * mg_connect(struct mg_mgr *mgr, const char *address, MG_CB(mg_event_handler_t handler, void *user_data))
struct mg_connection * mg_connect_http(struct mg_mgr *mgr, MG_CB(mg_event_handler_t event_handler, void *user_data), const char *url, const char *extra_headers, const char *post_data)
void cs_from_hex(char *to, const char *p, size_t len)
void(* mg_event_handler_t)(struct mg_connection *nc, int ev, void *ev_data MG_UD_ARG(void *user_data))
struct mg_str mg_strstrip(struct mg_str s)
#define LIST_HEAD(name, type)
struct mg_connection * mg_bind_opt(struct mg_mgr *mgr, const char *address, MG_CB(mg_event_handler_t handler, void *user_data), struct mg_bind_opts opts)
void mbuf_clear(struct mbuf *)
int mg_http_is_authorized(struct http_message *hm, struct mg_str path, const char *domain, const char *passwords_file, int flags)
struct mg_str mg_next_comma_list_entry_n(struct mg_str list, struct mg_str *val, struct mg_str *eq_val)
size_t mbuf_append_and_free(struct mbuf *, void *data, size_t data_size)
void cs_md5_init(cs_md5_ctx *c)
void mg_register_http_endpoint_opt(struct mg_connection *nc, const char *uri_path, mg_event_handler_t handler, struct mg_http_endpoint_opts opts)
#define MG_MAX_HTTP_HEADERS
#define MG_MAX_DNS_ANSWERS
#define MG_MAX_DNS_QUESTIONS
void(* cs_base64_putc_t)(char, void *)
int gettimeofday(struct timeval *tp, void *tzp)
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
time_t(* poll)(struct mg_iface *iface, int timeout_ms)
void(* destroy_conn)(struct mg_connection *nc)
int(* listen_tcp)(struct mg_connection *nc, union socket_address *sa)
void(* remove_conn)(struct mg_connection *nc)
void(* connect_tcp)(struct mg_connection *nc, const union socket_address *sa)
void(* free)(struct mg_iface *iface)
void(* init)(struct mg_iface *iface)
void(* get_conn_addr)(struct mg_connection *nc, int remote, union socket_address *sa)
void(* connect_udp)(struct mg_connection *nc)
int(* udp_send)(struct mg_connection *nc, const void *buf, size_t len)
int(* create_conn)(struct mg_connection *nc)
int(* listen_udp)(struct mg_connection *nc, union socket_address *sa)
void(* sock_set)(struct mg_connection *nc, sock_t sock)
int(* udp_recv)(struct mg_connection *nc, void *buf, size_t len, union socket_address *sa, size_t *sa_len)
int(* tcp_send)(struct mg_connection *nc, const void *buf, size_t len)
int(* tcp_recv)(struct mg_connection *nc, void *buf, size_t len)
void(* add_conn)(struct mg_connection *nc)
const struct mg_iface_vtable * vtable
const struct mg_iface_vtable ** ifaces
const struct mg_iface_vtable * main_iface
struct mg_iface ** ifaces
uint16_t keep_alive_timer
struct mg_str will_message
struct mg_str protocol_name
struct http_message * req
static te_expr * list(state *s)