update ndncert ca server
Change-Id: Ib0a1dfed0570a3e944de3a128f0c37a50ccd03ae
diff --git a/tools/ndncert-ca-server.cpp b/tools/ndncert-ca-server.cpp
index a3e1c1f..a32ad10 100644
--- a/tools/ndncert-ca-server.cpp
+++ b/tools/ndncert-ca-server.cpp
@@ -77,10 +77,11 @@
Face face;
security::v2::KeyChain keyChain;
CaModule ca(face, keyChain, configFilePath);
+ std::map<Name, security::v2::Certificate> cachedCertificates;
if (wantRepoOut) {
ca.setStatusUpdateCallback([&] (const CaState& request) {
- if (request.m_status == Status::SUCCESS && request.m_requestType == RequestType::NEW) {
+ if (request.m_status == Status::SUCCESS) {
auto issuedCert = request.m_cert;
boost::asio::ip::tcp::iostream requestStream;
requestStream.expires_after(std::chrono::seconds(3));
@@ -96,7 +97,22 @@
});
}
else {
-
+ ca.setStatusUpdateCallback([&](const CaState& request) {
+ if (request.m_status == Status::SUCCESS) {
+ cachedCertificates[request.m_cert.getName()] = request.m_cert;
+ }
+ });
+ face.setInterestFilter(
+ InterestFilter(ca.getCaConf().m_caItem.m_caPrefix),
+ [&](const InterestFilter&, const Interest& interest) {
+ auto search = cachedCertificates.find(interest.getName());
+ if (search != cachedCertificates.end()) {
+ face.put(search->second);
+ }
+ },
+ [](const Name&, const std::string& errorInfo) {
+ std::cerr << "ERROR: " << errorInfo << std::endl;
+ });
}
face.processEvents();