2 #line 1 "mongoose/src/common.h" 23 #ifndef CS_MONGOOSE_SRC_COMMON_H_ 24 #define CS_MONGOOSE_SRC_COMMON_H_ 26 #define MG_VERSION "6.7" 30 #include <mg_locals.h> 34 #ifdef MG_MODULE_LINES 35 #line 1 "common/platform.h" 37 #ifndef CS_COMMON_PLATFORM_H_ 38 #define CS_COMMON_PLATFORM_H_ 46 #define CS_P_WINDOWS 2 48 #define CS_P_ESP8266 3 52 #define CS_P_TM4C129 14 55 #define CS_P_NXP_LPC 13 56 #define CS_P_NXP_KINETIS 9 66 #if defined(TARGET_IS_MSP432P4XX) || defined(__MSP432P401R__) 67 #define CS_PLATFORM CS_P_MSP432 69 #define CS_PLATFORM CS_P_CC3200 70 #elif defined(__unix__) || defined(__APPLE__) 71 #define CS_PLATFORM CS_P_UNIX 73 #define CS_PLATFORM CS_P_WINCE 75 #define CS_PLATFORM CS_P_WINDOWS 76 #elif defined(__MBED__) 77 #define CS_PLATFORM CS_P_MBED 78 #elif defined(__USE_LPCOPEN) 79 #define CS_PLATFORM CS_P_NXP_LPC 80 #elif defined(FRDM_K64F) || defined(FREEDOM) 81 #define CS_PLATFORM CS_P_NXP_KINETIS 83 #define CS_PLATFORM CS_P_PIC32 84 #elif defined(ESP_PLATFORM) 85 #define CS_PLATFORM CS_P_ESP32 86 #elif defined(ICACHE_FLASH) 87 #define CS_PLATFORM CS_P_ESP8266 88 #elif defined(TARGET_IS_TM4C129_RA0) || defined(TARGET_IS_TM4C129_RA1) || \ 89 defined(TARGET_IS_TM4C129_RA2) 90 #define CS_PLATFORM CS_P_TM4C129 92 #define CS_PLATFORM CS_P_STM32 96 #error "CS_PLATFORM is not specified and we couldn't guess it." 101 #define MG_NET_IF_SOCKET 1 102 #define MG_NET_IF_SIMPLELINK 2 103 #define MG_NET_IF_LWIP_LOW_LEVEL 3 104 #define MG_NET_IF_PIC32 4 106 #define MG_SSL_IF_OPENSSL 1 107 #define MG_SSL_IF_MBEDTLS 2 108 #define MG_SSL_IF_SIMPLELINK 3 128 #if (defined(__GNUC__) || defined(__TI_COMPILER_VERSION__)) && !defined(_WIN32) 129 #define WEAK __attribute__((weak)) 136 #define NORETURN __attribute__((noreturn)) 137 #define NOINLINE __attribute__((noinline)) 138 #define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 139 #define NOINSTR __attribute__((no_instrument_function)) 140 #define DO_NOT_WARN_UNUSED __attribute__((unused)) 144 #define WARN_UNUSED_RESULT 146 #define DO_NOT_WARN_UNUSED 150 #define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) 154 #ifdef MG_MODULE_LINES 155 #line 1 "common/platforms/platform_windows.h" 157 #ifndef CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_ 158 #define CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_ 159 #if CS_PLATFORM == CS_P_WINDOWS 174 #pragma warning(disable : 4127) 175 #pragma warning(disable : 4204) 178 #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS 179 #define _WINSOCK_DEPRECATED_NO_WARNINGS 1 182 #ifndef _CRT_SECURE_NO_WARNINGS 183 #define _CRT_SECURE_NO_WARNINGS 196 #include <sys/stat.h> 200 #pragma comment(lib, "ws2_32.lib") 203 #include <winsock2.h> 204 #include <ws2tcpip.h> 208 #if defined(_MSC_VER) && _MSC_VER >= 1800 209 #define strdup _strdup 213 #define EINPROGRESS WSAEINPROGRESS 216 #define EWOULDBLOCK WSAEWOULDBLOCK 220 #define STR(x) STRX(x) 221 #define __func__ __FILE__ ":" STR(__LINE__) 223 #define snprintf _snprintf 224 #define fileno _fileno 225 #define vsnprintf _vsnprintf 226 #define sleep(x) Sleep((x) *1000) 227 #define to64(x) _atoi64(x) 228 #if !defined(__MINGW32__) && !defined(__MINGW64__) 229 #define popen(x, y) _popen((x), (y)) 230 #define pclose(x) _pclose(x) 233 #if defined(_MSC_VER) && _MSC_VER >= 1400 234 #define fseeko(x, y, z) _fseeki64((x), (y), (z)) 236 #define fseeko(x, y, z) fseek((x), (y), (z)) 238 #if defined(_MSC_VER) && _MSC_VER <= 1200 239 typedef unsigned long uintptr_t;
242 typedef int socklen_t;
246 typedef signed char int8_t;
247 typedef unsigned char uint8_t;
249 typedef unsigned int uint32_t;
250 typedef short int16_t;
251 typedef unsigned short uint16_t;
252 typedef __int64 int64_t;
253 typedef unsigned __int64 uint64_t;
255 typedef SOCKET sock_t;
256 typedef uint32_t in_addr_t;
258 #define UINT16_MAX 65535 261 #define UINT32_MAX 4294967295 266 #define INT64_FMT "I64d" 267 #define INT64_X_FMT "I64x" 268 #define SIZE_T_FMT "Iu" 269 typedef struct _stati64 cs_stat_t;
271 #define S_ISDIR(x) (((x) &_S_IFMT) == _S_IFDIR) 274 #define S_ISREG(x) (((x) &_S_IFMT) == _S_IFREG) 277 #define CS_DEFINE_DIRENT 281 #define va_copy __va_copy 283 #define va_copy(x, y) (x) = (y) 287 #ifndef MG_MAX_HTTP_REQUEST_SIZE 288 #define MG_MAX_HTTP_REQUEST_SIZE 8192 291 #ifndef MG_MAX_HTTP_SEND_MBUF 292 #define MG_MAX_HTTP_SEND_MBUF 4096 295 #ifndef MG_MAX_HTTP_HEADERS 296 #define MG_MAX_HTTP_HEADERS 40 299 #ifndef CS_ENABLE_STDIO 300 #define CS_ENABLE_STDIO 1 303 #ifndef MG_ENABLE_BROADCAST 304 #define MG_ENABLE_BROADCAST 1 307 #ifndef MG_ENABLE_DIRECTORY_LISTING 308 #define MG_ENABLE_DIRECTORY_LISTING 1 311 #ifndef MG_ENABLE_FILESYSTEM 312 #define MG_ENABLE_FILESYSTEM 1 315 #ifndef MG_ENABLE_HTTP_CGI 316 #define MG_ENABLE_HTTP_CGI MG_ENABLE_FILESYSTEM 320 #define MG_NET_IF MG_NET_IF_SOCKET 325 #ifdef MG_MODULE_LINES 326 #line 1 "common/platforms/platform_unix.h" 328 #ifndef CS_COMMON_PLATFORMS_PLATFORM_UNIX_H_ 329 #define CS_COMMON_PLATFORMS_PLATFORM_UNIX_H_ 330 #if CS_PLATFORM == CS_P_UNIX 332 #ifndef _XOPEN_SOURCE 333 #define _XOPEN_SOURCE 600 337 #ifndef __STDC_FORMAT_MACROS 338 #define __STDC_FORMAT_MACROS 342 #ifndef __STDC_LIMIT_MACROS 343 #define __STDC_LIMIT_MACROS 347 #ifndef _LARGEFILE_SOURCE 348 #define _LARGEFILE_SOURCE 352 #ifndef _FILE_OFFSET_BITS 353 #define _FILE_OFFSET_BITS 64 356 #include <arpa/inet.h> 362 #include <inttypes.h> 367 #include <netinet/in.h> 374 #include <sys/param.h> 375 #include <sys/socket.h> 376 #include <sys/select.h> 377 #include <sys/stat.h> 378 #include <sys/time.h> 379 #include <sys/types.h> 383 #include <machine/endian.h> 385 #define LITTLE_ENDIAN __DARWIN_LITTLE_ENDIAN 386 #define BIG_ENDIAN __DARWIN_BIG_ENDIAN 387 #define PDP_ENDIAN __DARWIN_PDP_ENDIAN 388 #define BYTE_ORDER __DARWIN_BYTE_ORDER 398 #if !(defined(__cplusplus) && __cplusplus >= 201103L) && \ 399 !(defined(__DARWIN_C_LEVEL) && __DARWIN_C_LEVEL >= 200809L) 400 long long strtoll(
const char *,
char **,
int);
404 #define INVALID_SOCKET (-1) 405 #define SIZE_T_FMT "zu" 406 typedef struct stat cs_stat_t;
408 #define to64(x) strtoll(x, NULL, 10) 409 #define INT64_FMT PRId64 410 #define INT64_X_FMT PRIx64 418 #define va_copy __va_copy 420 #define va_copy(x, y) (x) = (y) 424 #define closesocket(x) close(x) 426 #ifndef MG_MAX_HTTP_REQUEST_SIZE 427 #define MG_MAX_HTTP_REQUEST_SIZE 8192 430 #ifndef MG_MAX_HTTP_SEND_MBUF 431 #define MG_MAX_HTTP_SEND_MBUF 4096 434 #ifndef MG_MAX_HTTP_HEADERS 435 #define MG_MAX_HTTP_HEADERS 40 438 #ifndef CS_ENABLE_STDIO 439 #define CS_ENABLE_STDIO 1 442 #ifndef MG_ENABLE_BROADCAST 443 #define MG_ENABLE_BROADCAST 1 446 #ifndef MG_ENABLE_DIRECTORY_LISTING 447 #define MG_ENABLE_DIRECTORY_LISTING 1 450 #ifndef MG_ENABLE_FILESYSTEM 451 #define MG_ENABLE_FILESYSTEM 1 454 #ifndef MG_ENABLE_HTTP_CGI 455 #define MG_ENABLE_HTTP_CGI MG_ENABLE_FILESYSTEM 459 #define MG_NET_IF MG_NET_IF_SOCKET 464 #ifdef MG_MODULE_LINES 465 #line 1 "common/platforms/platform_esp32.h" 472 #ifndef CS_COMMON_PLATFORMS_PLATFORM_ESP32_H_ 473 #define CS_COMMON_PLATFORMS_PLATFORM_ESP32_H_ 474 #if CS_PLATFORM == CS_P_ESP32 480 #include <inttypes.h> 481 #include <machine/endian.h> 484 #include <sys/stat.h> 485 #include <sys/time.h> 487 #define SIZE_T_FMT "u" 488 typedef struct stat cs_stat_t;
490 #define to64(x) strtoll(x, NULL, 10) 491 #define INT64_FMT PRId64 492 #define INT64_X_FMT PRIx64 494 #define _FILE_OFFSET_BITS 32 499 #define MG_NET_IF MG_NET_IF_SOCKET 502 #ifndef CS_ENABLE_STDIO 503 #define CS_ENABLE_STDIO 1 508 #ifdef MG_MODULE_LINES 509 #line 1 "common/platforms/platform_esp8266.h" 516 #ifndef CS_COMMON_PLATFORMS_PLATFORM_ESP8266_H_ 517 #define CS_COMMON_PLATFORMS_PLATFORM_ESP8266_H_ 518 #if CS_PLATFORM == CS_P_ESP8266 523 #include <inttypes.h> 524 #include <machine/endian.h> 526 #include <sys/stat.h> 527 #include <sys/time.h> 529 #define SIZE_T_FMT "u" 530 typedef struct stat cs_stat_t;
532 #define CS_DEFINE_DIRENT 534 #define to64(x) strtoll(x, NULL, 10) 535 #define INT64_FMT PRId64 536 #define INT64_X_FMT PRIx64 538 #define _FILE_OFFSET_BITS 32 547 #define LWIP_TIMEVAL_PRIVATE 0 550 #include <lwip/opt.h> 552 # define MG_NET_IF MG_NET_IF_SOCKET 554 # define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL 558 #ifndef CS_ENABLE_STDIO 559 #define CS_ENABLE_STDIO 1 564 #ifdef MG_MODULE_LINES 565 #line 1 "common/platforms/platform_cc3100.h" 572 #ifndef CS_COMMON_PLATFORMS_PLATFORM_CC3100_H_ 573 #define CS_COMMON_PLATFORMS_PLATFORM_CC3100_H_ 574 #if CS_PLATFORM == CS_P_CC3100 579 #include <inttypes.h> 584 #define MG_NET_IF MG_NET_IF_SIMPLELINK 585 #define MG_SSL_IF MG_SSL_IF_SIMPLELINK 593 #include <simplelink.h> 598 #define INVALID_SOCKET (-1) 600 #define to64(x) strtoll(x, NULL, 10) 601 #define INT64_FMT PRId64 602 #define INT64_X_FMT PRIx64 603 #define SIZE_T_FMT "u" 607 const char *inet_ntop(
int af,
const void *src,
char *dst, socklen_t size);
608 char *inet_ntoa(
struct in_addr in);
609 int inet_pton(
int af,
const char *src,
void *dst);
613 #ifdef MG_MODULE_LINES 614 #line 1 "common/platforms/platform_cc3200.h" 621 #ifndef CS_COMMON_PLATFORMS_PLATFORM_CC3200_H_ 622 #define CS_COMMON_PLATFORMS_PLATFORM_CC3200_H_ 623 #if CS_PLATFORM == CS_P_CC3200 628 #include <inttypes.h> 633 #ifndef __TI_COMPILER_VERSION__ 635 #include <sys/time.h> 638 #define MG_NET_IF MG_NET_IF_SIMPLELINK 639 #define MG_SSL_IF MG_SSL_IF_SIMPLELINK 642 #if defined(CC3200_FS_SPIFFS) && !defined(MG_ENABLE_DIRECTORY_LISTING) 643 #define MG_ENABLE_DIRECTORY_LISTING 1 649 #define INVALID_SOCKET (-1) 650 #define SIZE_T_FMT "u" 651 typedef struct stat cs_stat_t;
653 #define to64(x) strtoll(x, NULL, 10) 654 #define INT64_FMT PRId64 655 #define INT64_X_FMT PRIx64 666 #ifdef __TI_COMPILER_VERSION__ 668 #define timeval SlTimeval_t 669 int gettimeofday(
struct timeval *t,
void *tz);
671 int asprintf(
char **strp,
const char *fmt, ...);
676 #ifdef __TI_COMPILER_VERSION__ 680 typedef unsigned int mode_t;
681 typedef size_t _off_t;
682 typedef long ssize_t;
692 int _stat(
const char *pathname,
struct stat *st);
693 #define stat(a, b) _stat(a, b) 695 #define __S_IFMT 0170000 697 #define __S_IFDIR 0040000 698 #define __S_IFCHR 0020000 699 #define __S_IFREG 0100000 701 #define __S_ISTYPE(mode, mask) (((mode) &__S_IFMT) == (mask)) 703 #define S_IFDIR __S_IFDIR 704 #define S_IFCHR __S_IFCHR 705 #define S_IFREG __S_IFREG 706 #define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR) 707 #define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG) 710 #define va_copy(apc, ap) ((apc) = (ap)) 714 #ifdef CC3200_FS_SLFS 718 #if (defined(CC3200_FS_SPIFFS) || defined(CC3200_FS_SLFS)) && \ 719 !defined(MG_ENABLE_FILESYSTEM) 720 #define MG_ENABLE_FILESYSTEM 1 721 #define CS_DEFINE_DIRENT 724 #ifndef CS_ENABLE_STDIO 725 #define CS_ENABLE_STDIO 1 734 #ifdef MG_MODULE_LINES 735 #line 1 "common/platforms/platform_msp432.h" 742 #ifndef CS_COMMON_PLATFORMS_PLATFORM_MSP432_H_ 743 #define CS_COMMON_PLATFORMS_PLATFORM_MSP432_H_ 744 #if CS_PLATFORM == CS_P_MSP432 749 #include <inttypes.h> 754 #ifndef __TI_COMPILER_VERSION__ 756 #include <sys/time.h> 759 #define MG_NET_IF MG_NET_IF_SIMPLELINK 760 #define MG_SSL_IF MG_SSL_IF_SIMPLELINK 765 #define INVALID_SOCKET (-1) 766 #define SIZE_T_FMT "u" 767 typedef struct stat cs_stat_t;
769 #define to64(x) strtoll(x, NULL, 10) 770 #define INT64_FMT PRId64 771 #define INT64_X_FMT PRIx64 782 #ifdef __TI_COMPILER_VERSION__ 784 #define timeval SlTimeval_t 785 int gettimeofday(
struct timeval *t,
void *tz);
789 #ifdef __TI_COMPILER_VERSION__ 793 typedef unsigned int mode_t;
794 typedef size_t _off_t;
795 typedef long ssize_t;
805 int _stat(
const char *pathname,
struct stat *st);
806 #define stat(a, b) _stat(a, b) 808 #define __S_IFMT 0170000 810 #define __S_IFDIR 0040000 811 #define __S_IFCHR 0020000 812 #define __S_IFREG 0100000 814 #define __S_ISTYPE(mode, mask) (((mode) &__S_IFMT) == (mask)) 816 #define S_IFDIR __S_IFDIR 817 #define S_IFCHR __S_IFCHR 818 #define S_IFREG __S_IFREG 819 #define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR) 820 #define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG) 823 #define va_copy(apc, ap) ((apc) = (ap)) 827 #ifndef CS_ENABLE_STDIO 828 #define CS_ENABLE_STDIO 1 831 #if (defined(CC3200_FS_SPIFFS) || defined(CC3200_FS_SLFS)) && !defined(MG_ENABLE_FILESYSTEM) 832 #define MG_ENABLE_FILESYSTEM 1 841 #ifdef MG_MODULE_LINES 842 #line 1 "common/platforms/platform_tm4c129.h" 849 #ifndef CS_COMMON_PLATFORMS_PLATFORM_TM4C129_H_ 850 #define CS_COMMON_PLATFORMS_PLATFORM_TM4C129_H_ 851 #if CS_PLATFORM == CS_P_TM4C129 856 #include <inttypes.h> 861 #ifndef __TI_COMPILER_VERSION__ 863 #include <sys/time.h> 866 #define SIZE_T_FMT "u" 867 typedef struct stat cs_stat_t;
869 #define to64(x) strtoll(x, NULL, 10) 870 #define INT64_FMT PRId64 871 #define INT64_X_FMT PRIx64 875 # include <lwip/opt.h> 877 # define MG_NET_IF MG_NET_IF_SOCKET 879 # define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL 882 #elif MG_NET_IF == MG_NET_IF_SIMPLELINK 883 # include "common/platforms/simplelink/cs_simplelink.h" 886 #ifndef CS_ENABLE_STDIO 887 #define CS_ENABLE_STDIO 1 890 #ifdef __TI_COMPILER_VERSION__ 892 #define va_copy(apc, ap) ((apc) = (ap)) 901 #ifdef MG_MODULE_LINES 902 #line 1 "common/platforms/platform_mbed.h" 909 #ifndef CS_COMMON_PLATFORMS_PLATFORM_MBED_H_ 910 #define CS_COMMON_PLATFORMS_PLATFORM_MBED_H_ 911 #if CS_PLATFORM == CS_P_MBED 924 #include <inttypes.h> 928 #include <sys/stat.h> 929 #include <sys/types.h> 933 typedef struct stat cs_stat_t;
936 #ifndef CS_ENABLE_STDIO 937 #define CS_ENABLE_STDIO 1 946 #if defined(__ARMCC_VERSION) || defined(__ICCARM__) 947 #define _TIMEVAL_DEFINED 948 #define gettimeofday _gettimeofday 951 typedef long suseconds_t;
959 #if MG_NET_IF == MG_NET_IF_SIMPLELINK 961 #define MG_SIMPLELINK_NO_OSI 1 963 #include <simplelink.h> 966 #define INVALID_SOCKET (-1) 968 #define to64(x) strtoll(x, NULL, 10) 969 #define INT64_FMT PRId64 970 #define INT64_X_FMT PRIx64 971 #define SIZE_T_FMT "u" 975 const char *inet_ntop(
int af,
const void *src,
char *dst, socklen_t size);
976 char *inet_ntoa(
struct in_addr in);
977 int inet_pton(
int af,
const char *src,
void *dst);
978 int inet_aton(
const char *cp,
struct in_addr *inp);
979 in_addr_t inet_addr(
const char *cp);
985 #ifdef MG_MODULE_LINES 986 #line 1 "common/platforms/platform_nrf51.h" 992 #ifndef CS_COMMON_PLATFORMS_PLATFORM_NRF51_H_ 993 #define CS_COMMON_PLATFORMS_PLATFORM_NRF51_H_ 994 #if CS_PLATFORM == CS_P_NRF51 998 #include <inttypes.h> 1003 #define to64(x) strtoll(x, NULL, 10) 1005 #define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL 1007 #define MG_ENABLE_IPV6 1 1013 #if !defined(__ARMCC_VERSION) 1014 # define LWIP_TIMEVAL_PRIVATE 0 1017 int gettimeofday(
struct timeval *tp,
void *tzp);
1020 #define INT64_FMT PRId64 1021 #define SIZE_T_FMT "u" 1026 #define CS_ENABLE_STRDUP defined(__ARMCC_VERSION) 1030 #ifdef MG_MODULE_LINES 1031 #line 1 "common/platforms/platform_nrf52.h" 1037 #ifndef CS_COMMON_PLATFORMS_PLATFORM_NRF52_H_ 1038 #define CS_COMMON_PLATFORMS_PLATFORM_NRF52_H_ 1039 #if CS_PLATFORM == CS_P_NRF52 1044 #include <inttypes.h> 1049 #define to64(x) strtoll(x, NULL, 10) 1051 #define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL 1053 #define MG_ENABLE_IPV6 1 1055 #if !defined(ENOSPC) 1063 #if !defined(__ARMCC_VERSION) 1064 # define LWIP_TIMEVAL_PRIVATE 0 1067 #define INT64_FMT PRId64 1068 #define SIZE_T_FMT "u" 1073 #define CS_ENABLE_STRDUP defined(__ARMCC_VERSION) 1077 #ifdef MG_MODULE_LINES 1078 #line 1 "common/platforms/simplelink/cs_simplelink.h" 1085 #ifndef CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_ 1086 #define CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_ 1089 #if defined(MG_NET_IF) && MG_NET_IF == MG_NET_IF_SIMPLELINK && \ 1090 !defined(__SIMPLELINK_H__) 1092 #include <stdbool.h> 1094 #ifndef __TI_COMPILER_VERSION__ 1106 #define PROVISIONING_API_H_ 1107 #include <simplelink/user.h> 1108 #undef PROVISIONING_API_H_ 1109 #undef SL_INC_STD_BSD_API_NAMING 1111 #include <simplelink/include/simplelink.h> 1112 #include <simplelink/include/netapp.h> 1116 #define AF_INET SL_AF_INET 1118 #define socklen_t SlSocklen_t 1119 #define sockaddr SlSockAddr_t 1120 #define sockaddr_in SlSockAddrIn_t 1121 #define in_addr SlInAddr_t 1123 #define SOCK_STREAM SL_SOCK_STREAM 1124 #define SOCK_DGRAM SL_SOCK_DGRAM 1126 #define htonl sl_Htonl 1127 #define ntohl sl_Ntohl 1128 #define htons sl_Htons 1129 #define ntohs sl_Ntohs 1132 #define EACCES SL_EACCES 1134 #ifndef EAFNOSUPPORT 1135 #define EAFNOSUPPORT SL_EAFNOSUPPORT 1138 #define EAGAIN SL_EAGAIN 1141 #define EBADF SL_EBADF 1144 #define EINVAL SL_EINVAL 1147 #define ENOMEM SL_ENOMEM 1150 #define EWOULDBLOCK SL_EWOULDBLOCK 1159 const char *inet_ntop(
int af,
const void *src,
char *dst, socklen_t size);
1160 char *inet_ntoa(
struct in_addr in);
1161 int inet_pton(
int af,
const char *src,
void *dst);
1166 typedef void (*mg_init_cb)(
struct mg_mgr *mgr);
1167 bool mg_start_task(
int priority,
int stack_size, mg_init_cb mg_init);
1169 void mg_run_in_task(
void (*cb)(
struct mg_mgr *mgr,
void *arg),
void *cb_arg);
1171 int sl_fs_init(
void);
1173 void sl_restart_cb(
struct mg_mgr *mgr);
1184 #ifdef MG_MODULE_LINES 1185 #line 1 "common/platforms/platform_wince.h" 1187 #ifndef CS_COMMON_PLATFORMS_PLATFORM_WINCE_H_ 1188 #define CS_COMMON_PLATFORMS_PLATFORM_WINCE_H_ 1190 #if CS_PLATFORM == CS_P_WINCE 1204 #pragma warning(disable : 4127) 1205 #pragma warning(disable : 4204) 1207 #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS 1208 #define _WINSOCK_DEPRECATED_NO_WARNINGS 1 1211 #ifndef _CRT_SECURE_NO_WARNINGS 1212 #define _CRT_SECURE_NO_WARNINGS 1222 #pragma comment(lib, "ws2.lib") 1224 #include <winsock2.h> 1225 #include <ws2tcpip.h> 1226 #include <windows.h> 1228 #define strdup _strdup 1231 #define EINPROGRESS WSAEINPROGRESS 1235 #define EWOULDBLOCK WSAEWOULDBLOCK 1240 #define STR(x) STRX(x) 1241 #define __func__ __FILE__ ":" STR(__LINE__) 1244 #define snprintf _snprintf 1245 #define fileno _fileno 1246 #define vsnprintf _vsnprintf 1247 #define sleep(x) Sleep((x) *1000) 1248 #define to64(x) _atoi64(x) 1249 #define rmdir _rmdir 1251 #if defined(_MSC_VER) && _MSC_VER >= 1400 1252 #define fseeko(x, y, z) _fseeki64((x), (y), (z)) 1254 #define fseeko(x, y, z) fseek((x), (y), (z)) 1257 typedef int socklen_t;
1259 #if _MSC_VER >= 1700 1262 typedef signed char int8_t;
1263 typedef unsigned char uint8_t;
1264 typedef int int32_t;
1265 typedef unsigned int uint32_t;
1266 typedef short int16_t;
1267 typedef unsigned short uint16_t;
1268 typedef __int64 int64_t;
1269 typedef unsigned __int64 uint64_t;
1272 typedef SOCKET sock_t;
1273 typedef uint32_t in_addr_t;
1276 #define UINT16_MAX 65535 1280 #define UINT32_MAX 4294967295 1284 #define pid_t HANDLE 1287 #define INT64_FMT "I64d" 1288 #define INT64_X_FMT "I64x" 1290 #define SIZE_T_FMT "u" 1293 #define CS_DEFINE_DIRENT 1297 #define va_copy __va_copy 1299 #define va_copy(x, y) (x) = (y) 1303 #ifndef MG_MAX_HTTP_REQUEST_SIZE 1304 #define MG_MAX_HTTP_REQUEST_SIZE 8192 1307 #ifndef MG_MAX_HTTP_SEND_MBUF 1308 #define MG_MAX_HTTP_SEND_MBUF 4096 1311 #ifndef MG_MAX_HTTP_HEADERS 1312 #define MG_MAX_HTTP_HEADERS 40 1315 #ifndef CS_ENABLE_STDIO 1316 #define CS_ENABLE_STDIO 1 1319 #define abort() DebugBreak(); 1328 #ifndef MG_ENABLE_THREADS 1329 #define MG_ENABLE_THREADS 0 1332 #ifndef MG_ENABLE_FILESYSTEM 1333 #define MG_ENABLE_FILESYSTEM 1 1337 #define MG_NET_IF MG_NET_IF_SOCKET 1340 typedef struct _stati64 {
1352 #define ENOENT ERROR_PATH_NOT_FOUND 1356 #define EACCES ERROR_ACCESS_DENIED 1360 #define ENOMEM ERROR_NOT_ENOUGH_MEMORY 1363 #ifndef _UINTPTR_T_DEFINED 1364 typedef unsigned int* uintptr_t;
1371 #define S_ISDIR(x) (((x) & _S_IFDIR) != 0) 1375 #define S_ISREG(x) (((x) & _S_IFREG) != 0) 1378 int open(
const char *filename,
int oflag,
int pmode);
1379 int _wstati64(
const wchar_t *path, cs_stat_t *st);
1380 const char *strerror();
1384 #ifdef MG_MODULE_LINES 1385 #line 1 "common/platforms/platform_nxp_lpc.h" 1392 #ifndef CS_COMMON_PLATFORMS_PLATFORM_NXP_LPC_H_ 1393 #define CS_COMMON_PLATFORMS_PLATFORM_NXP_LPC_H_ 1395 #if CS_PLATFORM == CS_P_NXP_LPC 1401 #define SIZE_T_FMT "u" 1402 typedef struct stat cs_stat_t;
1403 #define INT64_FMT "lld" 1404 #define INT64_X_FMT "llx" 1409 #define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL 1417 #ifdef __REDLIB_INTERFACE_VERSION__ 1420 #define LWIP_TIMEVAL_PRIVATE 1 1422 #define va_copy(d, s) __builtin_va_copy(d, s) 1424 #define CS_ENABLE_TO64 1 1425 #define to64(x) cs_to64(x) 1427 #define CS_ENABLE_STRDUP 1 1431 #include <sys/time.h> 1432 #define LWIP_TIMEVAL_PRIVATE 0 1433 #define to64(x) strtoll(x, NULL, 10) 1439 #ifdef MG_MODULE_LINES 1440 #line 1 "common/platforms/platform_nxp_kinetis.h" 1447 #ifndef CS_COMMON_PLATFORMS_PLATFORM_NXP_KINETIS_H_ 1448 #define CS_COMMON_PLATFORMS_PLATFORM_NXP_KINETIS_H_ 1450 #if CS_PLATFORM == CS_P_NXP_KINETIS 1453 #include <inttypes.h> 1455 #include <sys/time.h> 1457 #define SIZE_T_FMT "u" 1458 typedef struct stat cs_stat_t;
1459 #define to64(x) strtoll(x, NULL, 10) 1460 #define INT64_FMT "lld" 1461 #define INT64_X_FMT "llx" 1466 #define MG_NET_IF MG_NET_IF_LWIP_LOW_LEVEL 1469 #define LWIP_TIMEVAL_PRIVATE 0 1473 #ifdef MG_MODULE_LINES 1474 #line 1 "common/platforms/platform_pic32.h" 1481 #ifndef CS_COMMON_PLATFORMS_PLATFORM_PIC32_H_ 1482 #define CS_COMMON_PLATFORMS_PLATFORM_PIC32_H_ 1484 #if CS_PLATFORM == CS_P_PIC32 1486 #define MG_NET_IF MG_NET_IF_PIC32 1493 #include <system_config.h> 1494 #include <system_definitions.h> 1496 #include <sys/types.h> 1498 typedef TCP_SOCKET sock_t;
1499 #define to64(x) strtoll(x, NULL, 10) 1501 #define SIZE_T_FMT "lu" 1502 #define INT64_FMT "lld" 1504 #ifndef CS_ENABLE_STDIO 1505 #define CS_ENABLE_STDIO 1 1508 char* inet_ntoa(
struct in_addr in);
1513 #ifdef MG_MODULE_LINES 1514 #line 1 "common/platforms/platform_stm32.h" 1521 #ifndef CS_COMMON_PLATFORMS_PLATFORM_STM32_H_ 1522 #define CS_COMMON_PLATFORMS_PLATFORM_STM32_H_ 1523 #if CS_PLATFORM == CS_P_STM32 1525 #include <sys/types.h> 1526 #include <sys/stat.h> 1528 #include <inttypes.h> 1534 #include <stm32_sdk_hal.h> 1536 #define to64(x) strtoll(x, NULL, 10) 1537 #define INT64_FMT PRId64 1538 #define SIZE_T_FMT "u" 1539 typedef struct stat cs_stat_t;
1542 #ifndef CS_ENABLE_STDIO 1543 #define CS_ENABLE_STDIO 1 1546 #ifndef MG_ENABLE_FILESYSTEM 1547 #define MG_ENABLE_FILESYSTEM 1 1550 #define CS_DEFINE_DIRENT 1554 #ifdef MG_MODULE_LINES 1555 #line 1 "common/platforms/lwip/mg_lwip.h" 1562 #ifndef CS_COMMON_PLATFORMS_LWIP_MG_LWIP_H_ 1563 #define CS_COMMON_PLATFORMS_LWIP_MG_LWIP_H_ 1580 #if CS_PLATFORM == CS_P_NRF51 || CS_PLATFORM == CS_P_NRF52 1584 #include <lwip/opt.h> 1585 #include <lwip/err.h> 1586 #include <lwip/ip_addr.h> 1587 #include <lwip/inet.h> 1588 #include <lwip/netdb.h> 1589 #include <lwip/dns.h> 1591 #ifndef LWIP_PROVIDE_ERRNO 1596 #include <lwip/sockets.h> 1600 #define LWIP_SOCKET 1 1601 #include <lwip/sockets.h> 1603 #define LWIP_SOCKET 0 1606 #define INVALID_SOCKET (-1) 1607 #define SOMAXCONN 10 1610 #if MG_NET_IF == MG_NET_IF_LWIP_LOW_LEVEL 1613 uint32_t mg_lwip_get_poll_delay_ms(
struct mg_mgr *
mgr);
1614 void mg_lwip_set_keepalive_params(
struct mg_connection *nc,
int idle,
1615 int interval,
int count);
1620 #define ipX_2_ip(x) (x) 1626 #ifdef MG_MODULE_LINES 1627 #line 1 "common/cs_time.h" 1634 #ifndef CS_COMMON_CS_TIME_H_ 1635 #define CS_COMMON_CS_TIME_H_ 1651 #ifdef MG_MODULE_LINES 1652 #line 1 "common/mg_str.h" 1659 #ifndef CS_COMMON_MG_STR_H_ 1660 #define CS_COMMON_MG_STR_H_ 1684 #define MG_MK_STR(str_literal) \ 1685 { str_literal, sizeof(str_literal) - 1 } 1708 #ifdef MG_MODULE_LINES 1709 #line 1 "common/mbuf.h" 1725 #ifndef CS_COMMON_MBUF_H_ 1726 #define CS_COMMON_MBUF_H_ 1731 #if defined(__cplusplus) 1735 #ifndef MBUF_SIZE_MULTIPLIER 1736 #define MBUF_SIZE_MULTIPLIER 1.5 1760 size_t mbuf_append(
struct mbuf *,
const void *data,
size_t data_size);
1785 #if defined(__cplusplus) 1790 #ifdef MG_MODULE_LINES 1791 #line 1 "common/sha1.h" 1798 #ifndef CS_COMMON_SHA1_H_ 1799 #define CS_COMMON_SHA1_H_ 1801 #ifndef DISABLE_SHA1 1802 #define DISABLE_SHA1 0 1816 unsigned char buffer[64];
1822 void cs_hmac_sha1(
const unsigned char *key,
size_t key_len,
1823 const unsigned char *text,
size_t text_len,
1824 unsigned char out[20]);
1832 #ifdef MG_MODULE_LINES 1833 #line 1 "common/md5.h" 1840 #ifndef CS_COMMON_MD5_H_ 1841 #define CS_COMMON_MD5_H_ 1846 #define DISABLE_MD5 0 1856 unsigned char in[64];
1871 char *
cs_md5(
char buf[33], ...);
1878 #ifdef MG_MODULE_LINES 1879 #line 1 "common/base64.h" 1886 #ifndef CS_COMMON_BASE64_H_ 1887 #define CS_COMMON_BASE64_H_ 1889 #ifndef DISABLE_BASE64 1890 #define DISABLE_BASE64 0 1906 unsigned char chunk[3];
1918 int cs_base64_decode(
const unsigned char *s,
int len,
char *dst,
int *dec_len);
1927 #ifdef MG_MODULE_LINES 1928 #line 1 "common/str_util.h" 1935 #ifndef CS_COMMON_STR_UTIL_H_ 1936 #define CS_COMMON_STR_UTIL_H_ 1943 #ifndef CS_ENABLE_STRDUP 1944 #define CS_ENABLE_STRDUP 0 1947 #ifndef CS_ENABLE_TO64 1948 #define CS_ENABLE_TO64 0 1955 #define CS_STRINGIFY_LIT(x) #x 1966 #define CS_STRINGIFY_MACRO(x) CS_STRINGIFY_LIT(x) 1972 size_t c_strnlen(
const char *s,
size_t maxlen);
1973 int c_snprintf(
char *buf,
size_t buf_size,
const char *format, ...);
1974 int c_vsnprintf(
char *buf,
size_t buf_size,
const char *format, va_list ap);
1979 const char *
c_strnstr(
const char *s,
const char *find,
size_t slen);
1986 void cs_to_hex(
char *to,
const unsigned char *p,
size_t len);
1992 void cs_from_hex(
char *to,
const char *p,
size_t len);
1994 #if CS_ENABLE_STRDUP 1995 char *strdup(
const char *src);
2003 int64_t cs_to64(
const char *s);
2009 int mg_ncasecmp(
const char *s1,
const char *s2,
size_t len);
2014 int mg_casecmp(
const char *s1,
const char *s2);
2031 int mg_asprintf(
char **buf,
size_t size,
const char *fmt, ...);
2034 int mg_avprintf(
char **buf,
size_t size,
const char *fmt, va_list ap);
2041 #ifdef MG_MODULE_LINES 2042 #line 1 "common/queue.h" 2077 #ifndef _SYS_QUEUE_H_ 2078 #define _SYS_QUEUE_H_ 2153 #ifdef QUEUE_MACRO_DEBUG 2156 unsigned long lastline;
2157 unsigned long prevline;
2158 const char *lastfile;
2159 const char *prevfile;
2162 #define TRACEBUF struct qm_trace trace; 2163 #define TRACEBUF_INITIALIZER { __LINE__, 0, __FILE__, NULL } , 2164 #define TRASHIT(x) do {(x) = (void *)-1;} while (0) 2165 #define QMD_SAVELINK(name, link) void **name = (void *)&(link) 2167 #define QMD_TRACE_HEAD(head) do { \ 2168 (head)->trace.prevline = (head)->trace.lastline; \ 2169 (head)->trace.prevfile = (head)->trace.lastfile; \ 2170 (head)->trace.lastline = __LINE__; \ 2171 (head)->trace.lastfile = __FILE__; \ 2174 #define QMD_TRACE_ELEM(elem) do { \ 2175 (elem)->trace.prevline = (elem)->trace.lastline; \ 2176 (elem)->trace.prevfile = (elem)->trace.lastfile; \ 2177 (elem)->trace.lastline = __LINE__; \ 2178 (elem)->trace.lastfile = __FILE__; \ 2182 #define QMD_TRACE_ELEM(elem) 2183 #define QMD_TRACE_HEAD(head) 2184 #define QMD_SAVELINK(name, link) 2186 #define TRACEBUF_INITIALIZER 2194 #define QUEUE_TYPEOF(type) type 2196 #define QUEUE_TYPEOF(type) struct type 2202 #define SLIST_HEAD(name, type) \ 2204 struct type *slh_first; \ 2207 #define SLIST_CLASS_HEAD(name, type) \ 2209 class type *slh_first; \ 2212 #define SLIST_HEAD_INITIALIZER(head) \ 2215 #define SLIST_ENTRY(type) \ 2217 struct type *sle_next; \ 2220 #define SLIST_CLASS_ENTRY(type) \ 2222 class type *sle_next; \ 2228 #define SLIST_EMPTY(head) ((head)->slh_first == NULL) 2230 #define SLIST_FIRST(head) ((head)->slh_first) 2232 #define SLIST_FOREACH(var, head, field) \ 2233 for ((var) = SLIST_FIRST((head)); \ 2235 (var) = SLIST_NEXT((var), field)) 2237 #define SLIST_FOREACH_FROM(var, head, field) \ 2238 for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \ 2240 (var) = SLIST_NEXT((var), field)) 2242 #define SLIST_FOREACH_SAFE(var, head, field, tvar) \ 2243 for ((var) = SLIST_FIRST((head)); \ 2244 (var) && ((tvar) = SLIST_NEXT((var), field), 1); \ 2247 #define SLIST_FOREACH_FROM_SAFE(var, head, field, tvar) \ 2248 for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \ 2249 (var) && ((tvar) = SLIST_NEXT((var), field), 1); \ 2252 #define SLIST_FOREACH_PREVPTR(var, varp, head, field) \ 2253 for ((varp) = &SLIST_FIRST((head)); \ 2254 ((var) = *(varp)) != NULL; \ 2255 (varp) = &SLIST_NEXT((var), field)) 2257 #define SLIST_INIT(head) do { \ 2258 SLIST_FIRST((head)) = NULL; \ 2261 #define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ 2262 SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \ 2263 SLIST_NEXT((slistelm), field) = (elm); \ 2266 #define SLIST_INSERT_HEAD(head, elm, field) do { \ 2267 SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \ 2268 SLIST_FIRST((head)) = (elm); \ 2271 #define SLIST_NEXT(elm, field) ((elm)->field.sle_next) 2273 #define SLIST_REMOVE(head, elm, type, field) do { \ 2274 QMD_SAVELINK(oldnext, (elm)->field.sle_next); \ 2275 if (SLIST_FIRST((head)) == (elm)) { \ 2276 SLIST_REMOVE_HEAD((head), field); \ 2279 QUEUE_TYPEOF(type) *curelm = SLIST_FIRST(head); \ 2280 while (SLIST_NEXT(curelm, field) != (elm)) \ 2281 curelm = SLIST_NEXT(curelm, field); \ 2282 SLIST_REMOVE_AFTER(curelm, field); \ 2284 TRASHIT(*oldnext); \ 2287 #define SLIST_REMOVE_AFTER(elm, field) do { \ 2288 SLIST_NEXT(elm, field) = \ 2289 SLIST_NEXT(SLIST_NEXT(elm, field), field); \ 2292 #define SLIST_REMOVE_HEAD(head, field) do { \ 2293 SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \ 2296 #define SLIST_SWAP(head1, head2, type) do { \ 2297 QUEUE_TYPEOF(type) *swap_first = SLIST_FIRST(head1); \ 2298 SLIST_FIRST(head1) = SLIST_FIRST(head2); \ 2299 SLIST_FIRST(head2) = swap_first; \ 2305 #define STAILQ_HEAD(name, type) \ 2307 struct type *stqh_first; \ 2308 struct type **stqh_last; \ 2311 #define STAILQ_CLASS_HEAD(name, type) \ 2313 class type *stqh_first; \ 2314 class type **stqh_last; \ 2317 #define STAILQ_HEAD_INITIALIZER(head) \ 2318 { NULL, &(head).stqh_first } 2320 #define STAILQ_ENTRY(type) \ 2322 struct type *stqe_next; \ 2325 #define STAILQ_CLASS_ENTRY(type) \ 2327 class type *stqe_next; \ 2333 #define STAILQ_CONCAT(head1, head2) do { \ 2334 if (!STAILQ_EMPTY((head2))) { \ 2335 *(head1)->stqh_last = (head2)->stqh_first; \ 2336 (head1)->stqh_last = (head2)->stqh_last; \ 2337 STAILQ_INIT((head2)); \ 2341 #define STAILQ_EMPTY(head) ((head)->stqh_first == NULL) 2343 #define STAILQ_FIRST(head) ((head)->stqh_first) 2345 #define STAILQ_FOREACH(var, head, field) \ 2346 for((var) = STAILQ_FIRST((head)); \ 2348 (var) = STAILQ_NEXT((var), field)) 2350 #define STAILQ_FOREACH_FROM(var, head, field) \ 2351 for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \ 2353 (var) = STAILQ_NEXT((var), field)) 2355 #define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ 2356 for ((var) = STAILQ_FIRST((head)); \ 2357 (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ 2360 #define STAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \ 2361 for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \ 2362 (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ 2365 #define STAILQ_INIT(head) do { \ 2366 STAILQ_FIRST((head)) = NULL; \ 2367 (head)->stqh_last = &STAILQ_FIRST((head)); \ 2370 #define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \ 2371 if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\ 2372 (head)->stqh_last = &STAILQ_NEXT((elm), field); \ 2373 STAILQ_NEXT((tqelm), field) = (elm); \ 2376 #define STAILQ_INSERT_HEAD(head, elm, field) do { \ 2377 if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \ 2378 (head)->stqh_last = &STAILQ_NEXT((elm), field); \ 2379 STAILQ_FIRST((head)) = (elm); \ 2382 #define STAILQ_INSERT_TAIL(head, elm, field) do { \ 2383 STAILQ_NEXT((elm), field) = NULL; \ 2384 *(head)->stqh_last = (elm); \ 2385 (head)->stqh_last = &STAILQ_NEXT((elm), field); \ 2388 #define STAILQ_LAST(head, type, field) \ 2389 (STAILQ_EMPTY((head)) ? NULL : \ 2390 __containerof((head)->stqh_last, \ 2391 QUEUE_TYPEOF(type), field.stqe_next)) 2393 #define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) 2395 #define STAILQ_REMOVE(head, elm, type, field) do { \ 2396 QMD_SAVELINK(oldnext, (elm)->field.stqe_next); \ 2397 if (STAILQ_FIRST((head)) == (elm)) { \ 2398 STAILQ_REMOVE_HEAD((head), field); \ 2401 QUEUE_TYPEOF(type) *curelm = STAILQ_FIRST(head); \ 2402 while (STAILQ_NEXT(curelm, field) != (elm)) \ 2403 curelm = STAILQ_NEXT(curelm, field); \ 2404 STAILQ_REMOVE_AFTER(head, curelm, field); \ 2406 TRASHIT(*oldnext); \ 2409 #define STAILQ_REMOVE_AFTER(head, elm, field) do { \ 2410 if ((STAILQ_NEXT(elm, field) = \ 2411 STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \ 2412 (head)->stqh_last = &STAILQ_NEXT((elm), field); \ 2415 #define STAILQ_REMOVE_HEAD(head, field) do { \ 2416 if ((STAILQ_FIRST((head)) = \ 2417 STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \ 2418 (head)->stqh_last = &STAILQ_FIRST((head)); \ 2421 #define STAILQ_SWAP(head1, head2, type) do { \ 2422 QUEUE_TYPEOF(type) *swap_first = STAILQ_FIRST(head1); \ 2423 QUEUE_TYPEOF(type) **swap_last = (head1)->stqh_last; \ 2424 STAILQ_FIRST(head1) = STAILQ_FIRST(head2); \ 2425 (head1)->stqh_last = (head2)->stqh_last; \ 2426 STAILQ_FIRST(head2) = swap_first; \ 2427 (head2)->stqh_last = swap_last; \ 2428 if (STAILQ_EMPTY(head1)) \ 2429 (head1)->stqh_last = &STAILQ_FIRST(head1); \ 2430 if (STAILQ_EMPTY(head2)) \ 2431 (head2)->stqh_last = &STAILQ_FIRST(head2); \ 2438 #define LIST_HEAD(name, type) \ 2440 struct type *lh_first; \ 2443 #define LIST_CLASS_HEAD(name, type) \ 2445 class type *lh_first; \ 2448 #define LIST_HEAD_INITIALIZER(head) \ 2451 #define LIST_ENTRY(type) \ 2453 struct type *le_next; \ 2454 struct type **le_prev; \ 2457 #define LIST_CLASS_ENTRY(type) \ 2459 class type *le_next; \ 2460 class type **le_prev; \ 2467 #if (defined(_KERNEL) && defined(INVARIANTS)) 2468 #define QMD_LIST_CHECK_HEAD(head, field) do { \ 2469 if (LIST_FIRST((head)) != NULL && \ 2470 LIST_FIRST((head))->field.le_prev != \ 2471 &LIST_FIRST((head))) \ 2472 panic("Bad list head %p first->prev != head", (head)); \ 2475 #define QMD_LIST_CHECK_NEXT(elm, field) do { \ 2476 if (LIST_NEXT((elm), field) != NULL && \ 2477 LIST_NEXT((elm), field)->field.le_prev != \ 2478 &((elm)->field.le_next)) \ 2479 panic("Bad link elm %p next->prev != elm", (elm)); \ 2482 #define QMD_LIST_CHECK_PREV(elm, field) do { \ 2483 if (*(elm)->field.le_prev != (elm)) \ 2484 panic("Bad link elm %p prev->next != elm", (elm)); \ 2487 #define QMD_LIST_CHECK_HEAD(head, field) 2488 #define QMD_LIST_CHECK_NEXT(elm, field) 2489 #define QMD_LIST_CHECK_PREV(elm, field) 2492 #define LIST_EMPTY(head) ((head)->lh_first == NULL) 2494 #define LIST_FIRST(head) ((head)->lh_first) 2496 #define LIST_FOREACH(var, head, field) \ 2497 for ((var) = LIST_FIRST((head)); \ 2499 (var) = LIST_NEXT((var), field)) 2501 #define LIST_FOREACH_FROM(var, head, field) \ 2502 for ((var) = ((var) ? (var) : LIST_FIRST((head))); \ 2504 (var) = LIST_NEXT((var), field)) 2506 #define LIST_FOREACH_SAFE(var, head, field, tvar) \ 2507 for ((var) = LIST_FIRST((head)); \ 2508 (var) && ((tvar) = LIST_NEXT((var), field), 1); \ 2511 #define LIST_FOREACH_FROM_SAFE(var, head, field, tvar) \ 2512 for ((var) = ((var) ? (var) : LIST_FIRST((head))); \ 2513 (var) && ((tvar) = LIST_NEXT((var), field), 1); \ 2516 #define LIST_INIT(head) do { \ 2517 LIST_FIRST((head)) = NULL; \ 2520 #define LIST_INSERT_AFTER(listelm, elm, field) do { \ 2521 QMD_LIST_CHECK_NEXT(listelm, field); \ 2522 if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\ 2523 LIST_NEXT((listelm), field)->field.le_prev = \ 2524 &LIST_NEXT((elm), field); \ 2525 LIST_NEXT((listelm), field) = (elm); \ 2526 (elm)->field.le_prev = &LIST_NEXT((listelm), field); \ 2529 #define LIST_INSERT_BEFORE(listelm, elm, field) do { \ 2530 QMD_LIST_CHECK_PREV(listelm, field); \ 2531 (elm)->field.le_prev = (listelm)->field.le_prev; \ 2532 LIST_NEXT((elm), field) = (listelm); \ 2533 *(listelm)->field.le_prev = (elm); \ 2534 (listelm)->field.le_prev = &LIST_NEXT((elm), field); \ 2537 #define LIST_INSERT_HEAD(head, elm, field) do { \ 2538 QMD_LIST_CHECK_HEAD((head), field); \ 2539 if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \ 2540 LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\ 2541 LIST_FIRST((head)) = (elm); \ 2542 (elm)->field.le_prev = &LIST_FIRST((head)); \ 2545 #define LIST_NEXT(elm, field) ((elm)->field.le_next) 2547 #define LIST_PREV(elm, head, type, field) \ 2548 ((elm)->field.le_prev == &LIST_FIRST((head)) ? NULL : \ 2549 __containerof((elm)->field.le_prev, \ 2550 QUEUE_TYPEOF(type), field.le_next)) 2552 #define LIST_REMOVE(elm, field) do { \ 2553 QMD_SAVELINK(oldnext, (elm)->field.le_next); \ 2554 QMD_SAVELINK(oldprev, (elm)->field.le_prev); \ 2555 QMD_LIST_CHECK_NEXT(elm, field); \ 2556 QMD_LIST_CHECK_PREV(elm, field); \ 2557 if (LIST_NEXT((elm), field) != NULL) \ 2558 LIST_NEXT((elm), field)->field.le_prev = \ 2559 (elm)->field.le_prev; \ 2560 *(elm)->field.le_prev = LIST_NEXT((elm), field); \ 2561 TRASHIT(*oldnext); \ 2562 TRASHIT(*oldprev); \ 2565 #define LIST_SWAP(head1, head2, type, field) do { \ 2566 QUEUE_TYPEOF(type) *swap_tmp = LIST_FIRST(head1); \ 2567 LIST_FIRST((head1)) = LIST_FIRST((head2)); \ 2568 LIST_FIRST((head2)) = swap_tmp; \ 2569 if ((swap_tmp = LIST_FIRST((head1))) != NULL) \ 2570 swap_tmp->field.le_prev = &LIST_FIRST((head1)); \ 2571 if ((swap_tmp = LIST_FIRST((head2))) != NULL) \ 2572 swap_tmp->field.le_prev = &LIST_FIRST((head2)); \ 2578 #define TAILQ_HEAD(name, type) \ 2580 struct type *tqh_first; \ 2581 struct type **tqh_last; \ 2585 #define TAILQ_CLASS_HEAD(name, type) \ 2587 class type *tqh_first; \ 2588 class type **tqh_last; \ 2592 #define TAILQ_HEAD_INITIALIZER(head) \ 2593 { NULL, &(head).tqh_first, TRACEBUF_INITIALIZER } 2595 #define TAILQ_ENTRY(type) \ 2597 struct type *tqe_next; \ 2598 struct type **tqe_prev; \ 2602 #define TAILQ_CLASS_ENTRY(type) \ 2604 class type *tqe_next; \ 2605 class type **tqe_prev; \ 2612 #if (defined(_KERNEL) && defined(INVARIANTS)) 2613 #define QMD_TAILQ_CHECK_HEAD(head, field) do { \ 2614 if (!TAILQ_EMPTY(head) && \ 2615 TAILQ_FIRST((head))->field.tqe_prev != \ 2616 &TAILQ_FIRST((head))) \ 2617 panic("Bad tailq head %p first->prev != head", (head)); \ 2620 #define QMD_TAILQ_CHECK_TAIL(head, field) do { \ 2621 if (*(head)->tqh_last != NULL) \ 2622 panic("Bad tailq NEXT(%p->tqh_last) != NULL", (head)); \ 2625 #define QMD_TAILQ_CHECK_NEXT(elm, field) do { \ 2626 if (TAILQ_NEXT((elm), field) != NULL && \ 2627 TAILQ_NEXT((elm), field)->field.tqe_prev != \ 2628 &((elm)->field.tqe_next)) \ 2629 panic("Bad link elm %p next->prev != elm", (elm)); \ 2632 #define QMD_TAILQ_CHECK_PREV(elm, field) do { \ 2633 if (*(elm)->field.tqe_prev != (elm)) \ 2634 panic("Bad link elm %p prev->next != elm", (elm)); \ 2637 #define QMD_TAILQ_CHECK_HEAD(head, field) 2638 #define QMD_TAILQ_CHECK_TAIL(head, headname) 2639 #define QMD_TAILQ_CHECK_NEXT(elm, field) 2640 #define QMD_TAILQ_CHECK_PREV(elm, field) 2643 #define TAILQ_CONCAT(head1, head2, field) do { \ 2644 if (!TAILQ_EMPTY(head2)) { \ 2645 *(head1)->tqh_last = (head2)->tqh_first; \ 2646 (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \ 2647 (head1)->tqh_last = (head2)->tqh_last; \ 2648 TAILQ_INIT((head2)); \ 2649 QMD_TRACE_HEAD(head1); \ 2650 QMD_TRACE_HEAD(head2); \ 2654 #define TAILQ_EMPTY(head) ((head)->tqh_first == NULL) 2656 #define TAILQ_FIRST(head) ((head)->tqh_first) 2658 #define TAILQ_FOREACH(var, head, field) \ 2659 for ((var) = TAILQ_FIRST((head)); \ 2661 (var) = TAILQ_NEXT((var), field)) 2663 #define TAILQ_FOREACH_FROM(var, head, field) \ 2664 for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \ 2666 (var) = TAILQ_NEXT((var), field)) 2668 #define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ 2669 for ((var) = TAILQ_FIRST((head)); \ 2670 (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ 2673 #define TAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \ 2674 for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \ 2675 (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ 2678 #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ 2679 for ((var) = TAILQ_LAST((head), headname); \ 2681 (var) = TAILQ_PREV((var), headname, field)) 2683 #define TAILQ_FOREACH_REVERSE_FROM(var, head, headname, field) \ 2684 for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \ 2686 (var) = TAILQ_PREV((var), headname, field)) 2688 #define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ 2689 for ((var) = TAILQ_LAST((head), headname); \ 2690 (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \ 2693 #define TAILQ_FOREACH_REVERSE_FROM_SAFE(var, head, headname, field, tvar) \ 2694 for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \ 2695 (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \ 2698 #define TAILQ_INIT(head) do { \ 2699 TAILQ_FIRST((head)) = NULL; \ 2700 (head)->tqh_last = &TAILQ_FIRST((head)); \ 2701 QMD_TRACE_HEAD(head); \ 2704 #define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ 2705 QMD_TAILQ_CHECK_NEXT(listelm, field); \ 2706 if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\ 2707 TAILQ_NEXT((elm), field)->field.tqe_prev = \ 2708 &TAILQ_NEXT((elm), field); \ 2710 (head)->tqh_last = &TAILQ_NEXT((elm), field); \ 2711 QMD_TRACE_HEAD(head); \ 2713 TAILQ_NEXT((listelm), field) = (elm); \ 2714 (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \ 2715 QMD_TRACE_ELEM(&(elm)->field); \ 2716 QMD_TRACE_ELEM(&(listelm)->field); \ 2719 #define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ 2720 QMD_TAILQ_CHECK_PREV(listelm, field); \ 2721 (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ 2722 TAILQ_NEXT((elm), field) = (listelm); \ 2723 *(listelm)->field.tqe_prev = (elm); \ 2724 (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \ 2725 QMD_TRACE_ELEM(&(elm)->field); \ 2726 QMD_TRACE_ELEM(&(listelm)->field); \ 2729 #define TAILQ_INSERT_HEAD(head, elm, field) do { \ 2730 QMD_TAILQ_CHECK_HEAD(head, field); \ 2731 if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \ 2732 TAILQ_FIRST((head))->field.tqe_prev = \ 2733 &TAILQ_NEXT((elm), field); \ 2735 (head)->tqh_last = &TAILQ_NEXT((elm), field); \ 2736 TAILQ_FIRST((head)) = (elm); \ 2737 (elm)->field.tqe_prev = &TAILQ_FIRST((head)); \ 2738 QMD_TRACE_HEAD(head); \ 2739 QMD_TRACE_ELEM(&(elm)->field); \ 2742 #define TAILQ_INSERT_TAIL(head, elm, field) do { \ 2743 QMD_TAILQ_CHECK_TAIL(head, field); \ 2744 TAILQ_NEXT((elm), field) = NULL; \ 2745 (elm)->field.tqe_prev = (head)->tqh_last; \ 2746 *(head)->tqh_last = (elm); \ 2747 (head)->tqh_last = &TAILQ_NEXT((elm), field); \ 2748 QMD_TRACE_HEAD(head); \ 2749 QMD_TRACE_ELEM(&(elm)->field); \ 2752 #define TAILQ_LAST(head, headname) \ 2753 (*(((struct headname *)((head)->tqh_last))->tqh_last)) 2755 #define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) 2757 #define TAILQ_PREV(elm, headname, field) \ 2758 (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) 2760 #define TAILQ_REMOVE(head, elm, field) do { \ 2761 QMD_SAVELINK(oldnext, (elm)->field.tqe_next); \ 2762 QMD_SAVELINK(oldprev, (elm)->field.tqe_prev); \ 2763 QMD_TAILQ_CHECK_NEXT(elm, field); \ 2764 QMD_TAILQ_CHECK_PREV(elm, field); \ 2765 if ((TAILQ_NEXT((elm), field)) != NULL) \ 2766 TAILQ_NEXT((elm), field)->field.tqe_prev = \ 2767 (elm)->field.tqe_prev; \ 2769 (head)->tqh_last = (elm)->field.tqe_prev; \ 2770 QMD_TRACE_HEAD(head); \ 2772 *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \ 2773 TRASHIT(*oldnext); \ 2774 TRASHIT(*oldprev); \ 2775 QMD_TRACE_ELEM(&(elm)->field); \ 2778 #define TAILQ_SWAP(head1, head2, type, field) do { \ 2779 QUEUE_TYPEOF(type) *swap_first = (head1)->tqh_first; \ 2780 QUEUE_TYPEOF(type) **swap_last = (head1)->tqh_last; \ 2781 (head1)->tqh_first = (head2)->tqh_first; \ 2782 (head1)->tqh_last = (head2)->tqh_last; \ 2783 (head2)->tqh_first = swap_first; \ 2784 (head2)->tqh_last = swap_last; \ 2785 if ((swap_first = (head1)->tqh_first) != NULL) \ 2786 swap_first->field.tqe_prev = &(head1)->tqh_first; \ 2788 (head1)->tqh_last = &(head1)->tqh_first; \ 2789 if ((swap_first = (head2)->tqh_first) != NULL) \ 2790 swap_first->field.tqe_prev = &(head2)->tqh_first; \ 2792 (head2)->tqh_last = &(head2)->tqh_first; \ 2796 #ifdef MG_MODULE_LINES 2797 #line 1 "mongoose/src/features.h" 2804 #ifndef CS_MONGOOSE_SRC_FEATURES_H_ 2805 #define CS_MONGOOSE_SRC_FEATURES_H_ 2807 #ifndef MG_DISABLE_HTTP_DIGEST_AUTH 2808 #define MG_DISABLE_HTTP_DIGEST_AUTH 0 2811 #ifndef MG_DISABLE_HTTP_KEEP_ALIVE 2812 #define MG_DISABLE_HTTP_KEEP_ALIVE 0 2815 #ifndef MG_DISABLE_PFS 2816 #define MG_DISABLE_PFS 0 2819 #ifndef MG_DISABLE_WS_RANDOM_MASK 2820 #define MG_DISABLE_WS_RANDOM_MASK 0 2823 #ifndef MG_ENABLE_ASYNC_RESOLVER 2824 #define MG_ENABLE_ASYNC_RESOLVER 1 2827 #ifndef MG_ENABLE_BROADCAST 2828 #define MG_ENABLE_BROADCAST 0 2831 #ifndef MG_ENABLE_COAP 2832 #define MG_ENABLE_COAP 0 2835 #ifndef MG_ENABLE_DEBUG 2836 #define MG_ENABLE_DEBUG 0 2839 #ifndef MG_ENABLE_DIRECTORY_LISTING 2840 #define MG_ENABLE_DIRECTORY_LISTING 0 2843 #ifndef MG_ENABLE_DNS 2844 #define MG_ENABLE_DNS 1 2847 #ifndef MG_ENABLE_DNS_SERVER 2848 #define MG_ENABLE_DNS_SERVER 0 2851 #ifndef MG_ENABLE_FAKE_DAVLOCK 2852 #define MG_ENABLE_FAKE_DAVLOCK 0 2855 #ifndef MG_ENABLE_FILESYSTEM 2856 #define MG_ENABLE_FILESYSTEM 0 2859 #ifndef MG_ENABLE_GETADDRINFO 2860 #define MG_ENABLE_GETADDRINFO 0 2863 #ifndef MG_ENABLE_HEXDUMP 2864 #define MG_ENABLE_HEXDUMP CS_ENABLE_STDIO 2867 #ifndef MG_ENABLE_HTTP 2868 #define MG_ENABLE_HTTP 1 2871 #ifndef MG_ENABLE_HTTP_CGI 2872 #define MG_ENABLE_HTTP_CGI 0 2875 #ifndef MG_ENABLE_HTTP_SSI 2876 #define MG_ENABLE_HTTP_SSI MG_ENABLE_FILESYSTEM 2879 #ifndef MG_ENABLE_HTTP_SSI_EXEC 2880 #define MG_ENABLE_HTTP_SSI_EXEC 0 2883 #ifndef MG_ENABLE_HTTP_STREAMING_MULTIPART 2884 #define MG_ENABLE_HTTP_STREAMING_MULTIPART 0 2887 #ifndef MG_ENABLE_HTTP_WEBDAV 2888 #define MG_ENABLE_HTTP_WEBDAV 0 2891 #ifndef MG_ENABLE_HTTP_WEBSOCKET 2892 #define MG_ENABLE_HTTP_WEBSOCKET MG_ENABLE_HTTP 2895 #ifndef MG_ENABLE_IPV6 2896 #define MG_ENABLE_IPV6 0 2899 #ifndef MG_ENABLE_JAVASCRIPT 2900 #define MG_ENABLE_JAVASCRIPT 0 2903 #ifndef MG_ENABLE_MQTT 2904 #define MG_ENABLE_MQTT 1 2907 #ifndef MG_ENABLE_MQTT_BROKER 2908 #define MG_ENABLE_MQTT_BROKER 0 2911 #ifndef MG_ENABLE_SSL 2912 #define MG_ENABLE_SSL 0 2915 #ifndef MG_ENABLE_SYNC_RESOLVER 2916 #define MG_ENABLE_SYNC_RESOLVER 0 2919 #ifndef MG_ENABLE_STDIO 2920 #define MG_ENABLE_STDIO CS_ENABLE_STDIO 2924 #define MG_NET_IF MG_NET_IF_SOCKET 2928 #define MG_SSL_IF MG_SSL_IF_OPENSSL 2931 #ifndef MG_ENABLE_THREADS 2933 #define MG_ENABLE_THREADS 1 2935 #define MG_ENABLE_THREADS 0 2939 #if MG_ENABLE_DEBUG && !defined(CS_ENABLE_DEBUG) 2940 #define CS_ENABLE_DEBUG 1 2944 #if MG_ENABLE_MQTT_BROKER && !MG_ENABLE_MQTT 2945 #undef MG_ENABLE_MQTT 2946 #define MG_ENABLE_MQTT 1 2949 #ifndef MG_ENABLE_HTTP_URL_REWRITES 2950 #define MG_ENABLE_HTTP_URL_REWRITES \ 2951 (CS_PLATFORM == CS_P_WINDOWS || CS_PLATFORM == CS_P_UNIX) 2954 #ifndef MG_ENABLE_TUN 2955 #define MG_ENABLE_TUN MG_ENABLE_HTTP_WEBSOCKET 2958 #ifndef MG_ENABLE_SNTP 2959 #define MG_ENABLE_SNTP 0 2962 #ifndef MG_ENABLE_EXTRA_ERRORS_DESC 2963 #define MG_ENABLE_EXTRA_ERRORS_DESC 0 2967 #ifdef MG_MODULE_LINES 2968 #line 1 "mongoose/src/net_if.h" 2975 #ifndef CS_MONGOOSE_SRC_NET_IF_H_ 2976 #define CS_MONGOOSE_SRC_NET_IF_H_ 2994 #define MG_MAIN_IFACE 0 3013 time_t (*poll)(
struct mg_iface *iface,
int timeout_ms);
3100 #ifdef MG_MODULE_LINES 3101 #line 1 "mongoose/src/ssl_if.h" 3108 #ifndef CS_MONGOOSE_SRC_SSL_IF_H_ 3109 #define CS_MONGOOSE_SRC_SSL_IF_H_ 3117 struct mg_ssl_if_ctx;
3120 void mg_ssl_if_init();
3122 enum mg_ssl_if_result {
3124 MG_SSL_WANT_READ = -1,
3125 MG_SSL_WANT_WRITE = -2,
3129 struct mg_ssl_if_conn_params {
3132 const char *ca_cert;
3133 const char *server_name;
3134 const char *cipher_suites;
3135 const char *psk_identity;
3136 const char *psk_key;
3139 enum mg_ssl_if_result mg_ssl_if_conn_init(
3140 struct mg_connection *nc,
const struct mg_ssl_if_conn_params *params,
3141 const char **err_msg);
3142 enum mg_ssl_if_result mg_ssl_if_conn_accept(
struct mg_connection *nc,
3146 enum mg_ssl_if_result mg_ssl_if_handshake(
struct mg_connection *nc);
3147 int mg_ssl_if_read(
struct mg_connection *nc,
void *buf,
size_t buf_size);
3148 int mg_ssl_if_write(
struct mg_connection *nc,
const void *data,
size_t len);
3157 #ifdef MG_MODULE_LINES 3158 #line 1 "mongoose/src/net.h" 3187 #ifndef CS_MONGOOSE_SRC_NET_H_ 3188 #define CS_MONGOOSE_SRC_NET_H_ 3190 #if MG_ENABLE_JAVASCRIPT 3191 #define EXCLUDE_COMMON 3199 #ifndef MG_VPRINTF_BUFFER_SIZE 3200 #define MG_VPRINTF_BUFFER_SIZE 100 3203 #ifdef MG_USE_READ_WRITE 3204 #define MG_RECV_FUNC(s, b, l, f) read(s, b, l) 3205 #define MG_SEND_FUNC(s, b, l, f) write(s, b, l) 3207 #define MG_RECV_FUNC(s, b, l, f) recv(s, b, l, f) 3208 #define MG_SEND_FUNC(s, b, l, f) send(s, b, l, f) 3217 struct sockaddr_in sin;
3219 struct sockaddr_in6 sin6;
3221 struct sockaddr sin6;
3235 #define MG_EV_POLL 0 3236 #define MG_EV_ACCEPT 1 3237 #define MG_EV_CONNECT 2 3238 #define MG_EV_RECV 3 3239 #define MG_EV_SEND 4 3240 #define MG_EV_CLOSE 5 3241 #define MG_EV_TIMER 6 3248 #if MG_ENABLE_HEXDUMP 3249 const char *hexdump_file;
3251 #if MG_ENABLE_BROADCAST 3257 #if MG_ENABLE_JAVASCRIPT 3283 void (*proto_data_destructor)(
void *proto_data);
3299 #define MG_F_LISTENING (1 << 0) 3300 #define MG_F_UDP (1 << 1) 3301 #define MG_F_RESOLVING (1 << 2) 3302 #define MG_F_CONNECTING (1 << 3) 3303 #define MG_F_SSL (1 << 4) 3304 #define MG_F_SSL_HANDSHAKE_DONE (1 << 5) 3305 #define MG_F_WANT_READ (1 << 6) 3306 #define MG_F_WANT_WRITE (1 << 7) 3307 #define MG_F_IS_WEBSOCKET (1 << 8) 3310 #define MG_F_SEND_AND_CLOSE (1 << 10) 3311 #define MG_F_CLOSE_IMMEDIATELY (1 << 11) 3312 #define MG_F_WEBSOCKET_NO_DEFRAG (1 << 12) 3313 #define MG_F_DELETE_CHUNK (1 << 13) 3314 #define MG_F_ENABLE_BROADCAST (1 << 14) 3315 #define MG_F_TUN_DO_NOT_RECONNECT (1 << 15) 3317 #define MG_F_USER_1 (1 << 20) 3318 #define MG_F_USER_2 (1 << 21) 3319 #define MG_F_USER_3 (1 << 22) 3320 #define MG_F_USER_4 (1 << 23) 3321 #define MG_F_USER_5 (1 << 24) 3322 #define MG_F_USER_6 (1 << 25) 3382 #if MG_ENABLE_BROADCAST 3462 const char *ssl_cert;
3465 const char *ssl_key;
3467 const char *ssl_ca_cert;
3479 const char *ssl_cipher_suites;
3523 const char *ssl_cert;
3528 const char *ssl_key;
3533 const char *ssl_ca_cert;
3545 const char *ssl_cipher_suites;
3553 const char *ssl_server_name;
3561 const char *ssl_psk_identity;
3562 const char *ssl_psk_key;
3626 #if MG_ENABLE_SSL && MG_NET_IF != MG_NET_IF_SIMPLELINK 3641 const char *mg_set_ssl(
struct mg_connection *nc,
const char *cert,
3642 const char *ca_cert);
3655 #if defined(__GNUC__) 3656 __attribute__((format(printf, 2, 3)))
3677 #if MG_ENABLE_SYNC_RESOLVER 3688 int mg_resolve(
const char *domain_name,
char *ip_addr_buf,
size_t buf_len);
3713 #if MG_ENABLE_JAVASCRIPT 3720 enum v7_err mg_enable_javascript(
struct mg_mgr *m,
struct v7 *v7,
3721 const char *init_js_file_name);
3760 #ifdef MG_MODULE_LINES 3761 #line 1 "mongoose/src/uri.h" 3772 #ifndef CS_MONGOOSE_SRC_URI_H_ 3773 #define CS_MONGOOSE_SRC_URI_H_ 3806 unsigned int *port,
struct mg_str *path,
struct mg_str *query,
3807 struct mg_str *fragment);
3815 #ifdef MG_MODULE_LINES 3816 #line 1 "mongoose/src/util.h" 3827 #ifndef CS_MONGOOSE_SRC_UTIL_H_ 3828 #define CS_MONGOOSE_SRC_UTIL_H_ 3839 #ifndef MAX_PATH_SIZE 3840 #define MAX_PATH_SIZE 500 3852 const char *
mg_skip(
const char *s,
const char *end_string,
3853 const char *delimiters,
struct mg_str *
v);
3874 #if MG_ENABLE_FILESYSTEM 3882 int mg_stat(
const char *path, cs_stat_t *st);
3891 FILE *mg_fopen(
const char *path,
const char *mode);
3900 int mg_open(
const char *path,
int flag,
int mode);
3903 #if MG_ENABLE_THREADS 3910 void *mg_start_thread(
void *(*thread_func)(
void *),
void *thread_func_param);
3915 #define MG_SOCK_STRINGIFY_IP 1 3916 #define MG_SOCK_STRINGIFY_PORT 2 3917 #define MG_SOCK_STRINGIFY_REMOTE 4 3933 #if MG_NET_IF == MG_NET_IF_SOCKET 3946 #if MG_ENABLE_HEXDUMP 3955 int mg_hexdump(
const void *buf,
int len,
char *dst,
int dst_len);
3958 void mg_hexdumpf(FILE *fp,
const void *buf,
int len);
3967 void mg_hexdump_connection(
struct mg_connection *nc,
const char *path,
3968 const void *buf,
int num_bytes,
int ev);
3999 int mg_match_prefix(
const char *pattern,
int pattern_len,
const char *str);
4023 #ifdef MG_MODULE_LINES 4024 #line 1 "mongoose/src/http.h" 4035 #ifndef CS_MONGOOSE_SRC_HTTP_H_ 4036 #define CS_MONGOOSE_SRC_HTTP_H_ 4047 #ifndef MG_MAX_HTTP_HEADERS 4048 #define MG_MAX_HTTP_HEADERS 20 4051 #ifndef MG_MAX_HTTP_REQUEST_SIZE 4052 #define MG_MAX_HTTP_REQUEST_SIZE 1024 4057 #define MG_MAX_PATH PATH_MAX 4059 #define MG_MAX_PATH 256 4063 #ifndef MG_MAX_HTTP_SEND_MBUF 4064 #define MG_MAX_HTTP_SEND_MBUF 1024 4067 #ifndef MG_CGI_ENVIRONMENT_SIZE 4068 #define MG_CGI_ENVIRONMENT_SIZE 8192 4102 #if MG_ENABLE_HTTP_WEBSOCKET 4128 #define MG_EV_HTTP_REQUEST 100 4129 #define MG_EV_HTTP_REPLY 101 4130 #define MG_EV_HTTP_CHUNK 102 4131 #define MG_EV_SSI_CALL 105 4132 #define MG_EV_SSI_CALL_CTX 106 4134 #if MG_ENABLE_HTTP_WEBSOCKET 4135 #define MG_EV_WEBSOCKET_HANDSHAKE_REQUEST 111 4136 #define MG_EV_WEBSOCKET_HANDSHAKE_DONE 112 4137 #define MG_EV_WEBSOCKET_FRAME 113 4138 #define MG_EV_WEBSOCKET_CONTROL_FRAME 114 4141 #if MG_ENABLE_HTTP_STREAMING_MULTIPART 4142 #define MG_EV_HTTP_MULTIPART_REQUEST 121 4143 #define MG_EV_HTTP_PART_BEGIN 122 4144 #define MG_EV_HTTP_PART_DATA 123 4145 #define MG_EV_HTTP_PART_END 124 4147 #define MG_EV_HTTP_MULTIPART_REQUEST_END 125 4204 #if MG_ENABLE_HTTP_WEBSOCKET 4220 const char *extra_headers);
4233 const char *host,
const char *protocol,
4234 const char *extra_headers);
4238 const char *host,
const char *protocol,
4239 const char *extra_headers,
const char *user,
4263 const char *url,
const char *protocol,
4264 const char *extra_headers);
4275 const char *url,
const char *protocol,
4276 const char *extra_headers);
4297 const void *data,
size_t data_len);
4305 const struct mg_str *strings,
int num_strings);
4314 const char *fmt, ...);
4317 #define WEBSOCKET_OP_CONTINUE 0 4318 #define WEBSOCKET_OP_TEXT 1 4319 #define WEBSOCKET_OP_BINARY 2 4320 #define WEBSOCKET_OP_CLOSE 8 4321 #define WEBSOCKET_OP_PING 9 4322 #define WEBSOCKET_OP_PONG 10 4336 #define WEBSOCKET_DONT_FIN 0x100 4350 int mg_url_decode(
const char *src,
int src_len,
char *dst,
int dst_len,
4351 int is_form_url_encoded);
4360 #ifdef MG_MODULE_LINES 4361 #line 1 "mongoose/src/http_server.h" 4367 #ifndef CS_MONGOOSE_SRC_HTTP_SERVER_H_ 4368 #define CS_MONGOOSE_SRC_HTTP_SERVER_H_ 4419 char *pass,
size_t pass_len);
4427 char *pass,
size_t pass_len);
4466 size_t var_name_len,
char *file_name,
4467 size_t file_name_len,
const char **chunk,
4481 #if MG_ENABLE_FILESYSTEM 4486 struct mg_serve_http_opts {
4488 const char *document_root;
4491 const char *index_files;
4502 const char *per_directory_auth_file;
4505 const char *auth_domain;
4515 const char *global_auth_file;
4518 const char *enable_directory_listing;
4578 const char *ssi_pattern;
4583 #if MG_ENABLE_HTTP_URL_REWRITES 4608 const char *url_rewrites;
4612 const char *dav_document_root;
4618 const char *dav_auth_file;
4621 const char *hidden_file_pattern;
4624 const char *cgi_file_pattern;
4627 const char *cgi_interpreter;
4633 const char *custom_mime_types;
4639 const char *extra_headers;
4663 struct mg_serve_http_opts opts);
4685 const char *path,
const struct mg_str mime_type,
4686 const struct mg_str extra_headers);
4688 #if MG_ENABLE_HTTP_STREAMING_MULTIPART 4726 void mg_file_upload_handler(
struct mg_connection *nc,
int ev,
void *ev_data,
4727 mg_fu_fname_fn local_name_fn);
4808 const char *extra_headers);
4828 const struct mg_str location,
4829 const struct mg_str extra_headers);
4846 int64_t content_length,
const char *extra_headers);
4853 #if MG_ENABLE_HTTP_URL_REWRITES 4876 #ifdef MG_MODULE_LINES 4877 #line 1 "mongoose/src/http_client.h" 4883 #ifndef CS_MONGOOSE_SRC_HTTP_CLIENT_H_ 4884 #define CS_MONGOOSE_SRC_HTTP_CLIENT_H_ 4917 const char *extra_headers,
4918 const char *post_data);
4931 const char *extra_headers,
4932 const char *post_data);
4936 const char *method,
const char *uri,
4937 const char *auth_domain,
const char *user,
4938 const char *passwd);
4944 #ifdef MG_MODULE_LINES 4945 #line 1 "mongoose/src/mqtt.h" 4968 #ifndef CS_MONGOOSE_SRC_MQTT_H_ 4969 #define CS_MONGOOSE_SRC_MQTT_H_ 5014 #define MG_MQTT_CMD_CONNECT 1 5015 #define MG_MQTT_CMD_CONNACK 2 5016 #define MG_MQTT_CMD_PUBLISH 3 5017 #define MG_MQTT_CMD_PUBACK 4 5018 #define MG_MQTT_CMD_PUBREC 5 5019 #define MG_MQTT_CMD_PUBREL 6 5020 #define MG_MQTT_CMD_PUBCOMP 7 5021 #define MG_MQTT_CMD_SUBSCRIBE 8 5022 #define MG_MQTT_CMD_SUBACK 9 5023 #define MG_MQTT_CMD_UNSUBSCRIBE 10 5024 #define MG_MQTT_CMD_UNSUBACK 11 5025 #define MG_MQTT_CMD_PINGREQ 12 5026 #define MG_MQTT_CMD_PINGRESP 13 5027 #define MG_MQTT_CMD_DISCONNECT 14 5030 #define MG_MQTT_EVENT_BASE 200 5031 #define MG_EV_MQTT_CONNECT (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_CONNECT) 5032 #define MG_EV_MQTT_CONNACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_CONNACK) 5033 #define MG_EV_MQTT_PUBLISH (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBLISH) 5034 #define MG_EV_MQTT_PUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBACK) 5035 #define MG_EV_MQTT_PUBREC (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBREC) 5036 #define MG_EV_MQTT_PUBREL (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBREL) 5037 #define MG_EV_MQTT_PUBCOMP (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBCOMP) 5038 #define MG_EV_MQTT_SUBSCRIBE (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_SUBSCRIBE) 5039 #define MG_EV_MQTT_SUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_SUBACK) 5040 #define MG_EV_MQTT_UNSUBSCRIBE (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_UNSUBSCRIBE) 5041 #define MG_EV_MQTT_UNSUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_UNSUBACK) 5042 #define MG_EV_MQTT_PINGREQ (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PINGREQ) 5043 #define MG_EV_MQTT_PINGRESP (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PINGRESP) 5044 #define MG_EV_MQTT_DISCONNECT (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_DISCONNECT) 5047 #define MG_MQTT_RETAIN 0x1 5048 #define MG_MQTT_DUP 0x4 5049 #define MG_MQTT_QOS(qos) ((qos) << 1) 5050 #define MG_MQTT_GET_QOS(flags) (((flags) &0x6) >> 1) 5051 #define MG_MQTT_SET_QOS(flags, qos) (flags) = ((flags) & ~0x6) | ((qos) << 1) 5054 #define MG_MQTT_CLEAN_SESSION 0x02 5055 #define MG_MQTT_HAS_WILL 0x04 5056 #define MG_MQTT_WILL_RETAIN 0x20 5057 #define MG_MQTT_HAS_PASSWORD 0x40 5058 #define MG_MQTT_HAS_USER_NAME 0x80 5059 #define MG_MQTT_GET_WILL_QOS(flags) (((flags) &0x18) >> 3) 5060 #define MG_MQTT_SET_WILL_QOS(flags, qos) \ 5061 (flags) = ((flags) & ~0x18) | ((qos) << 3) 5064 #define MG_EV_MQTT_CONNACK_ACCEPTED 0 5065 #define MG_EV_MQTT_CONNACK_UNACCEPTABLE_VERSION 1 5066 #define MG_EV_MQTT_CONNACK_IDENTIFIER_REJECTED 2 5067 #define MG_EV_MQTT_CONNACK_SERVER_UNAVAILABLE 3 5068 #define MG_EV_MQTT_CONNACK_BAD_AUTH 4 5069 #define MG_EV_MQTT_CONNACK_NOT_AUTHORIZED 5 5099 uint16_t message_id,
int flags,
const void *data,
5105 size_t topics_len, uint16_t message_id);
5109 size_t topics_len, uint16_t message_id);
5134 uint16_t message_id);
5153 struct mg_str *topic, uint8_t *qos,
int pos);
5160 #ifdef MG_MODULE_LINES 5161 #line 1 "mongoose/src/mqtt_server.h" 5184 #ifndef CS_MONGOOSE_SRC_MQTT_BROKER_H_ 5185 #define CS_MONGOOSE_SRC_MQTT_BROKER_H_ 5187 #if MG_ENABLE_MQTT_BROKER 5196 #define MG_MQTT_MAX_SESSION_SUBSCRIPTIONS 512; 5198 struct mg_mqtt_broker;
5201 struct mg_mqtt_session {
5202 struct mg_mqtt_broker *brk;
5205 size_t num_subscriptions;
5211 struct mg_mqtt_broker {
5212 LIST_HEAD(_mg_sesshead, mg_mqtt_session) sessions;
5217 void mg_mqtt_broker_init(
struct mg_mqtt_broker *brk,
void *user_data);
5244 void mg_mqtt_broker(
struct mg_connection *brk,
int ev,
void *data);
5256 struct mg_mqtt_session *mg_mqtt_next(
struct mg_mqtt_broker *brk,
5257 struct mg_mqtt_session *s);
5265 #ifdef MG_MODULE_LINES 5266 #line 1 "mongoose/src/dns.h" 5277 #ifndef CS_MONGOOSE_SRC_DNS_H_ 5278 #define CS_MONGOOSE_SRC_DNS_H_ 5286 #define MG_DNS_A_RECORD 0x01 5287 #define MG_DNS_CNAME_RECORD 0x05 5288 #define MG_DNS_PTR_RECORD 0x0c 5289 #define MG_DNS_TXT_RECORD 0x10 5290 #define MG_DNS_AAAA_RECORD 0x1c 5291 #define MG_DNS_SRV_RECORD 0x21 5292 #define MG_DNS_MX_RECORD 0x0f 5294 #define MG_MAX_DNS_QUESTIONS 32 5295 #define MG_MAX_DNS_ANSWERS 32 5297 #define MG_DNS_MESSAGE 100 5385 const char *
name,
size_t nlen,
const void *rdata,
5410 char *dst,
int dst_len);
5430 #ifdef MG_MODULE_LINES 5431 #line 1 "mongoose/src/dns_server.h" 5444 #ifndef CS_MONGOOSE_SRC_DNS_SERVER_H_ 5445 #define CS_MONGOOSE_SRC_DNS_SERVER_H_ 5447 #if MG_ENABLE_DNS_SERVER 5455 #define MG_DNS_SERVER_DEFAULT_TTL 3600 5457 struct mg_dns_reply {
5491 struct mg_dns_reply mg_dns_create_reply(struct mbuf *io,
5502 int mg_dns_reply_record(
struct mg_dns_reply *reply,
5504 const char *name,
int rtype,
int ttl,
const void *rdata,
5519 void mg_dns_send_reply(
struct mg_connection *nc,
struct mg_dns_reply *r);
5527 #ifdef MG_MODULE_LINES 5528 #line 1 "mongoose/src/resolv.h" 5539 #ifndef CS_MONGOOSE_SRC_RESOLV_H_ 5540 #define CS_MONGOOSE_SRC_RESOLV_H_ 5608 #ifdef MG_MODULE_LINES 5609 #line 1 "mongoose/src/coap.h" 5642 #ifndef CS_MONGOOSE_SRC_COAP_H_ 5643 #define CS_MONGOOSE_SRC_COAP_H_ 5647 #define MG_COAP_MSG_TYPE_FIELD 0x2 5648 #define MG_COAP_CODE_CLASS_FIELD 0x4 5649 #define MG_COAP_CODE_DETAIL_FIELD 0x8 5650 #define MG_COAP_MSG_ID_FIELD 0x10 5651 #define MG_COAP_TOKEN_FIELD 0x20 5652 #define MG_COAP_OPTIOMG_FIELD 0x40 5653 #define MG_COAP_PAYLOAD_FIELD 0x80 5655 #define MG_COAP_ERROR 0x10000 5656 #define MG_COAP_FORMAT_ERROR (MG_COAP_ERROR | 0x20000) 5657 #define MG_COAP_IGNORE (MG_COAP_ERROR | 0x40000) 5658 #define MG_COAP_NOT_ENOUGH_DATA (MG_COAP_ERROR | 0x80000) 5659 #define MG_COAP_NETWORK_ERROR (MG_COAP_ERROR | 0x100000) 5661 #define MG_COAP_MSG_CON 0 5662 #define MG_COAP_MSG_NOC 1 5663 #define MG_COAP_MSG_ACK 2 5664 #define MG_COAP_MSG_RST 3 5665 #define MG_COAP_MSG_MAX 3 5667 #define MG_COAP_CODECLASS_REQUEST 0 5668 #define MG_COAP_CODECLASS_RESP_OK 2 5669 #define MG_COAP_CODECLASS_CLIENT_ERR 4 5670 #define MG_COAP_CODECLASS_SRV_ERR 5 5672 #define MG_COAP_EVENT_BASE 300 5673 #define MG_EV_COAP_CON (MG_COAP_EVENT_BASE + MG_COAP_MSG_CON) 5674 #define MG_EV_COAP_NOC (MG_COAP_EVENT_BASE + MG_COAP_MSG_NOC) 5675 #define MG_EV_COAP_ACK (MG_COAP_EVENT_BASE + MG_COAP_MSG_ACK) 5676 #define MG_EV_COAP_RST (MG_COAP_EVENT_BASE + MG_COAP_MSG_RST) 5683 struct mg_coap_option {
5684 struct mg_coap_option *next;
5690 struct mg_coap_message {
5694 uint8_t code_detail;
5697 struct mg_coap_option *options;
5699 struct mg_coap_option *optiomg_tail;
5714 struct mg_coap_option *mg_coap_add_option(
struct mg_coap_message *cm,
5715 uint32_t number,
char *value,
5722 void mg_coap_free_options(
struct mg_coap_message *cm);
5736 struct mg_coap_message *cm);
5743 uint32_t mg_coap_send_ack(
struct mg_connection *nc, uint16_t msg_id);
5760 uint32_t mg_coap_parse(
struct mbuf *io,
struct mg_coap_message *cm);
5767 uint32_t mg_coap_compose(
struct mg_coap_message *cm,
struct mbuf *io);
5776 #ifdef MG_MODULE_LINES 5777 #line 1 "mongoose/src/sntp.h" 5784 #ifndef CS_MONGOOSE_SRC_SNTP_H_ 5785 #define CS_MONGOOSE_SRC_SNTP_H_ 5789 #define MG_SNTP_EVENT_BASE 500 5795 #define MG_SNTP_REPLY (MG_SNTP_EVENT_BASE + 1) 5798 #define MG_SNTP_MALFORMED_REPLY (MG_SNTP_EVENT_BASE + 2) 5801 #define MG_SNTP_FAILED (MG_SNTP_EVENT_BASE + 3) 5803 struct mg_sntp_message {
5813 const char *sntp_server_name);
5827 const char *sntp_server_name);
uint16_t keep_alive
Definition: mongoose.h:5001
const char * will_topic
Definition: mongoose.h:5002
struct mg_connection ** dns_conn
Definition: mongoose.h:5565
Definition: mongoose.h:5316
int num_ifaces
Definition: mongoose.h:3352
struct mg_connection * next
Definition: mongoose.h:3266
Definition: mongoose.h:5306
void mg_mbuf_append_base64_putc(char ch, void *user_data)
Definition: mongoose.c:9544
struct mg_str mg_strdup(const struct mg_str s)
Definition: mongoose.c:1158
Definition: mongoose.h:4104
void mg_set_protocol_http_websocket(struct mg_connection *nc)
Definition: mongoose.c:6050
int mg_vprintf(struct mg_connection *, const char *fmt, va_list ap)
Definition: mongoose.c:2238
struct mg_connection * mg_connect_opt(struct mg_mgr *mgr, const char *address, mg_event_handler_t handler, struct mg_connect_opts opts)
Definition: mongoose.c:2652
double ev_timer_time
Definition: mongoose.h:3277
uint16_t message_id
Definition: mongoose.h:4980
void mg_if_connect_cb(struct mg_connection *nc, int err)
Definition: mongoose.c:2589
void mg_if_poll(struct mg_connection *nc, time_t now)
Definition: mongoose.c:2084
void cs_sha1_init(cs_sha1_ctx *)
Definition: mongoose.c:1363
void mg_send_websocket_handshake(struct mg_connection *nc, const char *uri, const char *extra_headers)
Definition: mongoose.c:9151
void mg_if_timer(struct mg_connection *c, double now)
Definition: mongoose.c:2070
uint8_t protocol_version
Definition: mongoose.h:4983
void * data
Definition: mongoose.h:3004
void mbuf_free(struct mbuf *)
Definition: mongoose.c:1035
size_t len
Definition: mongoose.h:1742
Definition: mongoose.h:4999
#define MG_MAX_DNS_QUESTIONS
Definition: mongoose.h:5294
int mg_resolve_async(struct mg_mgr *mgr, const char *name, int query, mg_resolve_callback_t cb, void *data)
Definition: mongoose.c:10797
struct mg_connection * active_connections
Definition: mongoose.h:3247
int mg_dns_parse_record_data(struct mg_dns_message *msg, struct mg_dns_resource_record *rr, void *data, size_t data_len)
Definition: mongoose.c:10170
void cs_base64_finish(struct cs_base64_ctx *ctx)
Definition: mongoose.c:412
Definition: mongoose.h:5549
Definition: mongoose.h:5302
struct mg_connection * mg_connect(struct mg_mgr *mgr, const char *address, mg_event_handler_t handler)
Definition: mongoose.c:2645
size_t mbuf_insert(struct mbuf *, size_t, const void *, size_t)
Definition: mongoose.c:1063
void mg_mqtt_unsubscribe(struct mg_connection *nc, char **topics, size_t topics_len, uint16_t message_id)
Definition: mongoose.c:9870
mg_event_handler_t handler
Definition: mongoose.h:3284
const char * file_name
Definition: mongoose.h:4113
struct mg_iface * iface
Definition: mongoose.h:3296
int cs_base64_decode(const unsigned char *s, int len, char *dst, int *dec_len)
Definition: mongoose.c:522
void MD5_Init(MD5_CTX *c)
Definition: mongoose.c:825
void mbuf_init(struct mbuf *, size_t initial_capacity)
Definition: mongoose.c:1028
void cs_base64_update(struct cs_base64_ctx *ctx, const char *str, size_t len)
Definition: mongoose.c:400
void mg_mqtt_connack(struct mg_connection *nc, uint8_t return_code)
Definition: mongoose.c:9888
const char * topic
Definition: mongoose.h:4995
Definition: mongoose.h:3008
struct MD5Context MD5_CTX
struct mg_connection * mg_connect_ws_opt(struct mg_mgr *mgr, mg_event_handler_t ev_handler, struct mg_connect_opts opts, const char *url, const char *protocol, const char *extra_headers)
Definition: mongoose.c:9157
int c_snprintf(char *buf, size_t buf_size, const char *format,...)
Definition: mongoose.c:1679
struct mg_str name
Definition: mongoose.h:5307
void mg_if_recv_tcp_cb(struct mg_connection *nc, void *buf, int len, int own)
Definition: mongoose.c:2506
int mg_dns_encode_name(struct mbuf *io, const char *name, size_t len)
Definition: mongoose.c:10222
void mg_if_recv_udp_cb(struct mg_connection *nc, void *buf, int len, union socket_address *sa, size_t sa_len)
Definition: mongoose.c:2510
Definition: mongoose.h:1903
void mg_mqtt_puback(struct mg_connection *nc, uint16_t message_id)
Definition: mongoose.c:9907
const char * nameserver_url
Definition: mongoose.h:5560
uint8_t connect_flags
Definition: mongoose.h:4984
Definition: mongoose.h:3419
double cs_time(void)
Definition: mongoose.c:716
double mg_time(void)
Definition: mongoose.c:2954
struct mg_str mg_mk_str(const char *s)
Definition: mongoose.c:1125
struct mg_mgr * mgr
Definition: mongoose.h:3268
int num_ifaces
Definition: mongoose.h:3255
Definition: mongoose.h:3350
void MD5_Final(unsigned char *md, MD5_CTX *c)
Definition: mongoose.h:5009
Definition: mongoose.h:5551
uint16_t keep_alive_timer
Definition: mongoose.h:4985
void * mgr_data
Definition: mongoose.h:3295
void mg_mqtt_suback(struct mg_connection *nc, uint8_t *qoss, size_t qoss_len, uint16_t message_id)
Definition: mongoose.c:9923
int mg_match_prefix(const char *pattern, int pattern_len, const char *str)
Definition: mongoose.c:9530
void mg_if_accept_tcp_cb(struct mg_connection *nc, union socket_address *sa, size_t sa_len)
Definition: mongoose.c:2449
void mg_send_head(struct mg_connection *n, int status_code, int64_t content_length, const char *extra_headers)
Definition: mongoose.c:6221
void mg_mqtt_pong(struct mg_connection *nc)
Definition: mongoose.c:9942
Definition: mongoose.h:3450
struct mg_iface_vtable * mg_ifaces[]
Definition: mongoose.c:3029
void mg_send_mqtt_handshake(struct mg_connection *nc, const char *client_id)
Definition: mongoose.c:9718
int mg_avprintf(char **buf, size_t size, const char *fmt, va_list ap)
Definition: mongoose.c:1831
Definition: mongoose.h:1813
mg_event_handler_t f
Definition: mongoose.h:3292
size_t size
Definition: mongoose.h:1743
Definition: mongoose.h:1671
struct mg_connection * mg_add_sock_opt(struct mg_mgr *, sock_t, mg_event_handler_t, struct mg_add_sock_opts)
Definition: mongoose.c:2936
int mg_parse_http(const char *s, int n, struct http_message *hm, int is_req)
Definition: mongoose.c:5283
void mg_send_websocket_handshake2(struct mg_connection *nc, const char *path, const char *host, const char *protocol, const char *extra_headers)
Definition: mongoose.c:9096
int mg_dns_copy_questions(struct mbuf *io, struct mg_dns_message *msg)
Definition: mongoose.c:10212
void * user_data
Definition: mongoose.h:3285
void mg_mqtt_pubcomp(struct mg_connection *nc, uint16_t message_id)
Definition: mongoose.c:9919
void * user_data
Definition: mongoose.h:3451
struct mg_connection * mg_bind_opt(struct mg_mgr *mgr, const char *address, mg_event_handler_t handler, struct mg_bind_opts opts)
Definition: mongoose.c:2754
unsigned long flags
Definition: mongoose.h:3297
int only_literal
Definition: mongoose.h:5564
int c_vsnprintf(char *buf, size_t buf_size, const char *format, va_list ap)
Definition: mongoose.c:1541
void mg_printf_http_chunk(struct mg_connection *nc, const char *fmt,...)
Definition: mongoose.c:6461
int mg_http_parse_header(struct mg_str *hdr, const char *var_name, char *buf, size_t buf_size)
Definition: mongoose.c:6508
int timeout
Definition: mongoose.h:5562
void * user_data
Definition: mongoose.h:1908
Definition: mongoose.h:5552
int mg_socketpair(sock_t[2], int sock_type)
Definition: mongoose.h:5300
void mg_printf_websocket_frame(struct mg_connection *nc, int op_and_flags, const char *fmt,...)
Definition: mongoose.c:9020
size_t recv_mbuf_limit
Definition: mongoose.h:3273
struct mg_connection * mg_connect_http_opt(struct mg_mgr *mgr, mg_event_handler_t ev_handler, struct mg_connect_opts opts, const char *url, const char *extra_headers, const char *post_data)
Definition: mongoose.c:7720
sock_t sock
Definition: mongoose.h:3270
struct mg_connection * mg_bind(struct mg_mgr *, const char *, mg_event_handler_t)
Definition: mongoose.c:2747
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)
Definition: mongoose.c:7768
void(* cs_base64_putc_t)(char, void *)
Definition: mongoose.h:1901
void cs_base64_encode(const unsigned char *src, int src_len, char *dst)
Definition: mongoose.c:458
struct mg_connection * mg_add_sock(struct mg_mgr *, sock_t, mg_event_handler_t)
Definition: mongoose.c:2947
void mg_send_mqtt_handshake_opt(struct mg_connection *nc, const char *client_id, struct mg_send_mqtt_handshake_opts)
Definition: mongoose.c:9723
Definition: mongoose.h:1853
int accept_literal
Definition: mongoose.h:5563
mg_resolve_err
Definition: mongoose.h:5548
struct mg_iface_vtable * vtable
Definition: mongoose.h:3005
union socket_address sa
Definition: mongoose.h:3272
void mbuf_trim(struct mbuf *)
Definition: mongoose.c:1058
int mg_dns_insert_header(struct mbuf *io, size_t pos, struct mg_dns_message *msg)
Definition: mongoose.c:10199
void cs_hmac_sha1(const unsigned char *key, size_t key_len, const unsigned char *text, size_t text_len, unsigned char out[20])
Definition: mongoose.c:1416
int err
Definition: mongoose.h:3271
size_t mg_dns_uncompress_name(struct mg_dns_message *msg, struct mg_str *name, char *dst, int dst_len)
Definition: mongoose.c:10419
void mg_basic_auth_header(const char *user, const char *pass, struct mbuf *buf)
Definition: mongoose.c:9556
unsigned char flags
Definition: mongoose.h:4107
struct http_message * req
Definition: mongoose.h:4122
struct mg_iface_vtable ** ifaces
Definition: mongoose.h:3353
void(* mg_event_handler_t)(struct mg_connection *nc, int ev, void *ev_data)
Definition: mongoose.h:3231
void mg_register_http_endpoint(struct mg_connection *nc, const char *uri_path, mg_event_handler_t handler)
Definition: mongoose.c:7806
const char * password
Definition: mongoose.h:5005
void mg_set_protocol_mqtt(struct mg_connection *nc)
Definition: mongoose.c:9712
mg_dns_resource_record_kind
Definition: mongoose.h:5299
void mg_mbuf_append_base64(struct mbuf *mbuf, const void *data, size_t len)
Definition: mongoose.c:9549
void mg_conn_addr_to_str(struct mg_connection *nc, char *buf, size_t len, int flags)
Definition: mongoose.c:9355
void MD5_Update(MD5_CTX *c, const unsigned char *data, size_t len)
Definition: mongoose.c:917
Definition: mongoose.h:3215
char * buf
Definition: mongoose.h:1741
Definition: mongoose.h:3246
struct mg_dns_resource_record * mg_dns_next_record(struct mg_dns_message *msg, int query, struct mg_dns_resource_record *prev)
Definition: mongoose.c:10156
unsigned char flags
Definition: mongoose.h:5000
size_t mbuf_append(struct mbuf *, const void *data, size_t data_size)
Definition: mongoose.c:1096
Definition: mongoose.h:4121
size_t size
Definition: mongoose.h:4106
void mg_if_sent_cb(struct mg_connection *nc, int num_sent)
Definition: mongoose.c:2470
struct mg_iface * iface
Definition: mongoose.h:3423
int mg_parse_uri(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)
Definition: mongoose.c:4813
void mg_http_send_error(struct mg_connection *nc, int code, const char *reason)
Definition: mongoose.c:6232
void * user_data
Definition: mongoose.h:4117
int mg_casecmp(const char *s1, const char *s2)
Definition: mongoose.c:1816
void * user_data
Definition: mongoose.h:3514
int mg_match_prefix_n(const struct mg_str pattern, const struct mg_str str)
Definition: mongoose.c:9484
void(* mg_resolve_callback_t)(struct mg_dns_message *dns_message, void *user_data, enum mg_resolve_err)
Definition: mongoose.h:5555
int mg_get_http_basic_auth(struct http_message *hm, char *user, size_t user_len, char *pass, size_t pass_len)
Definition: mongoose.c:6545
int mg_resolve_from_hosts_file(const char *host, union socket_address *usa)
Definition: mongoose.c:10691
struct mg_iface * mg_find_iface(struct mg_mgr *mgr, struct mg_iface_vtable *vtable, struct mg_iface *from)
Definition: mongoose.c:3046
Definition: mongoose.h:4072
void mg_base64_encode(const unsigned char *src, int src_len, char *dst)
Definition: mongoose.c:9252
int mg_normalize_uri_path(const struct mg_str *in, struct mg_str *out)
Definition: mongoose.c:4929
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)
Definition: mongoose.c:10251
int mg_http_check_digest_auth(struct http_message *hm, const char *auth_domain, FILE *fp)
size_t c_strnlen(const char *s, size_t maxlen)
Definition: mongoose.c:1478
Definition: mongoose.h:3513
int mg_ncasecmp(const char *s1, const char *s2, size_t len)
Definition: mongoose.c:1805
const char * var_name
Definition: mongoose.h:4114
int mg_mqtt_next_subscribe_topic(struct mg_mqtt_message *msg, struct mg_str *topic, uint8_t *qos, int pos)
Definition: mongoose.c:9856
#define intptr_t
Definition: mongoose.c:1998
time_t mg_mgr_poll(struct mg_mgr *, int milli)
Definition: mongoose.c:2223
struct mg_mgr * mgr
Definition: mongoose.h:3003
char * cs_md5(char buf[33],...)
Definition: mongoose.c:983
int mg_url_decode(const char *src, int src_len, char *dst, int dst_len, int is_form_url_encoded)
Definition: mongoose.c:6386
struct mg_connection * mg_connect_ws(struct mg_mgr *mgr, mg_event_handler_t event_handler, const char *url, const char *protocol, const char *extra_headers)
Definition: mongoose.c:9179
void mg_mqtt_pubrel(struct mg_connection *nc, uint16_t message_id)
Definition: mongoose.c:9915
void cs_sha1_final(unsigned char digest[20], cs_sha1_ctx *)
Definition: mongoose.c:1392
int chunk_size
Definition: mongoose.h:1907
void mg_mqtt_subscribe(struct mg_connection *nc, const struct mg_mqtt_topic_expression *topics, size_t topics_len, uint16_t message_id)
Definition: mongoose.c:9836
void * user_data
Definition: mongoose.h:3254
int mg_parse_dns(const char *buf, int len, struct mg_dns_message *msg)
Definition: mongoose.c:10383
struct mg_iface_vtable * main_iface
Definition: mongoose.h:3351
int mg_get_http_var(const struct mg_str *buf, const char *name, char *dst, size_t dst_len)
Definition: mongoose.c:6414
struct mg_connection * listener
Definition: mongoose.h:3267
int mg_base64_decode(const unsigned char *s, int len, char *dst)
Definition: mongoose.c:9256
void mg_send_websocket_frame(struct mg_connection *nc, int op_and_flags, const void *data, size_t data_len)
Definition: mongoose.c:8984
Definition: mongoose.h:5550
#define MG_MAX_DNS_ANSWERS
Definition: mongoose.h:5295
int mg_asprintf(char **buf, size_t size, const char *fmt,...)
Definition: mongoose.c:1821
void mg_http_send_redirect(struct mg_connection *nc, int status_code, const struct mg_str location, const struct mg_str extra_headers)
Definition: mongoose.c:6199
Definition: mongoose.h:1740
void mg_send(struct mg_connection *, const void *buf, int len)
Definition: mongoose.c:2456
void cs_base64_init(struct cs_base64_ctx *ctx, cs_base64_putc_t putc, void *user_data)
Definition: mongoose.c:393
uint16_t transaction_id
Definition: mongoose.h:5319
int mg_is_big_endian(void)
Definition: mongoose.c:9445
int num_questions
Definition: mongoose.h:5320
void cs_to_hex(char *to, const unsigned char *p, size_t len)
Definition: mongoose.c:1750
double mg_set_timer(struct mg_connection *c, double timestamp)
Definition: mongoose.c:2909
struct mg_str mg_mk_str_n(const char *s, size_t len)
Definition: mongoose.c:1132
int status
Definition: mongoose.h:4116
int mg_check_ip_acl(const char *acl, uint32_t remote_ip)
Definition: mongoose.c:2879
size_t len
Definition: mongoose.h:1673
int resp_code
Definition: mongoose.h:4081
struct sockaddr sa
Definition: mongoose.h:3216
uint16_t keep_alive
Definition: mongoose.h:5010
void cs_sha1_update(cs_sha1_ctx *, const unsigned char *data, uint32_t len)
Definition: mongoose.c:1372
unsigned int flags
Definition: mongoose.h:3421
void mg_set_close_on_exec(sock_t)
Definition: mongoose.c:9286
struct mg_str * mg_get_http_header(struct http_message *hm, const char *name)
Definition: mongoose.c:5347
struct mg_connection * mg_if_accept_new_conn(struct mg_connection *lc)
Definition: mongoose.c:2432
int mg_parse_http_basic_auth(struct mg_str *hdr, char *user, size_t user_len, char *pass, size_t pass_len)
Definition: mongoose.c:6552
void mg_mqtt_ping(struct mg_connection *nc)
Definition: mongoose.c:9938
void mbuf_resize(struct mbuf *, size_t new_size)
Definition: mongoose.c:1043
int max_retries
Definition: mongoose.h:5561
struct mg_connection * prev
Definition: mongoose.h:3266
Definition: mongoose.h:4973
void * proto_data
Definition: mongoose.h:3282
mg_event_handler_t proto_handler
Definition: mongoose.h:3281
void * priv_2
Definition: mongoose.h:3294
struct mg_iface * iface
Definition: mongoose.h:3454
struct mg_iface * iface
Definition: mongoose.h:3517
int mg_vcmp(const struct mg_str *str2, const char *str1)
Definition: mongoose.c:1138
int mg_strncmp(const struct mg_str str1, const struct mg_str str2, size_t n)
Definition: mongoose.c:1184
int ttl
Definition: mongoose.h:5310
const char * c_strnstr(const char *s, const char *find, size_t slen)
Definition: mongoose.c:1720
void mg_set_protocol_dns(struct mg_connection *nc)
Definition: mongoose.c:10499
Definition: mongoose.h:3265
const char * user_name
Definition: mongoose.h:5004
unsigned int flags
Definition: mongoose.h:3515
uint8_t qos
Definition: mongoose.h:4996
const char * will_message
Definition: mongoose.h:5003
void mg_mgr_init_opt(struct mg_mgr *mgr, void *user_data, struct mg_mgr_init_opts opts)
Definition: mongoose.c:2119
int rclass
Definition: mongoose.h:5309
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)
void mg_mgr_init(struct mg_mgr *mgr, void *user_data)
Definition: mongoose.c:2113
void mg_sock_addr_to_str(const union socket_address *sa, char *buf, size_t len, int flags)
Definition: mongoose.c:9296
void mg_send_http_chunk(struct mg_connection *nc, const char *buf, size_t len)
Definition: mongoose.c:6451
unsigned int flags
Definition: mongoose.h:3452
void mg_mqtt_publish(struct mg_connection *nc, const char *topic, uint16_t message_id, int flags, const void *data, size_t len)
Definition: mongoose.c:9817
const char ** error_string
Definition: mongoose.h:3422
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)
Definition: mongoose.c:10804
int qos
Definition: mongoose.h:4975
void mg_printf_html_escape(struct mg_connection *nc, const char *fmt,...)
Definition: mongoose.c:6481
Definition: mongoose.h:5559
unsigned char * data
Definition: mongoose.h:4105
const char * mg_next_comma_list_entry(const char *list, struct mg_str *val, struct mg_str *eq_val)
Definition: mongoose.c:9451
int num_answers
Definition: mongoose.h:5321
int mg_num_ifaces
Definition: mongoose.c:3035
void mg_mqtt_unsuback(struct mg_connection *nc, uint16_t message_id)
Definition: mongoose.c:9934
Definition: mongoose.h:4112
void cs_from_hex(char *to, const char *p, size_t len)
Definition: mongoose.c:1772
void mg_mqtt_pubrec(struct mg_connection *nc, uint16_t message_id)
Definition: mongoose.c:9911
Definition: mongoose.h:3002
Definition: mongoose.h:4994
cs_base64_putc_t b64_putc
Definition: mongoose.h:1905
void mg_sock_to_str(sock_t sock, char *buf, size_t len, int flags)
Definition: mongoose.c:3760
int mg_strcmp(const struct mg_str str1, const struct mg_str str2)
Definition: mongoose.c:1171
struct mg_iface * mg_if_create_iface(struct mg_iface_vtable *vtable, struct mg_mgr *mgr)
Definition: mongoose.c:3037
const char * p
Definition: mongoose.h:1672
struct mg_iface ** ifaces
Definition: mongoose.h:3256
uint8_t connack_ret_code
Definition: mongoose.h:4979
struct mg_connection * mg_connect_http(struct mg_mgr *mgr, mg_event_handler_t event_handler, const char *url, const char *extra_headers, const char *post_data)
Definition: mongoose.c:7757
void mg_send_websocket_framev(struct mg_connection *nc, int op_and_flags, const struct mg_str *strings, int num_strings)
Definition: mongoose.c:8998
const char * mg_skip(const char *s, const char *end_string, const char *delimiters, struct mg_str *v)
Definition: mongoose.c:9205
uint16_t flags
Definition: mongoose.h:5318
void * v
Definition: mongoose.h:3287
void mg_send_dns_query(struct mg_connection *nc, const char *name, int query_type)
Definition: mongoose.c:10296
int mg_vcasecmp(const struct mg_str *str2, const char *str1)
Definition: mongoose.c:1148
time_t last_io_time
Definition: mongoose.h:3276
void mbuf_remove(struct mbuf *, size_t data_size)
Definition: mongoose.c:1101
#define LIST_ENTRY(type)
Definition: mongoose.h:2451
void mg_send_response_line(struct mg_connection *nc, int status_code, const char *extra_headers)
Definition: mongoose.c:6194
static void ev_handler(struct mg_connection *nc, int ev, void *ev_data)
Функция-обработчик событий
Definition: messenger_via_http_server.c:64
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)
Definition: mongoose.c:9103
int mg_printf(struct mg_connection *, const char *fmt,...)
Definition: mongoose.c:2252
#define MG_MAX_HTTP_HEADERS
Definition: mongoose.h:4048
int rtype
Definition: mongoose.h:5308
int cmd
Definition: mongoose.h:4974
const char ** error_string
Definition: mongoose.h:3516
void mg_mqtt_disconnect(struct mg_connection *nc)
Definition: mongoose.c:9946
Definition: mongoose.h:5301
const char ** error_string
Definition: mongoose.h:3453
void cs_fprint_base64(FILE *f, const unsigned char *src, int src_len)
void * user_data
Definition: mongoose.h:3420
#define LIST_HEAD(name, type)
Definition: mongoose.h:2438
struct mg_connection * mg_next(struct mg_mgr *, struct mg_connection *)
Definition: mongoose.c:2829
void mg_mgr_free(struct mg_mgr *)
Definition: mongoose.c:2194