21 template<
class Link>
inline int
23 return base_t::main<link_t>(
27 [](
boost::program_options::variables_map
const &vm) {
28 using conn_pol_t=
typename link_t::exchg_link_t::conn_pol_t;
29 using exchange_msg_details_t=
typename link_t::exchg_link_t::exchange_msg_details_t;
31 std::string
const MIC_code=[]() {
32 std::ostringstream ss;
33 common::mic_codes::to_stream<exchange_msg_details_t::MIC_code>(ss);
36 const std::string sess_sub_id(vm[(MIC_code+
"_session_sub_id").c_str()].as<
std::string>());
38 std::memcpy(sess_sub_id_conv.data(), sess_sub_id.data(), std::min(sess_sub_id_conv.size(), sess_sub_id.size()));
39 const std::string user(vm[(MIC_code+
"_username").c_str()].as<
std::string>());
40 typename exchange_msg_details_t::UserName_t user_conv{};
41 std::memcpy(user_conv.data(), user.data(), std::min(user_conv.size(), user.size()));
42 const std::string pass(vm[(MIC_code+
"_password").c_str()].as<
std::string>());
43 typename exchange_msg_details_t::Password_t pass_conv{};
44 std::memcpy(pass_conv.data(), pass.data(), std::min(pass_conv.size(), pass.size()));
46 std::shared_ptr<
typename exchange_msg_details_t::SeqNum_t> seq_num(
47 std::make_shared<
typename exchange_msg_details_t::SeqNum_t>(
48 vm[(MIC_code+
"_sequence_number").c_str()].as<
unsigned>()
52 return std::make_tuple(
53 typename link_t::client_link_t::ctor_args{
54 boost::asio::ip::address_v4::from_string(vm[
"client_address"].as<std::string>()),
55 vm[
"client_port"].as<
unsigned short>(),
56 typename link_t::client_link_t::proc_rules_t(*seq_num)
59 typename conn_pol_t::gateways_t(
60 std::make_pair(boost::asio::ip::address_v4::from_string(vm[(MIC_code+
"_primary_gateway_address").c_str()].as<std::string>()), vm[(MIC_code+
"_gateway_port").c_str()].as<
unsigned short>())
62 typename conn_pol_t::logon_args_t{
63 vm[(MIC_code+
"_sequence_number").c_str()].as<
unsigned>(),
67 vm[(MIC_code+
"_no_unspec_replay").c_str()].as<
bool>()
69 exchanges::BATSBOE::common::logoff_args_t{
73 typename link_t::exchg_to_client_proc_rules_t(*seq_num),