20#ifndef CS_MONGOOSE_SRC_COMMON_H_
21#define CS_MONGOOSE_SRC_COMMON_H_
26#define MG_VERSION "6.4"
33#if defined(MG_ENABLE_DEBUG) && !defined(CS_ENABLE_DEBUG)
34#define CS_ENABLE_DEBUG
36#if defined(MG_DISABLE_STDIO) && !defined(CS_DISABLE_STDIO)
37#define CS_DISABLE_STDIO
38#elif defined(CS_DISABLE_STDIO) && !defined(MG_DISABLE_STDIO)
39#define MG_DISABLE_STDIO
43#ifdef MG_DISABLE_FILESYSTEM
50#ifndef MG_DISABLE_DIRECTORY_LISTING
51#define MG_DISABLE_DIRECTORY_LISTING
58#ifdef MG_NO_BSD_SOCKETS
59#ifndef MG_DISABLE_SYNC_RESOLVER
60#define MG_DISABLE_SYNC_RESOLVER
62#ifndef MG_DISABLE_SOCKETPAIR
63#define MG_DISABLE_SOCKETPAIR
69#ifndef CS_COMMON_PLATFORM_H_
70#define CS_COMMON_PLATFORM_H_
79#define CS_P_ESP_LWIP 3
86#if defined(TARGET_IS_MSP432P4XX) || defined(__MSP432P401R__)
88#define CS_PLATFORM CS_P_MSP432
90#define CS_PLATFORM CS_P_CC3200
91#elif defined(__unix__) || defined(__APPLE__)
92#define CS_PLATFORM CS_P_UNIX
94#define CS_PLATFORM CS_P_WINDOWS
98#error "CS_PLATFORM is not specified and we couldn't guess it."
107#define NORETURN __attribute__((noreturn))
108#define UNUSED __attribute__((unused))
109#define NOINLINE __attribute__((noinline))
110#define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
115#define WARN_UNUSED_RESULT
119#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
123#ifndef CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_
124#define CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_
125#if CS_PLATFORM == CS_P_WINDOWS
140#pragma warning(disable : 4127)
141#pragma warning(disable : 4204)
157#define random() rand()
159#pragma comment(lib, "ws2_32.lib")
168#define EINPROGRESS WSAEINPROGRESS
171#define EWOULDBLOCK WSAEWOULDBLOCK
175#define STR(x) STRX(x)
176#define __func__ __FILE__ ":" STR(__LINE__)
178#define snprintf _snprintf
179#define fileno _fileno
180#define vsnprintf _vsnprintf
181#define sleep(x) Sleep((x) *1000)
182#define to64(x) _atoi64(x)
183#define popen(x, y) _popen((x), (y))
184#define pclose(x) _pclose(x)
186#if defined(_MSC_VER) && _MSC_VER >= 1400
187#define fseeko(x, y, z) _fseeki64((x), (y), (z))
189#define fseeko(x, y, z) fseek((x), (y), (z))
191#define random() rand()
193typedef signed char int8_t;
204#define UINT16_MAX 65535
207#define UINT32_MAX 4294967295
212#define INT64_FMT "I64d"
213#define INT64_X_FMT "I64x"
214#define SIZE_T_FMT "Iu"
221#define S_ISDIR(x) (((x) &_S_IFMT) == _S_IFDIR)
224#define S_ISREG(x) (((x) &_S_IFMT) == _S_IFREG)
245#define va_copy __va_copy
247#define va_copy(x, y) (x) = (y)
251#ifndef MG_MAX_HTTP_REQUEST_SIZE
252#define MG_MAX_HTTP_REQUEST_SIZE 8192
255#ifndef MG_MAX_HTTP_SEND_MBUF
256#define MG_MAX_HTTP_SEND_MBUF 4096
259#ifndef MG_MAX_HTTP_HEADERS
260#define MG_MAX_HTTP_HEADERS 40
265#ifndef CS_COMMON_PLATFORMS_PLATFORM_UNIX_H_
266#define CS_COMMON_PLATFORMS_PLATFORM_UNIX_H_
267#if CS_PLATFORM == CS_P_UNIX
270#define _XOPEN_SOURCE 600
274#ifndef __STDC_FORMAT_MACROS
275#define __STDC_FORMAT_MACROS
279#ifndef __STDC_LIMIT_MACROS
280#define __STDC_LIMIT_MACROS
284#ifndef _LARGEFILE_SOURCE
285#define _LARGEFILE_SOURCE
289#ifndef _FILE_OFFSET_BITS
290#define _FILE_OFFSET_BITS 64
293#include <arpa/inet.h>
303#include <netinet/in.h>
310#include <sys/socket.h>
311#include <sys/select.h>
314#include <sys/types.h>
322#if !(defined(__DARWIN_C_LEVEL) && __DARWIN_C_LEVEL >= 200809L)
323long long strtoll(
const char *,
char **,
int);
327#define INVALID_SOCKET (-1)
328#define SIZE_T_FMT "zu"
331#define to64(x) strtoll(x, NULL, 10)
332#define INT64_FMT PRId64
333#define INT64_X_FMT PRIx64
338#define va_copy __va_copy
340#define va_copy(x, y) (x) = (y)
345#define closesocket(x) close(x)
348#ifndef MG_MAX_HTTP_REQUEST_SIZE
349#define MG_MAX_HTTP_REQUEST_SIZE 8192
352#ifndef MG_MAX_HTTP_SEND_MBUF
353#define MG_MAX_HTTP_SEND_MBUF 4096
356#ifndef MG_MAX_HTTP_HEADERS
357#define MG_MAX_HTTP_HEADERS 40
362#ifndef CS_COMMON_PLATFORMS_PLATFORM_ESP_LWIP_H_
363#define CS_COMMON_PLATFORMS_PLATFORM_ESP_LWIP_H_
364#if CS_PLATFORM == CS_P_ESP_LWIP
375#include <lwip/ip_addr.h>
376#include <lwip/inet.h>
377#include <lwip/netdb.h>
380#ifndef LWIP_PROVIDE_ERRNO
384#define LWIP_TIMEVAL_PRIVATE 0
387#include <lwip/sockets.h>
393#include <lwip/sockets.h>
399#define INVALID_SOCKET (-1)
400#define SIZE_T_FMT "u"
403#define to64(x) strtoll(x, NULL, 10)
404#define INT64_FMT PRId64
405#define INT64_X_FMT PRIx64
409#define random os_random
418#ifndef CS_COMMON_PLATFORMS_PLATFORM_CC3200_H_
419#define CS_COMMON_PLATFORMS_PLATFORM_CC3200_H_
420#if CS_PLATFORM == CS_P_CC3200
430#ifndef __TI_COMPILER_VERSION__
435#define MG_SOCKET_SIMPLELINK 1
436#define MG_DISABLE_SOCKETPAIR 1
437#define MG_DISABLE_SYNC_RESOLVER 1
438#define MG_DISABLE_POPEN 1
439#define MG_DISABLE_CGI 1
441#ifndef CC3200_FS_SPIFFS
442#define MG_DISABLE_DAV 1
443#define MG_DISABLE_DIRECTORY_LISTING 1
448#define INVALID_SOCKET (-1)
449#define SIZE_T_FMT "u"
452#define to64(x) strtoll(x, NULL, 10)
453#define INT64_FMT PRId64
454#define INT64_X_FMT PRIx64
461#ifdef __TI_COMPILER_VERSION__
463#define timeval SlTimeval_t
470#ifdef __TI_COMPILER_VERSION__
474typedef unsigned int mode_t;
487#define stat(a, b) _stat(a, b)
489#define __S_IFMT 0170000
491#define __S_IFDIR 0040000
492#define __S_IFCHR 0020000
493#define __S_IFREG 0100000
495#define __S_ISTYPE(mode, mask) (((mode) &__S_IFMT) == (mask))
497#define S_IFDIR __S_IFDIR
498#define S_IFCHR __S_IFCHR
499#define S_IFREG __S_IFREG
500#define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR)
501#define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG)
504#define va_copy(apc, ap) ((apc) = (ap))
508#ifdef CC3200_FS_SPIFFS
509#include <common/spiffs/spiffs.h>
517#define dirent spiffs_dirent
535#ifndef CS_COMMON_PLATFORMS_PLATFORM_MSP432_H_
536#define CS_COMMON_PLATFORMS_PLATFORM_MSP432_H_
537#if CS_PLATFORM == CS_P_MSP432
547#ifndef __TI_COMPILER_VERSION__
552#define MG_SOCKET_SIMPLELINK 1
553#define MG_DISABLE_SOCKETPAIR 1
554#define MG_DISABLE_SYNC_RESOLVER 1
555#define MG_DISABLE_POPEN 1
556#define MG_DISABLE_CGI 1
557#define MG_DISABLE_DAV 1
558#define MG_DISABLE_DIRECTORY_LISTING 1
562#define INVALID_SOCKET (-1)
563#define SIZE_T_FMT "u"
566#define to64(x) strtoll(x, NULL, 10)
567#define INT64_FMT PRId64
568#define INT64_X_FMT PRIx64
575#ifdef __TI_COMPILER_VERSION__
577#define timeval SlTimeval_t
584#ifdef __TI_COMPILER_VERSION__
588typedef unsigned int mode_t;
601#define stat(a, b) _stat(a, b)
603#define __S_IFMT 0170000
605#define __S_IFDIR 0040000
606#define __S_IFCHR 0020000
607#define __S_IFREG 0100000
609#define __S_ISTYPE(mode, mask) (((mode) &__S_IFMT) == (mask))
611#define S_IFDIR __S_IFDIR
612#define S_IFCHR __S_IFCHR
613#define S_IFREG __S_IFREG
614#define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR)
615#define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG)
618#define va_copy(apc, ap) ((apc) = (ap))
629#ifndef CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_
630#define CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_
633#if defined(MG_SOCKET_SIMPLELINK) && !defined(__SIMPLELINK_H__)
637#ifndef __TI_COMPILER_VERSION__
649#define PROVISIONING_API_H_
650#include <simplelink/user.h>
651#undef PROVISIONING_API_H_
652#undef SL_INC_STD_BSD_API_NAMING
654#include <simplelink/include/simplelink.h>
658#define AF_INET SL_AF_INET
660#define socklen_t SlSocklen_t
661#define sockaddr SlSockAddr_t
662#define sockaddr_in SlSockAddrIn_t
663#define in_addr SlInAddr_t
665#define SOCK_STREAM SL_SOCK_STREAM
666#define SOCK_DGRAM SL_SOCK_DGRAM
668#define FD_SET SL_FD_SET
669#define FD_CLR SL_FD_CLR
670#define FD_ISSET SL_FD_ISSET
671#define FD_ZERO SL_FD_ZERO
672#define fd_set SlFdSet_t
674#define htonl sl_Htonl
675#define ntohl sl_Ntohl
676#define htons sl_Htons
677#define ntohs sl_Ntohs
679#define accept sl_Accept
680#define closesocket sl_Close
682#define connect sl_Connect
683#define listen sl_Listen
685#define recvfrom sl_RecvFrom
687#define sendto sl_SendTo
688#define socket sl_Socket
690#define select(nfds, rfds, wfds, efds, tout) \
691 sl_Select((nfds), (rfds), (wfds), (efds), (struct SlTimeval_t *)(tout))
694#define EACCES SL_EACCES
697#define EAFNOSUPPORT SL_EAFNOSUPPORT
700#define EAGAIN SL_EAGAIN
703#define EBADF SL_EBADF
706#define EINVAL SL_EINVAL
709#define ENOMEM SL_ENOMEM
712#define EWOULDBLOCK SL_EWOULDBLOCK
738#ifndef CS_COMMON_CS_DBG_H_
739#define CS_COMMON_CS_DBG_H_
755#ifndef CS_DISABLE_STDIO
766 if (cs_log_level >= l) { \
767 cs_log_print_prefix(__func__); \
774 if (cs_log_level >= LL_VERBOSE_DEBUG) { \
775 cs_log_print_prefix(__func__); \
798#ifndef CS_COMMON_CS_TIME_H_
799#define CS_COMMON_CS_TIME_H_
819#ifndef CS_COMMON_MBUF_H_
820#define CS_COMMON_MBUF_H_
822#if defined(__cplusplus)
828#ifndef MBUF_SIZE_MULTIPLIER
829#define MBUF_SIZE_MULTIPLIER 1.5
878#if defined(__cplusplus)
888#ifndef CS_COMMON_SHA1_H_
889#define CS_COMMON_SHA1_H_
901 unsigned char buffer[64];
908 const unsigned char *text,
size_t text_len,
909 unsigned char out[20]);
922#ifndef CS_COMMON_MD5_H_
923#define CS_COMMON_MD5_H_
933 unsigned char in[64];
947char *
cs_md5(
char buf[33], ...);
954void cs_to_hex(
char *
to,
const unsigned char *p,
size_t len);
966#ifndef CS_COMMON_BASE64_H_
967#define CS_COMMON_BASE64_H_
969#ifndef DISABLE_BASE64
1008#ifndef CS_COMMON_STR_UTIL_H_
1009#define CS_COMMON_STR_UTIL_H_
1019int c_snprintf(
char *buf,
size_t buf_size,
const char *format, ...);
1051#ifndef CS_MONGOOSE_DEPS_FROZEN_FROZEN_H_
1052#define CS_MONGOOSE_DEPS_FROZEN_FROZEN_H_
1079#define JSON_STRING_INVALID -1
1080#define JSON_STRING_INCOMPLETE -2
1081#define JSON_TOKEN_ARRAY_TOO_SMALL -3
1105#ifndef CS_COMMON_CS_DIRENT_H_
1106#define CS_COMMON_CS_DIRENT_H_
1108#ifdef CS_ENABLE_SPIFFS
1118#define dirent spiffs_dirent
1120int rmdir(
const char *path);
1125#if defined(_WIN32) || defined(CS_ENABLE_SPIFFS)
1159#ifndef CS_MONGOOSE_SRC_NET_H_
1160#define CS_MONGOOSE_SRC_NET_H_
1162#ifdef MG_ENABLE_JAVASCRIPT
1163#define EXCLUDE_COMMON
1170#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
1172#include <openssl/ssl.h>
1178#ifndef MG_VPRINTF_BUFFER_SIZE
1179#define MG_VPRINTF_BUFFER_SIZE 100
1182#ifdef MG_USE_READ_WRITE
1183#define MG_RECV_FUNC(s, b, l, f) read(s, b, l)
1184#define MG_SEND_FUNC(s, b, l, f) write(s, b, l)
1186#define MG_RECV_FUNC(s, b, l, f) recv(s, b, l, f)
1187#define MG_SEND_FUNC(s, b, l, f) send(s, b, l, f)
1197#ifdef MG_ENABLE_IPV6
1220#define MG_EV_ACCEPT 1
1221#define MG_EV_CONNECT 2
1224#define MG_EV_CLOSE 5
1225#define MG_EV_TIMER 6
1233#ifndef MG_DISABLE_SOCKETPAIR
1238#ifdef MG_ENABLE_JAVASCRIPT
1278#define MG_F_LISTENING (1 << 0)
1279#define MG_F_UDP (1 << 1)
1280#define MG_F_RESOLVING (1 << 2)
1281#define MG_F_CONNECTING (1 << 3)
1282#define MG_F_SSL_HANDSHAKE_DONE (1 << 4)
1283#define MG_F_WANT_READ (1 << 5)
1284#define MG_F_WANT_WRITE (1 << 6)
1285#define MG_F_IS_WEBSOCKET (1 << 7)
1288#define MG_F_SEND_AND_CLOSE (1 << 10)
1289#define MG_F_CLOSE_IMMEDIATELY (1 << 11)
1290#define MG_F_WEBSOCKET_NO_DEFRAG (1 << 12)
1291#define MG_F_DELETE_CHUNK (1 << 13)
1293#define MG_F_USER_1 (1 << 20)
1294#define MG_F_USER_2 (1 << 21)
1295#define MG_F_USER_3 (1 << 22)
1296#define MG_F_USER_4 (1 << 23)
1297#define MG_F_USER_5 (1 << 24)
1298#define MG_F_USER_6 (1 << 25)
1328#ifndef MG_DISABLE_SOCKETPAIR
1539#if defined(__GNUC__)
1571#ifndef MG_DISABLE_SYNC_RESOLVER
1606#ifdef MG_ENABLE_JAVASCRIPT
1658#ifndef CS_MONGOOSE_SRC_NET_IF_H_
1659#define CS_MONGOOSE_SRC_NET_IF_H_
1742#ifndef CS_MONGOOSE_SRC_URI_H_
1743#define CS_MONGOOSE_SRC_URI_H_
1775 unsigned int *port,
struct mg_str *path,
struct mg_str *query,
1793#ifndef CS_MONGOOSE_SRC_UTIL_H_
1794#define CS_MONGOOSE_SRC_UTIL_H_
1803#ifndef MAX_PATH_SIZE
1804#define MAX_PATH_SIZE 500
1859#ifndef MG_DISABLE_FILESYSTEM
1888#if defined(_WIN32) && !defined(MG_ENABLE_THREADS)
1889#define MG_ENABLE_THREADS
1892#ifdef MG_ENABLE_THREADS
1904#define MG_SOCK_STRINGIFY_IP 1
1905#define MG_SOCK_STRINGIFY_PORT 2
1906#define MG_SOCK_STRINGIFY_REMOTE 4
1922#ifndef MG_DISABLE_SOCKET_IF
2006#define MG_MK_STR(str_literal) \
2007 { str_literal, sizeof(str_literal) - 1 }
2022#ifndef CS_MONGOOSE_SRC_HTTP_H_
2023#define CS_MONGOOSE_SRC_HTTP_H_
2030#ifndef MG_MAX_HTTP_HEADERS
2031#define MG_MAX_HTTP_HEADERS 20
2034#ifndef MG_MAX_HTTP_REQUEST_SIZE
2035#define MG_MAX_HTTP_REQUEST_SIZE 1024
2040#define MG_MAX_PATH PATH_MAX
2042#define MG_MAX_PATH 256
2046#ifndef MG_MAX_HTTP_SEND_MBUF
2047#define MG_MAX_HTTP_SEND_MBUF 1024
2050#ifndef MG_WEBSOCKET_PING_INTERVAL_SECONDS
2051#define MG_WEBSOCKET_PING_INTERVAL_SECONDS 5
2054#ifndef MG_CGI_ENVIRONMENT_SIZE
2055#define MG_CGI_ENVIRONMENT_SIZE 8192
2058#ifndef MG_MAX_CGI_ENVIR_VARS
2059#define MG_MAX_CGI_ENVIR_VARS 64
2062#ifndef MG_ENV_EXPORT_TO_CGI
2063#define MG_ENV_EXPORT_TO_CGI "MONGOOSE_CGI"
2114#define MG_EV_HTTP_REQUEST 100
2115#define MG_EV_HTTP_REPLY 101
2116#define MG_EV_HTTP_CHUNK 102
2117#define MG_EV_SSI_CALL 105
2119#define MG_EV_WEBSOCKET_HANDSHAKE_REQUEST 111
2120#define MG_EV_WEBSOCKET_HANDSHAKE_DONE 112
2121#define MG_EV_WEBSOCKET_FRAME 113
2122#define MG_EV_WEBSOCKET_CONTROL_FRAME 114
2124#ifdef MG_ENABLE_HTTP_STREAMING_MULTIPART
2125#define MG_EV_HTTP_MULTIPART_REQUEST 121
2126#define MG_EV_HTTP_PART_BEGIN 122
2127#define MG_EV_HTTP_PART_DATA 123
2128#define MG_EV_HTTP_PART_END 124
2191 const char *extra_headers);
2204 const char *host,
const char *
protocol,
2205 const char *extra_headers);
2230 const char *extra_headers);
2242 const char *extra_headers);
2280 const char *fmt, ...);
2322 const char *extra_headers);
2346#define WEBSOCKET_OP_CONTINUE 0
2347#define WEBSOCKET_OP_TEXT 1
2348#define WEBSOCKET_OP_BINARY 2
2349#define WEBSOCKET_OP_CLOSE 8
2350#define WEBSOCKET_OP_PING 9
2351#define WEBSOCKET_OP_PONG 10
2365#define WEBSOCKET_DONT_FIN 0x100
2470 const char *method,
const char *uri,
2471 const char *auth_domain,
const char *user,
2501 const char *extra_headers,
2514 const char *extra_headers,
2668#ifdef MG_ENABLE_HTTP_STREAMING_MULTIPART
2722#ifndef CS_MONGOOSE_SRC_JSON_RPC_H_
2723#define CS_MONGOOSE_SRC_JSON_RPC_H_
2781 const char *
id,
const char *
params_fmt, ...);
2803 int code,
const char *
message,
const char *fmt, ...);
2806#define JSON_RPC_PARSE_ERROR (-32700)
2807#define JSON_RPC_INVALID_REQUEST_ERROR (-32600)
2808#define JSON_RPC_METHOD_NOT_FOUND_ERROR (-32601)
2809#define JSON_RPC_INVALID_PARAMS_ERROR (-32602)
2810#define JSON_RPC_INTERNAL_ERROR (-32603)
2811#define JSON_RPC_SERVER_ERROR (-32000)
2872#ifndef CS_MONGOOSE_SRC_MQTT_H_
2873#define CS_MONGOOSE_SRC_MQTT_H_
2900#define MG_MQTT_CMD_CONNECT 1
2901#define MG_MQTT_CMD_CONNACK 2
2902#define MG_MQTT_CMD_PUBLISH 3
2903#define MG_MQTT_CMD_PUBACK 4
2904#define MG_MQTT_CMD_PUBREC 5
2905#define MG_MQTT_CMD_PUBREL 6
2906#define MG_MQTT_CMD_PUBCOMP 7
2907#define MG_MQTT_CMD_SUBSCRIBE 8
2908#define MG_MQTT_CMD_SUBACK 9
2909#define MG_MQTT_CMD_UNSUBSCRIBE 10
2910#define MG_MQTT_CMD_UNSUBACK 11
2911#define MG_MQTT_CMD_PINGREQ 12
2912#define MG_MQTT_CMD_PINGRESP 13
2913#define MG_MQTT_CMD_DISCONNECT 14
2916#define MG_MQTT_EVENT_BASE 200
2917#define MG_EV_MQTT_CONNECT (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_CONNECT)
2918#define MG_EV_MQTT_CONNACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_CONNACK)
2919#define MG_EV_MQTT_PUBLISH (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBLISH)
2920#define MG_EV_MQTT_PUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBACK)
2921#define MG_EV_MQTT_PUBREC (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBREC)
2922#define MG_EV_MQTT_PUBREL (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBREL)
2923#define MG_EV_MQTT_PUBCOMP (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBCOMP)
2924#define MG_EV_MQTT_SUBSCRIBE (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_SUBSCRIBE)
2925#define MG_EV_MQTT_SUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_SUBACK)
2926#define MG_EV_MQTT_UNSUBSCRIBE (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_UNSUBSCRIBE)
2927#define MG_EV_MQTT_UNSUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_UNSUBACK)
2928#define MG_EV_MQTT_PINGREQ (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PINGREQ)
2929#define MG_EV_MQTT_PINGRESP (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PINGRESP)
2930#define MG_EV_MQTT_DISCONNECT (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_DISCONNECT)
2933#define MG_MQTT_RETAIN 0x1
2934#define MG_MQTT_DUP 0x4
2935#define MG_MQTT_QOS(qos) ((qos) << 1)
2936#define MG_MQTT_GET_QOS(flags) (((flags) &0x6) >> 1)
2937#define MG_MQTT_SET_QOS(flags, qos) (flags) = ((flags) & ~0x6) | ((qos) << 1)
2940#define MG_MQTT_CLEAN_SESSION 0x02
2941#define MG_MQTT_HAS_WILL 0x04
2942#define MG_MQTT_WILL_RETAIN 0x20
2943#define MG_MQTT_HAS_PASSWORD 0x40
2944#define MG_MQTT_HAS_USER_NAME 0x80
2945#define MG_MQTT_GET_WILL_QOS(flags) (((flags) &0x18) >> 3)
2946#define MG_MQTT_SET_WILL_QOS(flags, qos) \
2947 (flags) = ((flags) & ~0x18) | ((qos) << 3)
2950#define MG_EV_MQTT_CONNACK_ACCEPTED 0
2951#define MG_EV_MQTT_CONNACK_UNACCEPTABLE_VERSION 1
2952#define MG_EV_MQTT_CONNACK_IDENTIFIER_REJECTED 2
2953#define MG_EV_MQTT_CONNACK_SERVER_UNAVAILABLE 3
2954#define MG_EV_MQTT_CONNACK_BAD_AUTH 4
2955#define MG_EV_MQTT_CONNACK_NOT_AUTHORIZED 5
3067#ifndef CS_MONGOOSE_SRC_MQTT_BROKER_H_
3068#define CS_MONGOOSE_SRC_MQTT_BROKER_H_
3070#ifdef MG_ENABLE_MQTT_BROKER
3077#define MG_MQTT_MAX_SESSION_SUBSCRIPTIONS 512;
3155#ifndef CS_MONGOOSE_SRC_DNS_H_
3156#define CS_MONGOOSE_SRC_DNS_H_
3163#define MG_DNS_A_RECORD 0x01
3164#define MG_DNS_CNAME_RECORD 0x05
3165#define MG_DNS_AAAA_RECORD 0x1c
3166#define MG_DNS_MX_RECORD 0x0f
3168#define MG_MAX_DNS_QUESTIONS 32
3169#define MG_MAX_DNS_ANSWERS 32
3171#define MG_DNS_MESSAGE 100
3310#ifndef CS_MONGOOSE_SRC_DNS_SERVER_H_
3311#define CS_MONGOOSE_SRC_DNS_SERVER_H_
3313#ifdef MG_ENABLE_DNS_SERVER
3320#define MG_DNS_SERVER_DEFAULT_TTL 3600
3369 const char *
name,
int rtype,
int ttl,
const void *rdata,
3401#ifndef CS_MONGOOSE_SRC_RESOLV_H_
3402#define CS_MONGOOSE_SRC_RESOLV_H_
3500#ifndef CS_MONGOOSE_SRC_COAP_H_
3501#define CS_MONGOOSE_SRC_COAP_H_
3503#ifdef MG_ENABLE_COAP
3505#define MG_COAP_MSG_TYPE_FIELD 0x2
3506#define MG_COAP_CODE_CLASS_FIELD 0x4
3507#define MG_COAP_CODE_DETAIL_FIELD 0x8
3508#define MG_COAP_MSG_ID_FIELD 0x10
3509#define MG_COAP_TOKEN_FIELD 0x20
3510#define MG_COAP_OPTIOMG_FIELD 0x40
3511#define MG_COAP_PAYLOAD_FIELD 0x80
3513#define MG_COAP_ERROR 0x10000
3514#define MG_COAP_FORMAT_ERROR (MG_COAP_ERROR | 0x20000)
3515#define MG_COAP_IGNORE (MG_COAP_ERROR | 0x40000)
3516#define MG_COAP_NOT_ENOUGH_DATA (MG_COAP_ERROR | 0x80000)
3517#define MG_COAP_NETWORK_ERROR (MG_COAP_ERROR | 0x100000)
3519#define MG_COAP_MSG_CON 0
3520#define MG_COAP_MSG_NOC 1
3521#define MG_COAP_MSG_ACK 2
3522#define MG_COAP_MSG_RST 3
3523#define MG_COAP_MSG_MAX 3
3525#define MG_COAP_CODECLASS_REQUEST 0
3526#define MG_COAP_CODECLASS_RESP_OK 2
3527#define MG_COAP_CODECLASS_CLIENT_ERR 4
3528#define MG_COAP_CODECLASS_SRV_ERR 5
3530#define MG_COAP_EVENT_BASE 300
3531#define MG_EV_COAP_CON (MG_COAP_EVENT_BASE + MG_COAP_MSG_CON)
3532#define MG_EV_COAP_NOC (MG_COAP_EVENT_BASE + MG_COAP_MSG_NOC)
3533#define MG_EV_COAP_ACK (MG_COAP_EVENT_BASE + MG_COAP_MSG_ACK)
3534#define MG_EV_COAP_RST (MG_COAP_EVENT_BASE + MG_COAP_MSG_RST)
int mg_start_thread(mg_thread_func_t f, void *p)
int(* mg_event_handler_t)(struct mg_event *event)
time_t mg_mgr_poll(struct mg_mgr *, int milli)
void mg_mqtt_ping(struct mg_connection *nc)
void MD5_Init(MD5_CTX *c)
void mg_set_protocol_mqtt(struct mg_connection *nc)
void mg_mgr_free(struct mg_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)
char * cs_md5(char buf[33],...)
struct json_token * message
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)
void mg_if_get_conn_addr(struct mg_connection *nc, int remote, union socket_address *sa)
struct mg_str header_names[MG_MAX_HTTP_HEADERS]
int mg_avprintf(char **buf, size_t size, const char *fmt, va_list ap)
int c_vsnprintf(char *buf, size_t buf_size, const char *format, va_list ap)
void mg_if_destroy_conn(struct mg_connection *nc)
const char * will_message
int mg_dns_copy_body(struct mbuf *io, struct mg_dns_message *msg)
int mg_stat(const char *path, cs_stat_t *st)
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)
int json_emit_long(char *buf, int buf_len, long value)
const char * global_auth_file
void MD5_Final(unsigned char *md, MD5_CTX *c)
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
struct json_token * message
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 mg_if_tcp_send(struct mg_connection *nc, const void *buf, size_t len)
void(* proto_data_destructor)(void *proto_data)
struct mg_connection * mg_next(struct mg_mgr *, struct mg_connection *)
int mg_resolve_async(struct mg_mgr *mgr, const char *name, int query, mg_resolve_callback_t cb, void *data)
void mg_if_connect_udp(struct mg_connection *nc)
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)
int json_emit_unquoted_str(char *buf, int buf_len, const char *str, int len)
void mg_send_response_line(struct mg_connection *c, 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
void mg_if_poll(struct mg_connection *nc, time_t now)
int mg_open(const char *path, int flag, int mode)
struct json_token * method
double mg_set_timer(struct mg_connection *c, double timestamp)
struct mg_connection * mg_connect(struct mg_mgr *mgr, const char *address, mg_event_handler_t handler)
void mg_conn_addr_to_str(struct mg_connection *nc, char *buf, size_t len, int flags)
void(* mg_event_handler_t)(struct mg_connection *, int ev, void *)
struct json_token * message
struct json_token * error_message
int mg_parse_http(const char *s, int n, struct http_message *hm, int is_req)
int 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_if_recv_tcp_cb(struct mg_connection *nc, void *buf, int len)
void mg_printf_html_escape(struct mg_connection *nc, const char *fmt,...)
cs_base64_putc_t b64_putc
void mg_if_sent_cb(struct mg_connection *nc, int num_sent)
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)
int mg_if_create_conn(struct mg_connection *nc)
void mg_send(struct mg_connection *, const void *buf, int len)
int mg_socketpair(sock_t[2], int sock_type)
int mg_rpc_create_error(char *buf, int len, struct mg_rpc_request *req, int code, const char *message, const char *fmt,...)
struct mg_connection * next
void mg_send_http_chunk(struct mg_connection *nc, const char *buf, size_t len)
int json_emit_double(char *buf, int buf_len, double value)
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
struct json_token * result
void mg_if_connect_cb(struct mg_connection *nc, int err)
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)
struct mg_connection * mg_add_sock_opt(struct mg_mgr *, sock_t, mg_event_handler_t, struct mg_add_sock_opts)
int mg_if_listen_udp(struct mg_connection *nc, union socket_address *sa)
void mg_sock_set(struct mg_connection *nc, sock_t sock)
void mg_send_websocket_handshake2(struct mg_connection *nc, const char *path, const char *host, const char *protocol, const char *extra_headers)
void mg_if_udp_send(struct mg_connection *nc, const void *buf, size_t len)
int(* mg_rpc_handler_t)(char *buf, int len, struct mg_rpc_request *req)
void cs_base64_finish(struct cs_base64_ctx *ctx)
int mg_if_listen_tcp(struct mg_connection *nc, union socket_address *sa)
struct mg_connection * mg_connect_opt(struct mg_mgr *mgr, const char *address, mg_event_handler_t handler, struct mg_connect_opts opts)
void mg_register_http_endpoint(struct mg_connection *nc, const char *uri_path, mg_event_handler_t handler)
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]
void cs_log_set_level(enum cs_log_level level)
void MD5_Update(MD5_CTX *c, const unsigned char *data, size_t len)
int parse_json(const char *json_string, int json_string_length, struct json_token *tokens_array, int size_of_tokens_array)
int cs_base64_decode(const unsigned char *s, int len, char *dst)
const char * enable_directory_listing
size_t c_strnlen(const char *s, size_t maxlen)
int 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_url_decode(const char *src, int src_len, char *dst, int dst_len, int is_form_url_encoded)
int mg_base64_decode(const unsigned char *s, int len, char *dst)
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)
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)
void cs_log_print_prefix(const char *func)
void(* cs_base64_putc_t)(char, void *)
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)
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)
int json_emit(char *buf, int buf_len, const char *fmt,...)
void mg_mqtt_suback(struct mg_connection *nc, uint8_t *qoss, size_t qoss_len, uint16_t message_id)
int json_emit_va(char *buf, int buf_len, const char *fmt, va_list)
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,...)
mg_dns_resource_record_kind
struct json_token * error_code
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)
struct mg_connection * mg_bind_opt(struct mg_mgr *mgr, const char *address, mg_event_handler_t handler, struct mg_bind_opts opts)
void cs_log_printf(const char *fmt,...)
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 json_emit_quoted_str(char *buf, int buf_len, const char *str, int len)
struct json_token * error_data
void 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)
struct mg_connection * mg_bind(struct mg_mgr *, const char *, mg_event_handler_t)
void(* mg_resolve_callback_t)(struct mg_dns_message *dns_message, void *user_data, enum mg_resolve_err)
struct json_token * find_json_token(struct json_token *toks, const char *path)
struct json_token * parse_json2(const char *json_string, int string_length)
void cs_sha1_final(unsigned char digest[20], cs_sha1_ctx *)
struct MD5Context MD5_CTX
const char ** error_string
int mg_http_parse_header(struct mg_str *hdr, const char *var_name, char *buf, size_t buf_size)
int mg_rpc_parse_reply(const char *buf, int len, struct json_token *toks, int max_toks, struct mg_rpc_reply *, struct mg_rpc_error *)
struct mg_str mg_mk_str(const char *s)
const char ** error_string
int mg_rpc_create_request(char *buf, int len, const char *method, const char *id, const char *params_fmt,...)
void cs_base64_encode(const unsigned char *src, int src_len, char *dst)
int mg_rpc_create_std_error(char *buf, int len, struct mg_rpc_request *req, int code)
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,...)
void mg_if_connect_tcp(struct mg_connection *nc, const union socket_address *sa)
const char * mg_next_comma_list_entry(const char *list, struct mg_str *val, struct mg_str *eq_val)
struct json_token * params
size_t mg_dns_uncompress_name(struct mg_dns_message *msg, struct mg_str *name, char *dst, int dst_len)
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)
const char * nameserver_url
void mbuf_trim(struct mbuf *)
FILE * mg_fopen(const char *path, const char *mode)
void mg_enable_multithreading(struct mg_connection *nc)
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)
void mg_if_recved(struct mg_connection *nc, size_t len)
int mg_vcmp(const struct mg_str *str2, const char *str1)
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)
int mg_check_ip_acl(const char *acl, uint32_t remote_ip)
struct mg_dns_resource_record answers[MG_MAX_DNS_ANSWERS]
void mg_if_timer(struct mg_connection *c, double now)
mg_event_handler_t proto_handler
const char * dav_document_root
void mg_close_conn(struct mg_connection *nc)
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)
int mg_rpc_dispatch(const char *buf, int, char *dst, int dst_len, const char **methods, mg_rpc_handler_t *handlers)
struct mg_connection * mg_add_sock(struct mg_mgr *, sock_t, mg_event_handler_t)
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)
int mg_rpc_create_reply(char *buf, int len, const struct mg_rpc_request *req, const char *result_fmt,...)
void mg_mqtt_pubrel(struct mg_connection *nc, uint16_t message_id)
void cs_log_set_file(FILE *file)
int mg_mqtt_next_subscribe_topic(struct mg_mqtt_message *msg, struct mg_str *topic, uint8_t *qos, int pos)
@ MG_RESOLVE_EXCEEDED_RETRY_COUNT
#define message(type, str)
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 MG_MAX_HTTP_HEADERS
#define MG_MAX_DNS_ANSWERS
#define MG_MAX_DNS_QUESTIONS
void(* cs_base64_putc_t)(char, void *)
mg_dns_resource_record_kind
int gettimeofday(struct timeval *tp, void *tzp)
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
static te_expr * list(state *s)