apply RDR in server command line tool and some format updates
Change-Id: Id59de3e8892e962062151911eb7fadf828ad69c5
diff --git a/tools/ndncert-ca-server.cpp b/tools/ndncert-ca-server.cpp
index 57493e9..a331e7e 100644
--- a/tools/ndncert-ca-server.cpp
+++ b/tools/ndncert-ca-server.cpp
@@ -20,20 +20,37 @@
#include "ca-module.hpp"
#include "identity-challenge/challenge-module.hpp"
-#include <ndn-cxx/face.hpp>
-#include <ndn-cxx/security/key-chain.hpp>
#include <boost/asio.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/program_options/options_description.hpp>
#include <boost/program_options/parsers.hpp>
#include <boost/program_options/variables_map.hpp>
#include <iostream>
+#include <ndn-cxx/face.hpp>
+#include <ndn-cxx/security/key-chain.hpp>
namespace ndn {
namespace ndncert {
Face face;
security::v2::KeyChain keyChain;
+std::string repoHost = "localhost";
+std::string repoPort = "7376";
+
+static bool
+writeDataToRepo(const Data& data) {
+ boost::asio::ip::tcp::iostream requestStream;
+ requestStream.expires_after(std::chrono::seconds(3));
+ requestStream.connect(repoHost, repoPort);
+ if (!requestStream) {
+ std::cerr << "ERROR: Cannot publish certificate to repo-ng"
+ << " (" << requestStream.error().message() << ")" << std::endl;
+ return false;
+ }
+ requestStream.write(reinterpret_cast<const char*>(data.wireEncode().wire()),
+ data.wireEncode().size());
+ return true;
+}
static void
handleSignal(const boost::system::error_code& error, int signalNum)
@@ -63,20 +80,16 @@
terminateSignals.async_wait(handleSignal);
std::string configFilePath(SYSCONFDIR "/ndncert/ca.conf");
- std::string repoHost("localhost");
- std::string repoPort("7376");
bool wantRepoOut = false;
namespace po = boost::program_options;
po::options_description optsDesc("Options");
optsDesc.add_options()
- ("help,h", "print this help message and exit")
- ("config-file,c", po::value<std::string>(&configFilePath)->default_value(configFilePath),
- "path to configuration file")
- ("repo-output,r", po::bool_switch(&wantRepoOut),
- "when enabled, all issued certificates will be published to repo-ng")
- ("repo-host,H", po::value<std::string>(&repoHost)->default_value(repoHost), "repo-ng host")
- ("repo-port,P", po::value<std::string>(&repoPort)->default_value(repoPort), "repo-ng port");
+ ("help,h", "print this help message and exit")
+ ("config-file,c", po::value<std::string>(&configFilePath)->default_value(configFilePath), "path to configuration file")
+ ("repo-output,r", po::bool_switch(&wantRepoOut), "when enabled, all issued certificates will be published to repo-ng")
+ ("repo-host,H", po::value<std::string>(&repoHost)->default_value(repoHost), "repo-ng host")
+ ("repo-port,P", po::value<std::string>(&repoPort)->default_value(repoPort), "repo-ng port");
po::variables_map vm;
try {
@@ -100,24 +113,18 @@
}
CaModule ca(face, keyChain, configFilePath);
- std::map<Name, security::v2::Certificate> cachedCertificates;
+ std::map<Name, Data> cachedCertificates;
+ auto profileMetaData = ca.generateCaProfileMetaData();
+ auto profileData = ca.generateCaProfileData();
if (wantRepoOut) {
- ca.setStatusUpdateCallback([&] (const CaState& request) {
- if (request.m_status == Status::SUCCESS) {
- auto issuedCert = request.m_cert;
- boost::asio::ip::tcp::iostream requestStream;
- requestStream.expires_after(std::chrono::seconds(3));
- requestStream.connect(repoHost, repoPort);
- if (!requestStream) {
- std::cerr << "ERROR: Cannot publish certificate to repo-ng"
- << " (" << requestStream.error().message() << ")" << std::endl;
- return;
- }
- requestStream.write(reinterpret_cast<const char*>(issuedCert.wireEncode().wire()),
- issuedCert.wireEncode().size());
- }
- });
+ writeDataToRepo(*profileMetaData);
+ writeDataToRepo(*profileData);
+ ca.setStatusUpdateCallback([&](const CaState& request) {
+ if (request.m_status == Status::SUCCESS) {
+ writeDataToRepo(request.m_cert);
+ }
+ });
}
else {
ca.setStatusUpdateCallback([&](const CaState& request) {
@@ -125,6 +132,8 @@
cachedCertificates[request.m_cert.getName()] = request.m_cert;
}
});
+ cachedCertificates[profileMetaData->getName()] = *profileMetaData;
+ cachedCertificates[profileData->getName()] = *profileData;
face.setInterestFilter(
InterestFilter(ca.getCaConf().m_caItem.m_caPrefix),
[&](const InterestFilter&, const Interest& interest) {
@@ -142,8 +151,8 @@
return 0;
}
-} // namespace ndncert
-} // namespace ndn
+} // namespace ndncert
+} // namespace ndn
int
main(int argc, char* argv[])