From 6892366c14253213675732c5d4bf8b2c0d338651 Mon Sep 17 00:00:00 2001
From: Ramin Yaghoubzadeh <ryaghoubzadeh@uni-bielefeld.de>
Date: Thu, 7 Jan 2016 12:49:20 +0100
Subject: [PATCH] C++: --rsb-host and --rsb-port default parameters for ipaaca
 binaries

---
 ipaacalib/cpp/include/ipaaca/ipaaca.h      |  5 +++++
 ipaacalib/cpp/src/ipaaca-cmdline-parser.cc | 10 ++++++++++
 ipaacalib/cpp/src/ipaaca-internal.cc       | 10 ++++++++++
 ipaacalib/cpp/src/ipaaca.cc                |  3 +++
 4 files changed, 28 insertions(+)

diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca.h b/ipaacalib/cpp/include/ipaaca/ipaaca.h
index df04ce4..1dabb9b 100644
--- a/ipaacalib/cpp/include/ipaaca/ipaaca.h
+++ b/ipaacalib/cpp/include/ipaaca/ipaaca.h
@@ -209,6 +209,11 @@ IPAACA_MEMBER_VAR_EXPORT extern std::string __ipaaca_static_option_default_chann
 /// Current console log level (defaults to warning), one of: IPAACA_LOG_LEVEL_CRITICAL, IPAACA_LOG_LEVEL_ERROR, IPAACA_LOG_LEVEL_WARNING, IPAACA_LOG_LEVEL_INFO, IPAACA_LOG_LEVEL_DEBUG, IPAACA_LOG_LEVEL_NONE
 IPAACA_MEMBER_VAR_EXPORT extern unsigned int __ipaaca_static_option_log_level;
 
+/// RSB host to connect to (defaults to "" = do not set, use global config)
+IPAACA_MEMBER_VAR_EXPORT extern std::string __ipaaca_static_option_rsb_host;
+/// RSB port to connect to (defaults to "" = do not set, use global config)
+IPAACA_MEMBER_VAR_EXPORT extern std::string __ipaaca_static_option_rsb_port;
+
 IPAACA_MEMBER_VAR_EXPORT Lock& logger_lock();
 
 #ifdef WIN32
diff --git a/ipaacalib/cpp/src/ipaaca-cmdline-parser.cc b/ipaacalib/cpp/src/ipaaca-cmdline-parser.cc
index a5fe8d5..32742dd 100644
--- a/ipaacalib/cpp/src/ipaaca-cmdline-parser.cc
+++ b/ipaacalib/cpp/src/ipaaca-cmdline-parser.cc
@@ -90,6 +90,8 @@ void CommandLineParser::initialize_parser_defaults()
 		add_option("ipaaca-default-channel", 0, true, "default");
 		add_option("ipaaca-enable-logging", 0, true, "WARNING");
 		add_option("rsb-enable-logging", 0, true, "ERROR");
+		add_option("rsb-host", 0, true, ""); // empty = don't set
+		add_option("rsb-port", 0, true, ""); // empty = don't set
 	}
 }
 
@@ -108,6 +110,14 @@ bool CommandLineParser::consume_library_option(const std::string& name, bool exp
 		std::string newch = optarg;
 		IPAACA_DEBUG("Setting default channel " << newch)
 		__ipaaca_static_option_default_channel = newch;
+	} else if (name=="rsb-host") {
+		std::string newhost = optarg;
+		IPAACA_DEBUG("Setting RSB host " << newhost)
+		__ipaaca_static_option_rsb_host = newhost;
+	} else if (name=="rsb-port") {
+		std::string newport = optarg;
+		IPAACA_DEBUG("Setting RSB port " << newport)
+		__ipaaca_static_option_rsb_port = newport;
 	} else if (name=="ipaaca-enable-logging") {
 		std::string level(optarg);
 		if ((level=="NONE") || (level=="SILENT")) {
diff --git a/ipaacalib/cpp/src/ipaaca-internal.cc b/ipaacalib/cpp/src/ipaaca-internal.cc
index 6ae283c..2a9399e 100644
--- a/ipaacalib/cpp/src/ipaaca-internal.cc
+++ b/ipaacalib/cpp/src/ipaaca-internal.cc
@@ -97,6 +97,16 @@ IPAACA_EXPORT void Initializer::dump_current_default_config()//{{{
 }//}}}
 IPAACA_EXPORT void Initializer::auto_configure_rsb()//{{{
 {
+	// set RSB host and port iff provided using cmdline arguments
+	if (__ipaaca_static_option_rsb_host!="") {
+		IPAACA_INFO("Overriding RSB host with " << __ipaaca_static_option_rsb_host)
+		setenv("RSB_TRANSPORT_SPREAD_HOST", __ipaaca_static_option_rsb_host.c_str(), 1);
+	}
+	if (__ipaaca_static_option_rsb_port!="") {
+		IPAACA_INFO("Overriding RSB port with " << __ipaaca_static_option_rsb_port)
+		setenv("RSB_TRANSPORT_SPREAD_PORT", __ipaaca_static_option_rsb_port.c_str(), 1);
+	}
+	
 	const char* plugin_path = getenv("RSB_PLUGINS_CPP_PATH");
 	if (!plugin_path) {
 #ifdef WIN32
diff --git a/ipaacalib/cpp/src/ipaaca.cc b/ipaacalib/cpp/src/ipaaca.cc
index 76ee5a5..41bea5e 100644
--- a/ipaacalib/cpp/src/ipaaca.cc
+++ b/ipaacalib/cpp/src/ipaaca.cc
@@ -76,6 +76,9 @@ IPAACA_EXPORT std::string __ipaaca_static_option_default_payload_type("JSON");
 IPAACA_EXPORT std::string __ipaaca_static_option_default_channel("default");
 IPAACA_EXPORT unsigned int __ipaaca_static_option_log_level(IPAACA_LOG_LEVEL_WARNING);
 
+IPAACA_EXPORT std::string __ipaaca_static_option_rsb_host("");
+IPAACA_EXPORT std::string __ipaaca_static_option_rsb_port("");
+
 } // of namespace ipaaca
 
 
-- 
GitLab