552 {
553 utils::Config::addStringOption("--mqtt-mapping-file", "MQTT mapping file (json format) for integration", "[path]", "");
554 utils::Config::addStringOption("--mqtt-session-store", "Path to file for the persistent session store", "[path]", "");
555 utils::Config::addStringOption(
556 "--html-dir", "Path to html source directory", "[path]", std::string(CMAKE_INSTALL_PREFIX) + "/var/www/mqttsuite/mqttbroker");
557
558 core::SNodeC::init(argc, argv);
559
560 std::shared_ptr<iot::mqtt::server::broker::Broker> broker =
561 iot::mqtt::server::broker::Broker::instance(SUBSCRIPTION_MAX_QOS, utils::Config::getStringOptionValue("--mqtt-session-store"));
562
563#ifdef CONFIG_MQTTSUITE_BROKER_TCP_IPV4
564 net::in::stream::legacy::Server<mqtt::mqttbroker::SocketContextFactory>(
565 "in-mqtt",
566 [](auto& config) {
567 config.setPort(1883);
568 config.setRetry();
569 config.setDisableNagleAlgorithm();
570 },
571 broker)
572 .listen([](const auto& socketAddress, core::socket::State state) {
574 });
575
576#ifdef CONFIG_MQTTSUITE_BROKER_TLS_IPV4
577 net::in::stream::tls::Server<mqtt::mqttbroker::SocketContextFactory>(
578 "in-mqtts",
579 [](auto& config) {
580 config.setPort(8883);
581 config.setRetry();
582 config.setDisableNagleAlgorithm();
583 },
584 broker)
585 .listen([](const auto& socketAddress, core::socket::State state) {
587 });
588#endif
589#endif
590
591#ifdef CONFIG_MQTTSUITE_BROKER_TCP_IPV6
592 net::in6::stream::legacy::Server<mqtt::mqttbroker::SocketContextFactory>(
593 "in6-mqtt",
594 [](auto& config) {
595 config.setPort(1883);
596 config.setRetry();
597 config.setDisableNagleAlgorithm();
598
599 config.setIPv6Only();
600 },
601 broker)
602 .listen([](const auto& socketAddress, core::socket::State state) {
604 });
605
606#ifdef CONFIG_MQTTSUITE_BROKER_TLS_IPV6
607 net::in6::stream::tls::Server<mqtt::mqttbroker::SocketContextFactory>(
608 "in6-mqtts",
609 [](auto& config) {
610 config.setPort(8883);
611 config.setRetry();
612 config.setDisableNagleAlgorithm();
613
614 config.setIPv6Only();
615 },
616 broker)
617 .listen([](const auto& socketAddress, core::socket::State state) {
619 });
620#endif
621#endif
622
623#ifdef CONFIG_MQTTSUITE_BROKER_UNIX
624 net::un::stream::legacy::Server<mqtt::mqttbroker::SocketContextFactory>(
625 "un-mqtt",
626 [](auto& config) {
627 config.setSunPath("/tmp/" + utils::Config::getApplicationName() + "-" + config.getInstanceName());
628 config.setRetry();
629 },
630 broker)
631 .listen([](const auto& socketAddress, core::socket::State state) {
633 });
634
635#ifdef CONFIG_MQTTSUITE_BROKER_UNIX_TLS
636 net::un::stream::tls::Server<mqtt::mqttbroker::SocketContextFactory>(
637 "un-mqtts",
638 [](auto& config) {
639 config.setSunPath("/tmp/" + utils::Config::getApplicationName() + "-" + config.getInstanceName());
640 config.setRetry();
641 },
642 broker)
643 .listen([](const auto& socketAddress, core::socket::State state) {
645 });
646#endif
647#endif
648
649 inja::Environment environment{utils::Config::getStringOptionValue(
"--html-dir") +
"/"};
650 express::Router router =
getRouter(environment, broker);
651
652#ifdef CONFIG_MQTTSUITE_BROKER_TCP_IPV4
653 express::legacy::in::Server(
"in-http", router,
reportState, [](
auto& config) {
654 config.setPort(8080);
655 config.setRetry();
656 config.setDisableNagleAlgorithm();
657 });
658
659#ifdef CONFIG_MQTTSUITE_BROKER_TLS_IPV4
660 express::tls::in::Server(
"in-https", router,
reportState, [](
auto& config) {
661 config.setPort(8088);
662 config.setRetry();
663 config.setDisableNagleAlgorithm();
664 });
665#endif
666#endif
667
668#ifdef CONFIG_MQTTSUITE_BROKER_TCP_IPV6
669 express::legacy::in6::Server(
"in6-http", router,
reportState, [](
auto& config) {
670 config.setPort(8080);
671 config.setRetry();
672 config.setDisableNagleAlgorithm();
673
674 config.setIPv6Only();
675 });
676
677#ifdef CONFIG_MQTTSUITE_BROKER_TLS_IPV6
678 express::tls::in6::Server(
"in6-https", router,
reportState, [](
auto& config) {
679 config.setPort(8088);
680 config.setRetry();
681 config.setDisableNagleAlgorithm();
682
683 config.setIPv6Only();
684 });
685#endif
686#endif
687
688#ifdef CONFIG_MQTTSUITE_BROKER_UNIX
689 express::legacy::un::Server(
"un-http", router,
reportState, [](
auto& config) {
690 config.setSunPath("/tmp/" + utils::Config::getApplicationName() + "-" + config.getInstanceName());
691 });
692
693#ifdef CONFIG_MQTTSUITE_BROKER_UNIX_TLS
694 express::tls::un::Server(
"un-https", router,
reportState, [](
auto& config) {
695 config.setSunPath("/tmp/" + utils::Config::getApplicationName() + "-" + config.getInstanceName());
696 });
697#endif
698#endif
699
700 return core::SNodeC::start();
701}
Class for changing the configuration.
static void reportState(const std::string &instanceName, const core::socket::SocketAddress &socketAddress, const core::socket::State &state)
static express::Router getRouter(const inja::Environment &environment, std::shared_ptr< iot::mqtt::server::broker::Broker > broker)
static void reportState(const std::string &instanceName, const core::socket::SocketAddress &socketAddress, const core::socket::State &state)