20 #ifndef CS_MONGOOSE_SRC_COMMON_H_ 21 #define CS_MONGOOSE_SRC_COMMON_H_ 23 #define MG_VERSION "6.4" 27 #include <mg_locals.h> 30 #if defined(MG_ENABLE_DEBUG) && !defined(CS_ENABLE_DEBUG) 31 #define CS_ENABLE_DEBUG 33 #if defined(MG_DISABLE_STDIO) && !defined(CS_DISABLE_STDIO) 34 #define CS_DISABLE_STDIO 35 #elif defined(CS_DISABLE_STDIO) && !defined(MG_DISABLE_STDIO) 36 #define MG_DISABLE_STDIO 40 #ifdef MG_DISABLE_FILESYSTEM 41 #ifndef MG_DISABLE_DAV 42 #define MG_DISABLE_DAV 44 #ifndef MG_DISABLE_CGI 45 #define MG_DISABLE_CGI 47 #ifndef MG_DISABLE_DIRECTORY_LISTING 48 #define MG_DISABLE_DIRECTORY_LISTING 50 #ifndef MG_DISABLE_DAV 51 #define MG_DISABLE_DAV 55 #ifdef MG_NO_BSD_SOCKETS 56 #ifndef MG_DISABLE_SYNC_RESOLVER 57 #define MG_DISABLE_SYNC_RESOLVER 59 #ifndef MG_DISABLE_SOCKETPAIR 60 #define MG_DISABLE_SOCKETPAIR 66 #ifndef CS_COMMON_PLATFORM_H_ 67 #define CS_COMMON_PLATFORM_H_ 75 #define CS_P_WINDOWS 2 76 #define CS_P_ESP_LWIP 3 83 #if defined(TARGET_IS_MSP432P4XX) || defined(__MSP432P401R__) 85 #define CS_PLATFORM CS_P_MSP432 87 #define CS_PLATFORM CS_P_CC3200 88 #elif defined(__unix__) || defined(__APPLE__) 89 #define CS_PLATFORM CS_P_UNIX 91 #define CS_PLATFORM CS_P_WINDOWS 95 #error "CS_PLATFORM is not specified and we couldn't guess it." 104 #define NORETURN __attribute__((noreturn)) 105 #define UNUSED __attribute__((unused)) 106 #define NOINLINE __attribute__((noinline)) 107 #define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 112 #define WARN_UNUSED_RESULT 116 #define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) 120 #ifndef CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_ 121 #define CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_ 122 #if CS_PLATFORM == CS_P_WINDOWS 137 #pragma warning(disable : 4127) 138 #pragma warning(disable : 4204) 151 #include <sys/stat.h> 154 #define random() rand() 156 #pragma comment(lib, "ws2_32.lib") 159 #include <winsock2.h> 160 #include <ws2tcpip.h> 165 #define EINPROGRESS WSAEINPROGRESS 168 #define EWOULDBLOCK WSAEWOULDBLOCK 172 #define STR(x) STRX(x) 173 #define __func__ __FILE__ ":" STR(__LINE__) 175 #define snprintf _snprintf 176 #define fileno _fileno 177 #define vsnprintf _vsnprintf 178 #define sleep(x) Sleep((x) *1000) 179 #define to64(x) _atoi64(x) 180 #define popen(x, y) _popen((x), (y)) 181 #define pclose(x) _pclose(x) 183 #if defined(_MSC_VER) && _MSC_VER >= 1400 184 #define fseeko(x, y, z) _fseeki64((x), (y), (z)) 186 #define fseeko(x, y, z) fseek((x), (y), (z)) 188 #define random() rand() 189 typedef int socklen_t;
190 typedef signed char int8_t;
191 typedef unsigned char uint8_t;
193 typedef unsigned int uint32_t;
194 typedef short int16_t;
195 typedef unsigned short uint16_t;
196 typedef __int64 int64_t;
197 typedef unsigned __int64 uint64_t;
198 typedef SOCKET sock_t;
199 typedef uint32_t in_addr_t;
201 #define UINT16_MAX 65535 204 #define UINT32_MAX 4294967295 209 #define INT64_FMT "I64d" 210 #define INT64_X_FMT "I64x" 211 #define SIZE_T_FMT "Iu" 213 typedef struct stat cs_stat_t;
215 typedef struct _stati64 cs_stat_t;
218 #define S_ISDIR(x) (((x) &_S_IFMT) == _S_IFDIR) 221 #define S_ISREG(x) (((x) &_S_IFMT) == _S_IFREG) 227 char d_name[MAX_PATH];
232 WIN32_FIND_DATAW info;
233 struct dirent result;
236 DIR *opendir(
const char *name);
237 int closedir(DIR *dir);
238 struct dirent *readdir(DIR *dir);
242 #define va_copy __va_copy 244 #define va_copy(x, y) (x) = (y) 248 #ifndef MG_MAX_HTTP_REQUEST_SIZE 249 #define MG_MAX_HTTP_REQUEST_SIZE 8192 252 #ifndef MG_MAX_HTTP_SEND_MBUF 253 #define MG_MAX_HTTP_SEND_MBUF 4096 256 #ifndef MG_MAX_HTTP_HEADERS 257 #define MG_MAX_HTTP_HEADERS 40 262 #ifndef CS_COMMON_PLATFORMS_PLATFORM_UNIX_H_ 263 #define CS_COMMON_PLATFORMS_PLATFORM_UNIX_H_ 264 #if CS_PLATFORM == CS_P_UNIX 266 #ifndef _XOPEN_SOURCE 267 #define _XOPEN_SOURCE 600 271 #ifndef __STDC_FORMAT_MACROS 272 #define __STDC_FORMAT_MACROS 276 #ifndef __STDC_LIMIT_MACROS 277 #define __STDC_LIMIT_MACROS 281 #ifndef _LARGEFILE_SOURCE 282 #define _LARGEFILE_SOURCE 286 #ifndef _FILE_OFFSET_BITS 287 #define _FILE_OFFSET_BITS 64 290 #include <arpa/inet.h> 296 #include <inttypes.h> 300 #include <netinet/in.h> 307 #include <sys/socket.h> 308 #include <sys/select.h> 309 #include <sys/stat.h> 310 #include <sys/time.h> 311 #include <sys/types.h> 319 #if !(defined(__DARWIN_C_LEVEL) && __DARWIN_C_LEVEL >= 200809L) 320 long long strtoll(
const char *,
char **,
int);
324 #define INVALID_SOCKET (-1) 325 #define SIZE_T_FMT "zu" 326 typedef struct stat cs_stat_t;
328 #define to64(x) strtoll(x, NULL, 10) 329 #define INT64_FMT PRId64 330 #define INT64_X_FMT PRIx64 335 #define va_copy __va_copy 337 #define va_copy(x, y) (x) = (y) 341 #define closesocket(x) close(x) 343 #ifndef MG_MAX_HTTP_REQUEST_SIZE 344 #define MG_MAX_HTTP_REQUEST_SIZE 8192 347 #ifndef MG_MAX_HTTP_SEND_MBUF 348 #define MG_MAX_HTTP_SEND_MBUF 4096 351 #ifndef MG_MAX_HTTP_HEADERS 352 #define MG_MAX_HTTP_HEADERS 40 357 #ifndef CS_COMMON_PLATFORMS_PLATFORM_ESP_LWIP_H_ 358 #define CS_COMMON_PLATFORMS_PLATFORM_ESP_LWIP_H_ 359 #if CS_PLATFORM == CS_P_ESP_LWIP 364 #include <inttypes.h> 366 #include <sys/stat.h> 367 #include <sys/time.h> 369 #include <lwip/err.h> 370 #include <lwip/ip_addr.h> 371 #include <lwip/inet.h> 372 #include <lwip/netdb.h> 373 #include <lwip/dns.h> 375 #ifndef LWIP_PROVIDE_ERRNO 379 #define LWIP_TIMEVAL_PRIVATE 0 382 #include <lwip/sockets.h> 387 #define LWIP_SOCKET 1 388 #include <lwip/sockets.h> 390 #define LWIP_SOCKET 0 394 #define INVALID_SOCKET (-1) 395 #define SIZE_T_FMT "u" 396 typedef struct stat cs_stat_t;
398 #define to64(x) strtoll(x, NULL, 10) 399 #define INT64_FMT PRId64 400 #define INT64_X_FMT PRIx64 403 unsigned long os_random(
void);
404 #define random os_random 413 #ifndef CS_COMMON_PLATFORMS_PLATFORM_CC3200_H_ 414 #define CS_COMMON_PLATFORMS_PLATFORM_CC3200_H_ 415 #if CS_PLATFORM == CS_P_CC3200 420 #include <inttypes.h> 425 #ifndef __TI_COMPILER_VERSION__ 427 #include <sys/time.h> 430 #define MG_SOCKET_SIMPLELINK 1 431 #define MG_DISABLE_SOCKETPAIR 1 432 #define MG_DISABLE_SYNC_RESOLVER 1 433 #define MG_DISABLE_POPEN 1 434 #define MG_DISABLE_CGI 1 436 #ifndef CC3200_FS_SPIFFS 437 #define MG_DISABLE_DAV 1 438 #define MG_DISABLE_DIRECTORY_LISTING 1 443 #define INVALID_SOCKET (-1) 444 #define SIZE_T_FMT "u" 445 typedef struct stat cs_stat_t;
447 #define to64(x) strtoll(x, NULL, 10) 448 #define INT64_FMT PRId64 449 #define INT64_X_FMT PRIx64 456 #ifdef __TI_COMPILER_VERSION__ 458 #define timeval SlTimeval_t 459 int gettimeofday(
struct timeval *t,
void *tz);
462 long int random(
void);
465 #ifdef __TI_COMPILER_VERSION__ 469 typedef unsigned int mode_t;
470 typedef size_t _off_t;
471 typedef long ssize_t;
481 int _stat(
const char *pathname,
struct stat *st);
482 #define stat(a, b) _stat(a, b) 484 #define __S_IFMT 0170000 486 #define __S_IFDIR 0040000 487 #define __S_IFCHR 0020000 488 #define __S_IFREG 0100000 490 #define __S_ISTYPE(mode, mask) (((mode) &__S_IFMT) == (mask)) 492 #define S_IFDIR __S_IFDIR 493 #define S_IFCHR __S_IFCHR 494 #define S_IFREG __S_IFREG 495 #define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR) 496 #define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG) 499 #define va_copy(apc, ap) ((apc) = (ap)) 503 #ifdef CC3200_FS_SPIFFS 504 #include <common/spiffs/spiffs.h> 508 struct spiffs_dirent de;
512 #define dirent spiffs_dirent 514 DIR *opendir(
const char *dir_name);
515 int closedir(DIR *dir);
516 struct dirent *readdir(DIR *dir);
519 #ifdef CC3200_FS_SLFS 530 #ifndef CS_COMMON_PLATFORMS_PLATFORM_MSP432_H_ 531 #define CS_COMMON_PLATFORMS_PLATFORM_MSP432_H_ 532 #if CS_PLATFORM == CS_P_MSP432 537 #include <inttypes.h> 542 #ifndef __TI_COMPILER_VERSION__ 544 #include <sys/time.h> 547 #define MG_SOCKET_SIMPLELINK 1 548 #define MG_DISABLE_SOCKETPAIR 1 549 #define MG_DISABLE_SYNC_RESOLVER 1 550 #define MG_DISABLE_POPEN 1 551 #define MG_DISABLE_CGI 1 552 #define MG_DISABLE_DAV 1 553 #define MG_DISABLE_DIRECTORY_LISTING 1 557 #define INVALID_SOCKET (-1) 558 #define SIZE_T_FMT "u" 559 typedef struct stat cs_stat_t;
561 #define to64(x) strtoll(x, NULL, 10) 562 #define INT64_FMT PRId64 563 #define INT64_X_FMT PRIx64 570 #ifdef __TI_COMPILER_VERSION__ 572 #define timeval SlTimeval_t 573 int gettimeofday(
struct timeval *t,
void *tz);
576 long int random(
void);
579 #ifdef __TI_COMPILER_VERSION__ 583 typedef unsigned int mode_t;
584 typedef size_t _off_t;
585 typedef long ssize_t;
595 int _stat(
const char *pathname,
struct stat *st);
596 #define stat(a, b) _stat(a, b) 598 #define __S_IFMT 0170000 600 #define __S_IFDIR 0040000 601 #define __S_IFCHR 0020000 602 #define __S_IFREG 0100000 604 #define __S_ISTYPE(mode, mask) (((mode) &__S_IFMT) == (mask)) 606 #define S_IFDIR __S_IFDIR 607 #define S_IFCHR __S_IFCHR 608 #define S_IFREG __S_IFREG 609 #define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR) 610 #define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG) 613 #define va_copy(apc, ap) ((apc) = (ap)) 624 #ifndef CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_ 625 #define CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_ 628 #if defined(MG_SOCKET_SIMPLELINK) && !defined(__SIMPLELINK_H__) 632 #ifndef __TI_COMPILER_VERSION__ 644 #define PROVISIONING_API_H_ 645 #include <simplelink/user.h> 646 #undef PROVISIONING_API_H_ 647 #undef SL_INC_STD_BSD_API_NAMING 649 #include <simplelink/include/simplelink.h> 653 #define AF_INET SL_AF_INET 655 #define socklen_t SlSocklen_t 656 #define sockaddr SlSockAddr_t 657 #define sockaddr_in SlSockAddrIn_t 658 #define in_addr SlInAddr_t 660 #define SOCK_STREAM SL_SOCK_STREAM 661 #define SOCK_DGRAM SL_SOCK_DGRAM 663 #define FD_SET SL_FD_SET 664 #define FD_CLR SL_FD_CLR 665 #define FD_ISSET SL_FD_ISSET 666 #define FD_ZERO SL_FD_ZERO 667 #define fd_set SlFdSet_t 669 #define htonl sl_Htonl 670 #define ntohl sl_Ntohl 671 #define htons sl_Htons 672 #define ntohs sl_Ntohs 674 #define accept sl_Accept 675 #define closesocket sl_Close 677 #define connect sl_Connect 678 #define listen sl_Listen 680 #define recvfrom sl_RecvFrom 682 #define sendto sl_SendTo 683 #define socket sl_Socket 685 #define select(nfds, rfds, wfds, efds, tout) \ 686 sl_Select((nfds), (rfds), (wfds), (efds), (struct SlTimeval_t *)(tout)) 689 #define EACCES SL_EACCES 692 #define EAFNOSUPPORT SL_EAFNOSUPPORT 695 #define EAGAIN SL_EAGAIN 698 #define EBADF SL_EBADF 701 #define EINVAL SL_EINVAL 704 #define ENOMEM SL_ENOMEM 707 #define EWOULDBLOCK SL_EWOULDBLOCK 712 const char *inet_ntop(
int af,
const void *src,
char *dst, socklen_t size);
713 char *inet_ntoa(
struct in_addr in);
714 int inet_pton(
int af,
const char *src,
void *dst);
718 typedef void (*mg_init_cb)(
struct mg_mgr *mgr);
719 bool mg_start_task(
int priority,
int stack_size, mg_init_cb mg_init);
721 void mg_run_in_task(
void (*cb)(
struct mg_mgr *mgr,
void *arg),
void *cb_arg);
733 #ifndef CS_COMMON_CS_DBG_H_ 734 #define CS_COMMON_CS_DBG_H_ 742 LL_VERBOSE_DEBUG = 4,
748 void cs_log_set_level(
enum cs_log_level level);
750 #ifndef CS_DISABLE_STDIO 754 void cs_log_set_file(FILE *file);
756 extern enum cs_log_level cs_log_level;
757 void cs_log_print_prefix(
const char *func);
758 void cs_log_printf(
const char *fmt, ...);
761 if (cs_log_level >= l) { \ 762 cs_log_print_prefix(__func__); \ 769 if (cs_log_level >= LL_VERBOSE_DEBUG) { \ 770 cs_log_print_prefix(__func__); \ 793 #ifndef CS_COMMON_CS_TIME_H_ 794 #define CS_COMMON_CS_TIME_H_ 814 #ifndef CS_COMMON_MBUF_H_ 815 #define CS_COMMON_MBUF_H_ 817 #if defined(__cplusplus) 823 #ifndef MBUF_SIZE_MULTIPLIER 824 #define MBUF_SIZE_MULTIPLIER 1.5 838 void mbuf_init(
struct mbuf *,
size_t initial_capacity);
841 void mbuf_free(
struct mbuf *);
848 size_t mbuf_append(
struct mbuf *,
const void *data,
size_t data_size);
857 size_t mbuf_insert(
struct mbuf *,
size_t,
const void *,
size_t);
860 void mbuf_remove(
struct mbuf *,
size_t data_size);
868 void mbuf_resize(
struct mbuf *,
size_t new_size);
871 void mbuf_trim(
struct mbuf *);
873 #if defined(__cplusplus) 883 #ifndef CS_COMMON_SHA1_H_ 884 #define CS_COMMON_SHA1_H_ 896 unsigned char buffer[64];
900 void cs_sha1_update(
cs_sha1_ctx *,
const unsigned char *data, uint32_t len);
901 void cs_sha1_final(
unsigned char digest[20],
cs_sha1_ctx *);
902 void cs_hmac_sha1(
const unsigned char *key,
size_t key_len,
903 const unsigned char *text,
size_t text_len,
904 unsigned char out[20]);
917 #ifndef CS_COMMON_MD5_H_ 918 #define CS_COMMON_MD5_H_ 928 unsigned char in[64];
932 void MD5_Update(
MD5_CTX *c,
const unsigned char *data,
size_t len);
933 void MD5_Final(
unsigned char *md,
MD5_CTX *c);
942 char *cs_md5(
char buf[33], ...);
949 void cs_to_hex(
char *to,
const unsigned char *p,
size_t len);
961 #ifndef CS_COMMON_BASE64_H_ 962 #define CS_COMMON_BASE64_H_ 964 #ifndef DISABLE_BASE64 972 typedef void (*cs_base64_putc_t)(char,
void *);
976 cs_base64_putc_t b64_putc;
977 unsigned char chunk[3];
982 void cs_base64_init(
struct cs_base64_ctx *ctx, cs_base64_putc_t putc,
984 void cs_base64_update(
struct cs_base64_ctx *ctx,
const char *str,
size_t len);
987 void cs_base64_encode(
const unsigned char *src,
int src_len,
char *dst);
988 void cs_fprint_base64(FILE *f,
const unsigned char *src,
int src_len);
989 int cs_base64_decode(
const unsigned char *s,
int len,
char *dst);
1003 #ifndef CS_COMMON_STR_UTIL_H_ 1004 #define CS_COMMON_STR_UTIL_H_ 1013 size_t c_strnlen(
const char *s,
size_t maxlen);
1014 int c_snprintf(
char *buf,
size_t buf_size,
const char *format, ...);
1015 int c_vsnprintf(
char *buf,
size_t buf_size,
const char *format, va_list ap);
1020 const char *c_strnstr(
const char *s,
const char *find,
size_t slen);
1046 #ifndef CS_MONGOOSE_DEPS_FROZEN_FROZEN_H_ 1047 #define CS_MONGOOSE_DEPS_FROZEN_FROZEN_H_ 1057 JSON_TYPE_STRING = 1,
1058 JSON_TYPE_NUMBER = 2,
1059 JSON_TYPE_OBJECT = 3,
1061 JSON_TYPE_FALSE = 5,
1070 enum json_type type;
1074 #define JSON_STRING_INVALID -1 1075 #define JSON_STRING_INCOMPLETE -2 1076 #define JSON_TOKEN_ARRAY_TOO_SMALL -3 1078 int parse_json(
const char *json_string,
int json_string_length,
1079 struct json_token *tokens_array,
int size_of_tokens_array);
1080 struct json_token *parse_json2(
const char *json_string,
int string_length);
1083 int json_emit_long(
char *buf,
int buf_len,
long value);
1084 int json_emit_double(
char *buf,
int buf_len,
double value);
1085 int json_emit_quoted_str(
char *buf,
int buf_len,
const char *str,
int len);
1086 int json_emit_unquoted_str(
char *buf,
int buf_len,
const char *str,
int len);
1087 int json_emit(
char *buf,
int buf_len,
const char *fmt, ...);
1088 int json_emit_va(
char *buf,
int buf_len,
const char *fmt, va_list);
1100 #ifndef CS_COMMON_CS_DIRENT_H_ 1101 #define CS_COMMON_CS_DIRENT_H_ 1103 #ifdef CS_ENABLE_SPIFFS 1109 struct spiffs_dirent de;
1113 #define dirent spiffs_dirent 1115 int rmdir(
const char *path);
1116 int mkdir(
const char *path, mode_t mode);
1120 #if defined(_WIN32) || defined(CS_ENABLE_SPIFFS) 1121 DIR *opendir(
const char *dir_name);
1122 int closedir(DIR *dir);
1123 struct dirent *readdir(DIR *dir);
1154 #ifndef CS_MONGOOSE_SRC_NET_H_ 1155 #define CS_MONGOOSE_SRC_NET_H_ 1157 #ifdef MG_ENABLE_JAVASCRIPT 1158 #define EXCLUDE_COMMON 1163 #ifdef MG_ENABLE_SSL 1165 #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 1167 #include <openssl/ssl.h> 1170 typedef void *SSL_CTX;
1173 #ifndef MG_VPRINTF_BUFFER_SIZE 1174 #define MG_VPRINTF_BUFFER_SIZE 100 1177 #ifdef MG_USE_READ_WRITE 1178 #define MG_RECV_FUNC(s, b, l, f) read(s, b, l) 1179 #define MG_SEND_FUNC(s, b, l, f) write(s, b, l) 1181 #define MG_RECV_FUNC(s, b, l, f) recv(s, b, l, f) 1182 #define MG_SEND_FUNC(s, b, l, f) send(s, b, l, f) 1191 struct sockaddr_in sin;
1192 #ifdef MG_ENABLE_IPV6 1193 struct sockaddr_in6 sin6;
1195 struct sockaddr sin6;
1211 typedef void (*mg_event_handler_t)(
struct mg_connection *,
int ev,
void *);
1214 #define MG_EV_POLL 0 1215 #define MG_EV_ACCEPT 1 1216 #define MG_EV_CONNECT 2 1217 #define MG_EV_RECV 3 1218 #define MG_EV_SEND 4 1219 #define MG_EV_CLOSE 5 1220 #define MG_EV_TIMER 6 1227 const char *hexdump_file;
1228 #ifndef MG_DISABLE_SOCKETPAIR 1233 #ifdef MG_ENABLE_JAVASCRIPT 1249 size_t recv_mbuf_limit;
1250 struct mbuf recv_mbuf;
1251 struct mbuf send_mbuf;
1254 time_t last_io_time;
1255 double ev_timer_time;
1256 mg_event_handler_t proto_handler;
1258 void (*proto_data_destructor)(
void *proto_data);
1259 mg_event_handler_t handler;
1267 mg_event_handler_t f;
1271 unsigned long flags;
1273 #define MG_F_LISTENING (1 << 0) 1274 #define MG_F_UDP (1 << 1) 1275 #define MG_F_RESOLVING (1 << 2) 1276 #define MG_F_CONNECTING (1 << 3) 1277 #define MG_F_SSL_HANDSHAKE_DONE (1 << 4) 1278 #define MG_F_WANT_READ (1 << 5) 1279 #define MG_F_WANT_WRITE (1 << 6) 1280 #define MG_F_IS_WEBSOCKET (1 << 7) 1283 #define MG_F_SEND_AND_CLOSE (1 << 10) 1284 #define MG_F_CLOSE_IMMEDIATELY (1 << 11) 1285 #define MG_F_WEBSOCKET_NO_DEFRAG (1 << 12) 1286 #define MG_F_DELETE_CHUNK (1 << 13) 1288 #define MG_F_USER_1 (1 << 20) 1289 #define MG_F_USER_2 (1 << 21) 1290 #define MG_F_USER_3 (1 << 22) 1291 #define MG_F_USER_4 (1 << 23) 1292 #define MG_F_USER_5 (1 << 24) 1293 #define MG_F_USER_6 (1 << 25) 1304 void mg_mgr_init(
struct mg_mgr *mgr,
void *user_data);
1311 void mg_mgr_free(
struct mg_mgr *);
1321 time_t mg_mgr_poll(
struct mg_mgr *,
int milli);
1323 #ifndef MG_DISABLE_SOCKETPAIR 1336 void mg_broadcast(
struct mg_mgr *, mg_event_handler_t func,
void *,
size_t);
1363 const char **error_string;
1393 const char **error_string;
1394 #ifdef MG_ENABLE_SSL 1396 const char *ssl_cert;
1397 const char *ssl_ca_cert;
1407 mg_event_handler_t);
1426 mg_event_handler_t handler,
1433 const char **error_string;
1434 #ifdef MG_ENABLE_SSL 1436 const char *ssl_cert;
1437 const char *ssl_ca_cert;
1446 const char *ssl_server_name;
1456 mg_event_handler_t handler);
1507 mg_event_handler_t handler,
1521 const char *mg_set_ssl(
struct mg_connection *nc,
const char *cert,
1522 const char *ca_cert);
1531 void mg_send(
struct mg_connection *,
const void *buf,
int len);
1534 #if defined(__GNUC__) 1535 __attribute__((format(printf, 2, 3)))
1544 int mg_printf(
struct mg_connection *,
const char *fmt, ...);
1547 int mg_vprintf(
struct mg_connection *,
const char *fmt, va_list ap);
1554 int mg_socketpair(sock_t[2],
int sock_type);
1566 #ifndef MG_DISABLE_SYNC_RESOLVER 1567 int mg_resolve(
const char *domain_name,
char *ip_addr_buf,
size_t buf_len);
1590 int mg_check_ip_acl(
const char *acl, uint32_t remote_ip);
1601 #ifdef MG_ENABLE_JAVASCRIPT 1608 enum v7_err mg_enable_javascript(
struct mg_mgr *m,
struct v7 *v7,
1609 const char *init_js_file_name);
1636 double mg_set_timer(
struct mg_connection *c,
double timestamp);
1653 #ifndef CS_MONGOOSE_SRC_NET_IF_H_ 1654 #define CS_MONGOOSE_SRC_NET_IF_H_ 1691 void mg_if_tcp_send(
struct mg_connection *nc,
const void *buf,
size_t len);
1692 void mg_if_udp_send(
struct mg_connection *nc,
const void *buf,
size_t len);
1701 void mg_if_recv_tcp_cb(
struct mg_connection *nc,
void *buf,
int len);
1702 void mg_if_recv_udp_cb(
struct mg_connection *nc,
void *buf,
int len,
1721 void mg_if_get_conn_addr(
struct mg_connection *nc,
int remote,
1737 #ifndef CS_MONGOOSE_SRC_URI_H_ 1738 #define CS_MONGOOSE_SRC_URI_H_ 1768 int mg_parse_uri(
struct mg_str uri,
struct mg_str *scheme,
1770 unsigned int *port,
struct mg_str *path,
struct mg_str *query,
1771 struct mg_str *fragment);
1773 int mg_normalize_uri_path(
const struct mg_str *in,
struct mg_str *out);
1788 #ifndef CS_MONGOOSE_SRC_UTIL_H_ 1789 #define CS_MONGOOSE_SRC_UTIL_H_ 1798 #ifndef MAX_PATH_SIZE 1799 #define MAX_PATH_SIZE 500 1811 const char *mg_skip(
const char *s,
const char *end_string,
1812 const char *delimiters,
struct mg_str *v);
1817 int mg_ncasecmp(
const char *s1,
const char *s2,
size_t len);
1822 int mg_casecmp(
const char *s1,
const char *s2);
1828 int mg_vcmp(
const struct mg_str *str2,
const char *str1);
1834 int mg_vcasecmp(
const struct mg_str *str2,
const char *str1);
1845 int mg_base64_decode(
const unsigned char *s,
int len,
char *dst);
1852 void mg_base64_encode(
const unsigned char *src,
int src_len,
char *dst);
1854 #ifndef MG_DISABLE_FILESYSTEM 1862 int mg_stat(
const char *path, cs_stat_t *st);
1871 FILE *mg_fopen(
const char *path,
const char *mode);
1880 int mg_open(
const char *path,
int flag,
int mode);
1883 #if defined(_WIN32) && !defined(MG_ENABLE_THREADS) 1884 #define MG_ENABLE_THREADS 1887 #ifdef MG_ENABLE_THREADS 1894 void *mg_start_thread(
void *(*thread_func)(
void *),
void *thread_func_param);
1897 void mg_set_close_on_exec(sock_t);
1899 #define MG_SOCK_STRINGIFY_IP 1 1900 #define MG_SOCK_STRINGIFY_PORT 2 1901 #define MG_SOCK_STRINGIFY_REMOTE 4 1915 void mg_conn_addr_to_str(
struct mg_connection *nc,
char *buf,
size_t len,
1917 #ifndef MG_DISABLE_SOCKET_IF 1918 void mg_sock_to_str(sock_t sock,
char *buf,
size_t len,
int flags);
1926 void mg_sock_addr_to_str(
const union socket_address *sa,
char *buf,
size_t len,
1937 int mg_hexdump(
const void *buf,
int len,
char *dst,
int dst_len);
1946 void mg_hexdump_connection(
struct mg_connection *nc,
const char *path,
1947 const void *buf,
int num_bytes,
int ev);
1963 int mg_avprintf(
char **buf,
size_t size,
const char *fmt, va_list ap);
1968 int mg_is_big_endian(
void);
1983 const char *mg_next_comma_list_entry(
const char *list,
struct mg_str *val,
1991 int mg_match_prefix(
const char *pattern,
int pattern_len,
const char *str);
1992 int mg_match_prefix_n(
const struct mg_str pattern,
const struct mg_str str);
1998 struct mg_str mg_mk_str(const char *s);
2001 #define MG_MK_STR(str_literal) \ 2002 { str_literal, sizeof(str_literal) - 1 } 2017 #ifndef CS_MONGOOSE_SRC_HTTP_H_ 2018 #define CS_MONGOOSE_SRC_HTTP_H_ 2025 #ifndef MG_MAX_HTTP_HEADERS 2026 #define MG_MAX_HTTP_HEADERS 20 2029 #ifndef MG_MAX_HTTP_REQUEST_SIZE 2030 #define MG_MAX_HTTP_REQUEST_SIZE 1024 2035 #define MG_MAX_PATH PATH_MAX 2037 #define MG_MAX_PATH 256 2041 #ifndef MG_MAX_HTTP_SEND_MBUF 2042 #define MG_MAX_HTTP_SEND_MBUF 1024 2045 #ifndef MG_WEBSOCKET_PING_INTERVAL_SECONDS 2046 #define MG_WEBSOCKET_PING_INTERVAL_SECONDS 5 2049 #ifndef MG_CGI_ENVIRONMENT_SIZE 2050 #define MG_CGI_ENVIRONMENT_SIZE 8192 2053 #ifndef MG_MAX_CGI_ENVIR_VARS 2054 #define MG_MAX_CGI_ENVIR_VARS 64 2057 #ifndef MG_ENV_EXPORT_TO_CGI 2058 #define MG_ENV_EXPORT_TO_CGI "MONGOOSE_CGI" 2072 struct mg_str resp_status_msg;
2082 struct mg_str query_string;
2085 struct mg_str header_names[MG_MAX_HTTP_HEADERS];
2086 struct mg_str header_values[MG_MAX_HTTP_HEADERS];
2094 unsigned char *data;
2096 unsigned char flags;
2101 const char *file_name;
2102 const char *var_name;
2109 #define MG_EV_HTTP_REQUEST 100 2110 #define MG_EV_HTTP_REPLY 101 2111 #define MG_EV_HTTP_CHUNK 102 2112 #define MG_EV_SSI_CALL 105 2114 #define MG_EV_WEBSOCKET_HANDSHAKE_REQUEST 111 2115 #define MG_EV_WEBSOCKET_HANDSHAKE_DONE 112 2116 #define MG_EV_WEBSOCKET_FRAME 113 2117 #define MG_EV_WEBSOCKET_CONTROL_FRAME 114 2119 #ifdef MG_ENABLE_HTTP_STREAMING_MULTIPART 2120 #define MG_EV_HTTP_MULTIPART_REQUEST 121 2121 #define MG_EV_HTTP_PART_BEGIN 122 2122 #define MG_EV_HTTP_PART_DATA 123 2123 #define MG_EV_HTTP_PART_END 124 2169 void mg_set_protocol_http_websocket(
struct mg_connection *nc);
2185 void mg_send_websocket_handshake(
struct mg_connection *nc,
const char *uri,
2186 const char *extra_headers);
2198 void mg_send_websocket_handshake2(
struct mg_connection *nc,
const char *path,
2199 const char *host,
const char *protocol,
2200 const char *extra_headers);
2223 mg_event_handler_t event_handler,
2224 const char *url,
const char *protocol,
2225 const char *extra_headers);
2234 mg_event_handler_t ev_handler,
2236 const char *url,
const char *protocol,
2237 const char *extra_headers);
2257 void mg_send_websocket_frame(
struct mg_connection *nc,
int op_and_flags,
2258 const void *data,
size_t data_len);
2265 void mg_send_websocket_framev(
struct mg_connection *nc,
int op_and_flags,
2266 const struct mg_str *strings,
int num_strings);
2274 void mg_printf_websocket_frame(
struct mg_connection *nc,
int op_and_flags,
2275 const char *fmt, ...);
2295 void mg_send_http_chunk(
struct mg_connection *nc,
const char *buf,
size_t len);
2301 void mg_printf_http_chunk(
struct mg_connection *nc,
const char *fmt, ...);
2316 void mg_send_response_line(
struct mg_connection *c,
int status_code,
2317 const char *extra_headers);
2333 int64_t content_length,
const char *extra_headers);
2338 void mg_printf_html_escape(
struct mg_connection *nc,
const char *fmt, ...);
2341 #define WEBSOCKET_OP_CONTINUE 0 2342 #define WEBSOCKET_OP_TEXT 1 2343 #define WEBSOCKET_OP_BINARY 2 2344 #define WEBSOCKET_OP_CLOSE 8 2345 #define WEBSOCKET_OP_PING 9 2346 #define WEBSOCKET_OP_PONG 10 2360 #define WEBSOCKET_DONT_FIN 0x100 2370 int mg_parse_http(
const char *s,
int n,
struct http_message *hm,
int is_req);
2395 int mg_http_parse_header(
struct mg_str *hdr,
const char *var_name,
char *buf,
2434 size_t mg_parse_multipart(
const char *buf,
size_t buf_len,
char *var_name,
2435 size_t var_name_len,
char *file_name,
2436 size_t file_name_len,
const char **chunk,
2447 int mg_get_http_var(
const struct mg_str *buf,
const char *name,
char *dst,
2460 int mg_url_decode(
const char *src,
int src_len,
char *dst,
int dst_len,
2461 int is_form_url_encoded);
2464 int mg_http_create_digest_auth_header(
char *buf,
size_t buf_len,
2465 const char *method,
const char *uri,
2466 const char *auth_domain,
const char *user,
2467 const char *passwd);
2494 mg_event_handler_t event_handler,
2496 const char *extra_headers,
2497 const char *post_data);
2506 mg_event_handler_t ev_handler,
2509 const char *extra_headers,
2510 const char *post_data);
2517 const char *document_root;
2520 const char *index_files;
2531 const char *per_directory_auth_file;
2534 const char *auth_domain;
2544 const char *global_auth_file;
2547 const char *enable_directory_listing;
2550 const char *ssi_pattern;
2577 const char *url_rewrites;
2580 const char *dav_document_root;
2586 const char *dav_auth_file;
2589 const char *hidden_file_pattern;
2592 const char *cgi_file_pattern;
2595 const char *cgi_interpreter;
2601 const char *custom_mime_types;
2607 const char *extra_headers;
2660 void mg_register_http_endpoint(
struct mg_connection *nc,
const char *uri_path,
2661 mg_event_handler_t handler);
2663 #ifdef MG_ENABLE_HTTP_STREAMING_MULTIPART 2700 void mg_file_upload_handler(
struct mg_connection *nc,
int ev,
void *ev_data,
2701 mg_fu_fname_fn local_name_fn);
2717 #ifndef CS_MONGOOSE_SRC_JSON_RPC_H_ 2718 #define CS_MONGOOSE_SRC_JSON_RPC_H_ 2763 int mg_rpc_parse_reply(
const char *buf,
int len,
struct json_token *toks,
2775 int mg_rpc_create_request(
char *buf,
int len,
const char *method,
2776 const char *
id,
const char *params_fmt, ...);
2786 int mg_rpc_create_reply(
char *buf,
int len,
const struct mg_rpc_request *req,
2787 const char *result_fmt, ...);
2797 int mg_rpc_create_error(
char *buf,
int len,
struct mg_rpc_request *req,
2798 int code,
const char *message,
const char *fmt, ...);
2801 #define JSON_RPC_PARSE_ERROR (-32700) 2802 #define JSON_RPC_INVALID_REQUEST_ERROR (-32600) 2803 #define JSON_RPC_METHOD_NOT_FOUND_ERROR (-32601) 2804 #define JSON_RPC_INVALID_PARAMS_ERROR (-32602) 2805 #define JSON_RPC_INTERNAL_ERROR (-32603) 2806 #define JSON_RPC_SERVER_ERROR (-32000) 2822 int mg_rpc_create_std_error(
char *buf,
int len,
struct mg_rpc_request *req,
2825 typedef int (*mg_rpc_handler_t)(
char *buf,
int len,
struct mg_rpc_request *req);
2839 int mg_rpc_dispatch(
const char *buf,
int,
char *dst,
int dst_len,
2840 const char **methods, mg_rpc_handler_t *handlers);
2867 #ifndef CS_MONGOOSE_SRC_MQTT_H_ 2868 #define CS_MONGOOSE_SRC_MQTT_H_ 2875 uint8_t connack_ret_code;
2876 uint16_t message_id;
2886 unsigned char flags;
2887 uint16_t keep_alive;
2888 const char *will_topic;
2889 const char *will_message;
2890 const char *user_name;
2891 const char *password;
2895 #define MG_MQTT_CMD_CONNECT 1 2896 #define MG_MQTT_CMD_CONNACK 2 2897 #define MG_MQTT_CMD_PUBLISH 3 2898 #define MG_MQTT_CMD_PUBACK 4 2899 #define MG_MQTT_CMD_PUBREC 5 2900 #define MG_MQTT_CMD_PUBREL 6 2901 #define MG_MQTT_CMD_PUBCOMP 7 2902 #define MG_MQTT_CMD_SUBSCRIBE 8 2903 #define MG_MQTT_CMD_SUBACK 9 2904 #define MG_MQTT_CMD_UNSUBSCRIBE 10 2905 #define MG_MQTT_CMD_UNSUBACK 11 2906 #define MG_MQTT_CMD_PINGREQ 12 2907 #define MG_MQTT_CMD_PINGRESP 13 2908 #define MG_MQTT_CMD_DISCONNECT 14 2911 #define MG_MQTT_EVENT_BASE 200 2912 #define MG_EV_MQTT_CONNECT (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_CONNECT) 2913 #define MG_EV_MQTT_CONNACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_CONNACK) 2914 #define MG_EV_MQTT_PUBLISH (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBLISH) 2915 #define MG_EV_MQTT_PUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBACK) 2916 #define MG_EV_MQTT_PUBREC (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBREC) 2917 #define MG_EV_MQTT_PUBREL (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBREL) 2918 #define MG_EV_MQTT_PUBCOMP (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PUBCOMP) 2919 #define MG_EV_MQTT_SUBSCRIBE (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_SUBSCRIBE) 2920 #define MG_EV_MQTT_SUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_SUBACK) 2921 #define MG_EV_MQTT_UNSUBSCRIBE (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_UNSUBSCRIBE) 2922 #define MG_EV_MQTT_UNSUBACK (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_UNSUBACK) 2923 #define MG_EV_MQTT_PINGREQ (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PINGREQ) 2924 #define MG_EV_MQTT_PINGRESP (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_PINGRESP) 2925 #define MG_EV_MQTT_DISCONNECT (MG_MQTT_EVENT_BASE + MG_MQTT_CMD_DISCONNECT) 2928 #define MG_MQTT_RETAIN 0x1 2929 #define MG_MQTT_DUP 0x4 2930 #define MG_MQTT_QOS(qos) ((qos) << 1) 2931 #define MG_MQTT_GET_QOS(flags) (((flags) &0x6) >> 1) 2932 #define MG_MQTT_SET_QOS(flags, qos) (flags) = ((flags) & ~0x6) | ((qos) << 1) 2935 #define MG_MQTT_CLEAN_SESSION 0x02 2936 #define MG_MQTT_HAS_WILL 0x04 2937 #define MG_MQTT_WILL_RETAIN 0x20 2938 #define MG_MQTT_HAS_PASSWORD 0x40 2939 #define MG_MQTT_HAS_USER_NAME 0x80 2940 #define MG_MQTT_GET_WILL_QOS(flags) (((flags) &0x18) >> 3) 2941 #define MG_MQTT_SET_WILL_QOS(flags, qos) \ 2942 (flags) = ((flags) & ~0x18) | ((qos) << 3) 2945 #define MG_EV_MQTT_CONNACK_ACCEPTED 0 2946 #define MG_EV_MQTT_CONNACK_UNACCEPTABLE_VERSION 1 2947 #define MG_EV_MQTT_CONNACK_IDENTIFIER_REJECTED 2 2948 #define MG_EV_MQTT_CONNACK_SERVER_UNAVAILABLE 3 2949 #define MG_EV_MQTT_CONNACK_BAD_AUTH 4 2950 #define MG_EV_MQTT_CONNACK_NOT_AUTHORIZED 5 2972 void mg_send_mqtt_handshake(
struct mg_connection *nc,
const char *client_id);
2975 void mg_send_mqtt_handshake_opt(
struct mg_connection *nc,
const char *client_id,
2979 void mg_mqtt_publish(
struct mg_connection *nc,
const char *topic,
2980 uint16_t message_id,
int flags,
const void *data,
2986 size_t topics_len, uint16_t message_id);
2989 void mg_mqtt_unsubscribe(
struct mg_connection *nc,
char **topics,
2990 size_t topics_len, uint16_t message_id);
2996 void mg_mqtt_connack(
struct mg_connection *nc, uint8_t return_code);
2999 void mg_mqtt_puback(
struct mg_connection *nc, uint16_t message_id);
3002 void mg_mqtt_pubrec(
struct mg_connection *nc, uint16_t message_id);
3005 void mg_mqtt_pubrel(
struct mg_connection *nc, uint16_t message_id);
3008 void mg_mqtt_pubcomp(
struct mg_connection *nc, uint16_t message_id);
3014 void mg_mqtt_suback(
struct mg_connection *nc, uint8_t *qoss,
size_t qoss_len,
3015 uint16_t message_id);
3018 void mg_mqtt_unsuback(
struct mg_connection *nc, uint16_t message_id);
3034 struct mg_str *topic, uint8_t *qos,
int pos);
3062 #ifndef CS_MONGOOSE_SRC_MQTT_BROKER_H_ 3063 #define CS_MONGOOSE_SRC_MQTT_BROKER_H_ 3065 #ifdef MG_ENABLE_MQTT_BROKER 3072 #define MG_MQTT_MAX_SESSION_SUBSCRIPTIONS 512; 3074 struct mg_mqtt_broker;
3077 struct mg_mqtt_session {
3078 struct mg_mqtt_broker *brk;
3079 struct mg_mqtt_session *next, *prev;
3081 size_t num_subscriptions;
3087 struct mg_mqtt_broker {
3088 struct mg_mqtt_session *sessions;
3093 void mg_mqtt_broker_init(
struct mg_mqtt_broker *brk,
void *user_data);
3120 void mg_mqtt_broker(
struct mg_connection *brk,
int ev,
void *data);
3132 struct mg_mqtt_session *mg_mqtt_next(
struct mg_mqtt_broker *brk,
3133 struct mg_mqtt_session *s);
3150 #ifndef CS_MONGOOSE_SRC_DNS_H_ 3151 #define CS_MONGOOSE_SRC_DNS_H_ 3158 #define MG_DNS_A_RECORD 0x01 3159 #define MG_DNS_CNAME_RECORD 0x05 3160 #define MG_DNS_AAAA_RECORD 0x1c 3161 #define MG_DNS_MX_RECORD 0x0f 3163 #define MG_MAX_DNS_QUESTIONS 32 3164 #define MG_MAX_DNS_ANSWERS 32 3166 #define MG_DNS_MESSAGE 100 3168 enum mg_dns_resource_record_kind {
3169 MG_DNS_INVALID_RECORD = 0,
3180 enum mg_dns_resource_record_kind kind;
3188 uint16_t transaction_id;
3216 void mg_send_dns_query(
struct mg_connection *nc,
const char *name,
3224 int mg_dns_insert_header(
struct mbuf *io,
size_t pos,
3254 const char *name,
size_t nlen,
const void *rdata,
3258 int mg_parse_dns(
const char *buf,
int len,
struct mg_dns_message *msg);
3274 char *dst,
int dst_len);
3305 #ifndef CS_MONGOOSE_SRC_DNS_SERVER_H_ 3306 #define CS_MONGOOSE_SRC_DNS_SERVER_H_ 3308 #ifdef MG_ENABLE_DNS_SERVER 3315 #define MG_DNS_SERVER_DEFAULT_TTL 3600 3317 struct mg_dns_reply {
3351 struct mg_dns_reply mg_dns_create_reply(struct mbuf *io,
3362 int mg_dns_reply_record(
struct mg_dns_reply *reply,
3364 const char *name,
int rtype,
int ttl,
const void *rdata,
3379 void mg_dns_send_reply(
struct mg_connection *nc,
struct mg_dns_reply *r);
3396 #ifndef CS_MONGOOSE_SRC_RESOLV_H_ 3397 #define CS_MONGOOSE_SRC_RESOLV_H_ 3404 enum mg_resolve_err {
3406 MG_RESOLVE_NO_ANSWERS = 1,
3407 MG_RESOLVE_EXCEEDED_RETRY_COUNT = 2,
3408 MG_RESOLVE_TIMEOUT = 3
3411 typedef void (*mg_resolve_callback_t)(
struct mg_dns_message *dns_message,
3412 void *user_data,
enum mg_resolve_err);
3416 const char *nameserver_url;
3425 int mg_resolve_async(
struct mg_mgr *mgr,
const char *name,
int query,
3426 mg_resolve_callback_t cb,
void *data);
3449 int mg_resolve_async_opt(
struct mg_mgr *mgr,
const char *name,
int query,
3450 mg_resolve_callback_t cb,
void *data,
3458 int mg_resolve_from_hosts_file(
const char *host,
union socket_address *usa);
3495 #ifndef CS_MONGOOSE_SRC_COAP_H_ 3496 #define CS_MONGOOSE_SRC_COAP_H_ 3498 #ifdef MG_ENABLE_COAP 3500 #define MG_COAP_MSG_TYPE_FIELD 0x2 3501 #define MG_COAP_CODE_CLASS_FIELD 0x4 3502 #define MG_COAP_CODE_DETAIL_FIELD 0x8 3503 #define MG_COAP_MSG_ID_FIELD 0x10 3504 #define MG_COAP_TOKEN_FIELD 0x20 3505 #define MG_COAP_OPTIOMG_FIELD 0x40 3506 #define MG_COAP_PAYLOAD_FIELD 0x80 3508 #define MG_COAP_ERROR 0x10000 3509 #define MG_COAP_FORMAT_ERROR (MG_COAP_ERROR | 0x20000) 3510 #define MG_COAP_IGNORE (MG_COAP_ERROR | 0x40000) 3511 #define MG_COAP_NOT_ENOUGH_DATA (MG_COAP_ERROR | 0x80000) 3512 #define MG_COAP_NETWORK_ERROR (MG_COAP_ERROR | 0x100000) 3514 #define MG_COAP_MSG_CON 0 3515 #define MG_COAP_MSG_NOC 1 3516 #define MG_COAP_MSG_ACK 2 3517 #define MG_COAP_MSG_RST 3 3518 #define MG_COAP_MSG_MAX 3 3520 #define MG_COAP_CODECLASS_REQUEST 0 3521 #define MG_COAP_CODECLASS_RESP_OK 2 3522 #define MG_COAP_CODECLASS_CLIENT_ERR 4 3523 #define MG_COAP_CODECLASS_SRV_ERR 5 3525 #define MG_COAP_EVENT_BASE 300 3526 #define MG_EV_COAP_CON (MG_COAP_EVENT_BASE + MG_COAP_MSG_CON) 3527 #define MG_EV_COAP_NOC (MG_COAP_EVENT_BASE + MG_COAP_MSG_NOC) 3528 #define MG_EV_COAP_ACK (MG_COAP_EVENT_BASE + MG_COAP_MSG_ACK) 3529 #define MG_EV_COAP_RST (MG_COAP_EVENT_BASE + MG_COAP_MSG_RST) 3536 struct mg_coap_option {
3537 struct mg_coap_option *next;
3543 struct mg_coap_message {
3547 uint8_t code_detail;
3550 struct mg_coap_option *options;
3552 struct mg_coap_option *optiomg_tail;
3566 struct mg_coap_option *mg_coap_add_option(
struct mg_coap_message *cm,
3567 uint32_t number,
char *value,
3574 void mg_coap_free_options(
struct mg_coap_message *cm);
3588 struct mg_coap_message *cm);
3595 uint32_t mg_coap_send_ack(
struct mg_connection *nc, uint16_t msg_id);
3612 uint32_t mg_coap_parse(
struct mbuf *io,
struct mg_coap_message *cm);
3619 uint32_t mg_coap_compose(
struct mg_coap_message *cm,
struct mbuf *io);
Definition: mongoose.h:3185
Definition: mongoose.h:3175
Definition: mongoose.h:2725
Definition: mongoose.h:2093
Definition: mongoose.h:2885
Definition: mongoose.h:2733
Definition: mongoose.h:2515
Definition: mongoose.h:974
Definition: mongoose.h:1360
Definition: mongoose.h:1390
Definition: mongoose.h:893
Definition: mongoose.h:1200
Definition: mongoose.h:2740
Definition: mongoose.h:925
Definition: mongoose.h:1189
Definition: mongoose.h:1225
Definition: mongoose.h:2062
Definition: mongoose.h:1430
Definition: mongoose.h:828
Definition: mongoose.h:1066
Definition: mongoose.h:2871
Definition: mongoose.h:1241
Definition: mongoose.h:3415
Definition: mongoose.h:2100
Definition: mongoose.h:2880