mirror of
https://github.com/cesanta/mongoose.git
synced 2025-01-14 09:48:01 +08:00
remove certs.h
This commit is contained in:
parent
d8106a8ffe
commit
1391bdcf8b
6
Makefile
6
Makefile
@ -74,9 +74,9 @@ examples_win:
|
|||||||
clean_examples_win:
|
clean_examples_win:
|
||||||
$(foreach X, $(EXAMPLES_WIN), $(MAKE) -C $(X) clean &)
|
$(foreach X, $(EXAMPLES_WIN), $(MAKE) -C $(X) clean &)
|
||||||
|
|
||||||
test/packed_fs.c: Makefile src/ssi.h test/fuzz.c test/data/a.txt
|
test/packed_fs.c: Makefile src/ssi.h test/fuzz.c test/data/a.txt test/data/ca.pem
|
||||||
$(CC) $(CFLAGS) test/pack.c -o pack
|
$(CC) $(CFLAGS) test/pack.c -o pack
|
||||||
$(RUN) ./pack Makefile src/ssi.h test/fuzz.c test/data/a.txt test/data/range.txt > $@
|
$(RUN) ./pack Makefile src/ssi.h test/fuzz.c test/data/a.txt test/data/range.txt test/data/ca.pem > $@
|
||||||
|
|
||||||
# Check that all external (exported) symbols have "mg_" prefix
|
# Check that all external (exported) symbols have "mg_" prefix
|
||||||
mg_prefix: mongoose.c mongoose.h
|
mg_prefix: mongoose.c mongoose.h
|
||||||
@ -175,7 +175,7 @@ mongoose.c: Makefile $(wildcard src/*.c) $(wildcard src/drivers/*.c)
|
|||||||
(cat src/license.h; echo; echo '#include "mongoose.h"' ; (for F in src/*.c src/drivers/*.c ; do echo; echo '#ifdef MG_ENABLE_LINES'; echo "#line 1 \"$$F\""; echo '#endif'; cat $$F | sed -e 's,#include ".*,,'; done))> $@
|
(cat src/license.h; echo; echo '#include "mongoose.h"' ; (for F in src/*.c src/drivers/*.c ; do echo; echo '#ifdef MG_ENABLE_LINES'; echo "#line 1 \"$$F\""; echo '#endif'; cat $$F | sed -e 's,#include ".*,,'; done))> $@
|
||||||
|
|
||||||
mongoose.h: $(HDRS) Makefile
|
mongoose.h: $(HDRS) Makefile
|
||||||
(cat src/license.h; echo; echo '#ifndef MONGOOSE_H'; echo '#define MONGOOSE_H'; echo; cat src/version.h ; echo; echo '#ifdef __cplusplus'; echo 'extern "C" {'; echo '#endif'; cat src/arch.h src/arch_*.h src/net_ft.h src/net_lwip.h src/net_rl.h src/config.h src/str.h src/queue.h src/fmt.h src/printf.h src/log.h src/timer.h src/fs.h src/util.h src/url.h src/iobuf.h src/base64.h src/md5.h src/sha1.h src/event.h src/net.h src/http.h src/ssi.h src/tls.h src/tls_mbed.h src/tls_openssl.h src/ws.h src/sntp.h src/mqtt.h src/dns.h src/json.h src/rpc.h src/ota.h src/net_builtin.h src/drivers/*.h src/certs.h | sed -e '/keep/! s,#include ".*,,' -e 's,^#pragma once,,'; echo; echo '#ifdef __cplusplus'; echo '}'; echo '#endif'; echo '#endif // MONGOOSE_H')> $@
|
(cat src/license.h; echo; echo '#ifndef MONGOOSE_H'; echo '#define MONGOOSE_H'; echo; cat src/version.h ; echo; echo '#ifdef __cplusplus'; echo 'extern "C" {'; echo '#endif'; cat src/arch.h src/arch_*.h src/net_ft.h src/net_lwip.h src/net_rl.h src/config.h src/str.h src/queue.h src/fmt.h src/printf.h src/log.h src/timer.h src/fs.h src/util.h src/url.h src/iobuf.h src/base64.h src/md5.h src/sha1.h src/event.h src/net.h src/http.h src/ssi.h src/tls.h src/tls_mbed.h src/tls_openssl.h src/ws.h src/sntp.h src/mqtt.h src/dns.h src/json.h src/rpc.h src/ota.h src/net_builtin.h src/drivers/*.h | sed -e '/keep/! s,#include ".*,,' -e 's,^#pragma once,,'; echo; echo '#ifdef __cplusplus'; echo '}'; echo '#endif'; echo '#endif // MONGOOSE_H')> $@
|
||||||
|
|
||||||
|
|
||||||
clean: clean_examples clean_embedded
|
clean: clean_examples clean_embedded
|
||||||
|
528
mongoose.c
528
mongoose.c
@ -3563,270 +3563,6 @@ struct mg_connection *mg_mqtt_listen(struct mg_mgr *mgr, const char *url,
|
|||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MG_ENABLE_LINES
|
|
||||||
#line 1 "src/net.c"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
size_t mg_vprintf(struct mg_connection *c, const char *fmt, va_list *ap) {
|
|
||||||
size_t old = c->send.len;
|
|
||||||
mg_vxprintf(mg_pfn_iobuf, &c->send, fmt, ap);
|
|
||||||
return c->send.len - old;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t mg_printf(struct mg_connection *c, const char *fmt, ...) {
|
|
||||||
size_t len = 0;
|
|
||||||
va_list ap;
|
|
||||||
va_start(ap, fmt);
|
|
||||||
len = mg_vprintf(c, fmt, &ap);
|
|
||||||
va_end(ap);
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool mg_atonl(struct mg_str str, struct mg_addr *addr) {
|
|
||||||
uint32_t localhost = mg_htonl(0x7f000001);
|
|
||||||
if (mg_vcasecmp(&str, "localhost") != 0) return false;
|
|
||||||
memcpy(addr->ip, &localhost, sizeof(uint32_t));
|
|
||||||
addr->is_ip6 = false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool mg_atone(struct mg_str str, struct mg_addr *addr) {
|
|
||||||
if (str.len > 0) return false;
|
|
||||||
memset(addr->ip, 0, sizeof(addr->ip));
|
|
||||||
addr->is_ip6 = false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool mg_aton4(struct mg_str str, struct mg_addr *addr) {
|
|
||||||
uint8_t data[4] = {0, 0, 0, 0};
|
|
||||||
size_t i, num_dots = 0;
|
|
||||||
for (i = 0; i < str.len; i++) {
|
|
||||||
if (str.ptr[i] >= '0' && str.ptr[i] <= '9') {
|
|
||||||
int octet = data[num_dots] * 10 + (str.ptr[i] - '0');
|
|
||||||
if (octet > 255) return false;
|
|
||||||
data[num_dots] = (uint8_t) octet;
|
|
||||||
} else if (str.ptr[i] == '.') {
|
|
||||||
if (num_dots >= 3 || i == 0 || str.ptr[i - 1] == '.') return false;
|
|
||||||
num_dots++;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (num_dots != 3 || str.ptr[i - 1] == '.') return false;
|
|
||||||
memcpy(&addr->ip, data, sizeof(data));
|
|
||||||
addr->is_ip6 = false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool mg_v4mapped(struct mg_str str, struct mg_addr *addr) {
|
|
||||||
int i;
|
|
||||||
uint32_t ipv4;
|
|
||||||
if (str.len < 14) return false;
|
|
||||||
if (str.ptr[0] != ':' || str.ptr[1] != ':' || str.ptr[6] != ':') return false;
|
|
||||||
for (i = 2; i < 6; i++) {
|
|
||||||
if (str.ptr[i] != 'f' && str.ptr[i] != 'F') return false;
|
|
||||||
}
|
|
||||||
// struct mg_str s = mg_str_n(&str.ptr[7], str.len - 7);
|
|
||||||
if (!mg_aton4(mg_str_n(&str.ptr[7], str.len - 7), addr)) return false;
|
|
||||||
memcpy(&ipv4, addr->ip, sizeof(ipv4));
|
|
||||||
memset(addr->ip, 0, sizeof(addr->ip));
|
|
||||||
addr->ip[10] = addr->ip[11] = 255;
|
|
||||||
memcpy(&addr->ip[12], &ipv4, 4);
|
|
||||||
addr->is_ip6 = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool mg_aton6(struct mg_str str, struct mg_addr *addr) {
|
|
||||||
size_t i, j = 0, n = 0, dc = 42;
|
|
||||||
if (str.len > 2 && str.ptr[0] == '[') str.ptr++, str.len -= 2;
|
|
||||||
if (mg_v4mapped(str, addr)) return true;
|
|
||||||
for (i = 0; i < str.len; i++) {
|
|
||||||
if ((str.ptr[i] >= '0' && str.ptr[i] <= '9') ||
|
|
||||||
(str.ptr[i] >= 'a' && str.ptr[i] <= 'f') ||
|
|
||||||
(str.ptr[i] >= 'A' && str.ptr[i] <= 'F')) {
|
|
||||||
unsigned long val;
|
|
||||||
if (i > j + 3) return false;
|
|
||||||
// MG_DEBUG(("%zu %zu [%.*s]", i, j, (int) (i - j + 1), &str.ptr[j]));
|
|
||||||
val = mg_unhexn(&str.ptr[j], i - j + 1);
|
|
||||||
addr->ip[n] = (uint8_t) ((val >> 8) & 255);
|
|
||||||
addr->ip[n + 1] = (uint8_t) (val & 255);
|
|
||||||
} else if (str.ptr[i] == ':') {
|
|
||||||
j = i + 1;
|
|
||||||
if (i > 0 && str.ptr[i - 1] == ':') {
|
|
||||||
dc = n; // Double colon
|
|
||||||
if (i > 1 && str.ptr[i - 2] == ':') return false;
|
|
||||||
} else if (i > 0) {
|
|
||||||
n += 2;
|
|
||||||
}
|
|
||||||
if (n > 14) return false;
|
|
||||||
addr->ip[n] = addr->ip[n + 1] = 0; // For trailing ::
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (n < 14 && dc == 42) return false;
|
|
||||||
if (n < 14) {
|
|
||||||
memmove(&addr->ip[dc + (14 - n)], &addr->ip[dc], n - dc + 2);
|
|
||||||
memset(&addr->ip[dc], 0, 14 - n);
|
|
||||||
}
|
|
||||||
|
|
||||||
addr->is_ip6 = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool mg_aton(struct mg_str str, struct mg_addr *addr) {
|
|
||||||
// MG_INFO(("[%.*s]", (int) str.len, str.ptr));
|
|
||||||
return mg_atone(str, addr) || mg_atonl(str, addr) || mg_aton4(str, addr) ||
|
|
||||||
mg_aton6(str, addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct mg_connection *mg_alloc_conn(struct mg_mgr *mgr) {
|
|
||||||
struct mg_connection *c =
|
|
||||||
(struct mg_connection *) calloc(1, sizeof(*c) + mgr->extraconnsize);
|
|
||||||
if (c != NULL) {
|
|
||||||
c->mgr = mgr;
|
|
||||||
c->send.align = c->recv.align = MG_IO_SIZE;
|
|
||||||
c->id = ++mgr->nextid;
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mg_close_conn(struct mg_connection *c) {
|
|
||||||
mg_resolve_cancel(c); // Close any pending DNS query
|
|
||||||
LIST_DELETE(struct mg_connection, &c->mgr->conns, c);
|
|
||||||
if (c == c->mgr->dns4.c) c->mgr->dns4.c = NULL;
|
|
||||||
if (c == c->mgr->dns6.c) c->mgr->dns6.c = NULL;
|
|
||||||
// Order of operations is important. `MG_EV_CLOSE` event must be fired
|
|
||||||
// before we deallocate received data, see #1331
|
|
||||||
mg_call(c, MG_EV_CLOSE, NULL);
|
|
||||||
MG_DEBUG(("%lu %p closed", c->id, c->fd));
|
|
||||||
|
|
||||||
mg_tls_free(c);
|
|
||||||
mg_iobuf_free(&c->recv);
|
|
||||||
mg_iobuf_free(&c->send);
|
|
||||||
memset(c, 0, sizeof(*c));
|
|
||||||
free(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct mg_connection *mg_connect(struct mg_mgr *mgr, const char *url,
|
|
||||||
mg_event_handler_t fn, void *fn_data) {
|
|
||||||
struct mg_connection *c = NULL;
|
|
||||||
if (url == NULL || url[0] == '\0') {
|
|
||||||
MG_ERROR(("null url"));
|
|
||||||
} else if ((c = mg_alloc_conn(mgr)) == NULL) {
|
|
||||||
MG_ERROR(("OOM"));
|
|
||||||
} else {
|
|
||||||
LIST_ADD_HEAD(struct mg_connection, &mgr->conns, c);
|
|
||||||
c->is_udp = (strncmp(url, "udp:", 4) == 0);
|
|
||||||
c->fd = (void *) (size_t) MG_INVALID_SOCKET;
|
|
||||||
c->fn = fn;
|
|
||||||
c->is_client = true;
|
|
||||||
c->fn_data = fn_data;
|
|
||||||
MG_DEBUG(("%lu %p %s", c->id, c->fd, url));
|
|
||||||
mg_call(c, MG_EV_OPEN, (void *) url);
|
|
||||||
mg_resolve(c, url);
|
|
||||||
if (mg_url_is_ssl(url)) {
|
|
||||||
struct mg_str host = mg_url_host(url);
|
|
||||||
mg_tls_init(c, host);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct mg_connection *mg_listen(struct mg_mgr *mgr, const char *url,
|
|
||||||
mg_event_handler_t fn, void *fn_data) {
|
|
||||||
struct mg_connection *c = NULL;
|
|
||||||
if ((c = mg_alloc_conn(mgr)) == NULL) {
|
|
||||||
MG_ERROR(("OOM %s", url));
|
|
||||||
} else if (!mg_open_listener(c, url)) {
|
|
||||||
MG_ERROR(("Failed: %s, errno %d", url, errno));
|
|
||||||
free(c);
|
|
||||||
c = NULL;
|
|
||||||
} else {
|
|
||||||
c->is_listening = 1;
|
|
||||||
c->is_udp = strncmp(url, "udp:", 4) == 0;
|
|
||||||
LIST_ADD_HEAD(struct mg_connection, &mgr->conns, c);
|
|
||||||
c->fn = fn;
|
|
||||||
c->fn_data = fn_data;
|
|
||||||
mg_call(c, MG_EV_OPEN, NULL);
|
|
||||||
if (mg_url_is_ssl(url)) c->is_tls = 1; // Accepted connection must
|
|
||||||
MG_DEBUG(("%lu %p %s", c->id, c->fd, url));
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct mg_connection *mg_wrapfd(struct mg_mgr *mgr, int fd,
|
|
||||||
mg_event_handler_t fn, void *fn_data) {
|
|
||||||
struct mg_connection *c = mg_alloc_conn(mgr);
|
|
||||||
if (c != NULL) {
|
|
||||||
c->fd = (void *) (size_t) fd;
|
|
||||||
c->fn = fn;
|
|
||||||
c->fn_data = fn_data;
|
|
||||||
MG_EPOLL_ADD(c);
|
|
||||||
mg_call(c, MG_EV_OPEN, NULL);
|
|
||||||
LIST_ADD_HEAD(struct mg_connection, &mgr->conns, c);
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct mg_timer *mg_timer_add(struct mg_mgr *mgr, uint64_t milliseconds,
|
|
||||||
unsigned flags, void (*fn)(void *), void *arg) {
|
|
||||||
struct mg_timer *t = (struct mg_timer *) calloc(1, sizeof(*t));
|
|
||||||
if (t != NULL) {
|
|
||||||
mg_timer_init(&mgr->timers, t, milliseconds, flags, fn, arg);
|
|
||||||
t->id = mgr->timerid++;
|
|
||||||
}
|
|
||||||
return t;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mg_mgr_free(struct mg_mgr *mgr) {
|
|
||||||
struct mg_connection *c;
|
|
||||||
struct mg_timer *tmp, *t = mgr->timers;
|
|
||||||
while (t != NULL) tmp = t->next, free(t), t = tmp;
|
|
||||||
mgr->timers = NULL; // Important. Next call to poll won't touch timers
|
|
||||||
for (c = mgr->conns; c != NULL; c = c->next) c->is_closing = 1;
|
|
||||||
mg_mgr_poll(mgr, 0);
|
|
||||||
#if MG_ENABLE_FREERTOS_TCP
|
|
||||||
FreeRTOS_DeleteSocketSet(mgr->ss);
|
|
||||||
#endif
|
|
||||||
MG_DEBUG(("All connections closed"));
|
|
||||||
#if MG_ENABLE_EPOLL
|
|
||||||
if (mgr->epoll_fd >= 0) close(mgr->epoll_fd), mgr->epoll_fd = -1;
|
|
||||||
#endif
|
|
||||||
mg_tls_ctx_free(mgr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void mg_mgr_init(struct mg_mgr *mgr) {
|
|
||||||
memset(mgr, 0, sizeof(*mgr));
|
|
||||||
#if MG_ENABLE_EPOLL
|
|
||||||
if ((mgr->epoll_fd = epoll_create1(EPOLL_CLOEXEC)) < 0)
|
|
||||||
MG_ERROR(("epoll_create1 errno %d", errno));
|
|
||||||
#else
|
|
||||||
mgr->epoll_fd = -1;
|
|
||||||
#endif
|
|
||||||
#if MG_ARCH == MG_ARCH_WIN32 && MG_ENABLE_WINSOCK
|
|
||||||
// clang-format off
|
|
||||||
{ WSADATA data; WSAStartup(MAKEWORD(2, 2), &data); }
|
|
||||||
// clang-format on
|
|
||||||
#elif MG_ENABLE_FREERTOS_TCP
|
|
||||||
mgr->ss = FreeRTOS_CreateSocketSet();
|
|
||||||
#elif defined(__unix) || defined(__unix__) || defined(__APPLE__)
|
|
||||||
// Ignore SIGPIPE signal, so if client cancels the request, it
|
|
||||||
// won't kill the whole process.
|
|
||||||
signal(SIGPIPE, SIG_IGN);
|
|
||||||
#endif
|
|
||||||
mgr->dnstimeout = 3000;
|
|
||||||
mgr->dns4.url = "udp://8.8.8.8:53";
|
|
||||||
mgr->dns6.url = "udp://[2001:4860:4860::8888]:53";
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef MG_ENABLE_LINES
|
#ifdef MG_ENABLE_LINES
|
||||||
#line 1 "src/net_builtin.c"
|
#line 1 "src/net_builtin.c"
|
||||||
#endif
|
#endif
|
||||||
@ -4922,6 +4658,270 @@ bool mg_send(struct mg_connection *c, const void *buf, size_t len) {
|
|||||||
}
|
}
|
||||||
#endif // MG_ENABLE_TCPIP
|
#endif // MG_ENABLE_TCPIP
|
||||||
|
|
||||||
|
#ifdef MG_ENABLE_LINES
|
||||||
|
#line 1 "src/net.c"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
size_t mg_vprintf(struct mg_connection *c, const char *fmt, va_list *ap) {
|
||||||
|
size_t old = c->send.len;
|
||||||
|
mg_vxprintf(mg_pfn_iobuf, &c->send, fmt, ap);
|
||||||
|
return c->send.len - old;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t mg_printf(struct mg_connection *c, const char *fmt, ...) {
|
||||||
|
size_t len = 0;
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, fmt);
|
||||||
|
len = mg_vprintf(c, fmt, &ap);
|
||||||
|
va_end(ap);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool mg_atonl(struct mg_str str, struct mg_addr *addr) {
|
||||||
|
uint32_t localhost = mg_htonl(0x7f000001);
|
||||||
|
if (mg_vcasecmp(&str, "localhost") != 0) return false;
|
||||||
|
memcpy(addr->ip, &localhost, sizeof(uint32_t));
|
||||||
|
addr->is_ip6 = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool mg_atone(struct mg_str str, struct mg_addr *addr) {
|
||||||
|
if (str.len > 0) return false;
|
||||||
|
memset(addr->ip, 0, sizeof(addr->ip));
|
||||||
|
addr->is_ip6 = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool mg_aton4(struct mg_str str, struct mg_addr *addr) {
|
||||||
|
uint8_t data[4] = {0, 0, 0, 0};
|
||||||
|
size_t i, num_dots = 0;
|
||||||
|
for (i = 0; i < str.len; i++) {
|
||||||
|
if (str.ptr[i] >= '0' && str.ptr[i] <= '9') {
|
||||||
|
int octet = data[num_dots] * 10 + (str.ptr[i] - '0');
|
||||||
|
if (octet > 255) return false;
|
||||||
|
data[num_dots] = (uint8_t) octet;
|
||||||
|
} else if (str.ptr[i] == '.') {
|
||||||
|
if (num_dots >= 3 || i == 0 || str.ptr[i - 1] == '.') return false;
|
||||||
|
num_dots++;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (num_dots != 3 || str.ptr[i - 1] == '.') return false;
|
||||||
|
memcpy(&addr->ip, data, sizeof(data));
|
||||||
|
addr->is_ip6 = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool mg_v4mapped(struct mg_str str, struct mg_addr *addr) {
|
||||||
|
int i;
|
||||||
|
uint32_t ipv4;
|
||||||
|
if (str.len < 14) return false;
|
||||||
|
if (str.ptr[0] != ':' || str.ptr[1] != ':' || str.ptr[6] != ':') return false;
|
||||||
|
for (i = 2; i < 6; i++) {
|
||||||
|
if (str.ptr[i] != 'f' && str.ptr[i] != 'F') return false;
|
||||||
|
}
|
||||||
|
// struct mg_str s = mg_str_n(&str.ptr[7], str.len - 7);
|
||||||
|
if (!mg_aton4(mg_str_n(&str.ptr[7], str.len - 7), addr)) return false;
|
||||||
|
memcpy(&ipv4, addr->ip, sizeof(ipv4));
|
||||||
|
memset(addr->ip, 0, sizeof(addr->ip));
|
||||||
|
addr->ip[10] = addr->ip[11] = 255;
|
||||||
|
memcpy(&addr->ip[12], &ipv4, 4);
|
||||||
|
addr->is_ip6 = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool mg_aton6(struct mg_str str, struct mg_addr *addr) {
|
||||||
|
size_t i, j = 0, n = 0, dc = 42;
|
||||||
|
if (str.len > 2 && str.ptr[0] == '[') str.ptr++, str.len -= 2;
|
||||||
|
if (mg_v4mapped(str, addr)) return true;
|
||||||
|
for (i = 0; i < str.len; i++) {
|
||||||
|
if ((str.ptr[i] >= '0' && str.ptr[i] <= '9') ||
|
||||||
|
(str.ptr[i] >= 'a' && str.ptr[i] <= 'f') ||
|
||||||
|
(str.ptr[i] >= 'A' && str.ptr[i] <= 'F')) {
|
||||||
|
unsigned long val;
|
||||||
|
if (i > j + 3) return false;
|
||||||
|
// MG_DEBUG(("%zu %zu [%.*s]", i, j, (int) (i - j + 1), &str.ptr[j]));
|
||||||
|
val = mg_unhexn(&str.ptr[j], i - j + 1);
|
||||||
|
addr->ip[n] = (uint8_t) ((val >> 8) & 255);
|
||||||
|
addr->ip[n + 1] = (uint8_t) (val & 255);
|
||||||
|
} else if (str.ptr[i] == ':') {
|
||||||
|
j = i + 1;
|
||||||
|
if (i > 0 && str.ptr[i - 1] == ':') {
|
||||||
|
dc = n; // Double colon
|
||||||
|
if (i > 1 && str.ptr[i - 2] == ':') return false;
|
||||||
|
} else if (i > 0) {
|
||||||
|
n += 2;
|
||||||
|
}
|
||||||
|
if (n > 14) return false;
|
||||||
|
addr->ip[n] = addr->ip[n + 1] = 0; // For trailing ::
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (n < 14 && dc == 42) return false;
|
||||||
|
if (n < 14) {
|
||||||
|
memmove(&addr->ip[dc + (14 - n)], &addr->ip[dc], n - dc + 2);
|
||||||
|
memset(&addr->ip[dc], 0, 14 - n);
|
||||||
|
}
|
||||||
|
|
||||||
|
addr->is_ip6 = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mg_aton(struct mg_str str, struct mg_addr *addr) {
|
||||||
|
// MG_INFO(("[%.*s]", (int) str.len, str.ptr));
|
||||||
|
return mg_atone(str, addr) || mg_atonl(str, addr) || mg_aton4(str, addr) ||
|
||||||
|
mg_aton6(str, addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct mg_connection *mg_alloc_conn(struct mg_mgr *mgr) {
|
||||||
|
struct mg_connection *c =
|
||||||
|
(struct mg_connection *) calloc(1, sizeof(*c) + mgr->extraconnsize);
|
||||||
|
if (c != NULL) {
|
||||||
|
c->mgr = mgr;
|
||||||
|
c->send.align = c->recv.align = MG_IO_SIZE;
|
||||||
|
c->id = ++mgr->nextid;
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mg_close_conn(struct mg_connection *c) {
|
||||||
|
mg_resolve_cancel(c); // Close any pending DNS query
|
||||||
|
LIST_DELETE(struct mg_connection, &c->mgr->conns, c);
|
||||||
|
if (c == c->mgr->dns4.c) c->mgr->dns4.c = NULL;
|
||||||
|
if (c == c->mgr->dns6.c) c->mgr->dns6.c = NULL;
|
||||||
|
// Order of operations is important. `MG_EV_CLOSE` event must be fired
|
||||||
|
// before we deallocate received data, see #1331
|
||||||
|
mg_call(c, MG_EV_CLOSE, NULL);
|
||||||
|
MG_DEBUG(("%lu %p closed", c->id, c->fd));
|
||||||
|
|
||||||
|
mg_tls_free(c);
|
||||||
|
mg_iobuf_free(&c->recv);
|
||||||
|
mg_iobuf_free(&c->send);
|
||||||
|
memset(c, 0, sizeof(*c));
|
||||||
|
free(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct mg_connection *mg_connect(struct mg_mgr *mgr, const char *url,
|
||||||
|
mg_event_handler_t fn, void *fn_data) {
|
||||||
|
struct mg_connection *c = NULL;
|
||||||
|
if (url == NULL || url[0] == '\0') {
|
||||||
|
MG_ERROR(("null url"));
|
||||||
|
} else if ((c = mg_alloc_conn(mgr)) == NULL) {
|
||||||
|
MG_ERROR(("OOM"));
|
||||||
|
} else {
|
||||||
|
LIST_ADD_HEAD(struct mg_connection, &mgr->conns, c);
|
||||||
|
c->is_udp = (strncmp(url, "udp:", 4) == 0);
|
||||||
|
c->fd = (void *) (size_t) MG_INVALID_SOCKET;
|
||||||
|
c->fn = fn;
|
||||||
|
c->is_client = true;
|
||||||
|
c->fn_data = fn_data;
|
||||||
|
MG_DEBUG(("%lu %p %s", c->id, c->fd, url));
|
||||||
|
mg_call(c, MG_EV_OPEN, (void *) url);
|
||||||
|
mg_resolve(c, url);
|
||||||
|
if (mg_url_is_ssl(url)) {
|
||||||
|
struct mg_str host = mg_url_host(url);
|
||||||
|
mg_tls_init(c, host);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct mg_connection *mg_listen(struct mg_mgr *mgr, const char *url,
|
||||||
|
mg_event_handler_t fn, void *fn_data) {
|
||||||
|
struct mg_connection *c = NULL;
|
||||||
|
if ((c = mg_alloc_conn(mgr)) == NULL) {
|
||||||
|
MG_ERROR(("OOM %s", url));
|
||||||
|
} else if (!mg_open_listener(c, url)) {
|
||||||
|
MG_ERROR(("Failed: %s, errno %d", url, errno));
|
||||||
|
free(c);
|
||||||
|
c = NULL;
|
||||||
|
} else {
|
||||||
|
c->is_listening = 1;
|
||||||
|
c->is_udp = strncmp(url, "udp:", 4) == 0;
|
||||||
|
LIST_ADD_HEAD(struct mg_connection, &mgr->conns, c);
|
||||||
|
c->fn = fn;
|
||||||
|
c->fn_data = fn_data;
|
||||||
|
mg_call(c, MG_EV_OPEN, NULL);
|
||||||
|
if (mg_url_is_ssl(url)) c->is_tls = 1; // Accepted connection must
|
||||||
|
MG_DEBUG(("%lu %p %s", c->id, c->fd, url));
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct mg_connection *mg_wrapfd(struct mg_mgr *mgr, int fd,
|
||||||
|
mg_event_handler_t fn, void *fn_data) {
|
||||||
|
struct mg_connection *c = mg_alloc_conn(mgr);
|
||||||
|
if (c != NULL) {
|
||||||
|
c->fd = (void *) (size_t) fd;
|
||||||
|
c->fn = fn;
|
||||||
|
c->fn_data = fn_data;
|
||||||
|
MG_EPOLL_ADD(c);
|
||||||
|
mg_call(c, MG_EV_OPEN, NULL);
|
||||||
|
LIST_ADD_HEAD(struct mg_connection, &mgr->conns, c);
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct mg_timer *mg_timer_add(struct mg_mgr *mgr, uint64_t milliseconds,
|
||||||
|
unsigned flags, void (*fn)(void *), void *arg) {
|
||||||
|
struct mg_timer *t = (struct mg_timer *) calloc(1, sizeof(*t));
|
||||||
|
if (t != NULL) {
|
||||||
|
mg_timer_init(&mgr->timers, t, milliseconds, flags, fn, arg);
|
||||||
|
t->id = mgr->timerid++;
|
||||||
|
}
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mg_mgr_free(struct mg_mgr *mgr) {
|
||||||
|
struct mg_connection *c;
|
||||||
|
struct mg_timer *tmp, *t = mgr->timers;
|
||||||
|
while (t != NULL) tmp = t->next, free(t), t = tmp;
|
||||||
|
mgr->timers = NULL; // Important. Next call to poll won't touch timers
|
||||||
|
for (c = mgr->conns; c != NULL; c = c->next) c->is_closing = 1;
|
||||||
|
mg_mgr_poll(mgr, 0);
|
||||||
|
#if MG_ENABLE_FREERTOS_TCP
|
||||||
|
FreeRTOS_DeleteSocketSet(mgr->ss);
|
||||||
|
#endif
|
||||||
|
MG_DEBUG(("All connections closed"));
|
||||||
|
#if MG_ENABLE_EPOLL
|
||||||
|
if (mgr->epoll_fd >= 0) close(mgr->epoll_fd), mgr->epoll_fd = -1;
|
||||||
|
#endif
|
||||||
|
mg_tls_ctx_free(mgr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mg_mgr_init(struct mg_mgr *mgr) {
|
||||||
|
memset(mgr, 0, sizeof(*mgr));
|
||||||
|
#if MG_ENABLE_EPOLL
|
||||||
|
if ((mgr->epoll_fd = epoll_create1(EPOLL_CLOEXEC)) < 0)
|
||||||
|
MG_ERROR(("epoll_create1 errno %d", errno));
|
||||||
|
#else
|
||||||
|
mgr->epoll_fd = -1;
|
||||||
|
#endif
|
||||||
|
#if MG_ARCH == MG_ARCH_WIN32 && MG_ENABLE_WINSOCK
|
||||||
|
// clang-format off
|
||||||
|
{ WSADATA data; WSAStartup(MAKEWORD(2, 2), &data); }
|
||||||
|
// clang-format on
|
||||||
|
#elif MG_ENABLE_FREERTOS_TCP
|
||||||
|
mgr->ss = FreeRTOS_CreateSocketSet();
|
||||||
|
#elif defined(__unix) || defined(__unix__) || defined(__APPLE__)
|
||||||
|
// Ignore SIGPIPE signal, so if client cancels the request, it
|
||||||
|
// won't kill the whole process.
|
||||||
|
signal(SIGPIPE, SIG_IGN);
|
||||||
|
#endif
|
||||||
|
mgr->dnstimeout = 3000;
|
||||||
|
mgr->dns4.url = "udp://8.8.8.8:53";
|
||||||
|
mgr->dns6.url = "udp://[2001:4860:4860::8888]:53";
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef MG_ENABLE_LINES
|
#ifdef MG_ENABLE_LINES
|
||||||
#line 1 "src/ota_dummy.c"
|
#line 1 "src/ota_dummy.c"
|
||||||
#endif
|
#endif
|
||||||
|
159
mongoose.h
159
mongoose.h
@ -1819,165 +1819,6 @@ struct mg_tcpip_driver_tm4c_data {
|
|||||||
int mdc_cr; // Valid values: -1, 0, 1, 2, 3
|
int mdc_cr; // Valid values: -1, 0, 1, 2, 3
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define CA_ISRG_ROOT_X2 \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw\n" \
|
|
||||||
"CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg\n" \
|
|
||||||
"R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00\n" \
|
|
||||||
"MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT\n" \
|
|
||||||
"ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw\n" \
|
|
||||||
"EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW\n" \
|
|
||||||
"+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9\n" \
|
|
||||||
"ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T\n" \
|
|
||||||
"AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI\n" \
|
|
||||||
"zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW\n" \
|
|
||||||
"tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1\n" \
|
|
||||||
"/q4AaOeMSQ+2b1tbFfLn\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_ISRG_ROOT_X1 \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw\n" \
|
|
||||||
"TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh\n" \
|
|
||||||
"cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4\n" \
|
|
||||||
"WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu\n" \
|
|
||||||
"ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY\n" \
|
|
||||||
"MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc\n" \
|
|
||||||
"h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+\n" \
|
|
||||||
"0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U\n" \
|
|
||||||
"A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW\n" \
|
|
||||||
"T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH\n" \
|
|
||||||
"B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC\n" \
|
|
||||||
"B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv\n" \
|
|
||||||
"KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn\n" \
|
|
||||||
"OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn\n" \
|
|
||||||
"jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw\n" \
|
|
||||||
"qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI\n" \
|
|
||||||
"rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV\n" \
|
|
||||||
"HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq\n" \
|
|
||||||
"hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL\n" \
|
|
||||||
"ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ\n" \
|
|
||||||
"3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK\n" \
|
|
||||||
"NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5\n" \
|
|
||||||
"ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur\n" \
|
|
||||||
"TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC\n" \
|
|
||||||
"jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc\n" \
|
|
||||||
"oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq\n" \
|
|
||||||
"4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA\n" \
|
|
||||||
"mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d\n" \
|
|
||||||
"emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_GOOGLE_TRUST \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIIBxTCCAWugAwIBAgINAfD3nVndblD3QnNxUDAKBggqhkjOPQQDAjBEMQswCQYD\n" \
|
|
||||||
"VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzERMA8G\n" \
|
|
||||||
"A1UEAxMIR1RTIExUU1IwHhcNMTgxMTAxMDAwMDQyWhcNNDIxMTAxMDAwMDQyWjBE\n" \
|
|
||||||
"MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM\n" \
|
|
||||||
"QzERMA8GA1UEAxMIR1RTIExUU1IwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATN\n" \
|
|
||||||
"8YyO2u+yCQoZdwAkUNv5c3dokfULfrA6QJgFV2XMuENtQZIG5HUOS6jFn8f0ySlV\n" \
|
|
||||||
"eORCxqFyjDJyRn86d+Iko0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUw\n" \
|
|
||||||
"AwEB/zAdBgNVHQ4EFgQUPv7/zFLrvzQ+PfNA0OQlsV+4u1IwCgYIKoZIzj0EAwID\n" \
|
|
||||||
"SAAwRQIhAPKuf/VtBHqGw3TUwUIq7TfaExp3bH7bjCBmVXJupT9FAiBr0SmCtsuk\n" \
|
|
||||||
"miGgpajjf/gFigGM34F9021bCWs1MbL0SA==\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_GLOBALSIGN_EC \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk\n" \
|
|
||||||
"MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH\n" \
|
|
||||||
"bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX\n" \
|
|
||||||
"DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD\n" \
|
|
||||||
"QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu\n" \
|
|
||||||
"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ\n" \
|
|
||||||
"FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw\n" \
|
|
||||||
"DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F\n" \
|
|
||||||
"uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX\n" \
|
|
||||||
"kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs\n" \
|
|
||||||
"ewv4n4Q=\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_GLOBALSIGN_RSA \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG\n" \
|
|
||||||
"A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv\n" \
|
|
||||||
"b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw\n" \
|
|
||||||
"MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i\n" \
|
|
||||||
"YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT\n" \
|
|
||||||
"aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ\n" \
|
|
||||||
"jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp\n" \
|
|
||||||
"xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp\n" \
|
|
||||||
"1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG\n" \
|
|
||||||
"snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ\n" \
|
|
||||||
"U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8\n" \
|
|
||||||
"9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E\n" \
|
|
||||||
"BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B\n" \
|
|
||||||
"AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz\n" \
|
|
||||||
"yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE\n" \
|
|
||||||
"38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP\n" \
|
|
||||||
"AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad\n" \
|
|
||||||
"DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME\n" \
|
|
||||||
"HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_DIGICERT \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n" \
|
|
||||||
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" \
|
|
||||||
"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n" \
|
|
||||||
"QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n" \
|
|
||||||
"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n" \
|
|
||||||
"b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n" \
|
|
||||||
"9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n" \
|
|
||||||
"CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n" \
|
|
||||||
"nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n" \
|
|
||||||
"43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n" \
|
|
||||||
"T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n" \
|
|
||||||
"gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n" \
|
|
||||||
"BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n" \
|
|
||||||
"TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n" \
|
|
||||||
"DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n" \
|
|
||||||
"hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n" \
|
|
||||||
"06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n" \
|
|
||||||
"PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n" \
|
|
||||||
"YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n" \
|
|
||||||
"CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_AMAZON_4 \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5\n" \
|
|
||||||
"MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\n" \
|
|
||||||
"Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\n" \
|
|
||||||
"A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\n" \
|
|
||||||
"Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi\n" \
|
|
||||||
"9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk\n" \
|
|
||||||
"M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB\n" \
|
|
||||||
"/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB\n" \
|
|
||||||
"MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw\n" \
|
|
||||||
"CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW\n" \
|
|
||||||
"1KyLa2tJElMzrdfkviT8tQp21KW8EA==\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_AMAZON_3 \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5\n" \
|
|
||||||
"MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\n" \
|
|
||||||
"Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\n" \
|
|
||||||
"A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\n" \
|
|
||||||
"Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl\n" \
|
|
||||||
"ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j\n" \
|
|
||||||
"QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr\n" \
|
|
||||||
"ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr\n" \
|
|
||||||
"BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM\n" \
|
|
||||||
"YyRIHN8wfdVoOw==\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_ALL \
|
|
||||||
CA_ISRG_ROOT_X1 CA_ISRG_ROOT_X2 CA_GOOGLE_TRUST CA_GLOBALSIGN_EC \
|
|
||||||
CA_GLOBALSIGN_RSA CA_DIGICERT CA_AMAZON_4 CA_AMAZON_3
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
159
src/certs.h
159
src/certs.h
@ -1,159 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#define CA_ISRG_ROOT_X2 \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw\n" \
|
|
||||||
"CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg\n" \
|
|
||||||
"R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00\n" \
|
|
||||||
"MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT\n" \
|
|
||||||
"ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw\n" \
|
|
||||||
"EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW\n" \
|
|
||||||
"+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9\n" \
|
|
||||||
"ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T\n" \
|
|
||||||
"AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI\n" \
|
|
||||||
"zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW\n" \
|
|
||||||
"tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1\n" \
|
|
||||||
"/q4AaOeMSQ+2b1tbFfLn\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_ISRG_ROOT_X1 \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw\n" \
|
|
||||||
"TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh\n" \
|
|
||||||
"cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4\n" \
|
|
||||||
"WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu\n" \
|
|
||||||
"ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY\n" \
|
|
||||||
"MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc\n" \
|
|
||||||
"h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+\n" \
|
|
||||||
"0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U\n" \
|
|
||||||
"A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW\n" \
|
|
||||||
"T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH\n" \
|
|
||||||
"B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC\n" \
|
|
||||||
"B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv\n" \
|
|
||||||
"KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn\n" \
|
|
||||||
"OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn\n" \
|
|
||||||
"jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw\n" \
|
|
||||||
"qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI\n" \
|
|
||||||
"rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV\n" \
|
|
||||||
"HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq\n" \
|
|
||||||
"hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL\n" \
|
|
||||||
"ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ\n" \
|
|
||||||
"3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK\n" \
|
|
||||||
"NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5\n" \
|
|
||||||
"ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur\n" \
|
|
||||||
"TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC\n" \
|
|
||||||
"jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc\n" \
|
|
||||||
"oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq\n" \
|
|
||||||
"4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA\n" \
|
|
||||||
"mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d\n" \
|
|
||||||
"emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_GOOGLE_TRUST \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIIBxTCCAWugAwIBAgINAfD3nVndblD3QnNxUDAKBggqhkjOPQQDAjBEMQswCQYD\n" \
|
|
||||||
"VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzERMA8G\n" \
|
|
||||||
"A1UEAxMIR1RTIExUU1IwHhcNMTgxMTAxMDAwMDQyWhcNNDIxMTAxMDAwMDQyWjBE\n" \
|
|
||||||
"MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM\n" \
|
|
||||||
"QzERMA8GA1UEAxMIR1RTIExUU1IwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATN\n" \
|
|
||||||
"8YyO2u+yCQoZdwAkUNv5c3dokfULfrA6QJgFV2XMuENtQZIG5HUOS6jFn8f0ySlV\n" \
|
|
||||||
"eORCxqFyjDJyRn86d+Iko0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUw\n" \
|
|
||||||
"AwEB/zAdBgNVHQ4EFgQUPv7/zFLrvzQ+PfNA0OQlsV+4u1IwCgYIKoZIzj0EAwID\n" \
|
|
||||||
"SAAwRQIhAPKuf/VtBHqGw3TUwUIq7TfaExp3bH7bjCBmVXJupT9FAiBr0SmCtsuk\n" \
|
|
||||||
"miGgpajjf/gFigGM34F9021bCWs1MbL0SA==\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_GLOBALSIGN_EC \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk\n" \
|
|
||||||
"MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH\n" \
|
|
||||||
"bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX\n" \
|
|
||||||
"DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD\n" \
|
|
||||||
"QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu\n" \
|
|
||||||
"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ\n" \
|
|
||||||
"FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw\n" \
|
|
||||||
"DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F\n" \
|
|
||||||
"uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX\n" \
|
|
||||||
"kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs\n" \
|
|
||||||
"ewv4n4Q=\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_GLOBALSIGN_RSA \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG\n" \
|
|
||||||
"A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv\n" \
|
|
||||||
"b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw\n" \
|
|
||||||
"MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i\n" \
|
|
||||||
"YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT\n" \
|
|
||||||
"aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ\n" \
|
|
||||||
"jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp\n" \
|
|
||||||
"xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp\n" \
|
|
||||||
"1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG\n" \
|
|
||||||
"snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ\n" \
|
|
||||||
"U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8\n" \
|
|
||||||
"9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E\n" \
|
|
||||||
"BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B\n" \
|
|
||||||
"AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz\n" \
|
|
||||||
"yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE\n" \
|
|
||||||
"38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP\n" \
|
|
||||||
"AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad\n" \
|
|
||||||
"DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME\n" \
|
|
||||||
"HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_DIGICERT \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n" \
|
|
||||||
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" \
|
|
||||||
"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n" \
|
|
||||||
"QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n" \
|
|
||||||
"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n" \
|
|
||||||
"b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n" \
|
|
||||||
"9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n" \
|
|
||||||
"CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n" \
|
|
||||||
"nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n" \
|
|
||||||
"43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n" \
|
|
||||||
"T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n" \
|
|
||||||
"gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n" \
|
|
||||||
"BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n" \
|
|
||||||
"TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n" \
|
|
||||||
"DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n" \
|
|
||||||
"hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n" \
|
|
||||||
"06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n" \
|
|
||||||
"PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n" \
|
|
||||||
"YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n" \
|
|
||||||
"CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_AMAZON_4 \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5\n" \
|
|
||||||
"MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\n" \
|
|
||||||
"Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\n" \
|
|
||||||
"A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\n" \
|
|
||||||
"Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi\n" \
|
|
||||||
"9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk\n" \
|
|
||||||
"M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB\n" \
|
|
||||||
"/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB\n" \
|
|
||||||
"MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw\n" \
|
|
||||||
"CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW\n" \
|
|
||||||
"1KyLa2tJElMzrdfkviT8tQp21KW8EA==\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_AMAZON_3 \
|
|
||||||
"-----BEGIN CERTIFICATE-----\n" \
|
|
||||||
"MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5\n" \
|
|
||||||
"MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\n" \
|
|
||||||
"Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\n" \
|
|
||||||
"A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\n" \
|
|
||||||
"Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl\n" \
|
|
||||||
"ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j\n" \
|
|
||||||
"QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr\n" \
|
|
||||||
"ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr\n" \
|
|
||||||
"BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM\n" \
|
|
||||||
"YyRIHN8wfdVoOw==\n" \
|
|
||||||
"-----END CERTIFICATE-----\n"
|
|
||||||
|
|
||||||
#define CA_ALL \
|
|
||||||
CA_ISRG_ROOT_X1 CA_ISRG_ROOT_X2 CA_GOOGLE_TRUST CA_GLOBALSIGN_EC \
|
|
||||||
CA_GLOBALSIGN_RSA CA_DIGICERT CA_AMAZON_4 CA_AMAZON_3
|
|
@ -760,8 +760,8 @@ static int fetch(struct mg_mgr *mgr, char *buf, const char *url,
|
|||||||
va_list ap;
|
va_list ap;
|
||||||
if (mgr->tls_ctx == NULL) {
|
if (mgr->tls_ctx == NULL) {
|
||||||
struct mg_tls_opts opts;
|
struct mg_tls_opts opts;
|
||||||
memset(&opts, 0, sizeof(opts));
|
memset(&opts, 0, sizeof(opts)); // read CA from packed_fs
|
||||||
opts.client_ca = mg_str(CA_ISRG_ROOT_X1);
|
opts.client_ca = mg_unpacked("test/data/ca.pem");
|
||||||
if (strstr(url, "127.0.0.1") != NULL) {
|
if (strstr(url, "127.0.0.1") != NULL) {
|
||||||
// Local connection, use self-signed certificates
|
// Local connection, use self-signed certificates
|
||||||
opts.client_ca = mg_str(s_tls_ca);
|
opts.client_ca = mg_str(s_tls_ca);
|
||||||
@ -1247,9 +1247,11 @@ static void test_http_client(void) {
|
|||||||
struct mg_mgr mgr;
|
struct mg_mgr mgr;
|
||||||
struct mg_connection *c = NULL;
|
struct mg_connection *c = NULL;
|
||||||
int i, ok = 0;
|
int i, ok = 0;
|
||||||
|
size_t size = 0; // read CA certs from plain file
|
||||||
|
char *data = mg_file_read(&mg_fs_posix, "test/data/ca.pem", &size);
|
||||||
memset(&opts, 0, sizeof(opts));
|
memset(&opts, 0, sizeof(opts));
|
||||||
mg_mgr_init(&mgr);
|
mg_mgr_init(&mgr);
|
||||||
opts.client_ca = mg_str(CA_ISRG_ROOT_X2 CA_ISRG_ROOT_X1);
|
opts.client_ca = mg_str_n(data, size);
|
||||||
mg_tls_ctx_init(&mgr, &opts);
|
mg_tls_ctx_init(&mgr, &opts);
|
||||||
c = mg_http_connect(&mgr, "http://cesanta.com", f3, &ok);
|
c = mg_http_connect(&mgr, "http://cesanta.com", f3, &ok);
|
||||||
ASSERT(c != NULL);
|
ASSERT(c != NULL);
|
||||||
@ -1305,6 +1307,7 @@ static void test_http_client(void) {
|
|||||||
|
|
||||||
mg_mgr_free(&mgr);
|
mg_mgr_free(&mgr);
|
||||||
ASSERT(mgr.conns == NULL);
|
ASSERT(mgr.conns == NULL);
|
||||||
|
free(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void f4(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
|
static void f4(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user