2016-08-22 23:04:44 +01:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2016 Cesanta Software Limited
|
|
|
|
* All rights reserved
|
|
|
|
*/
|
|
|
|
|
Change from using #ifdef to #if for features tests
"#if FOO" still works with simple -DFOO, but gives more flexibility.
Specifically, if user expressed no preference (FOO is not defined),
we can apply reasonable defaults (this is the legitimate use of ifdef).
In short, from now on, please use
#if MG_ENABLE_FOO
instead of
#ifdef MG_ENABLE_FOO
Since we are all used to #ifdef, this change also adds a precommit check
to police this. Specifically, in *.h and *.c files that are Copyright Cesanta,
"ifdef" and "if defined()" are not allowed to be used with macros that contain
ENABLE or DISABLE, unless the like also contains "ifdef-ok".
Hence, if you are sure you want to use ifdef, use this:
#ifdef MG_ENABLE_FOO /* ifdef-ok */
PUBLISHED_FROM=9be829448f53cff575d6cae8b9945fb12531c15a
2016-10-13 20:55:08 +03:00
|
|
|
#if MG_ENABLE_SSL
|
2016-08-22 23:04:44 +01:00
|
|
|
/*
|
|
|
|
* This example starts an SSL web server on https://localhost:8443/
|
|
|
|
*
|
|
|
|
* Please note that the certificate used is a self-signed one and will not be
|
|
|
|
* recognised as valid. You should expect an SSL error and will need to
|
|
|
|
* explicitly allow the browser to proceed.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "mongoose.h"
|
|
|
|
|
|
|
|
static const char *s_http_port = "8443";
|
|
|
|
static const char *s_ssl_cert = "server.pem";
|
|
|
|
static const char *s_ssl_key = "server.key";
|
|
|
|
static struct mg_serve_http_opts s_http_server_opts;
|
|
|
|
|
|
|
|
static void ev_handler(struct mg_connection *nc, int ev, void *p) {
|
|
|
|
if (ev == MG_EV_HTTP_REQUEST) {
|
|
|
|
mg_serve_http(nc, (struct http_message *) p, s_http_server_opts);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
int main(void) {
|
|
|
|
struct mg_mgr mgr;
|
|
|
|
struct mg_connection *nc;
|
|
|
|
struct mg_bind_opts bind_opts;
|
2016-08-31 13:24:23 +01:00
|
|
|
const char *err;
|
2016-08-22 23:04:44 +01:00
|
|
|
|
|
|
|
mg_mgr_init(&mgr, NULL);
|
|
|
|
memset(&bind_opts, 0, sizeof(bind_opts));
|
|
|
|
bind_opts.ssl_cert = s_ssl_cert;
|
|
|
|
bind_opts.ssl_key = s_ssl_key;
|
2016-08-31 13:24:23 +01:00
|
|
|
bind_opts.error_string = &err;
|
|
|
|
|
2016-08-22 23:04:44 +01:00
|
|
|
printf("Starting SSL server on port %s, cert from %s, key from %s\n",
|
|
|
|
s_http_port, bind_opts.ssl_cert, bind_opts.ssl_key);
|
|
|
|
nc = mg_bind_opt(&mgr, s_http_port, ev_handler, bind_opts);
|
|
|
|
if (nc == NULL) {
|
2016-08-31 13:24:23 +01:00
|
|
|
printf("Failed to create listener: %s\n", err);
|
2016-08-22 23:04:44 +01:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Set up HTTP server parameters
|
|
|
|
mg_set_protocol_http_websocket(nc);
|
|
|
|
s_http_server_opts.document_root = "."; // Serve current directory
|
|
|
|
s_http_server_opts.enable_directory_listing = "yes";
|
|
|
|
|
|
|
|
for (;;) {
|
|
|
|
mg_mgr_poll(&mgr, 1000);
|
|
|
|
}
|
|
|
|
mg_mgr_free(&mgr);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
int main(void) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
#endif /* MG_ENABLE_SSL */
|