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();