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.16"
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
61#define CS_P_RS14100 18
68#if defined(TARGET_IS_MSP432P4XX) || defined(__MSP432P401R__)
69#define CS_PLATFORM CS_P_MSP432
70#elif defined(cc3200) || defined(TARGET_IS_CC3200)
71#define CS_PLATFORM CS_P_CC3200
72#elif defined(cc3220) || defined(TARGET_IS_CC3220)
73#define CS_PLATFORM CS_P_CC3220
74#elif defined(__unix__) || defined(__APPLE__)
75#define CS_PLATFORM CS_P_UNIX
77#define CS_PLATFORM CS_P_WINCE
79#define CS_PLATFORM CS_P_WINDOWS
80#elif defined(__MBED__)
81#define CS_PLATFORM CS_P_MBED
82#elif defined(__USE_LPCOPEN)
83#define CS_PLATFORM CS_P_NXP_LPC
84#elif defined(FRDM_K64F) || defined(FREEDOM)
85#define CS_PLATFORM CS_P_NXP_KINETIS
87#define CS_PLATFORM CS_P_PIC32
88#elif defined(ESP_PLATFORM)
89#define CS_PLATFORM CS_P_ESP32
90#elif defined(ICACHE_FLASH)
91#define CS_PLATFORM CS_P_ESP8266
92#elif defined(TARGET_IS_TM4C129_RA0) || defined(TARGET_IS_TM4C129_RA1) || \
93 defined(TARGET_IS_TM4C129_RA2)
94#define CS_PLATFORM CS_P_TM4C129
96#define CS_PLATFORM CS_P_RS14100
98#define CS_PLATFORM CS_P_STM32
102#error "CS_PLATFORM is not specified and we couldn't guess it."
107#define MG_NET_IF_SOCKET 1
108#define MG_NET_IF_SIMPLELINK 2
109#define MG_NET_IF_LWIP_LOW_LEVEL 3
110#define MG_NET_IF_PIC32 4
111#define MG_NET_IF_NULL 5
113#define MG_SSL_IF_OPENSSL 1
114#define MG_SSL_IF_MBEDTLS 2
115#define MG_SSL_IF_SIMPLELINK 3
133#if CS_PLATFORM == CS_P_CUSTOM
134#include <platform_custom.h>
139#if !defined(PRINTF_LIKE)
140#if defined(__GNUC__) || defined(__clang__) || defined(__TI_COMPILER_VERSION__)
141#define PRINTF_LIKE(f, a) __attribute__((format(printf, f, a)))
143#define PRINTF_LIKE(f, a)
148#if (defined(__GNUC__) || defined(__clang__) || \
149 defined(__TI_COMPILER_VERSION__)) && \
151#define WEAK __attribute__((weak))
158#define NORETURN __attribute__((noreturn))
159#define NOINLINE __attribute__((noinline))
160#define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
161#define NOINSTR __attribute__((no_instrument_function))
162#define DO_NOT_WARN_UNUSED __attribute__((unused))
166#define WARN_UNUSED_RESULT
168#define DO_NOT_WARN_UNUSED
172#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
176#ifdef MG_MODULE_LINES
177#line 1 "common/platforms/platform_windows.h"
179#ifndef CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_
180#define CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_
181#if CS_PLATFORM == CS_P_WINDOWS
196#pragma warning(disable : 4127)
197#pragma warning(disable : 4204)
200#ifndef _WINSOCK_DEPRECATED_NO_WARNINGS
201#define _WINSOCK_DEPRECATED_NO_WARNINGS 1
204#ifndef _CRT_SECURE_NO_WARNINGS
205#define _CRT_SECURE_NO_WARNINGS
223#pragma comment(lib, "ws2_32.lib")
237#if defined(_MSC_VER) && _MSC_VER >= 1800
238#define strdup _strdup
242#define EINPROGRESS WSAEINPROGRESS
245#define EWOULDBLOCK WSAEWOULDBLOCK
249#define STR(x) STRX(x)
250#define __func__ __FILE__ ":" STR(__LINE__)
252#define snprintf _snprintf
253#define vsnprintf _vsnprintf
254#define to64(x) _atoi64(x)
255#if !defined(__MINGW32__) && !defined(__MINGW64__)
256#define popen(x, y) _popen((x), (y))
257#define pclose(x) _pclose(x)
258#define fileno _fileno
260#if defined(_MSC_VER) && _MSC_VER >= 1400
261#define fseeko(x, y, z) _fseeki64((x), (y), (z))
263#define fseeko(x, y, z) fseek((x), (y), (z))
265#if defined(_MSC_VER) && _MSC_VER <= 1200
273typedef signed char int8_t;
285#define UINT16_MAX 65535
288#define UINT32_MAX 4294967295
293#define INT64_FMT "I64d"
294#define INT64_X_FMT "I64x"
295#define SIZE_T_FMT "Iu"
298#define S_ISDIR(x) (((x) &_S_IFMT) == _S_IFDIR)
301#define S_ISREG(x) (((x) &_S_IFMT) == _S_IFREG)
304#define CS_DEFINE_DIRENT
308#define va_copy __va_copy
310#define va_copy(x, y) (x) = (y)
314#ifndef MG_MAX_HTTP_REQUEST_SIZE
315#define MG_MAX_HTTP_REQUEST_SIZE 8192
318#ifndef MG_MAX_HTTP_SEND_MBUF
319#define MG_MAX_HTTP_SEND_MBUF 4096
322#ifndef MG_MAX_HTTP_HEADERS
323#define MG_MAX_HTTP_HEADERS 40
326#ifndef CS_ENABLE_STDIO
327#define CS_ENABLE_STDIO 1
330#ifndef MG_ENABLE_BROADCAST
331#define MG_ENABLE_BROADCAST 1
334#ifndef MG_ENABLE_DIRECTORY_LISTING
335#define MG_ENABLE_DIRECTORY_LISTING 1
338#ifndef MG_ENABLE_FILESYSTEM
339#define MG_ENABLE_FILESYSTEM 1
342#ifndef MG_ENABLE_HTTP_CGI
343#define MG_ENABLE_HTTP_CGI MG_ENABLE_FILESYSTEM
347#define MG_NET_IF MG_NET_IF_SOCKET
353#define timegm _mkgmtime
355#define gmtime_r(a, b) \
362#ifdef MG_MODULE_LINES
363#line 1 "common/platforms/platform_unix.h"
365#ifndef CS_COMMON_PLATFORMS_PLATFORM_UNIX_H_
366#define CS_COMMON_PLATFORMS_PLATFORM_UNIX_H_
367#if CS_PLATFORM == CS_P_UNIX
370#define _XOPEN_SOURCE 600
374#ifndef __STDC_FORMAT_MACROS
375#define __STDC_FORMAT_MACROS
379#ifndef __STDC_LIMIT_MACROS
380#define __STDC_LIMIT_MACROS
384#ifndef _LARGEFILE_SOURCE
385#define _LARGEFILE_SOURCE
389#ifndef _FILE_OFFSET_BITS
390#define _FILE_OFFSET_BITS 64
393#include <arpa/inet.h>
404#include <netinet/in.h>
412#include <sys/param.h>
413#include <sys/socket.h>
414#include <sys/select.h>
417#include <sys/types.h>
421#include <machine/endian.h>
423#define LITTLE_ENDIAN __DARWIN_LITTLE_ENDIAN
424#define BIG_ENDIAN __DARWIN_BIG_ENDIAN
425#define PDP_ENDIAN __DARWIN_PDP_ENDIAN
426#define BYTE_ORDER __DARWIN_BYTE_ORDER
436#if !(defined(__cplusplus) && __cplusplus >= 201103L) && \
437 !(defined(__DARWIN_C_LEVEL) && __DARWIN_C_LEVEL >= 200809L)
438long long strtoll(
const char *,
char **,
int);
442#define INVALID_SOCKET (-1)
443#define SIZE_T_FMT "zu"
446#define to64(x) strtoll(x, NULL, 10)
447#define INT64_FMT PRId64
448#define INT64_X_FMT PRIx64
456#define va_copy __va_copy
458#define va_copy(x, y) (x) = (y)
462#define closesocket(x) close(x)
464#ifndef MG_MAX_HTTP_REQUEST_SIZE
465#define MG_MAX_HTTP_REQUEST_SIZE 8192
468#ifndef MG_MAX_HTTP_SEND_MBUF
469#define MG_MAX_HTTP_SEND_MBUF 4096
472#ifndef MG_MAX_HTTP_HEADERS
473#define MG_MAX_HTTP_HEADERS 40
476#ifndef CS_ENABLE_STDIO
477#define CS_ENABLE_STDIO 1
480#ifndef MG_ENABLE_BROADCAST
481#define MG_ENABLE_BROADCAST 1
484#ifndef MG_ENABLE_DIRECTORY_LISTING
485#define MG_ENABLE_DIRECTORY_LISTING 1
488#ifndef MG_ENABLE_FILESYSTEM
489#define MG_ENABLE_FILESYSTEM 1
492#ifndef MG_ENABLE_HTTP_CGI
493#define MG_ENABLE_HTTP_CGI MG_ENABLE_FILESYSTEM
497#define MG_NET_IF MG_NET_IF_SOCKET
500#ifndef MG_HOSTS_FILE_NAME
501#define MG_HOSTS_FILE_NAME "/etc/hosts"
504#ifndef MG_RESOLV_CONF_FILE_NAME
505#define MG_RESOLV_CONF_FILE_NAME "/etc/resolv.conf"
510#ifdef MG_MODULE_LINES
511#line 1 "common/platforms/platform_esp32.h"
530#ifndef CS_COMMON_PLATFORMS_PLATFORM_ESP32_H_
531#define CS_COMMON_PLATFORMS_PLATFORM_ESP32_H_
532#if CS_PLATFORM == CS_P_ESP32
539#include <machine/endian.h>
546#define SIZE_T_FMT "u"
549#define to64(x) strtoll(x, NULL, 10)
550#define INT64_FMT PRId64
551#define INT64_X_FMT PRIx64
553#define _FILE_OFFSET_BITS 32
558#define MG_NET_IF MG_NET_IF_SOCKET
561#ifndef CS_ENABLE_STDIO
562#define CS_ENABLE_STDIO 1
567#ifdef MG_MODULE_LINES
568#line 1 "common/platforms/platform_esp8266.h"
587#ifndef CS_COMMON_PLATFORMS_PLATFORM_ESP8266_H_
588#define CS_COMMON_PLATFORMS_PLATFORM_ESP8266_H_
589#if CS_PLATFORM == CS_P_ESP8266
595#include <machine/endian.h>
601#define SIZE_T_FMT "u"
604#if !defined(MGOS_VFS_DEFINE_DIRENT)
605#define CS_DEFINE_DIRENT
608#define to64(x) strtoll(x, NULL, 10)
609#define INT64_FMT PRId64
610#define INT64_X_FMT PRIx64
612#define _FILE_OFFSET_BITS 32
617#define LWIP_TIMEVAL_PRIVATE 0
622#define MG_NET_IF MG_NET_IF_SOCKET
624#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL
628#ifndef CS_ENABLE_STDIO
629#define CS_ENABLE_STDIO 1
632#define inet_ntop(af, src, dst, size) \
633 (((af) == AF_INET) ? ipaddr_ntoa_r((const ip_addr_t *) (src), (dst), (size)) \
635#define inet_pton(af, src, dst) \
636 (((af) == AF_INET) ? ipaddr_aton((src), (ip_addr_t *) (dst)) : 0)
640#ifdef MG_MODULE_LINES
641#line 1 "common/platforms/platform_cc3100.h"
660#ifndef CS_COMMON_PLATFORMS_PLATFORM_CC3100_H_
661#define CS_COMMON_PLATFORMS_PLATFORM_CC3100_H_
662#if CS_PLATFORM == CS_P_CC3100
672#define MG_NET_IF MG_NET_IF_SIMPLELINK
673#define MG_SSL_IF MG_SSL_IF_SIMPLELINK
681#include <simplelink.h>
686#define INVALID_SOCKET (-1)
688#define to64(x) strtoll(x, NULL, 10)
689#define INT64_FMT PRId64
690#define INT64_X_FMT PRIx64
691#define SIZE_T_FMT "u"
701#ifdef MG_MODULE_LINES
702#line 1 "common/platforms/platform_cc3200.h"
721#ifndef CS_COMMON_PLATFORMS_PLATFORM_CC3200_H_
722#define CS_COMMON_PLATFORMS_PLATFORM_CC3200_H_
723#if CS_PLATFORM == CS_P_CC3200
734#ifndef __TI_COMPILER_VERSION__
739#define MG_NET_IF MG_NET_IF_SIMPLELINK
740#define MG_SSL_IF MG_SSL_IF_SIMPLELINK
743#if defined(CC3200_FS_SPIFFS) && !defined(MG_ENABLE_DIRECTORY_LISTING)
744#define MG_ENABLE_DIRECTORY_LISTING 1
750#define INVALID_SOCKET (-1)
751#define SIZE_T_FMT "u"
754#define to64(x) strtoll(x, NULL, 10)
755#define INT64_FMT PRId64
756#define INT64_X_FMT PRIx64
767#ifdef __TI_COMPILER_VERSION__
769#define timeval SlTimeval_t
778#ifdef __TI_COMPILER_VERSION__
782typedef unsigned int mode_t;
797#define __S_IFMT 0170000
799#define __S_IFDIR 0040000
800#define __S_IFCHR 0020000
801#define __S_IFREG 0100000
803#define __S_ISTYPE(mode, mask) (((mode) &__S_IFMT) == (mask))
805#define S_IFDIR __S_IFDIR
806#define S_IFCHR __S_IFCHR
807#define S_IFREG __S_IFREG
808#define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR)
809#define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG)
812#if __TI_COMPILER_VERSION__ < 16000000
813#define va_copy(apc, ap) ((apc) = (ap))
822#if (defined(CC3200_FS_SPIFFS) || defined(CC3200_FS_SLFS)) && \
823 !defined(MG_ENABLE_FILESYSTEM)
824#define MG_ENABLE_FILESYSTEM 1
825#define CS_DEFINE_DIRENT
828#ifndef CS_ENABLE_STDIO
829#define CS_ENABLE_STDIO 1
838#ifdef MG_MODULE_LINES
839#line 1 "common/platforms/platform_cc3220.h"
858#ifndef CS_COMMON_PLATFORMS_PLATFORM_CC3220_H_
859#define CS_COMMON_PLATFORMS_PLATFORM_CC3220_H_
860#if CS_PLATFORM == CS_P_CC3220
871#ifndef __TI_COMPILER_VERSION__
876#define MG_NET_IF MG_NET_IF_SIMPLELINK
878#define MG_SSL_IF MG_SSL_IF_SIMPLELINK
882#if defined(CC3220_FS_SPIFFS) && !defined(MG_ENABLE_DIRECTORY_LISTING)
883#define MG_ENABLE_DIRECTORY_LISTING 1
889#define INVALID_SOCKET (-1)
890#define SIZE_T_FMT "u"
893#define to64(x) strtoll(x, NULL, 10)
894#define INT64_FMT PRId64
895#define INT64_X_FMT PRIx64
906#ifdef __TI_COMPILER_VERSION__
908#define timeval SlTimeval_t
917#ifdef __TI_COMPILER_VERSION__
921typedef unsigned int mode_t;
936#define __S_IFMT 0170000
938#define __S_IFDIR 0040000
939#define __S_IFCHR 0020000
940#define __S_IFREG 0100000
942#define __S_ISTYPE(mode, mask) (((mode) &__S_IFMT) == (mask))
944#define S_IFDIR __S_IFDIR
945#define S_IFCHR __S_IFCHR
946#define S_IFREG __S_IFREG
947#define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR)
948#define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG)
952#ifndef CS_ENABLE_STDIO
953#define CS_ENABLE_STDIO 1
962#ifdef MG_MODULE_LINES
963#line 1 "common/platforms/platform_msp432.h"
982#ifndef CS_COMMON_PLATFORMS_PLATFORM_MSP432_H_
983#define CS_COMMON_PLATFORMS_PLATFORM_MSP432_H_
984#if CS_PLATFORM == CS_P_MSP432
994#ifndef __TI_COMPILER_VERSION__
999#define MG_NET_IF MG_NET_IF_SIMPLELINK
1000#define MG_SSL_IF MG_SSL_IF_SIMPLELINK
1005#define INVALID_SOCKET (-1)
1006#define SIZE_T_FMT "u"
1009#define to64(x) strtoll(x, NULL, 10)
1010#define INT64_FMT PRId64
1011#define INT64_X_FMT PRIx64
1022#ifdef __TI_COMPILER_VERSION__
1024#define timeval SlTimeval_t
1029#ifdef __TI_COMPILER_VERSION__
1033typedef unsigned int mode_t;
1046#define stat(a, b) _stat(a, b)
1048#define __S_IFMT 0170000
1050#define __S_IFDIR 0040000
1051#define __S_IFCHR 0020000
1052#define __S_IFREG 0100000
1054#define __S_ISTYPE(mode, mask) (((mode) &__S_IFMT) == (mask))
1056#define S_IFDIR __S_IFDIR
1057#define S_IFCHR __S_IFCHR
1058#define S_IFREG __S_IFREG
1059#define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR)
1060#define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG)
1063#define va_copy(apc, ap) ((apc) = (ap))
1067#ifndef CS_ENABLE_STDIO
1068#define CS_ENABLE_STDIO 1
1071#if (defined(CC3200_FS_SPIFFS) || defined(CC3200_FS_SLFS)) && \
1072 !defined(MG_ENABLE_FILESYSTEM)
1073#define MG_ENABLE_FILESYSTEM 1
1082#ifdef MG_MODULE_LINES
1083#line 1 "common/platforms/platform_tm4c129.h"
1102#ifndef CS_COMMON_PLATFORMS_PLATFORM_TM4C129_H_
1103#define CS_COMMON_PLATFORMS_PLATFORM_TM4C129_H_
1104#if CS_PLATFORM == CS_P_TM4C129
1109#include <inttypes.h>
1114#ifndef __TI_COMPILER_VERSION__
1116#include <sys/time.h>
1119#define SIZE_T_FMT "u"
1122#define to64(x) strtoll(x, NULL, 10)
1123#define INT64_FMT PRId64
1124#define INT64_X_FMT PRIx64
1128#include <lwip/opt.h>
1130#define MG_NET_IF MG_NET_IF_SOCKET
1132#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL
1135#elif MG_NET_IF == MG_NET_IF_SIMPLELINK
1139#ifndef CS_ENABLE_STDIO
1140#define CS_ENABLE_STDIO 1
1143#ifdef __TI_COMPILER_VERSION__
1145#define va_copy(apc, ap) ((apc) = (ap))
1154#ifdef MG_MODULE_LINES
1155#line 1 "common/platforms/platform_mbed.h"
1174#ifndef CS_COMMON_PLATFORMS_PLATFORM_MBED_H_
1175#define CS_COMMON_PLATFORMS_PLATFORM_MBED_H_
1176#if CS_PLATFORM == CS_P_MBED
1189#include <inttypes.h>
1193#include <sys/stat.h>
1194#include <sys/types.h>
1201#ifndef CS_ENABLE_STDIO
1202#define CS_ENABLE_STDIO 1
1211#if defined(__ARMCC_VERSION) || defined(__ICCARM__)
1212#define _TIMEVAL_DEFINED
1213#define gettimeofday _gettimeofday
1224#if MG_NET_IF == MG_NET_IF_SIMPLELINK
1226#define MG_SIMPLELINK_NO_OSI 1
1228#include <simplelink.h>
1231#define INVALID_SOCKET (-1)
1233#define to64(x) strtoll(x, NULL, 10)
1234#define INT64_FMT PRId64
1235#define INT64_X_FMT PRIx64
1236#define SIZE_T_FMT "u"
1250#ifdef MG_MODULE_LINES
1251#line 1 "common/platforms/platform_nrf51.h"
1269#ifndef CS_COMMON_PLATFORMS_PLATFORM_NRF51_H_
1270#define CS_COMMON_PLATFORMS_PLATFORM_NRF51_H_
1271#if CS_PLATFORM == CS_P_NRF51
1275#include <inttypes.h>
1280#define to64(x) strtoll(x, NULL, 10)
1282#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL
1284#define MG_ENABLE_IPV6 1
1290#if !defined(__ARMCC_VERSION)
1291#define LWIP_TIMEVAL_PRIVATE 0
1297#define INT64_FMT PRId64
1298#define SIZE_T_FMT "u"
1303#define CS_ENABLE_STRDUP defined(__ARMCC_VERSION)
1307#ifdef MG_MODULE_LINES
1308#line 1 "common/platforms/platform_nrf52.h"
1326#ifndef CS_COMMON_PLATFORMS_PLATFORM_NRF52_H_
1327#define CS_COMMON_PLATFORMS_PLATFORM_NRF52_H_
1328#if CS_PLATFORM == CS_P_NRF52
1333#include <inttypes.h>
1339#define to64(x) strtoll(x, NULL, 10)
1341#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL
1343#define MG_ENABLE_IPV6 1
1353#if !defined(__ARMCC_VERSION)
1354#define LWIP_TIMEVAL_PRIVATE 0
1357#define INT64_FMT PRId64
1358#define SIZE_T_FMT "u"
1363#define CS_ENABLE_STRDUP defined(__ARMCC_VERSION)
1367#ifdef MG_MODULE_LINES
1368#line 1 "common/platforms/simplelink/cs_simplelink.h"
1387#ifndef CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_
1388#define CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_
1390#if defined(MG_NET_IF) && MG_NET_IF == MG_NET_IF_SIMPLELINK
1393#if !defined(__SIMPLELINK_H__)
1397#ifndef __TI_COMPILER_VERSION__
1407#if CS_PLATFORM == CS_P_CC3220
1408#include <ti/drivers/net/wifi/porting/user.h>
1409#include <ti/drivers/net/wifi/simplelink.h>
1410#include <ti/drivers/net/wifi/sl_socket.h>
1411#include <ti/drivers/net/wifi/netapp.h>
1415#define PROVISIONING_API_H_
1416#include <simplelink/user.h>
1417#undef PROVISIONING_API_H_
1418#undef SL_INC_STD_BSD_API_NAMING
1420#include <simplelink/include/simplelink.h>
1421#include <simplelink/include/netapp.h>
1426#define AF_INET SL_AF_INET
1428#define socklen_t SlSocklen_t
1429#define sockaddr SlSockAddr_t
1430#define sockaddr_in SlSockAddrIn_t
1431#define in_addr SlInAddr_t
1433#define SOCK_STREAM SL_SOCK_STREAM
1434#define SOCK_DGRAM SL_SOCK_DGRAM
1436#define htonl sl_Htonl
1437#define ntohl sl_Ntohl
1438#define htons sl_Htons
1439#define ntohs sl_Ntohs
1442#define EACCES SL_EACCES
1445#define EAFNOSUPPORT SL_EAFNOSUPPORT
1448#define EAGAIN SL_EAGAIN
1451#define EBADF SL_EBADF
1454#define EINVAL SL_EINVAL
1457#define ENOMEM SL_ENOMEM
1460#define EWOULDBLOCK SL_EWOULDBLOCK
1494#if SL_MAJOR_VERSION_NUM < 2
1496#define SL_ERROR_BSD_EAGAIN SL_EAGAIN
1497#define SL_ERROR_BSD_EALREADY SL_EALREADY
1498#define SL_ERROR_BSD_ENOPROTOOPT SL_ENOPROTOOPT
1499#define SL_ERROR_BSD_ESECDATEERROR SL_ESECDATEERROR
1500#define SL_ERROR_BSD_ESECSNOVERIFY SL_ESECSNOVERIFY
1501#define SL_ERROR_FS_FAILED_TO_ALLOCATE_MEM SL_FS_ERR_FAILED_TO_ALLOCATE_MEM
1502#define SL_ERROR_FS_FILE_HAS_NOT_BEEN_CLOSE_CORRECTLY \
1503 SL_FS_FILE_HAS_NOT_BEEN_CLOSE_CORRECTLY
1504#define SL_ERROR_FS_FILE_NAME_EXIST SL_FS_FILE_NAME_EXIST
1505#define SL_ERROR_FS_FILE_NOT_EXISTS SL_FS_ERR_FILE_NOT_EXISTS
1506#define SL_ERROR_FS_NO_AVAILABLE_NV_INDEX SL_FS_ERR_NO_AVAILABLE_NV_INDEX
1507#define SL_ERROR_FS_NOT_ENOUGH_STORAGE_SPACE SL_FS_ERR_NO_AVAILABLE_BLOCKS
1508#define SL_ERROR_FS_NOT_SUPPORTED SL_FS_ERR_NOT_SUPPORTED
1509#define SL_ERROR_FS_WRONG_FILE_NAME SL_FS_WRONG_FILE_NAME
1510#define SL_ERROR_FS_INVALID_HANDLE SL_FS_ERR_INVALID_HANDLE
1511#define SL_NETCFG_MAC_ADDRESS_GET SL_MAC_ADDRESS_GET
1512#define SL_SOCKET_FD_ZERO SL_FD_ZERO
1513#define SL_SOCKET_FD_SET SL_FD_SET
1514#define SL_SOCKET_FD_ISSET SL_FD_ISSET
1515#define SL_SO_SECURE_DOMAIN_NAME_VERIFICATION SO_SECURE_DOMAIN_NAME_VERIFICATION
1517#define SL_FS_READ FS_MODE_OPEN_READ
1518#define SL_FS_WRITE FS_MODE_OPEN_WRITE
1520#define SL_FI_FILE_SIZE(fi) ((fi).FileLen)
1521#define SL_FI_FILE_MAX_SIZE(fi) ((fi).AllocatedLen)
1523#define SlDeviceVersion_t SlVersionFull
1524#define sl_DeviceGet sl_DevGet
1525#define SL_DEVICE_GENERAL SL_DEVICE_GENERAL_CONFIGURATION
1526#define SL_LEN_TYPE _u8
1527#define SL_OPT_TYPE _u8
1531#define FS_MODE_OPEN_CREATE(max_size, flag) \
1532 (SL_FS_CREATE | SL_FS_CREATE_MAX_SIZE(max_size))
1533#define SL_FI_FILE_SIZE(fi) ((fi).Len)
1534#define SL_FI_FILE_MAX_SIZE(fi) ((fi).MaxSize)
1536#define SL_LEN_TYPE _u16
1537#define SL_OPT_TYPE _u16
1546#ifdef MG_MODULE_LINES
1547#line 1 "common/platforms/platform_wince.h"
1549#ifndef CS_COMMON_PLATFORMS_PLATFORM_WINCE_H_
1550#define CS_COMMON_PLATFORMS_PLATFORM_WINCE_H_
1552#if CS_PLATFORM == CS_P_WINCE
1566#pragma warning(disable : 4127)
1567#pragma warning(disable : 4204)
1569#ifndef _WINSOCK_DEPRECATED_NO_WARNINGS
1570#define _WINSOCK_DEPRECATED_NO_WARNINGS 1
1573#ifndef _CRT_SECURE_NO_WARNINGS
1574#define _CRT_SECURE_NO_WARNINGS
1584#pragma comment(lib, "ws2.lib")
1586#include <winsock2.h>
1587#include <ws2tcpip.h>
1590#define strdup _strdup
1593#define EINPROGRESS WSAEINPROGRESS
1597#define EWOULDBLOCK WSAEWOULDBLOCK
1601#define EAGAIN EWOULDBLOCK
1606#define STR(x) STRX(x)
1607#define __func__ __FILE__ ":" STR(__LINE__)
1610#define snprintf _snprintf
1611#define fileno _fileno
1612#define vsnprintf _vsnprintf
1613#define sleep(x) Sleep((x) *1000)
1614#define to64(x) _atoi64(x)
1617#if defined(_MSC_VER) && _MSC_VER >= 1400
1618#define fseeko(x, y, z) _fseeki64((x), (y), (z))
1620#define fseeko(x, y, z) fseek((x), (y), (z))
1628typedef signed char int8_t;
1642#define UINT16_MAX 65535
1646#define UINT32_MAX 4294967295
1653#define INT64_FMT "I64d"
1654#define INT64_X_FMT "I64x"
1656#define SIZE_T_FMT "u"
1659#define CS_DEFINE_DIRENT
1663#define va_copy __va_copy
1665#define va_copy(x, y) (x) = (y)
1669#ifndef MG_MAX_HTTP_REQUEST_SIZE
1670#define MG_MAX_HTTP_REQUEST_SIZE 8192
1673#ifndef MG_MAX_HTTP_SEND_MBUF
1674#define MG_MAX_HTTP_SEND_MBUF 4096
1677#ifndef MG_MAX_HTTP_HEADERS
1678#define MG_MAX_HTTP_HEADERS 40
1681#ifndef CS_ENABLE_STDIO
1682#define CS_ENABLE_STDIO 1
1685#define abort() DebugBreak();
1694#ifndef MG_ENABLE_THREADS
1695#define MG_ENABLE_THREADS 0
1698#ifndef MG_ENABLE_FILESYSTEM
1699#define MG_ENABLE_FILESYSTEM 1
1703#define MG_NET_IF MG_NET_IF_SOCKET
1718#define ENOENT ERROR_PATH_NOT_FOUND
1722#define EACCES ERROR_ACCESS_DENIED
1726#define ENOMEM ERROR_NOT_ENOUGH_MEMORY
1729#ifndef _UINTPTR_T_DEFINED
1737#define S_ISDIR(x) (((x) &_S_IFDIR) != 0)
1741#define S_ISREG(x) (((x) &_S_IFREG) != 0)
1744int open(
const char *filename,
int oflag,
int pmode);
1750#ifdef MG_MODULE_LINES
1751#line 1 "common/platforms/platform_nxp_lpc.h"
1770#ifndef CS_COMMON_PLATFORMS_PLATFORM_NXP_LPC_H_
1771#define CS_COMMON_PLATFORMS_PLATFORM_NXP_LPC_H_
1773#if CS_PLATFORM == CS_P_NXP_LPC
1779#define SIZE_T_FMT "u"
1781#define INT64_FMT "lld"
1782#define INT64_X_FMT "llx"
1787#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL
1796#ifdef __REDLIB_INTERFACE_VERSION__
1799#define LWIP_TIMEVAL_PRIVATE 1
1801#define va_copy(d, s) __builtin_va_copy(d, s)
1803#define CS_ENABLE_TO64 1
1804#define to64(x) cs_to64(x)
1806#define CS_ENABLE_STRDUP 1
1810#include <sys/time.h>
1811#define LWIP_TIMEVAL_PRIVATE 0
1812#define to64(x) strtoll(x, NULL, 10)
1818#ifdef MG_MODULE_LINES
1819#line 1 "common/platforms/platform_nxp_kinetis.h"
1838#ifndef CS_COMMON_PLATFORMS_PLATFORM_NXP_KINETIS_H_
1839#define CS_COMMON_PLATFORMS_PLATFORM_NXP_KINETIS_H_
1841#if CS_PLATFORM == CS_P_NXP_KINETIS
1844#include <inttypes.h>
1846#include <sys/time.h>
1848#define SIZE_T_FMT "u"
1850#define to64(x) strtoll(x, NULL, 10)
1851#define INT64_FMT "lld"
1852#define INT64_X_FMT "llx"
1857#define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL
1860#define LWIP_TIMEVAL_PRIVATE 0
1864#ifdef MG_MODULE_LINES
1865#line 1 "common/platforms/platform_pic32.h"
1884#ifndef CS_COMMON_PLATFORMS_PLATFORM_PIC32_H_
1885#define CS_COMMON_PLATFORMS_PLATFORM_PIC32_H_
1887#if CS_PLATFORM == CS_P_PIC32
1889#define MG_NET_IF MG_NET_IF_PIC32
1896#include <system_config.h>
1897#include <system_definitions.h>
1899#include <sys/types.h>
1902#define to64(x) strtoll(x, NULL, 10)
1904#define SIZE_T_FMT "lu"
1905#define INT64_FMT "lld"
1907#ifndef CS_ENABLE_STDIO
1908#define CS_ENABLE_STDIO 1
1916#ifdef MG_MODULE_LINES
1917#line 1 "common/platforms/platform_rs14100.h"
1936#ifndef CS_COMMON_PLATFORMS_PLATFORM_RS14100_H_
1937#define CS_COMMON_PLATFORMS_PLATFORM_RS14100_H_
1938#if CS_PLATFORM == CS_P_RS14100
1947#include <sys/stat.h>
1948#include <sys/time.h>
1949#include <sys/types.h>
1952#ifdef MGOS_HAVE_VFS_COMMON
1953#include <mgos_vfs.h>
1960#define to64(x) strtoll(x, NULL, 10)
1961#define INT64_FMT "lld"
1962#define SIZE_T_FMT "u"
1966#ifndef CS_ENABLE_STDIO
1967#define CS_ENABLE_STDIO 1
1970#ifndef MG_ENABLE_FILESYSTEM
1971#define MG_ENABLE_FILESYSTEM 1
1980#ifdef MG_MODULE_LINES
1981#line 1 "common/platforms/platform_stm32.h"
2000#ifndef CS_COMMON_PLATFORMS_PLATFORM_STM32_H_
2001#define CS_COMMON_PLATFORMS_PLATFORM_STM32_H_
2002#if CS_PLATFORM == CS_P_STM32
2010#include <sys/stat.h>
2011#include <sys/time.h>
2012#include <sys/types.h>
2016#include <stm32_sdk_hal.h>
2018#define to64(x) strtoll(x, NULL, 10)
2019#define INT64_FMT "lld"
2020#define SIZE_T_FMT "u"
2024#ifndef CS_ENABLE_STDIO
2025#define CS_ENABLE_STDIO 1
2028#ifndef MG_ENABLE_FILESYSTEM
2029#define MG_ENABLE_FILESYSTEM 1
2034#ifdef MG_MODULE_LINES
2035#line 1 "common/platforms/lwip/mg_lwip.h"
2054#ifndef CS_COMMON_PLATFORMS_LWIP_MG_LWIP_H_
2055#define CS_COMMON_PLATFORMS_LWIP_MG_LWIP_H_
2072#if CS_PLATFORM == CS_P_NRF51 || CS_PLATFORM == CS_P_NRF52
2076#include <lwip/opt.h>
2077#include <lwip/err.h>
2078#include <lwip/ip_addr.h>
2079#include <lwip/inet.h>
2080#include <lwip/netdb.h>
2081#include <lwip/dns.h>
2083#ifndef LWIP_PROVIDE_ERRNO
2088#include <lwip/sockets.h>
2092#define LWIP_SOCKET 1
2093#include <lwip/sockets.h>
2095#define LWIP_SOCKET 0
2098#define INVALID_SOCKET (-1)
2102#if MG_NET_IF == MG_NET_IF_LWIP_LOW_LEVEL
2111#define ipX_2_ip(x) (x)
2117#ifdef MG_MODULE_LINES
2118#line 1 "common/cs_md5.h"
2137#ifndef CS_COMMON_MD5_H_
2138#define CS_COMMON_MD5_H_
2142#ifndef CS_DISABLE_MD5
2143#define CS_DISABLE_MD5 0
2153 unsigned char in[64];
2165#ifdef MG_MODULE_LINES
2166#line 1 "common/cs_sha1.h"
2185#ifndef CS_COMMON_SHA1_H_
2186#define CS_COMMON_SHA1_H_
2188#ifndef CS_DISABLE_SHA1
2189#define CS_DISABLE_SHA1 0
2203 unsigned char buffer[64];
2210 const unsigned char *text,
size_t text_len,
2211 unsigned char out[20]);
2219#ifdef MG_MODULE_LINES
2220#line 1 "common/cs_time.h"
2239#ifndef CS_COMMON_CS_TIME_H_
2240#define CS_COMMON_CS_TIME_H_
2264#ifdef MG_MODULE_LINES
2265#line 1 "common/mg_str.h"
2284#ifndef CS_COMMON_MG_STR_H_
2285#define CS_COMMON_MG_STR_H_
2311#define MG_MK_STR(str_literal) \
2312 { str_literal, sizeof(str_literal) - 1 }
2313#define MG_MK_STR_N(str_literal, len) \
2314 { str_literal, len }
2315#define MG_NULL_STR \
2375#ifdef MG_MODULE_LINES
2376#line 1 "common/mbuf.h"
2402#ifndef CS_COMMON_MBUF_H_
2403#define CS_COMMON_MBUF_H_
2408#if defined(__cplusplus)
2412#ifndef MBUF_SIZE_MULTIPLIER
2413#define MBUF_SIZE_MULTIPLIER 1.5
2416#ifndef MBUF_SIZE_MAX_HEADROOM
2418#define MBUF_SIZE_MAX_HEADROOM BUFSIZ
2420#define MBUF_SIZE_MAX_HEADROOM 1024
2484#if defined(__cplusplus)
2489#ifdef MG_MODULE_LINES
2490#line 1 "common/cs_base64.h"
2509#ifndef CS_COMMON_CS_BASE64_H_
2510#define CS_COMMON_CS_BASE64_H_
2512#ifndef DISABLE_BASE64
2513#define DISABLE_BASE64 0
2529 unsigned char chunk[3];
2558#ifdef MG_MODULE_LINES
2559#line 1 "common/str_util.h"
2578#ifndef CS_COMMON_STR_UTIL_H_
2579#define CS_COMMON_STR_UTIL_H_
2587#ifndef CS_ENABLE_STRDUP
2588#define CS_ENABLE_STRDUP 0
2591#ifndef CS_ENABLE_TO64
2592#define CS_ENABLE_TO64 0
2599#if !defined(_MSC_VER) || _MSC_VER >= 1900
2600#define CS_STRINGIFY_LIT(...) #__VA_ARGS__
2602#define CS_STRINGIFY_LIT(x) #x
2614#define CS_STRINGIFY_MACRO(x) CS_STRINGIFY_LIT(x)
2628int c_snprintf(
char *buf,
size_t buf_size,
const char *format, ...)
2647void cs_to_hex(
char *
to,
const unsigned char *p,
size_t len);
2659char *
strdup(
const char *src);
2759#ifdef MG_MODULE_LINES
2760#line 1 "common/queue.h"
2795#ifndef _SYS_QUEUE_H_
2796#define _SYS_QUEUE_H_
2871#ifdef QUEUE_MACRO_DEBUG
2880#define TRACEBUF struct qm_trace trace;
2881#define TRACEBUF_INITIALIZER { __LINE__, 0, __FILE__, NULL } ,
2882#define TRASHIT(x) do {(x) = (void *)-1;} while (0)
2883#define QMD_SAVELINK(name, link) void **name = (void *)&(link)
2885#define QMD_TRACE_HEAD(head) do { \
2886 (head)->trace.prevline = (head)->trace.lastline; \
2887 (head)->trace.prevfile = (head)->trace.lastfile; \
2888 (head)->trace.lastline = __LINE__; \
2889 (head)->trace.lastfile = __FILE__; \
2892#define QMD_TRACE_ELEM(elem) do { \
2893 (elem)->trace.prevline = (elem)->trace.lastline; \
2894 (elem)->trace.prevfile = (elem)->trace.lastfile; \
2895 (elem)->trace.lastline = __LINE__; \
2896 (elem)->trace.lastfile = __FILE__; \
2900#define QMD_TRACE_ELEM(elem)
2901#define QMD_TRACE_HEAD(head)
2902#define QMD_SAVELINK(name, link)
2904#define TRACEBUF_INITIALIZER
2912#define QUEUE_TYPEOF(type) type
2914#define QUEUE_TYPEOF(type) struct type
2920#define SLIST_HEAD(name, type) \
2922 struct type *slh_first; \
2925#define SLIST_CLASS_HEAD(name, type) \
2927 class type *slh_first; \
2930#define SLIST_HEAD_INITIALIZER(head) \
2933#define SLIST_ENTRY(type) \
2935 struct type *sle_next; \
2938#define SLIST_CLASS_ENTRY(type) \
2940 class type *sle_next; \
2946#define SLIST_EMPTY(head) ((head)->slh_first == NULL)
2948#define SLIST_FIRST(head) ((head)->slh_first)
2950#define SLIST_FOREACH(var, head, field) \
2951 for ((var) = SLIST_FIRST((head)); \
2953 (var) = SLIST_NEXT((var), field))
2955#define SLIST_FOREACH_FROM(var, head, field) \
2956 for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \
2958 (var) = SLIST_NEXT((var), field))
2960#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
2961 for ((var) = SLIST_FIRST((head)); \
2962 (var) && ((tvar) = SLIST_NEXT((var), field), 1); \
2965#define SLIST_FOREACH_FROM_SAFE(var, head, field, tvar) \
2966 for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \
2967 (var) && ((tvar) = SLIST_NEXT((var), field), 1); \
2970#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \
2971 for ((varp) = &SLIST_FIRST((head)); \
2972 ((var) = *(varp)) != NULL; \
2973 (varp) = &SLIST_NEXT((var), field))
2975#define SLIST_INIT(head) do { \
2976 SLIST_FIRST((head)) = NULL; \
2979#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \
2980 SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \
2981 SLIST_NEXT((slistelm), field) = (elm); \
2984#define SLIST_INSERT_HEAD(head, elm, field) do { \
2985 SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \
2986 SLIST_FIRST((head)) = (elm); \
2989#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
2991#define SLIST_REMOVE(head, elm, type, field) do { \
2992 QMD_SAVELINK(oldnext, (elm)->field.sle_next); \
2993 if (SLIST_FIRST((head)) == (elm)) { \
2994 SLIST_REMOVE_HEAD((head), field); \
2997 QUEUE_TYPEOF(type) *curelm = SLIST_FIRST(head); \
2998 while (SLIST_NEXT(curelm, field) != (elm)) \
2999 curelm = SLIST_NEXT(curelm, field); \
3000 SLIST_REMOVE_AFTER(curelm, field); \
3002 TRASHIT(*oldnext); \
3005#define SLIST_REMOVE_AFTER(elm, field) do { \
3006 SLIST_NEXT(elm, field) = \
3007 SLIST_NEXT(SLIST_NEXT(elm, field), field); \
3010#define SLIST_REMOVE_HEAD(head, field) do { \
3011 SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \
3014#define SLIST_SWAP(head1, head2, type) do { \
3015 QUEUE_TYPEOF(type) *swap_first = SLIST_FIRST(head1); \
3016 SLIST_FIRST(head1) = SLIST_FIRST(head2); \
3017 SLIST_FIRST(head2) = swap_first; \
3023#define STAILQ_HEAD(name, type) \
3025 struct type *stqh_first; \
3026 struct type **stqh_last; \
3029#define STAILQ_CLASS_HEAD(name, type) \
3031 class type *stqh_first; \
3032 class type **stqh_last; \
3035#define STAILQ_HEAD_INITIALIZER(head) \
3036 { NULL, &(head).stqh_first }
3038#define STAILQ_ENTRY(type) \
3040 struct type *stqe_next; \
3043#define STAILQ_CLASS_ENTRY(type) \
3045 class type *stqe_next; \
3051#define STAILQ_CONCAT(head1, head2) do { \
3052 if (!STAILQ_EMPTY((head2))) { \
3053 *(head1)->stqh_last = (head2)->stqh_first; \
3054 (head1)->stqh_last = (head2)->stqh_last; \
3055 STAILQ_INIT((head2)); \
3059#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL)
3061#define STAILQ_FIRST(head) ((head)->stqh_first)
3063#define STAILQ_FOREACH(var, head, field) \
3064 for((var) = STAILQ_FIRST((head)); \
3066 (var) = STAILQ_NEXT((var), field))
3068#define STAILQ_FOREACH_FROM(var, head, field) \
3069 for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \
3071 (var) = STAILQ_NEXT((var), field))
3073#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
3074 for ((var) = STAILQ_FIRST((head)); \
3075 (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
3078#define STAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \
3079 for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \
3080 (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
3083#define STAILQ_INIT(head) do { \
3084 STAILQ_FIRST((head)) = NULL; \
3085 (head)->stqh_last = &STAILQ_FIRST((head)); \
3088#define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \
3089 if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\
3090 (head)->stqh_last = &STAILQ_NEXT((elm), field); \
3091 STAILQ_NEXT((tqelm), field) = (elm); \
3094#define STAILQ_INSERT_HEAD(head, elm, field) do { \
3095 if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \
3096 (head)->stqh_last = &STAILQ_NEXT((elm), field); \
3097 STAILQ_FIRST((head)) = (elm); \
3100#define STAILQ_INSERT_TAIL(head, elm, field) do { \
3101 STAILQ_NEXT((elm), field) = NULL; \
3102 *(head)->stqh_last = (elm); \
3103 (head)->stqh_last = &STAILQ_NEXT((elm), field); \
3106#define STAILQ_LAST(head, type, field) \
3107 (STAILQ_EMPTY((head)) ? NULL : \
3108 __containerof((head)->stqh_last, \
3109 QUEUE_TYPEOF(type), field.stqe_next))
3111#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
3113#define STAILQ_REMOVE(head, elm, type, field) do { \
3114 QMD_SAVELINK(oldnext, (elm)->field.stqe_next); \
3115 if (STAILQ_FIRST((head)) == (elm)) { \
3116 STAILQ_REMOVE_HEAD((head), field); \
3119 QUEUE_TYPEOF(type) *curelm = STAILQ_FIRST(head); \
3120 while (STAILQ_NEXT(curelm, field) != (elm)) \
3121 curelm = STAILQ_NEXT(curelm, field); \
3122 STAILQ_REMOVE_AFTER(head, curelm, field); \
3124 TRASHIT(*oldnext); \
3127#define STAILQ_REMOVE_AFTER(head, elm, field) do { \
3128 if ((STAILQ_NEXT(elm, field) = \
3129 STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \
3130 (head)->stqh_last = &STAILQ_NEXT((elm), field); \
3133#define STAILQ_REMOVE_HEAD(head, field) do { \
3134 if ((STAILQ_FIRST((head)) = \
3135 STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \
3136 (head)->stqh_last = &STAILQ_FIRST((head)); \
3139#define STAILQ_SWAP(head1, head2, type) do { \
3140 QUEUE_TYPEOF(type) *swap_first = STAILQ_FIRST(head1); \
3141 QUEUE_TYPEOF(type) **swap_last = (head1)->stqh_last; \
3142 STAILQ_FIRST(head1) = STAILQ_FIRST(head2); \
3143 (head1)->stqh_last = (head2)->stqh_last; \
3144 STAILQ_FIRST(head2) = swap_first; \
3145 (head2)->stqh_last = swap_last; \
3146 if (STAILQ_EMPTY(head1)) \
3147 (head1)->stqh_last = &STAILQ_FIRST(head1); \
3148 if (STAILQ_EMPTY(head2)) \
3149 (head2)->stqh_last = &STAILQ_FIRST(head2); \
3156#define LIST_HEAD(name, type) \
3158 struct type *lh_first; \
3161#define LIST_CLASS_HEAD(name, type) \
3163 class type *lh_first; \
3166#define LIST_HEAD_INITIALIZER(head) \
3169#define LIST_ENTRY(type) \
3171 struct type *le_next; \
3172 struct type **le_prev; \
3175#define LIST_CLASS_ENTRY(type) \
3177 class type *le_next; \
3178 class type **le_prev; \
3185#if (defined(_KERNEL) && defined(INVARIANTS))
3186#define QMD_LIST_CHECK_HEAD(head, field) do { \
3187 if (LIST_FIRST((head)) != NULL && \
3188 LIST_FIRST((head))->field.le_prev != \
3189 &LIST_FIRST((head))) \
3190 panic("Bad list head %p first->prev != head", (head)); \
3193#define QMD_LIST_CHECK_NEXT(elm, field) do { \
3194 if (LIST_NEXT((elm), field) != NULL && \
3195 LIST_NEXT((elm), field)->field.le_prev != \
3196 &((elm)->field.le_next)) \
3197 panic("Bad link elm %p next->prev != elm", (elm)); \
3200#define QMD_LIST_CHECK_PREV(elm, field) do { \
3201 if (*(elm)->field.le_prev != (elm)) \
3202 panic("Bad link elm %p prev->next != elm", (elm)); \
3205#define QMD_LIST_CHECK_HEAD(head, field)
3206#define QMD_LIST_CHECK_NEXT(elm, field)
3207#define QMD_LIST_CHECK_PREV(elm, field)
3210#define LIST_EMPTY(head) ((head)->lh_first == NULL)
3212#define LIST_FIRST(head) ((head)->lh_first)
3214#define LIST_FOREACH(var, head, field) \
3215 for ((var) = LIST_FIRST((head)); \
3217 (var) = LIST_NEXT((var), field))
3219#define LIST_FOREACH_FROM(var, head, field) \
3220 for ((var) = ((var) ? (var) : LIST_FIRST((head))); \
3222 (var) = LIST_NEXT((var), field))
3224#define LIST_FOREACH_SAFE(var, head, field, tvar) \
3225 for ((var) = LIST_FIRST((head)); \
3226 (var) && ((tvar) = LIST_NEXT((var), field), 1); \
3229#define LIST_FOREACH_FROM_SAFE(var, head, field, tvar) \
3230 for ((var) = ((var) ? (var) : LIST_FIRST((head))); \
3231 (var) && ((tvar) = LIST_NEXT((var), field), 1); \
3234#define LIST_INIT(head) do { \
3235 LIST_FIRST((head)) = NULL; \
3238#define LIST_INSERT_AFTER(listelm, elm, field) do { \
3239 QMD_LIST_CHECK_NEXT(listelm, field); \
3240 if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\
3241 LIST_NEXT((listelm), field)->field.le_prev = \
3242 &LIST_NEXT((elm), field); \
3243 LIST_NEXT((listelm), field) = (elm); \
3244 (elm)->field.le_prev = &LIST_NEXT((listelm), field); \
3247#define LIST_INSERT_BEFORE(listelm, elm, field) do { \
3248 QMD_LIST_CHECK_PREV(listelm, field); \
3249 (elm)->field.le_prev = (listelm)->field.le_prev; \
3250 LIST_NEXT((elm), field) = (listelm); \
3251 *(listelm)->field.le_prev = (elm); \
3252 (listelm)->field.le_prev = &LIST_NEXT((elm), field); \
3255#define LIST_INSERT_HEAD(head, elm, field) do { \
3256 QMD_LIST_CHECK_HEAD((head), field); \
3257 if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \
3258 LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\
3259 LIST_FIRST((head)) = (elm); \
3260 (elm)->field.le_prev = &LIST_FIRST((head)); \
3263#define LIST_NEXT(elm, field) ((elm)->field.le_next)
3265#define LIST_PREV(elm, head, type, field) \
3266 ((elm)->field.le_prev == &LIST_FIRST((head)) ? NULL : \
3267 __containerof((elm)->field.le_prev, \
3268 QUEUE_TYPEOF(type), field.le_next))
3270#define LIST_REMOVE(elm, field) do { \
3271 QMD_SAVELINK(oldnext, (elm)->field.le_next); \
3272 QMD_SAVELINK(oldprev, (elm)->field.le_prev); \
3273 QMD_LIST_CHECK_NEXT(elm, field); \
3274 QMD_LIST_CHECK_PREV(elm, field); \
3275 if (LIST_NEXT((elm), field) != NULL) \
3276 LIST_NEXT((elm), field)->field.le_prev = \
3277 (elm)->field.le_prev; \
3278 *(elm)->field.le_prev = LIST_NEXT((elm), field); \
3279 TRASHIT(*oldnext); \
3280 TRASHIT(*oldprev); \
3283#define LIST_SWAP(head1, head2, type, field) do { \
3284 QUEUE_TYPEOF(type) *swap_tmp = LIST_FIRST(head1); \
3285 LIST_FIRST((head1)) = LIST_FIRST((head2)); \
3286 LIST_FIRST((head2)) = swap_tmp; \
3287 if ((swap_tmp = LIST_FIRST((head1))) != NULL) \
3288 swap_tmp->field.le_prev = &LIST_FIRST((head1)); \
3289 if ((swap_tmp = LIST_FIRST((head2))) != NULL) \
3290 swap_tmp->field.le_prev = &LIST_FIRST((head2)); \
3296#define TAILQ_HEAD(name, type) \
3298 struct type *tqh_first; \
3299 struct type **tqh_last; \
3303#define TAILQ_CLASS_HEAD(name, type) \
3305 class type *tqh_first; \
3306 class type **tqh_last; \
3310#define TAILQ_HEAD_INITIALIZER(head) \
3311 { NULL, &(head).tqh_first, TRACEBUF_INITIALIZER }
3313#define TAILQ_ENTRY(type) \
3315 struct type *tqe_next; \
3316 struct type **tqe_prev; \
3320#define TAILQ_CLASS_ENTRY(type) \
3322 class type *tqe_next; \
3323 class type **tqe_prev; \
3330#if (defined(_KERNEL) && defined(INVARIANTS))
3331#define QMD_TAILQ_CHECK_HEAD(head, field) do { \
3332 if (!TAILQ_EMPTY(head) && \
3333 TAILQ_FIRST((head))->field.tqe_prev != \
3334 &TAILQ_FIRST((head))) \
3335 panic("Bad tailq head %p first->prev != head", (head)); \
3338#define QMD_TAILQ_CHECK_TAIL(head, field) do { \
3339 if (*(head)->tqh_last != NULL) \
3340 panic("Bad tailq NEXT(%p->tqh_last) != NULL", (head)); \
3343#define QMD_TAILQ_CHECK_NEXT(elm, field) do { \
3344 if (TAILQ_NEXT((elm), field) != NULL && \
3345 TAILQ_NEXT((elm), field)->field.tqe_prev != \
3346 &((elm)->field.tqe_next)) \
3347 panic("Bad link elm %p next->prev != elm", (elm)); \
3350#define QMD_TAILQ_CHECK_PREV(elm, field) do { \
3351 if (*(elm)->field.tqe_prev != (elm)) \
3352 panic("Bad link elm %p prev->next != elm", (elm)); \
3355#define QMD_TAILQ_CHECK_HEAD(head, field)
3356#define QMD_TAILQ_CHECK_TAIL(head, headname)
3357#define QMD_TAILQ_CHECK_NEXT(elm, field)
3358#define QMD_TAILQ_CHECK_PREV(elm, field)
3361#define TAILQ_CONCAT(head1, head2, field) do { \
3362 if (!TAILQ_EMPTY(head2)) { \
3363 *(head1)->tqh_last = (head2)->tqh_first; \
3364 (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
3365 (head1)->tqh_last = (head2)->tqh_last; \
3366 TAILQ_INIT((head2)); \
3367 QMD_TRACE_HEAD(head1); \
3368 QMD_TRACE_HEAD(head2); \
3372#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)
3374#define TAILQ_FIRST(head) ((head)->tqh_first)
3376#define TAILQ_FOREACH(var, head, field) \
3377 for ((var) = TAILQ_FIRST((head)); \
3379 (var) = TAILQ_NEXT((var), field))
3381#define TAILQ_FOREACH_FROM(var, head, field) \
3382 for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \
3384 (var) = TAILQ_NEXT((var), field))
3386#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
3387 for ((var) = TAILQ_FIRST((head)); \
3388 (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
3391#define TAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \
3392 for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \
3393 (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
3396#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
3397 for ((var) = TAILQ_LAST((head), headname); \
3399 (var) = TAILQ_PREV((var), headname, field))
3401#define TAILQ_FOREACH_REVERSE_FROM(var, head, headname, field) \
3402 for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \
3404 (var) = TAILQ_PREV((var), headname, field))
3406#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
3407 for ((var) = TAILQ_LAST((head), headname); \
3408 (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
3411#define TAILQ_FOREACH_REVERSE_FROM_SAFE(var, head, headname, field, tvar) \
3412 for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \
3413 (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
3416#define TAILQ_INIT(head) do { \
3417 TAILQ_FIRST((head)) = NULL; \
3418 (head)->tqh_last = &TAILQ_FIRST((head)); \
3419 QMD_TRACE_HEAD(head); \
3422#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
3423 QMD_TAILQ_CHECK_NEXT(listelm, field); \
3424 if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\
3425 TAILQ_NEXT((elm), field)->field.tqe_prev = \
3426 &TAILQ_NEXT((elm), field); \
3428 (head)->tqh_last = &TAILQ_NEXT((elm), field); \
3429 QMD_TRACE_HEAD(head); \
3431 TAILQ_NEXT((listelm), field) = (elm); \
3432 (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \
3433 QMD_TRACE_ELEM(&(elm)->field); \
3434 QMD_TRACE_ELEM(&(listelm)->field); \
3437#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
3438 QMD_TAILQ_CHECK_PREV(listelm, field); \
3439 (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
3440 TAILQ_NEXT((elm), field) = (listelm); \
3441 *(listelm)->field.tqe_prev = (elm); \
3442 (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \
3443 QMD_TRACE_ELEM(&(elm)->field); \
3444 QMD_TRACE_ELEM(&(listelm)->field); \
3447#define TAILQ_INSERT_HEAD(head, elm, field) do { \
3448 QMD_TAILQ_CHECK_HEAD(head, field); \
3449 if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \
3450 TAILQ_FIRST((head))->field.tqe_prev = \
3451 &TAILQ_NEXT((elm), field); \
3453 (head)->tqh_last = &TAILQ_NEXT((elm), field); \
3454 TAILQ_FIRST((head)) = (elm); \
3455 (elm)->field.tqe_prev = &TAILQ_FIRST((head)); \
3456 QMD_TRACE_HEAD(head); \
3457 QMD_TRACE_ELEM(&(elm)->field); \
3460#define TAILQ_INSERT_TAIL(head, elm, field) do { \
3461 QMD_TAILQ_CHECK_TAIL(head, field); \
3462 TAILQ_NEXT((elm), field) = NULL; \
3463 (elm)->field.tqe_prev = (head)->tqh_last; \
3464 *(head)->tqh_last = (elm); \
3465 (head)->tqh_last = &TAILQ_NEXT((elm), field); \
3466 QMD_TRACE_HEAD(head); \
3467 QMD_TRACE_ELEM(&(elm)->field); \
3470#define TAILQ_LAST(head, headname) \
3471 (*(((struct headname *)((head)->tqh_last))->tqh_last))
3473#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
3475#define TAILQ_PREV(elm, headname, field) \
3476 (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
3478#define TAILQ_REMOVE(head, elm, field) do { \
3479 QMD_SAVELINK(oldnext, (elm)->field.tqe_next); \
3480 QMD_SAVELINK(oldprev, (elm)->field.tqe_prev); \
3481 QMD_TAILQ_CHECK_NEXT(elm, field); \
3482 QMD_TAILQ_CHECK_PREV(elm, field); \
3483 if ((TAILQ_NEXT((elm), field)) != NULL) \
3484 TAILQ_NEXT((elm), field)->field.tqe_prev = \
3485 (elm)->field.tqe_prev; \
3487 (head)->tqh_last = (elm)->field.tqe_prev; \
3488 QMD_TRACE_HEAD(head); \
3490 *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \
3491 TRASHIT(*oldnext); \
3492 TRASHIT(*oldprev); \
3493 QMD_TRACE_ELEM(&(elm)->field); \
3496#define TAILQ_SWAP(head1, head2, type, field) do { \
3497 QUEUE_TYPEOF(type) *swap_first = (head1)->tqh_first; \
3498 QUEUE_TYPEOF(type) **swap_last = (head1)->tqh_last; \
3499 (head1)->tqh_first = (head2)->tqh_first; \
3500 (head1)->tqh_last = (head2)->tqh_last; \
3501 (head2)->tqh_first = swap_first; \
3502 (head2)->tqh_last = swap_last; \
3503 if ((swap_first = (head1)->tqh_first) != NULL) \
3504 swap_first->field.tqe_prev = &(head1)->tqh_first; \
3506 (head1)->tqh_last = &(head1)->tqh_first; \
3507 if ((swap_first = (head2)->tqh_first) != NULL) \
3508 swap_first->field.tqe_prev = &(head2)->tqh_first; \
3510 (head2)->tqh_last = &(head2)->tqh_first; \
3514#ifdef MG_MODULE_LINES
3515#line 1 "mongoose/src/mg_features.h"
3522#ifndef CS_MONGOOSE_SRC_FEATURES_H_
3523#define CS_MONGOOSE_SRC_FEATURES_H_
3525#ifndef MG_DISABLE_HTTP_DIGEST_AUTH
3526#define MG_DISABLE_HTTP_DIGEST_AUTH 0
3529#ifndef MG_DISABLE_HTTP_KEEP_ALIVE
3530#define MG_DISABLE_HTTP_KEEP_ALIVE 0
3533#ifndef MG_DISABLE_PFS
3534#define MG_DISABLE_PFS 0
3537#ifndef MG_DISABLE_WS_RANDOM_MASK
3538#define MG_DISABLE_WS_RANDOM_MASK 0
3541#ifndef MG_ENABLE_ASYNC_RESOLVER
3542#define MG_ENABLE_ASYNC_RESOLVER 1
3545#ifndef MG_ENABLE_BROADCAST
3546#define MG_ENABLE_BROADCAST 0
3549#ifndef MG_ENABLE_COAP
3550#define MG_ENABLE_COAP 0
3553#ifndef MG_ENABLE_DEBUG
3554#define MG_ENABLE_DEBUG 0
3557#ifndef MG_ENABLE_DIRECTORY_LISTING
3558#define MG_ENABLE_DIRECTORY_LISTING 0
3561#ifndef MG_ENABLE_DNS
3562#define MG_ENABLE_DNS 1
3565#ifndef MG_ENABLE_DNS_SERVER
3566#define MG_ENABLE_DNS_SERVER 0
3569#ifndef MG_ENABLE_FAKE_DAVLOCK
3570#define MG_ENABLE_FAKE_DAVLOCK 0
3573#ifndef MG_ENABLE_FILESYSTEM
3574#define MG_ENABLE_FILESYSTEM 0
3577#ifndef MG_ENABLE_GETADDRINFO
3578#define MG_ENABLE_GETADDRINFO 0
3581#ifndef MG_ENABLE_HEXDUMP
3582#define MG_ENABLE_HEXDUMP CS_ENABLE_STDIO
3585#ifndef MG_ENABLE_HTTP
3586#define MG_ENABLE_HTTP 1
3589#ifndef MG_ENABLE_HTTP_CGI
3590#define MG_ENABLE_HTTP_CGI 0
3593#ifndef MG_ENABLE_HTTP_SSI
3594#define MG_ENABLE_HTTP_SSI MG_ENABLE_FILESYSTEM
3597#ifndef MG_ENABLE_HTTP_SSI_EXEC
3598#define MG_ENABLE_HTTP_SSI_EXEC 0
3601#ifndef MG_ENABLE_HTTP_STREAMING_MULTIPART
3602#define MG_ENABLE_HTTP_STREAMING_MULTIPART 0
3605#ifndef MG_ENABLE_HTTP_WEBDAV
3606#define MG_ENABLE_HTTP_WEBDAV 0
3609#ifndef MG_ENABLE_HTTP_WEBSOCKET
3610#define MG_ENABLE_HTTP_WEBSOCKET MG_ENABLE_HTTP
3613#ifndef MG_ENABLE_IPV6
3614#define MG_ENABLE_IPV6 0
3617#ifndef MG_ENABLE_MQTT
3618#define MG_ENABLE_MQTT 1
3621#ifndef MG_ENABLE_SOCKS
3622#define MG_ENABLE_SOCKS 0
3625#ifndef MG_ENABLE_MQTT_BROKER
3626#define MG_ENABLE_MQTT_BROKER 0
3629#ifndef MG_ENABLE_SSL
3630#define MG_ENABLE_SSL 0
3633#ifndef MG_ENABLE_SYNC_RESOLVER
3634#define MG_ENABLE_SYNC_RESOLVER 0
3637#ifndef MG_ENABLE_STDIO
3638#define MG_ENABLE_STDIO CS_ENABLE_STDIO
3642#define MG_NET_IF MG_NET_IF_SOCKET
3646#define MG_SSL_IF MG_SSL_IF_OPENSSL
3649#ifndef MG_ENABLE_THREADS
3651#define MG_ENABLE_THREADS 1
3653#define MG_ENABLE_THREADS 0
3657#if MG_ENABLE_DEBUG && !defined(CS_ENABLE_DEBUG)
3658#define CS_ENABLE_DEBUG 1
3662#if MG_ENABLE_MQTT_BROKER && !MG_ENABLE_MQTT
3663#undef MG_ENABLE_MQTT
3664#define MG_ENABLE_MQTT 1
3667#ifndef MG_ENABLE_HTTP_URL_REWRITES
3668#define MG_ENABLE_HTTP_URL_REWRITES \
3669 (CS_PLATFORM == CS_P_WINDOWS || CS_PLATFORM == CS_P_UNIX)
3672#ifndef MG_ENABLE_SNTP
3673#define MG_ENABLE_SNTP 0
3676#ifndef MG_ENABLE_EXTRA_ERRORS_DESC
3677#define MG_ENABLE_EXTRA_ERRORS_DESC 0
3680#ifndef MG_ENABLE_CALLBACK_USERDATA
3681#define MG_ENABLE_CALLBACK_USERDATA 0
3684#if MG_ENABLE_CALLBACK_USERDATA
3685#define MG_UD_ARG(ud) , ud
3686#define MG_CB(cb, ud) cb, ud
3688#define MG_UD_ARG(ud)
3689#define MG_CB(cb, ud) cb
3693#ifdef MG_MODULE_LINES
3694#line 1 "mongoose/src/mg_net_if.h"
3701#ifndef CS_MONGOOSE_SRC_NET_IF_H_
3702#define CS_MONGOOSE_SRC_NET_IF_H_
3720#define MG_MAIN_IFACE 0
3827#ifdef MG_MODULE_LINES
3828#line 1 "mongoose/src/mg_ssl_if.h"
3835#ifndef CS_MONGOOSE_SRC_SSL_IF_H_
3836#define CS_MONGOOSE_SRC_SSL_IF_H_
3885#ifdef MG_MODULE_LINES
3886#line 1 "mongoose/src/mg_net.h"
3915#ifndef CS_MONGOOSE_SRC_NET_H_
3916#define CS_MONGOOSE_SRC_NET_H_
3922#ifndef MG_VPRINTF_BUFFER_SIZE
3923#define MG_VPRINTF_BUFFER_SIZE 100
3926#ifdef MG_USE_READ_WRITE
3927#define MG_RECV_FUNC(s, b, l, f) read(s, b, l)
3928#define MG_SEND_FUNC(s, b, l, f) write(s, b, l)
3930#define MG_RECV_FUNC(s, b, l, f) recv(s, b, l, f)
3931#define MG_SEND_FUNC(s, b, l, f) send(s, b, l, f)
3959#define MG_EV_ACCEPT 1
3960#define MG_EV_CONNECT 2
3963#define MG_EV_CLOSE 5
3964#define MG_EV_TIMER 6
3971#if MG_ENABLE_HEXDUMP
3974#if MG_ENABLE_BROADCAST
4019 unsigned long flags;
4021#define MG_F_LISTENING (1 << 0)
4022#define MG_F_UDP (1 << 1)
4023#define MG_F_RESOLVING (1 << 2)
4024#define MG_F_CONNECTING (1 << 3)
4025#define MG_F_SSL (1 << 4)
4026#define MG_F_SSL_HANDSHAKE_DONE (1 << 5)
4027#define MG_F_WANT_READ (1 << 6)
4028#define MG_F_WANT_WRITE (1 << 7)
4029#define MG_F_IS_WEBSOCKET (1 << 8)
4030#define MG_F_RECV_AND_CLOSE (1 << 9)
4033#define MG_F_SEND_AND_CLOSE (1 << 10)
4034#define MG_F_CLOSE_IMMEDIATELY (1 << 11)
4035#define MG_F_WEBSOCKET_NO_DEFRAG (1 << 12)
4036#define MG_F_DELETE_CHUNK (1 << 13)
4037#define MG_F_ENABLE_BROADCAST (1 << 14)
4039#define MG_F_USER_1 (1 << 20)
4040#define MG_F_USER_2 (1 << 21)
4041#define MG_F_USER_3 (1 << 22)
4042#define MG_F_USER_4 (1 << 23)
4043#define MG_F_USER_5 (1 << 24)
4044#define MG_F_USER_6 (1 << 25)
4105#if MG_ENABLE_BROADCAST
4358#if MG_ENABLE_SSL && MG_NET_IF != MG_NET_IF_SIMPLELINK
4387#if defined(__GNUC__)
4409#if MG_ENABLE_SYNC_RESOLVER
4481#ifdef MG_MODULE_LINES
4482#line 1 "mongoose/src/mg_uri.h"
4493#ifndef CS_MONGOOSE_SRC_URI_H_
4494#define CS_MONGOOSE_SRC_URI_H_
4527 unsigned int *port,
struct mg_str *path,
struct mg_str *query,
4540 const struct mg_str *host,
unsigned int port,
4551#ifdef MG_MODULE_LINES
4552#line 1 "mongoose/src/mg_util.h"
4563#ifndef CS_MONGOOSE_SRC_UTIL_H_
4564#define CS_MONGOOSE_SRC_UTIL_H_
4577#define MG_MAX_PATH PATH_MAX
4579#define MG_MAX_PATH 256
4614#if MG_ENABLE_FILESYSTEM
4658#if MG_ENABLE_THREADS
4670#define MG_SOCK_STRINGIFY_IP 1
4671#define MG_SOCK_STRINGIFY_PORT 2
4672#define MG_SOCK_STRINGIFY_REMOTE 4
4689#if MG_NET_IF == MG_NET_IF_SOCKET
4702#if MG_ENABLE_HEXDUMP
4757#define MG_URL_ENCODE_F_SPACE_AS_PLUS (1 << 0)
4758#define MG_URL_ENCODE_F_UPPERCASE_HEX (1 << 1)
4769#ifdef MG_MODULE_LINES
4770#line 1 "mongoose/src/mg_http.h"
4781#ifndef CS_MONGOOSE_SRC_HTTP_H_
4782#define CS_MONGOOSE_SRC_HTTP_H_
4793#ifndef MG_MAX_HTTP_HEADERS
4794#define MG_MAX_HTTP_HEADERS 20
4797#ifndef MG_MAX_HTTP_REQUEST_SIZE
4798#define MG_MAX_HTTP_REQUEST_SIZE 1024
4801#ifndef MG_MAX_HTTP_SEND_MBUF
4802#define MG_MAX_HTTP_SEND_MBUF 1024
4805#ifndef MG_CGI_ENVIRONMENT_SIZE
4806#define MG_CGI_ENVIRONMENT_SIZE 8192
4838#if MG_ENABLE_HTTP_WEBSOCKET
4841 unsigned char *
data;
4843 unsigned char flags;
4872#define MG_EV_HTTP_REQUEST 100
4873#define MG_EV_HTTP_REPLY 101
4874#define MG_EV_HTTP_CHUNK 102
4875#define MG_EV_SSI_CALL 105
4876#define MG_EV_SSI_CALL_CTX 106
4878#if MG_ENABLE_HTTP_WEBSOCKET
4879#define MG_EV_WEBSOCKET_HANDSHAKE_REQUEST 111
4880#define MG_EV_WEBSOCKET_HANDSHAKE_DONE 112
4881#define MG_EV_WEBSOCKET_FRAME 113
4882#define MG_EV_WEBSOCKET_CONTROL_FRAME 114
4885#if MG_ENABLE_HTTP_STREAMING_MULTIPART
4886#define MG_EV_HTTP_MULTIPART_REQUEST 121
4887#define MG_EV_HTTP_PART_BEGIN 122
4888#define MG_EV_HTTP_PART_DATA 123
4889#define MG_EV_HTTP_PART_END 124
4891#define MG_EV_HTTP_MULTIPART_REQUEST_END 125
4950#if MG_ENABLE_HTTP_WEBSOCKET
4966 const char *extra_headers);
4979 const char *host,
const char *
protocol,
4980 const char *extra_headers);
4984 const char *host,
const char *
protocol,
4985 const char *extra_headers,
const char *user,
4991 const struct mg_str path,
4992 const struct mg_str host,
4994 const struct mg_str extra_headers,
4995 const struct mg_str user,
5022 const char *extra_headers);
5033 const char *extra_headers);
5070 const char *fmt, ...);
5073#define WEBSOCKET_OP_CONTINUE 0
5074#define WEBSOCKET_OP_TEXT 1
5075#define WEBSOCKET_OP_BINARY 2
5076#define WEBSOCKET_OP_CLOSE 8
5077#define WEBSOCKET_OP_PING 9
5078#define WEBSOCKET_OP_PONG 10
5092#define WEBSOCKET_DONT_FIN 0x100
5118#define MG_AUTH_FLAG_IS_DIRECTORY (1 << 0)
5119#define MG_AUTH_FLAG_IS_GLOBAL_PASS_FILE (1 << 1)
5120#define MG_AUTH_FLAG_ALLOW_MISSING_FILE (1 << 2)
5146#ifdef MG_MODULE_LINES
5147#line 1 "mongoose/src/mg_http_server.h"
5153#ifndef CS_MONGOOSE_SRC_HTTP_SERVER_H_
5154#define CS_MONGOOSE_SRC_HTTP_SERVER_H_
5289#if MG_ENABLE_FILESYSTEM
5391#if MG_ENABLE_HTTP_URL_REWRITES
5494 const struct mg_str extra_headers);
5496#if MG_ENABLE_HTTP_STREAMING_MULTIPART
5642 const char *extra_headers);
5663 const struct mg_str extra_headers);
5687#if MG_ENABLE_HTTP_URL_REWRITES
5710#ifdef MG_MODULE_LINES
5711#line 1 "mongoose/src/mg_http_client.h"
5717#ifndef CS_MONGOOSE_SRC_HTTP_CLIENT_H_
5718#define CS_MONGOOSE_SRC_HTTP_CLIENT_H_
5751 const char *extra_headers,
const char *
post_data);
5767 const char *method,
const char *uri,
5768 const char *auth_domain,
const char *user,
5769 const char *
passwd,
const char *nonce);
5775#ifdef MG_MODULE_LINES
5776#line 1 "mongoose/src/mg_mqtt.h"
5799#ifndef CS_MONGOOSE_SRC_MQTT_H_
5800#define CS_MONGOOSE_SRC_MQTT_H_
5832 unsigned char flags;
5847#define MG_MQTT_CMD_CONNECT 1
5848#define MG_MQTT_CMD_CONNACK 2
5849#define MG_MQTT_CMD_PUBLISH 3
5850#define MG_MQTT_CMD_PUBACK 4
5851#define MG_MQTT_CMD_PUBREC 5
5852#define MG_MQTT_CMD_PUBREL 6
5853#define MG_MQTT_CMD_PUBCOMP 7
5854#define MG_MQTT_CMD_SUBSCRIBE 8
5855#define MG_MQTT_CMD_SUBACK 9
5856#define MG_MQTT_CMD_UNSUBSCRIBE 10
5857#define MG_MQTT_CMD_UNSUBACK 11
5858#define MG_MQTT_CMD_PINGREQ 12
5859#define MG_MQTT_CMD_PINGRESP 13
5860#define MG_MQTT_CMD_DISCONNECT 14
5863#define MG_MQTT_EVENT_BASE 200
5864#define MG_EV_MQTT_CONNECT (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_CONNECT)
5865#define MG_EV_MQTT_CONNACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_CONNACK)
5866#define MG_EV_MQTT_PUBLISH (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBLISH)
5867#define MG_EV_MQTT_PUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBACK)
5868#define MG_EV_MQTT_PUBREC (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBREC)
5869#define MG_EV_MQTT_PUBREL (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBREL)
5870#define MG_EV_MQTT_PUBCOMP (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBCOMP)
5871#define MG_EV_MQTT_SUBSCRIBE (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_SUBSCRIBE)
5872#define MG_EV_MQTT_SUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_SUBACK)
5873#define MG_EV_MQTT_UNSUBSCRIBE (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_UNSUBSCRIBE)
5874#define MG_EV_MQTT_UNSUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_UNSUBACK)
5875#define MG_EV_MQTT_PINGREQ (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PINGREQ)
5876#define MG_EV_MQTT_PINGRESP (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PINGRESP)
5877#define MG_EV_MQTT_DISCONNECT (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_DISCONNECT)
5880#define MG_MQTT_RETAIN 0x1
5881#define MG_MQTT_DUP 0x4
5882#define MG_MQTT_QOS(qos) ((qos) << 1)
5883#define MG_MQTT_GET_QOS(flags) (((flags) &0x6) >> 1)
5884#define MG_MQTT_SET_QOS(flags, qos) (flags) = ((flags) & ~0x6) | ((qos) << 1)
5887#define MG_MQTT_CLEAN_SESSION 0x02
5888#define MG_MQTT_HAS_WILL 0x04
5889#define MG_MQTT_WILL_RETAIN 0x20
5890#define MG_MQTT_HAS_PASSWORD 0x40
5891#define MG_MQTT_HAS_USER_NAME 0x80
5892#define MG_MQTT_GET_WILL_QOS(flags) (((flags) &0x18) >> 3)
5893#define MG_MQTT_SET_WILL_QOS(flags, qos) \
5894 (flags) = ((flags) & ~0x18) | ((qos) << 3)
5897#define MG_EV_MQTT_CONNACK_ACCEPTED 0
5898#define MG_EV_MQTT_CONNACK_UNACCEPTABLE_VERSION 1
5899#define MG_EV_MQTT_CONNACK_IDENTIFIER_REJECTED 2
5900#define MG_EV_MQTT_CONNACK_SERVER_UNAVAILABLE 3
5901#define MG_EV_MQTT_CONNACK_BAD_AUTH 4
5902#define MG_EV_MQTT_CONNACK_NOT_AUTHORIZED 5
6006#ifdef MG_MODULE_LINES
6007#line 1 "mongoose/src/mg_mqtt_server.h"
6030#ifndef CS_MONGOOSE_SRC_MQTT_BROKER_H_
6031#define CS_MONGOOSE_SRC_MQTT_BROKER_H_
6033#if MG_ENABLE_MQTT_BROKER
6042#ifndef MG_MQTT_MAX_SESSION_SUBSCRIPTIONS
6043#define MG_MQTT_MAX_SESSION_SUBSCRIPTIONS 512
6113#ifdef MG_MODULE_LINES
6114#line 1 "mongoose/src/mg_dns.h"
6125#ifndef CS_MONGOOSE_SRC_DNS_H_
6126#define CS_MONGOOSE_SRC_DNS_H_
6134#define MG_DNS_A_RECORD 0x01
6135#define MG_DNS_CNAME_RECORD 0x05
6136#define MG_DNS_PTR_RECORD 0x0c
6137#define MG_DNS_TXT_RECORD 0x10
6138#define MG_DNS_AAAA_RECORD 0x1c
6139#define MG_DNS_SRV_RECORD 0x21
6140#define MG_DNS_MX_RECORD 0x0f
6141#define MG_DNS_ANY_RECORD 0xff
6142#define MG_DNS_NSEC_RECORD 0x2f
6144#define MG_MAX_DNS_QUESTIONS 32
6145#define MG_MAX_DNS_ANSWERS 32
6147#define MG_DNS_MESSAGE 100
6280#ifdef MG_MODULE_LINES
6281#line 1 "mongoose/src/mg_dns_server.h"
6294#ifndef CS_MONGOOSE_SRC_DNS_SERVER_H_
6295#define CS_MONGOOSE_SRC_DNS_SERVER_H_
6297#if MG_ENABLE_DNS_SERVER
6305#define MG_DNS_SERVER_DEFAULT_TTL 3600
6354 const char *
name,
int rtype,
int ttl,
const void *rdata,
6377#ifdef MG_MODULE_LINES
6378#line 1 "mongoose/src/mg_resolv.h"
6389#ifndef CS_MONGOOSE_SRC_RESOLV_H_
6390#define CS_MONGOOSE_SRC_RESOLV_H_
6461#ifdef MG_MODULE_LINES
6462#line 1 "mongoose/src/mg_coap.h"
6495#ifndef CS_MONGOOSE_SRC_COAP_H_
6496#define CS_MONGOOSE_SRC_COAP_H_
6500#define MG_COAP_MSG_TYPE_FIELD 0x2
6501#define MG_COAP_CODE_CLASS_FIELD 0x4
6502#define MG_COAP_CODE_DETAIL_FIELD 0x8
6503#define MG_COAP_MSG_ID_FIELD 0x10
6504#define MG_COAP_TOKEN_FIELD 0x20
6505#define MG_COAP_OPTIOMG_FIELD 0x40
6506#define MG_COAP_PAYLOAD_FIELD 0x80
6508#define MG_COAP_ERROR 0x10000
6509#define MG_COAP_FORMAT_ERROR (MG_COAP_ERROR | 0x20000)
6510#define MG_COAP_IGNORE (MG_COAP_ERROR | 0x40000)
6511#define MG_COAP_NOT_ENOUGH_DATA (MG_COAP_ERROR | 0x80000)
6512#define MG_COAP_NETWORK_ERROR (MG_COAP_ERROR | 0x100000)
6514#define MG_COAP_MSG_CON 0
6515#define MG_COAP_MSG_NOC 1
6516#define MG_COAP_MSG_ACK 2
6517#define MG_COAP_MSG_RST 3
6518#define MG_COAP_MSG_MAX 3
6520#define MG_COAP_CODECLASS_REQUEST 0
6521#define MG_COAP_CODECLASS_RESP_OK 2
6522#define MG_COAP_CODECLASS_CLIENT_ERR 4
6523#define MG_COAP_CODECLASS_SRV_ERR 5
6525#define MG_COAP_EVENT_BASE 300
6526#define MG_EV_COAP_CON (MG_COAP_EVENT_BASE + MG_COAP_MSG_CON)
6527#define MG_EV_COAP_NOC (MG_COAP_EVENT_BASE + MG_COAP_MSG_NOC)
6528#define MG_EV_COAP_ACK (MG_COAP_EVENT_BASE + MG_COAP_MSG_ACK)
6529#define MG_EV_COAP_RST (MG_COAP_EVENT_BASE + MG_COAP_MSG_RST)
6629#ifdef MG_MODULE_LINES
6630#line 1 "mongoose/src/mg_sntp.h"
6637#ifndef CS_MONGOOSE_SRC_SNTP_H_
6638#define CS_MONGOOSE_SRC_SNTP_H_
6642#define MG_SNTP_EVENT_BASE 500
6648#define MG_SNTP_REPLY (MG_SNTP_EVENT_BASE + 1)
6651#define MG_SNTP_MALFORMED_REPLY (MG_SNTP_EVENT_BASE + 2)
6654#define MG_SNTP_FAILED (MG_SNTP_EVENT_BASE + 3)
6686#ifdef MG_MODULE_LINES
6687#line 1 "mongoose/src/mg_socks.h"
6694#ifndef CS_MONGOOSE_SRC_SOCKS_H_
6695#define CS_MONGOOSE_SRC_SOCKS_H_
6699#define MG_SOCKS_VERSION 5
6701#define MG_SOCKS_HANDSHAKE_DONE MG_F_USER_1
6702#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)
#define LIST_HEAD(name, type)
void mg_set_nameserver(struct mg_mgr *mgr, const char *nameserver)
#define MG_MAX_HTTP_HEADERS
#define MG_MAX_DNS_ANSWERS
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)
#define MG_MAX_DNS_QUESTIONS
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)
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)
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)