Skip to content

Commit 63ecc30

Browse files
Add option to build embedd broker as shared library
Signed-off-by: Norbert Heusser <[email protected]>
1 parent 1bb2299 commit 63ecc30

16 files changed

+231
-88
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ man/mqtt.7
9191
out/
9292

9393
src/mosquitto
94-
src/mosquitto_broker.a
94+
src/libmosquitto_broker.a
95+
src/libmosquitto_broker.so*
9596

9697
test/broker/broker.pid
9798
test/test_client

CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ if(WITH_THREADING)
8383
endif()
8484
endif()
8585

86+
option(WITH_EMBEDD_BROKER, "Create a library mosquitto_broker to embedd the broker" OFF)
87+
8688
option(WITH_DLT "Include DLT support?" OFF)
8789
message(STATUS "WITH_DLT = ${WITH_DLT}")
8890
if(WITH_DLT)

Makefile

+4
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ endif
116116
$(INSTALL) include/mosquitto_plugin.h "${DESTDIR}${prefix}/include/mosquitto_plugin.h"
117117
$(INSTALL) include/mosquittopp.h "${DESTDIR}${prefix}/include/mosquittopp.h"
118118
$(INSTALL) include/mqtt_protocol.h "${DESTDIR}${prefix}/include/mqtt_protocol.h"
119+
ifeq ($(WITH_EMBEDD_BROKER),yes)
120+
$(INSTALL) include/mosquitto/embedded_broker.h "${DESTDIR}${prefix}/include/mosquitto/"
121+
endif
119122

120123
uninstall :
121124
set -e; for d in ${DIRS}; do $(MAKE) -C $${d} uninstall; done
@@ -133,6 +136,7 @@ uninstall :
133136
rm -f "${DESTDIR}${prefix}/include/mosquitto_plugin.h"
134137
rm -f "${DESTDIR}${prefix}/include/mosquittopp.h"
135138
rm -f "${DESTDIR}${prefix}/include/mqtt_protocol.h"
139+
rm -f "${DESTDIR}${prefix}/include/mosquitto/embedded_broker.h"
136140

137141
dist : reallyclean
138142
set -e; for d in ${DISTDIRS}; do $(MAKE) -C $${d} dist; done

config.mk

+4
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ CLIENT_STATIC_LDADD:=
106106
# Build shared libraries
107107
WITH_SHARED_LIBRARIES:=yes
108108

109+
# Build the broker additionally as a library, which can be used to
110+
# embedd a broker into an own executable.
111+
WITH_EMBEDD_BROKER:=no
112+
109113
# Build with async dns lookup support for bridges (temporary). Requires glibc.
110114
#WITH_ADNS:=yes
111115

fuzzing/broker/Makefile

