From afead32e9d921e59fe20c344254844278a6db99f Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Thu, 4 Oct 2018 21:06:37 -0700 Subject: [PATCH] p2p more config --- loopback.conf | 4 +++- p2pApp/gwmain.cpp | 44 ++++++++++++++++++++++++++++++++++++-------- p2pApp/server.h | 2 +- 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/loopback.conf b/loopback.conf index b43d68b..2ef9b7f 100644 --- a/loopback.conf +++ b/loopback.conf @@ -14,7 +14,7 @@ */ { "version":1, - /* "readOnly":true, */ + "readOnly":false, "clients":[ { "name":"theclient", @@ -30,6 +30,8 @@ "name":"theserver", "clients":["theclient"], "interface":"127.0.0.1", + "addrlist":"127.255.255.255", + "autoaddrlist":false, "serverport":5075, "bcastport":5076 } diff --git a/p2pApp/gwmain.cpp b/p2pApp/gwmain.cpp index cb3b88b..724ace2 100644 --- a/p2pApp/gwmain.cpp +++ b/p2pApp/gwmain.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include "server.h" #include "pva2pva.h" @@ -50,6 +51,8 @@ pvd::StructureConstPtr schema(pvd::getFieldCreate()->createFieldBuilder() ->add("name", pvd::pvString) ->addArray("clients", pvd::pvString) ->add("interface", pvd::pvString) + ->add("addrlist", pvd::pvString) + ->add("autoaddrlist", pvd::pvBoolean) ->add("serverport", pvd::pvUShort) ->add("bcastport", pvd::pvUShort) ->add("control_prefix", pvd::pvString) @@ -67,9 +70,12 @@ void getargs(ServerConfig& arg, int argc, char *argv[]) int opt; bool checkonly = false; - while( (opt=getopt(argc, argv, "vhiIC"))!=-1) + while( (opt=getopt(argc, argv, "qvhiIC"))!=-1) { switch(opt) { + case 'q': + arg.debug--; + break; case 'v': arg.debug++; break; @@ -100,11 +106,7 @@ void getargs(ServerConfig& arg, int argc, char *argv[]) std::ifstream strm(argv[optind]); pvd::parseJSON(strm, arg.conf); - { - pvd::PVScalarPtr V(arg.conf->getSubField("readOnly")); - if(V) - p2pReadOnly = V->getAs(); - } + p2pReadOnly = arg.conf->getSubFieldT("readOnly")->getAs(); unsigned version = arg.conf->getSubFieldT("version")->get(); if(version==0) { @@ -128,15 +130,19 @@ void getargs(ServerConfig& arg, int argc, char *argv[]) } } -GWServerChannelProvider::shared_pointer configure_client(const pvd::PVStructurePtr& conf) +GWServerChannelProvider::shared_pointer configure_client(ServerConfig& arg, const pvd::PVStructurePtr& conf) { + std::string name(conf->getSubFieldT("name")->get()); std::string provider(conf->getSubFieldT("provider")->get()); + LOG(pva::logLevelInfo, "Configure client '%s' with provider '%s'", name.c_str(), provider.c_str()); + pva::Configuration::shared_pointer C(pva::ConfigurationBuilder() .add("EPICS_PVA_ADDR_LIST", conf->getSubFieldT("addrlist")->get()) .add("EPICS_PVA_AUTO_ADDR_LIST", conf->getSubFieldT("autoaddrlist")->get()) .add("EPICS_PVA_SERVER_PORT", conf->getSubFieldT("serverport")->getAs()) .add("EPICS_PVA_BROADCAST_PORT", conf->getSubFieldT("bcastport")->getAs()) + .add("EPICS_PVA_DEBUG", arg.debug>=5 ? 5 : 0) .push_map() .build()); @@ -150,10 +156,17 @@ GWServerChannelProvider::shared_pointer configure_client(const pvd::PVStructureP pva::ServerContext::shared_pointer configure_server(ServerConfig& arg, const pvd::PVStructurePtr& conf) { + std::string name(conf->getSubFieldT("name")->get()); + + LOG(pva::logLevelInfo, "Configure server '%s'", name.c_str()); + pva::Configuration::shared_pointer C(pva::ConfigurationBuilder() .add("EPICS_PVAS_INTF_ADDR_LIST", conf->getSubFieldT("interface")->get()) + .add("EPICS_PVAS_BEACON_ADDR_LIST", conf->getSubFieldT("addrlist")->get()) + .add("EPICS_PVAS_AUTO_BEACON_ADDR_LIST", conf->getSubFieldT("autoaddrlist")->get()) .add("EPICS_PVAS_SERVER_PORT", conf->getSubFieldT("serverport")->getAs()) .add("EPICS_PVAS_BROADCAST_PORT", conf->getSubFieldT("bcastport")->getAs()) + .add("EPICS_PVA_DEBUG", arg.debug>=5 ? 5 : 0) .push_map() .build()); @@ -245,6 +258,21 @@ int main(int argc, char *argv[]) theserver = &arg; getargs(arg, argc, argv); + pva::pvAccessLogLevel lvl; + if(arg.debug<0) + lvl = pva::logLevelError; + else if(arg.debug==0) + lvl = pva::logLevelWarn; + else if(arg.debug==1) + lvl = pva::logLevelInfo; + else if(arg.debug==2) + lvl = pva::logLevelDebug; + else if(arg.debug==3) + lvl = pva::logLevelTrace; + else if(arg.debug>=4) + lvl = pva::logLevelAll; + SET_LOG_LEVEL(lvl); + pva::ClientFactory::start(); pvd::PVStructureArray::const_svector arr; @@ -263,7 +291,7 @@ int main(int argc, char *argv[]) if(it!=arg.clients.end()) throw std::runtime_error(std::string("Duplicate client name not allowed : ")+name); - arg.clients[name] = configure_client(client); + arg.clients[name] = configure_client(arg, client); } arr = arg.conf->getSubFieldT("servers")->view(); diff --git a/p2pApp/server.h b/p2pApp/server.h index e4f1c1f..941b586 100644 --- a/p2pApp/server.h +++ b/p2pApp/server.h @@ -48,7 +48,7 @@ struct ServerConfig { typedef std::map servers_t; servers_t servers; - ServerConfig() :debug(0), interactive(true) {} + ServerConfig() :debug(1), interactive(true) {} void drop(const char *client, const char *channel); void status_server(int lvl, const char *server);