diff --git a/examples/device-dashboard/main.c b/examples/device-dashboard/main.c index 094b0acd..6e2c5c17 100644 --- a/examples/device-dashboard/main.c +++ b/examples/device-dashboard/main.c @@ -2,7 +2,9 @@ // All rights reserved #include "mongoose.h" + const char *s_listening_url = "http://0.0.0.0:8000"; +const char *s_listening_surl = "https://0.0.0.0:8443"; void device_dashboard_fn(struct mg_connection *, int, void *, void *); @@ -12,6 +14,10 @@ int main(void) { mg_mgr_init(&mgr); mg_http_listen(&mgr, s_listening_url, device_dashboard_fn, NULL); MG_INFO(("Listening on %s", s_listening_url)); +#if MG_ENABLE_MBEDTLS || MG_ENABLE_OPENSSL + mg_http_listen(&mgr, s_listening_surl, device_dashboard_fn, ""); + MG_INFO(("Listening on %s", s_listening_surl)); +#endif while (mgr.conns != NULL) mg_mgr_poll(&mgr, 500); mg_mgr_free(&mgr); return 0; diff --git a/examples/device-dashboard/net.c b/examples/device-dashboard/net.c index 9199d198..fcf52695 100644 --- a/examples/device-dashboard/net.c +++ b/examples/device-dashboard/net.c @@ -4,7 +4,11 @@ #include "mongoose.h" #if !defined(MQTT_SERVER) -#define MQTT_SERVER "mqtt://broker.hivemq.com:1883" +#if MG_ENABLE_MBEDTLS || MG_ENABLE_OPENSSL + #define MQTT_SERVER "mqtts://broker.hivemq.com:8883" +#else + #define MQTT_SERVER "mqtt://broker.hivemq.com:1883" +#endif #endif #define MQTT_PUBLISH_TOPIC "mg/my_device" #define MQTT_SUBSCRIBE_TOPIC "mg/#" diff --git a/examples/http-reverse-proxy/main.c b/examples/http-reverse-proxy/main.c index 8d4511b7..0d02deef 100644 --- a/examples/http-reverse-proxy/main.c +++ b/examples/http-reverse-proxy/main.c @@ -7,16 +7,16 @@ // // To enable SSL/TLS, see https://mongoose.ws/tutorials/tls/#how-to-build +#include "mongoose.h" + static const char *s_backend_url = -#if defined(MG_ENABLE_MBEDTLS) || defined(MG_ENABLE_OPENSSL) +#if MG_ENABLE_MBEDTLS || MG_ENABLE_OPENSSL "https://cesanta.com"; #else "http://info.cern.ch"; #endif static const char *s_listen_url = "http://localhost:8000"; -#include "mongoose.h" - // Forward client request to the backend connection, rewriting the Host header static void forward_request(struct mg_http_message *hm, struct mg_connection *c) { diff --git a/examples/mqtt-client-aws-iot/Makefile b/examples/mqtt-client-aws-iot/Makefile index 26fdbf05..762728ec 100644 --- a/examples/mqtt-client-aws-iot/Makefile +++ b/examples/mqtt-client-aws-iot/Makefile @@ -1,20 +1,32 @@ -PROG ?= example -CFLAGS ?= -W -Wall -Wextra -O2 -SSL ?= MBEDTLS +PROG ?= example # Program we are building +DELETE = rm -rf # Command to remove files +OUT ?= -o $(PROG) # Compiler argument for output file +SOURCES = main.c mongoose.c # Source code files +CFLAGS = -W -Wall -Wextra -g -I. # Build options -ifeq "$(SSL)" "MBEDTLS" -CFLAGS += -DMG_ENABLE_MBEDTLS=1 -lmbedtls -lmbedcrypto -lmbedx509 -L$(MBEDTLS)/lib -I$(MBEDTLS)/include +# Mongoose build options. See https://mongoose.ws/documentation/#build-options +#CFLAGS_MONGOOSE += -DMG_ENABLE_LINES=1 + +ifeq ($(OS),Windows_NT) # Windows settings. Assume MinGW compiler. To use VC: make CC=cl CFLAGS=/MD OUT=/Feprog.exe + PROG ?= example.exe # Use .exe suffix for the binary + CC = gcc # Use MinGW gcc compiler + CFLAGS += -lws2_32 # Link against Winsock library + DELETE = cmd /C del /Q /F /S # Command prompt command to delete files + OUT ?= -o $(PROG) # Build output + MAKE += WINDOWS=1 CC=$(CC) endif -ifeq "$(SSL)" "OPENSSL" -CFLAGS += -DMG_ENABLE_OPENSSL=1 -lssl -lcrypto -L$(OPENSSL)/lib -I$(OPENSSL)/include -endif - -all: $(PROG) +all: $(PROG) # Default target. Build and run program $(RUN) ./$(PROG) $(ARGS) -$(PROG): main.c - $(CC) main.c ../../mongoose.c -I../.. $(CFLAGS) $(EXTRA_CFLAGS) -o $(PROG) +$(PROG): $(SOURCES) # Build program from sources + $(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT) -clean: - rm -rf $(PROG) *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb +clean: # Cleanup. Delete built program and all build artifacts + $(DELETE) $(PROG) *.o *.obj *.exe *.dSYM mbedtls + +# see https://mongoose.ws/tutorials/tls/#how-to-build for TLS build options + +mbedtls: # Pull and build mbedTLS library + git clone --depth 1 -b v2.28.2 https://github.com/mbed-tls/mbedtls $@ + $(MAKE) -C mbedtls/library diff --git a/examples/mqtt-client-aws-iot/README.md b/examples/mqtt-client-aws-iot/README.md index 06027833..48c2b568 100644 --- a/examples/mqtt-client-aws-iot/README.md +++ b/examples/mqtt-client-aws-iot/README.md @@ -1 +1 @@ -See detailed tutorial at https://mongoose.ws/tutorials/aws-iot/ +See detailed tutorial at https://mongoose.ws/tutorials/mqtt-client-aws-iot/ diff --git a/examples/mqtt-client-aws-iot/mongoose.c b/examples/mqtt-client-aws-iot/mongoose.c new file mode 120000 index 00000000..8ef6e62d --- /dev/null +++ b/examples/mqtt-client-aws-iot/mongoose.c @@ -0,0 +1 @@ +../../mongoose.c \ No newline at end of file diff --git a/examples/mqtt-client-aws-iot/mongoose.h b/examples/mqtt-client-aws-iot/mongoose.h new file mode 120000 index 00000000..488ef358 --- /dev/null +++ b/examples/mqtt-client-aws-iot/mongoose.h @@ -0,0 +1 @@ +../../mongoose.h \ No newline at end of file diff --git a/examples/mqtt-client/Makefile b/examples/mqtt-client/Makefile index 9addcb99..762728ec 100644 --- a/examples/mqtt-client/Makefile +++ b/examples/mqtt-client/Makefile @@ -1,20 +1,32 @@ -PROG ?= example -SSL = ? +PROG ?= example # Program we are building +DELETE = rm -rf # Command to remove files +OUT ?= -o $(PROG) # Compiler argument for output file +SOURCES = main.c mongoose.c # Source code files +CFLAGS = -W -Wall -Wextra -g -I. # Build options -ifeq "$(SSL)" "MBEDTLS" -CFLAGS += -DMG_ENABLE_MBEDTLS=1 -lmbedtls -lmbedcrypto -lmbedx509 +# Mongoose build options. See https://mongoose.ws/documentation/#build-options +#CFLAGS_MONGOOSE += -DMG_ENABLE_LINES=1 + +ifeq ($(OS),Windows_NT) # Windows settings. Assume MinGW compiler. To use VC: make CC=cl CFLAGS=/MD OUT=/Feprog.exe + PROG ?= example.exe # Use .exe suffix for the binary + CC = gcc # Use MinGW gcc compiler + CFLAGS += -lws2_32 # Link against Winsock library + DELETE = cmd /C del /Q /F /S # Command prompt command to delete files + OUT ?= -o $(PROG) # Build output + MAKE += WINDOWS=1 CC=$(CC) endif -ifeq "$(SSL)" "OPENSSL" -CFLAGS += -DMG_ENABLE_OPENSSL=1 -lssl -lcrypto -endif +all: $(PROG) # Default target. Build and run program + $(RUN) ./$(PROG) $(ARGS) -all: $(PROG) - $(DEBUGGER) ./$(PROG) $(ARGS) +$(PROG): $(SOURCES) # Build program from sources + $(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT) +clean: # Cleanup. Delete built program and all build artifacts + $(DELETE) $(PROG) *.o *.obj *.exe *.dSYM mbedtls -$(PROG): main.c - $(CC) ../../mongoose.c -I../.. -W -Wall $(CFLAGS) $(EXTRA_CFLAGS) -o $(PROG) main.c +# see https://mongoose.ws/tutorials/tls/#how-to-build for TLS build options -clean: - rm -rf $(PROG) *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb +mbedtls: # Pull and build mbedTLS library + git clone --depth 1 -b v2.28.2 https://github.com/mbed-tls/mbedtls $@ + $(MAKE) -C mbedtls/library diff --git a/examples/mqtt-client/main.c b/examples/mqtt-client/main.c index 55afcd40..ce25b53e 100644 --- a/examples/mqtt-client/main.c +++ b/examples/mqtt-client/main.c @@ -12,7 +12,13 @@ #include "mongoose.h" -static const char *s_url = "mqtt://broker.hivemq.com:1883"; +static const char *s_url = +#if MG_ENABLE_MBEDTLS || MG_ENABLE_OPENSSL + "mqtts://broker.hivemq.com:8883"; +#else + "mqtt://broker.hivemq.com:1883"; +#endif + static const char *s_sub_topic = "mg/+/test"; static const char *s_pub_topic = "mg/clnt/test"; static int s_qos = 1; diff --git a/examples/mqtt-client/mongoose.c b/examples/mqtt-client/mongoose.c new file mode 120000 index 00000000..8ef6e62d --- /dev/null +++ b/examples/mqtt-client/mongoose.c @@ -0,0 +1 @@ +../../mongoose.c \ No newline at end of file diff --git a/examples/mqtt-client/mongoose.h b/examples/mqtt-client/mongoose.h new file mode 120000 index 00000000..488ef358 --- /dev/null +++ b/examples/mqtt-client/mongoose.h @@ -0,0 +1 @@ +../../mongoose.h \ No newline at end of file diff --git a/examples/mqtt-over-ws-client/Makefile b/examples/mqtt-over-ws-client/Makefile index 9addcb99..762728ec 100644 --- a/examples/mqtt-over-ws-client/Makefile +++ b/examples/mqtt-over-ws-client/Makefile @@ -1,20 +1,32 @@ -PROG ?= example -SSL = ? +PROG ?= example # Program we are building +DELETE = rm -rf # Command to remove files +OUT ?= -o $(PROG) # Compiler argument for output file +SOURCES = main.c mongoose.c # Source code files +CFLAGS = -W -Wall -Wextra -g -I. # Build options -ifeq "$(SSL)" "MBEDTLS" -CFLAGS += -DMG_ENABLE_MBEDTLS=1 -lmbedtls -lmbedcrypto -lmbedx509 +# Mongoose build options. See https://mongoose.ws/documentation/#build-options +#CFLAGS_MONGOOSE += -DMG_ENABLE_LINES=1 + +ifeq ($(OS),Windows_NT) # Windows settings. Assume MinGW compiler. To use VC: make CC=cl CFLAGS=/MD OUT=/Feprog.exe + PROG ?= example.exe # Use .exe suffix for the binary + CC = gcc # Use MinGW gcc compiler + CFLAGS += -lws2_32 # Link against Winsock library + DELETE = cmd /C del /Q /F /S # Command prompt command to delete files + OUT ?= -o $(PROG) # Build output + MAKE += WINDOWS=1 CC=$(CC) endif -ifeq "$(SSL)" "OPENSSL" -CFLAGS += -DMG_ENABLE_OPENSSL=1 -lssl -lcrypto -endif +all: $(PROG) # Default target. Build and run program + $(RUN) ./$(PROG) $(ARGS) -all: $(PROG) - $(DEBUGGER) ./$(PROG) $(ARGS) +$(PROG): $(SOURCES) # Build program from sources + $(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT) +clean: # Cleanup. Delete built program and all build artifacts + $(DELETE) $(PROG) *.o *.obj *.exe *.dSYM mbedtls -$(PROG): main.c - $(CC) ../../mongoose.c -I../.. -W -Wall $(CFLAGS) $(EXTRA_CFLAGS) -o $(PROG) main.c +# see https://mongoose.ws/tutorials/tls/#how-to-build for TLS build options -clean: - rm -rf $(PROG) *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb +mbedtls: # Pull and build mbedTLS library + git clone --depth 1 -b v2.28.2 https://github.com/mbed-tls/mbedtls $@ + $(MAKE) -C mbedtls/library diff --git a/examples/mqtt-over-ws-client/main.c b/examples/mqtt-over-ws-client/main.c index f08fb7a0..b6d816cf 100644 --- a/examples/mqtt-over-ws-client/main.c +++ b/examples/mqtt-over-ws-client/main.c @@ -9,9 +9,15 @@ // // To enable SSL/TLS, see https://mongoose.ws/tutorials/tls/#how-to-build +static const char *s_url = +#if defined(MG_ENABLE_MBEDTLS) || defined(MG_ENABLE_OPENSSL) + "wss://broker.hivemq.com:8884/mqtt"; +#else + "ws://broker.hivemq.com:8000/mqtt"; +#endif + #include "mongoose.h" -static const char *s_url = "ws://broker.hivemq.com:8000/mqtt"; static const char *s_topic = "mg/test"; static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { diff --git a/examples/mqtt-over-ws-client/mongoose.c b/examples/mqtt-over-ws-client/mongoose.c new file mode 120000 index 00000000..8ef6e62d --- /dev/null +++ b/examples/mqtt-over-ws-client/mongoose.c @@ -0,0 +1 @@ +../../mongoose.c \ No newline at end of file diff --git a/examples/mqtt-over-ws-client/mongoose.h b/examples/mqtt-over-ws-client/mongoose.h new file mode 120000 index 00000000..488ef358 --- /dev/null +++ b/examples/mqtt-over-ws-client/mongoose.h @@ -0,0 +1 @@ +../../mongoose.h \ No newline at end of file diff --git a/examples/mqtt-server/Makefile b/examples/mqtt-server/Makefile index 7870cca0..b231dd04 100644 --- a/examples/mqtt-server/Makefile +++ b/examples/mqtt-server/Makefile @@ -1,10 +1,25 @@ -PROG ?= example +PROG ?= example # Program we are building +DELETE = rm -rf # Command to remove files +OUT ?= -o $(PROG) # Compiler argument for output file +SOURCES = main.c mongoose.c # Source code files +CFLAGS = -W -Wall -Wextra -g -I. # Build options -all: $(PROG) +# Mongoose build options. See https://mongoose.ws/documentation/#build-options +CFLAGS_MONGOOSE += -DMG_ENABLE_LINES + +ifeq ($(OS),Windows_NT) # Windows settings. Assume MinGW compiler. To use VC: make CC=cl CFLAGS=/MD OUT=/Feprog.exe + PROG ?= example.exe # Use .exe suffix for the binary + CC = gcc # Use MinGW gcc compiler + CFLAGS += -lws2_32 # Link against Winsock library + DELETE = cmd /C del /Q /F /S # Command prompt command to delete files + OUT ?= -o $(PROG) # Build output +endif + +all: $(PROG) # Default target. Build and run program $(RUN) ./$(PROG) $(ARGS) -$(PROG): main.c - $(CC) ../../mongoose.c -I../.. -W -Wall -DMG_ENABLE_LINES=1 $(CFLAGS) -o $(PROG) main.c +$(PROG): $(SOURCES) # Build program from sources + $(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT) -clean: - rm -rf $(PROG) *.o *.dSYM *.gcov *.gcno *.gcda *.obj *.exe *.ilk *.pdb +clean: # Cleanup. Delete built program and all build artifacts + $(DELETE) $(PROG) *.o *.obj *.exe *.dSYM diff --git a/examples/mqtt-server/mongoose.c b/examples/mqtt-server/mongoose.c new file mode 120000 index 00000000..8ef6e62d --- /dev/null +++ b/examples/mqtt-server/mongoose.c @@ -0,0 +1 @@ +../../mongoose.c \ No newline at end of file diff --git a/examples/mqtt-server/mongoose.h b/examples/mqtt-server/mongoose.h new file mode 120000 index 00000000..488ef358 --- /dev/null +++ b/examples/mqtt-server/mongoose.h @@ -0,0 +1 @@ +../../mongoose.h \ No newline at end of file