+7-7
Original file line numberDiff line numberDiff line change
@@ -17,37 +17,37 @@ LOCAL_CPPFLAGS+=-I${R}/include/ -I${R}/src -I${R}/lib -I${R} -I${R}/common -I${R
1717
-DWITH_SYS_TREE -DWITH_TLS -DWITH_TLS_PSK -DWITH_UNIX_SOCKETS -DWITH_WEBSOCKETS=WS_IS_BUILTIN
1818
LOCAL_CXXFLAGS+=-g -Wall -Werror -pthread
1919
LOCAL_LDFLAGS+=
20-
LOCAL_LIBADD+=$(LIB_FUZZING_ENGINE) ${R}/src/mosquitto_broker.a -lssl -lcrypto -lcjson -Wl,-Bstatic -largon2 -Wl,-Bdynamic -lm ${R}/libcommon/libmosquitto_common.a
20+
LOCAL_LIBADD+=$(LIB_FUZZING_ENGINE) ${R}/src/libmosquitto_broker.a -lssl -lcrypto -lcjson -Wl,-Bstatic -largon2 -Wl,-Bdynamic -lm ${R}/libcommon/libmosquitto_common.a
2121

2222
all: $(FUZZERS)
2323

24-
broker_fuzz_acl_file : broker_fuzz_acl_file.cpp ${R}/src/mosquitto_broker.a
24+
broker_fuzz_acl_file : broker_fuzz_acl_file.cpp ${R}/src/libmosquitto_broker.a
2525
$(CXX) $(LOCAL_CXXFLAGS) $(LOCAL_CPPFLAGS) $(LOCAL_LDFLAGS) -o $@ $< $(LOCAL_LIBADD)
2626
install $@ ${OUT}/$@
2727
cp ${R}/fuzzing/corpora/broker_acl_file_seed_corpus.zip ${OUT}/$@_seed_corpus.zip
2828
cp ${R}/fuzzing/corpora/broker_acl_file.dict ${OUT}/$@.dict
2929

30-
broker_fuzz_password_file : broker_fuzz_password_file.cpp ${R}/src/mosquitto_broker.a
30+
broker_fuzz_password_file : broker_fuzz_password_file.cpp ${R}/src/libmosquitto_broker.a
3131
$(CXX) $(LOCAL_CXXFLAGS) $(LOCAL_CPPFLAGS) $(LOCAL_LDFLAGS) -o $@ $< $(LOCAL_LIBADD)
3232
install $@ ${OUT}/$@
3333
cp ${R}/fuzzing/corpora/broker_password_file_seed_corpus.zip ${OUT}/$@_seed_corpus.zip
3434

35-
broker_fuzz_psk_file : broker_fuzz_psk_file.cpp ${R}/src/mosquitto_broker.a
35+
broker_fuzz_psk_file : broker_fuzz_psk_file.cpp ${R}/src/libmosquitto_broker.a
3636
$(CXX) $(LOCAL_CXXFLAGS) $(LOCAL_CPPFLAGS) $(LOCAL_LDFLAGS) -o $@ $< $(LOCAL_LIBADD)
3737
install $@ ${OUT}/$@
3838
cp ${R}/fuzzing/corpora/broker_psk_file_seed_corpus.zip ${OUT}/$@_seed_corpus.zip
3939

40-
broker_fuzz_queue_msg : broker_fuzz_queue_msg.cpp ${R}/src/mosquitto_broker.a
40+
broker_fuzz_queue_msg : broker_fuzz_queue_msg.cpp ${R}/src/libmosquitto_broker.a
4141
$(CXX) $(LOCAL_CXXFLAGS) $(LOCAL_CPPFLAGS) $(LOCAL_LDFLAGS) -o $@ $< $(LOCAL_LIBADD)
4242
install $@ ${OUT}/$@
4343
cp ${R}/fuzzing/corpora/broker_queue_msg_seed_corpus.zip ${OUT}/$@_seed_corpus.zip
4444

45-
broker_fuzz_read_handle : broker_fuzz_read_handle.cpp ${R}/src/mosquitto_broker.a
45+
broker_fuzz_read_handle : broker_fuzz_read_handle.cpp ${R}/src/libmosquitto_broker.a
4646
$(CXX) $(LOCAL_CXXFLAGS) $(LOCAL_CPPFLAGS) $(LOCAL_LDFLAGS) -o $@ $< $(LOCAL_LIBADD)
4747
install $@ ${OUT}/$@
4848
cp ${R}/fuzzing/corpora/broker_packet_seed_corpus.zip ${OUT}/$@_seed_corpus.zip
4949

50-
broker_fuzz_test_config : broker_fuzz_test_config.cpp ${R}/src/mosquitto_broker.a
50+
broker_fuzz_test_config : broker_fuzz_test_config.cpp ${R}/src/libmosquitto_broker.a
5151
$(CXX) $(LOCAL_CXXFLAGS) $(LOCAL_CPPFLAGS) $(LOCAL_LDFLAGS) -o $@ $< $(LOCAL_LIBADD)
5252
install $@ ${OUT}/$@
5353
cp ${R}/fuzzing/corpora/broker_fuzz_test_config_seed_corpus.zip ${OUT}/$@_seed_corpus.zip

fuzzing/broker/broker_fuzz.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
3333
#define PORT 1883
3434

3535
/* The broker fuzz-only main function. */
36-
extern "C" int mosquitto_fuzz_main(int argc, char *argv[]);
36+
extern "C" int mosquitto_broker_main(int argc, char *argv[]);
3737

3838
void *run_broker(void *args)
3939
{
@@ -45,7 +45,7 @@ void *run_broker(void *args)
4545
argv[2] = strdup("-c");
4646
argv[3] = strdup("/tmp/mosquitto.conf");
4747

48-
mosquitto_fuzz_main(argc, argv);
48+
mosquitto_broker_main(argc, argv);
4949

5050
for(int i=0; i<argc; i++){
5151
free(argv[i]);

fuzzing/broker/broker_fuzz_test_config.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
3030
*/
3131

3232
/* The broker fuzz-only main function. */
33-
extern "C" int mosquitto_fuzz_main(int argc, char *argv[]);
33+
extern "C" int mosquitto_broker_main(int argc, char *argv[]);
3434

3535
void run_broker(char *filename)
3636
{
@@ -43,7 +43,7 @@ void run_broker(char *filename)
4343
argv[3] = strdup("-c");
4444
argv[4] = strdup(filename);
4545

46-
mosquitto_fuzz_main(argc, argv);
46+
mosquitto_broker_main(argc, argv);
4747

4848
for(int i=0; i<argc; i++){
4949
free(argv[i]);

fuzzing/broker/broker_fuzz_with_init.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
3333
#define PORT 1883
3434

3535
/* The broker fuzz-only main function. */
36-
extern "C" int mosquitto_fuzz_main(int argc, char *argv[]);
36+
extern "C" int mosquitto_broker_main(int argc, char *argv[]);
3737

3838
void *run_broker(void *args)
3939
{
@@ -45,7 +45,7 @@ void *run_broker(void *args)
4545
argv[2] = strdup("-c");
4646
argv[3] = strdup("/tmp/mosquitto.conf");
4747

48-
mosquitto_fuzz_main(argc, argv);
48+
mosquitto_broker_main(argc, argv);
4949

5050
for(int i=0; i<argc; i++){
5151
free(argv[i]);

fuzzing/plugins/dynamic-security/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ LOCAL_CXXFLAGS+=-g -Wall -Werror -pthread
1515
LOCAL_LDFLAGS+=
1616
LOCAL_LIBADD+=$(LIB_FUZZING_ENGINE) \
1717
${R}/plugins/dynamic-security/mosquitto_dynamic_security.a \
18-
${R}/src/mosquitto_broker.a \
18+
${R}/src/libmosquitto_broker.a \
1919
${R}/libcommon/libmosquitto_common.a \
2020
-lssl -lcrypto -lcjson -lm \
2121
-Wl,-Bstatic -largon2 -Wl,-Bdynamic

include/mosquitto/embedded_broker.h

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
Copyright (c) 2009-2021 Roger Light <[email protected]>
3+
4+
All rights reserved. This program and the accompanying materials
5+
are made available under the terms of the Eclipse Public License 2.0
6+
and Eclipse Distribution License v1.0 which accompany this distribution.
7+
8+
The Eclipse Public License is available at
9+
https://www.eclipse.org/legal/epl-2.0/
10+
and the Eclipse Distribution License is available at
11+
http://www.eclipse.org/org/documents/edl-v10.php.
12+
13+
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
14+
15+
Contributors:
16+
*/
17+
18+
/*
19+
* File: mosquitto_broker.h
20+
*
21+
* This header contains functions for use by plugins.
22+
*/
23+
#ifndef MOSQUITTO_EMBEDDED_BROKER_H
24+
#define MOSQUITTO_EMBEDDED_BROKER_H
25+
26+
#ifdef __cplusplus
27+
extern "C" {
28+
#endif
29+
30+
#if defined(WIN32) && defined(mosquitto_EXPORTS)
31+
# define mosq_EXPORT __declspec(dllexport)
32+
#else
33+
# define mosq_EXPORT
34+
#endif
35+
36+
mosq_EXPORT int mosquitto_broker_main(int argc, char *argv[]);
37+
38+
}
39+
#ifdef __cplusplus
40+
}
41+
#endif
42+
43+
#endif

0 commit comments

Comments
 (0)