Adapting to TLV-specific ndn-cpp
This commit is contained in:
1 parent
6e235db7ec
commit
0cb0f2bcc6
9 files changed
+153
-410
No files matched your search
@@ -9,7 +9,7 @@
|
||||
*/
|
||||
|
||||
#include "specific-policy-rule.h"
|
||||
#include <ndn-cpp/sha256-with-rsa-signature.hpp>
|
||||
#include <ndn-cpp/security/signature/signature-sha256-with-rsa.hpp>
|
||||
|
||||
using namespace ndn;
|
||||
using namespace ndn::ptr_lib;
|
||||
@@ -36,9 +36,15 @@ SpecificPolicyRule::matchDataName(const Data& data)
|
||||
bool
|
||||
SpecificPolicyRule::matchSignerName(const Data& data)
|
||||
{
|
||||
const Sha256WithRsaSignature* sigPtr = dynamic_cast<const Sha256WithRsaSignature*> (data.getSignature());
|
||||
Name signerName = sigPtr->getKeyLocator().getKeyName ();
|
||||
return m_signerRegex->match(signerName);
|
||||
try{
|
||||
SignatureSha256WithRsa sig(data.getSignature());
|
||||
Name signerName = sig.getKeyLocator().getName ();
|
||||
return m_signerRegex->match(signerName);
|
||||
}catch(SignatureSha256WithRsa::Error &e){
|
||||
return false;
|
||||
}catch(KeyLocator::Error &e){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
|
||||
@@ -42,7 +42,7 @@ SyncIntroCertificate::SyncIntroCertificate (const Name& nameSpace,
|
||||
certificateName.append("INTRODUCER");
|
||||
break;
|
||||
default:
|
||||
throw SecurityException("Wrong Introduction Type!");
|
||||
throw Error("Wrong Introduction Type!");
|
||||
}
|
||||
|
||||
posix_time::time_duration now = posix_time::microsec_clock::universal_time () - posix_time::ptime(gregorian::date (1970, boost::gregorian::Jan, 1));
|
||||
@@ -76,7 +76,7 @@ SyncIntroCertificate::SyncIntroCertificate (const Name& nameSpace,
|
||||
certificateName.append("INTRODUCER");
|
||||
break;
|
||||
default:
|
||||
throw SecurityException("Wrong Introduction Type!");
|
||||
throw Error("Wrong Introduction Type!");
|
||||
}
|
||||
posix_time::time_duration now = posix_time::microsec_clock::universal_time () - posix_time::ptime(gregorian::date (1970, boost::gregorian::Jan, 1));
|
||||
uint64_t version = (now.total_seconds () << 12) | (0xFFF & (now.fractional_seconds () / 244));
|
||||
@@ -106,7 +106,7 @@ SyncIntroCertificate::SyncIntroCertificate (const Data& data)
|
||||
}
|
||||
|
||||
if(i >= certificateName.size())
|
||||
throw SecurityException("Wrong SyncIntroCertificate Name!");
|
||||
throw Error("Wrong SyncIntroCertificate Name!");
|
||||
|
||||
for(; i< certificateName.size(); i++)
|
||||
{
|
||||
@@ -118,7 +118,7 @@ SyncIntroCertificate::SyncIntroCertificate (const Data& data)
|
||||
}
|
||||
|
||||
if(i >= certificateName.size())
|
||||
throw SecurityException("Wrong SyncIntroCertificate Name!");
|
||||
throw Error("Wrong SyncIntroCertificate Name!");
|
||||
|
||||
m_keyName = certificateName.getSubName(keyNameStart, keyNameEnd - keyNameStart);
|
||||
|
||||
@@ -128,7 +128,7 @@ SyncIntroCertificate::SyncIntroCertificate (const Data& data)
|
||||
else if(typeComponent == string("INTRODUCER"))
|
||||
m_introType = INTRODUCER;
|
||||
else
|
||||
throw SecurityException("Wrong SyncIntroCertificate Name!");
|
||||
throw Error("Wrong SyncIntroCertificate Name!");
|
||||
}
|
||||
|
||||
SyncIntroCertificate::SyncIntroCertificate (const SyncIntroCertificate& chronosIntroCertificate)
|
||||
@@ -153,7 +153,7 @@ SyncIntroCertificate::setName (const Name& certificateName)
|
||||
}
|
||||
|
||||
if(i >= certificateName.size())
|
||||
throw SecurityException("Wrong SyncIntroCertificate Name!");
|
||||
throw Error("Wrong SyncIntroCertificate Name!");
|
||||
|
||||
for(; i< certificateName.size(); i++)
|
||||
{
|
||||
@@ -165,7 +165,7 @@ SyncIntroCertificate::setName (const Name& certificateName)
|
||||
}
|
||||
|
||||
if(i >= certificateName.size())
|
||||
throw SecurityException("Wrong SyncIntroCertificate Name!");
|
||||
throw Error("Wrong SyncIntroCertificate Name!");
|
||||
|
||||
m_keyName = certificateName.getSubName(keyNameStart, keyNameEnd - keyNameStart);
|
||||
|
||||
@@ -175,7 +175,7 @@ SyncIntroCertificate::setName (const Name& certificateName)
|
||||
else if(typeComponent == string("INTRODUCER"))
|
||||
m_introType = INTRODUCER;
|
||||
else
|
||||
throw SecurityException("Wrong SyncIntroCertificate Name!");
|
||||
throw Error("Wrong SyncIntroCertificate Name!");
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
class SyncIntroCertificate : public ndn::Certificate
|
||||
{
|
||||
public:
|
||||
struct Error : public ndn::Certificate::Error { Error(const std::string &what) : ndn::Certificate::Error(what) {} };
|
||||
|
||||
enum IntroType{
|
||||
PRODUCER,
|
||||
INTRODUCER
|
||||
|
||||
+37
-136
@@ -31,16 +31,12 @@
|
||||
#include "sync-logging.h"
|
||||
#include "sync-state.h"
|
||||
|
||||
#include <ndn-cpp/security/identity/basic-identity-storage.hpp>
|
||||
#include <ndn-cpp/security/identity/osx-private-key-storage.hpp>
|
||||
|
||||
#include <boost/make_shared.hpp>
|
||||
#include <boost/foreach.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
using namespace boost;
|
||||
using namespace ndn;
|
||||
using namespace ndn::ptr_lib;
|
||||
using namespace ndn::func_lib;
|
||||
@@ -66,7 +62,6 @@ namespace Sync
|
||||
SyncLogic::SyncLogic (const Name& syncPrefix,
|
||||
shared_ptr<SyncPolicyManager> syncPolicyManager,
|
||||
shared_ptr<Face> face,
|
||||
shared_ptr<Transport> transport,
|
||||
LogicUpdateCallback onUpdate,
|
||||
LogicRemoveCallback onRemove)
|
||||
: m_state (new FullState)
|
||||
@@ -76,8 +71,9 @@ namespace Sync
|
||||
, m_onRemove (onRemove)
|
||||
, m_perBranch (false)
|
||||
, m_policyManager(syncPolicyManager)
|
||||
, m_verifier(new Verifier(syncPolicyManager))
|
||||
, m_keyChain(new KeyChain())
|
||||
, m_face(face)
|
||||
, m_transport(transport)
|
||||
#ifndef NS3_MODULE
|
||||
, m_randomGenerator (static_cast<unsigned int> (std::time (0)))
|
||||
, m_rangeUniformRandom (m_randomGenerator, uniform_int<> (200,1000))
|
||||
@@ -91,22 +87,13 @@ namespace Sync
|
||||
#ifndef NS3_MODULE
|
||||
// In NS3 module these functions are moved to StartApplication method
|
||||
|
||||
// m_transport = make_shared<TcpTransport>();
|
||||
// m_face = make_shared<Face>(m_transport, make_shared<TcpTransport::ConnectionInfo>("localhost"));
|
||||
|
||||
// connectToDaemon();
|
||||
|
||||
shared_ptr<BasicIdentityStorage> publicStorage = make_shared<BasicIdentityStorage>();
|
||||
shared_ptr<OSXPrivateKeyStorage> privateStorage = make_shared<OSXPrivateKeyStorage>();
|
||||
m_identityManager = make_shared<IdentityManager>(publicStorage, privateStorage);
|
||||
|
||||
m_syncRegisteredPrefixId = m_face->registerPrefix(m_syncPrefix,
|
||||
bind(&SyncLogic::onSyncInterest, this, _1, _2, _3, _4),
|
||||
bind(&SyncLogic::onSyncRegisterFailed, this, _1));
|
||||
m_syncRegisteredPrefixId = m_face->setInterestFilter(m_syncPrefix,
|
||||
func_lib::bind(&SyncLogic::onSyncInterest, this, _1, _2, _3, _4),
|
||||
func_lib::bind(&SyncLogic::onSyncRegisterFailed, this, _1));
|
||||
|
||||
|
||||
m_scheduler.schedule (TIME_SECONDS (0), // no need to add jitter
|
||||
bind (&SyncLogic::sendSyncInterest, this),
|
||||
func_lib::bind (&SyncLogic::sendSyncInterest, this),
|
||||
REEXPRESSING_INTEREST);
|
||||
#endif
|
||||
}
|
||||
@@ -114,7 +101,6 @@ namespace Sync
|
||||
SyncLogic::SyncLogic (const Name& syncPrefix,
|
||||
shared_ptr<SyncPolicyManager> syncPolicyManager,
|
||||
shared_ptr<Face> face,
|
||||
shared_ptr<Transport> transport,
|
||||
LogicPerBranchCallback onUpdateBranch)
|
||||
: m_state (new FullState)
|
||||
, m_syncInterestTable (TIME_SECONDS (m_syncInterestReexpress))
|
||||
@@ -122,8 +108,9 @@ SyncLogic::SyncLogic (const Name& syncPrefix,
|
||||
, m_onUpdateBranch (onUpdateBranch)
|
||||
, m_perBranch(true)
|
||||
, m_policyManager(syncPolicyManager)
|
||||
, m_verifier(new Verifier(syncPolicyManager))
|
||||
, m_keyChain(new KeyChain())
|
||||
, m_face(face)
|
||||
, m_transport(transport)
|
||||
#ifndef NS3_MODULE
|
||||
, m_randomGenerator (static_cast<unsigned int> (std::time (0)))
|
||||
, m_rangeUniformRandom (m_randomGenerator, uniform_int<> (200,1000))
|
||||
@@ -136,55 +123,22 @@ SyncLogic::SyncLogic (const Name& syncPrefix,
|
||||
{
|
||||
#ifndef NS3_MODULE
|
||||
// In NS3 module these functions are moved to StartApplication method
|
||||
|
||||
// m_transport = make_shared<TcpTransport>();
|
||||
// m_face = make_shared<Face>(m_transport, make_shared<TcpTransport::ConnectionInfo>("localhost"));
|
||||
|
||||
// connectToDaemon();
|
||||
|
||||
shared_ptr<BasicIdentityStorage> publicStorage = make_shared<BasicIdentityStorage>();
|
||||
shared_ptr<OSXPrivateKeyStorage> privateStorage = make_shared<OSXPrivateKeyStorage>();
|
||||
m_identityManager = make_shared<IdentityManager>(publicStorage, privateStorage);
|
||||
|
||||
m_syncRegisteredPrefixId = m_face->registerPrefix(m_syncPrefix,
|
||||
bind(&SyncLogic::onSyncInterest, this, _1, _2, _3, _4),
|
||||
bind(&SyncLogic::onSyncRegisterFailed, this, _1));
|
||||
m_syncRegisteredPrefixId = m_face->setInterestFilter(m_syncPrefix,
|
||||
func_lib::bind(&SyncLogic::onSyncInterest, this, _1, _2, _3, _4),
|
||||
func_lib::bind(&SyncLogic::onSyncRegisterFailed, this, _1));
|
||||
|
||||
m_scheduler.schedule (TIME_SECONDS (0), // no need to add jitter
|
||||
bind (&SyncLogic::sendSyncInterest, this),
|
||||
func_lib::bind (&SyncLogic::sendSyncInterest, this),
|
||||
REEXPRESSING_INTEREST);
|
||||
#endif
|
||||
}
|
||||
|
||||
SyncLogic::~SyncLogic ()
|
||||
{
|
||||
m_face->removeRegisteredPrefix(m_syncRegisteredPrefixId);
|
||||
m_face->unsetInterestFilter(m_syncRegisteredPrefixId);
|
||||
}
|
||||
|
||||
// void
|
||||
// SyncLogic::connectToDaemon()
|
||||
// {
|
||||
// //Hack! transport does not connect to daemon unless an interest is expressed.
|
||||
// Name name("/ndn");
|
||||
// shared_ptr<ndn::Interest> interest = make_shared<ndn::Interest>(name);
|
||||
// m_face->expressInterest(*interest,
|
||||
// bind(&SyncLogic::onConnectionData, this, _1, _2),
|
||||
// bind(&SyncLogic::onConnectionDataTimeout, this, _1));
|
||||
// }
|
||||
|
||||
// void
|
||||
// SyncLogic::onConnectionData(const shared_ptr<const ndn::Interest>& interest,
|
||||
// const shared_ptr<Data>& data)
|
||||
// {
|
||||
// _LOG_DEBUG("onConnectionData");
|
||||
// }
|
||||
|
||||
// void
|
||||
// SyncLogic::onConnectionDataTimeout(const shared_ptr<const ndn::Interest>& interest)
|
||||
// {
|
||||
// _LOG_DEBUG("onConnectionDataTimeout");
|
||||
// }
|
||||
|
||||
#ifdef NS3_MODULE
|
||||
void
|
||||
SyncLogic::StartApplication ()
|
||||
@@ -193,10 +147,10 @@ SyncLogic::StartApplication ()
|
||||
m_ccnxHandle->StartApplication ();
|
||||
|
||||
m_ccnxHandle->setInterestFilter (m_syncPrefix,
|
||||
bind (&SyncLogic::respondSyncInterest, this, _1));
|
||||
func_lib::bind (&SyncLogic::respondSyncInterest, this, _1));
|
||||
|
||||
m_scheduler.schedule (TIME_SECONDS (0), // need to send first interests at exactly the same time
|
||||
bind (&SyncLogic::sendSyncInterest, this),
|
||||
func_lib::bind (&SyncLogic::sendSyncInterest, this),
|
||||
REEXPRESSING_INTEREST);
|
||||
}
|
||||
|
||||
@@ -213,7 +167,7 @@ SyncLogic::StopApplication ()
|
||||
void
|
||||
SyncLogic::stop()
|
||||
{
|
||||
m_face->removeRegisteredPrefix(m_syncRegisteredPrefixId);
|
||||
m_face->unsetInterestFilter(m_syncRegisteredPrefixId);
|
||||
m_scheduler.cancel (REEXPRESSING_INTEREST);
|
||||
m_scheduler.cancel (DELAYED_INTEREST_PROCESSING);
|
||||
}
|
||||
@@ -292,41 +246,31 @@ SyncLogic::onSyncRegisterFailed(const shared_ptr<const Name>& prefix)
|
||||
void
|
||||
SyncLogic::onSyncData(const shared_ptr<const ndn::Interest>& interest,
|
||||
const shared_ptr<Data>& data,
|
||||
int stepCount,
|
||||
const OnVerified& onVerified,
|
||||
const OnVerifyFailed& onVerifyFailed)
|
||||
{
|
||||
shared_ptr<ValidationRequest> nextStep = m_policyManager->checkVerificationPolicy(data, stepCount, onVerified, onVerifyFailed);
|
||||
|
||||
if (nextStep)
|
||||
m_face->expressInterest
|
||||
(*nextStep->interest_,
|
||||
bind(&SyncLogic::onSyncCert, this, _1, _2, nextStep),
|
||||
bind(&SyncLogic::onSyncCertTimeout, this, _1, onVerifyFailed, data, nextStep));
|
||||
m_verifier->verifyData(data, onVerified, onVerifyFailed);
|
||||
}
|
||||
|
||||
void
|
||||
SyncLogic::onSyncDataTimeout(const shared_ptr<const ndn::Interest>& interest,
|
||||
int retry,
|
||||
int stepCount,
|
||||
const OnVerified& onVerified,
|
||||
const OnVerifyFailed& onVerifyFailed)
|
||||
{
|
||||
if(retry > 0)
|
||||
{
|
||||
m_face->expressInterest(*interest,
|
||||
bind(&SyncLogic::onSyncData,
|
||||
func_lib::bind(&SyncLogic::onSyncData,
|
||||
this,
|
||||
_1,
|
||||
_2,
|
||||
stepCount,
|
||||
onVerified,
|
||||
onVerifyFailed),
|
||||
bind(&SyncLogic::onSyncDataTimeout,
|
||||
func_lib::bind(&SyncLogic::onSyncDataTimeout,
|
||||
this,
|
||||
_1,
|
||||
retry - 1,
|
||||
stepCount,
|
||||
onVerified,
|
||||
onVerifyFailed));
|
||||
}
|
||||
@@ -344,8 +288,8 @@ void
|
||||
SyncLogic::onSyncDataVerified(const shared_ptr<Data>& data)
|
||||
{
|
||||
string name = data->getName().toUri();
|
||||
const char* wireData = (const char*)data->getContent().buf();
|
||||
size_t len = data->getContent().size();
|
||||
const char* wireData = (const char*)data->getContent().value();
|
||||
size_t len = data->getContent().value_size();
|
||||
|
||||
try
|
||||
{
|
||||
@@ -374,46 +318,6 @@ SyncLogic::onSyncDataVerified(const shared_ptr<Data>& data)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
SyncLogic::onSyncCert(const shared_ptr<const ndn::Interest>& interest,
|
||||
const shared_ptr<Data>& cert,
|
||||
shared_ptr<ValidationRequest> previousStep)
|
||||
{
|
||||
shared_ptr<ValidationRequest> nextStep = m_policyManager->checkVerificationPolicy(cert,
|
||||
previousStep->stepCount_,
|
||||
previousStep->onVerified_,
|
||||
previousStep->onVerifyFailed_);
|
||||
|
||||
if (nextStep)
|
||||
m_face->expressInterest
|
||||
(*nextStep->interest_,
|
||||
bind(&SyncLogic::onSyncCert, this, _1, _2, nextStep),
|
||||
bind(&SyncLogic::onSyncCertTimeout, this, _1, previousStep->onVerifyFailed_, cert, nextStep));
|
||||
}
|
||||
|
||||
void
|
||||
SyncLogic::onSyncCertTimeout(const ptr_lib::shared_ptr<const ndn::Interest>& interest,
|
||||
const OnVerifyFailed& onVerifyFailed,
|
||||
const shared_ptr<Data>& data,
|
||||
shared_ptr<ValidationRequest> nextStep)
|
||||
{
|
||||
if(nextStep->retry_ > 0)
|
||||
m_face->expressInterest(*interest,
|
||||
bind(&SyncLogic::onSyncCert,
|
||||
this,
|
||||
_1,
|
||||
_2,
|
||||
nextStep),
|
||||
bind(&SyncLogic::onSyncCertTimeout,
|
||||
this,
|
||||
_1,
|
||||
onVerifyFailed,
|
||||
data,
|
||||
nextStep));
|
||||
else
|
||||
onVerifyFailed(data);
|
||||
}
|
||||
|
||||
void
|
||||
SyncLogic::processSyncInterest (const std::string &name, DigestConstPtr digest, bool timedProcessing/*=false*/)
|
||||
{
|
||||
@@ -467,7 +371,7 @@ SyncLogic::processSyncInterest (const std::string &name, DigestConstPtr digest,
|
||||
_LOG_DEBUG ("Digest is not in the log. Schedule processing after small delay: " << waitDelay << "ms");
|
||||
|
||||
m_scheduler.schedule (TIME_MILLISECONDS (waitDelay),
|
||||
bind (&SyncLogic::processSyncInterest, this, name, digest, true),
|
||||
func_lib::bind (&SyncLogic::processSyncInterest, this, name, digest, true),
|
||||
DELAYED_INTEREST_PROCESSING);
|
||||
}
|
||||
else
|
||||
@@ -594,7 +498,7 @@ SyncLogic::processSyncData (const std::string &name, DigestConstPtr digest, cons
|
||||
// if state has changed, then it is safe to express a new interest
|
||||
m_scheduler.cancel (REEXPRESSING_INTEREST);
|
||||
m_scheduler.schedule (TIME_SECONDS_WITH_JITTER (0),
|
||||
bind (&SyncLogic::sendSyncInterest, this),
|
||||
func_lib::bind (&SyncLogic::sendSyncInterest, this),
|
||||
REEXPRESSING_INTEREST);
|
||||
}
|
||||
}
|
||||
@@ -746,17 +650,17 @@ SyncLogic::sendSyncInterest ()
|
||||
|
||||
m_scheduler.cancel (REEXPRESSING_INTEREST);
|
||||
m_scheduler.schedule (TIME_SECONDS_WITH_JITTER (m_syncInterestReexpress),
|
||||
bind (&SyncLogic::sendSyncInterest, this),
|
||||
func_lib::bind (&SyncLogic::sendSyncInterest, this),
|
||||
REEXPRESSING_INTEREST);
|
||||
|
||||
shared_ptr<ndn::Interest> interest = make_shared<ndn::Interest>(os.str());
|
||||
|
||||
OnVerified onVerified = bind(&SyncLogic::onSyncDataVerified, this, _1);
|
||||
OnVerifyFailed onVerifyFailed = bind(&SyncLogic::onSyncDataVerifyFailed, this, _1);
|
||||
OnVerified onVerified = func_lib::bind(&SyncLogic::onSyncDataVerified, this, _1);
|
||||
OnVerifyFailed onVerifyFailed = func_lib::bind(&SyncLogic::onSyncDataVerifyFailed, this, _1);
|
||||
|
||||
m_face->expressInterest(*interest,
|
||||
bind(&SyncLogic::onSyncData, this, _1, _2, 0, onVerified, onVerifyFailed),
|
||||
bind(&SyncLogic::onSyncDataTimeout, this, _1, 1, 0, onVerified, onVerifyFailed));
|
||||
func_lib::bind(&SyncLogic::onSyncData, this, _1, _2, onVerified, onVerifyFailed),
|
||||
func_lib::bind(&SyncLogic::onSyncDataTimeout, this, _1, 1, onVerified, onVerifyFailed));
|
||||
}
|
||||
|
||||
void
|
||||
@@ -773,18 +677,18 @@ SyncLogic::sendSyncRecoveryInterests (DigestConstPtr digest)
|
||||
if (m_recoveryRetransmissionInterval < 100*1000) // <100 seconds
|
||||
{
|
||||
m_scheduler.schedule (nextRetransmission,
|
||||
bind (&SyncLogic::sendSyncRecoveryInterests, this, digest),
|
||||
func_lib::bind (&SyncLogic::sendSyncRecoveryInterests, this, digest),
|
||||
REEXPRESSING_RECOVERY_INTEREST);
|
||||
}
|
||||
|
||||
shared_ptr<ndn::Interest> interest = make_shared<ndn::Interest>(os.str());
|
||||
|
||||
OnVerified onVerified = bind(&SyncLogic::onSyncDataVerified, this, _1);
|
||||
OnVerifyFailed onVerifyFailed = bind(&SyncLogic::onSyncDataVerifyFailed, this, _1);
|
||||
OnVerified onVerified = func_lib::bind(&SyncLogic::onSyncDataVerified, this, _1);
|
||||
OnVerifyFailed onVerifyFailed = func_lib::bind(&SyncLogic::onSyncDataVerifyFailed, this, _1);
|
||||
|
||||
m_face->expressInterest(*interest,
|
||||
bind(&SyncLogic::onSyncData, this, _1, _2, 0, onVerified, onVerifyFailed),
|
||||
bind(&SyncLogic::onSyncDataTimeout, this, _1, 1, 0, onVerified, onVerifyFailed));
|
||||
func_lib::bind(&SyncLogic::onSyncData, this, _1, _2, onVerified, onVerifyFailed),
|
||||
func_lib::bind(&SyncLogic::onSyncDataTimeout, this, _1, 1, onVerified, onVerifyFailed));
|
||||
}
|
||||
|
||||
|
||||
@@ -804,19 +708,16 @@ SyncLogic::sendSyncData (const std::string &name, DigestConstPtr digest, SyncSta
|
||||
_LOG_TRACE (">> D " << name);
|
||||
int size = ssm.ByteSize();
|
||||
char *wireData = new char[size];
|
||||
ssm.SerializeToArray(wireData, size);
|
||||
Blob blob((const uint8_t*)wireData, size);
|
||||
Name dataName(name);
|
||||
Name signingIdentity = m_policyManager->inferSigningIdentity(dataName);
|
||||
|
||||
shared_ptr<Data> syncData = make_shared<Data>(dataName);
|
||||
syncData->setContent(blob.buf(), blob.size());
|
||||
syncData->getMetaInfo().setTimestampMilliseconds(time(NULL) * 1000.0);
|
||||
syncData->setContent(reinterpret_cast<const uint8_t*>(wireData), size);
|
||||
|
||||
Name certificateName = m_identityManager->getDefaultCertificateNameForIdentity(signingIdentity);
|
||||
m_identityManager->signByCertificate(*syncData, certificateName);
|
||||
Name certificateName = m_keyChain->getDefaultCertificateNameForIdentity(signingIdentity);
|
||||
m_keyChain->sign(*syncData, certificateName);
|
||||
|
||||
m_transport->send(*syncData->wireEncode());
|
||||
m_face->put(*syncData);
|
||||
|
||||
delete []wireData;
|
||||
|
||||
|
||||
+4
-18
@@ -30,7 +30,8 @@
|
||||
#include <map>
|
||||
|
||||
#include <ndn-cpp/face.hpp>
|
||||
#include <ndn-cpp/security/identity/identity-manager.hpp>
|
||||
#include <ndn-cpp/security/verifier.hpp>
|
||||
#include <ndn-cpp/security/key-chain.hpp>
|
||||
|
||||
#include "sync-interest-table.h"
|
||||
#include "sync-diff-state.h"
|
||||
@@ -88,14 +89,12 @@ public:
|
||||
SyncLogic (const ndn::Name& syncPrefix,
|
||||
ndn::ptr_lib::shared_ptr<SyncPolicyManager> syncPolicyManager,
|
||||
ndn::ptr_lib::shared_ptr<ndn::Face> face,
|
||||
ndn::ptr_lib::shared_ptr<ndn::Transport> transport,
|
||||
LogicUpdateCallback onUpdate,
|
||||
LogicRemoveCallback onRemove);
|
||||
|
||||
SyncLogic (const ndn::Name& syncPrefix,
|
||||
ndn::ptr_lib::shared_ptr<SyncPolicyManager> syncPolicyManager,
|
||||
ndn::ptr_lib::shared_ptr<ndn::Face> face,
|
||||
ndn::ptr_lib::shared_ptr<ndn::Transport> transport,
|
||||
LogicPerBranchCallback onUpdateBranch);
|
||||
|
||||
~SyncLogic ();
|
||||
@@ -172,14 +171,12 @@ private:
|
||||
void
|
||||
onSyncData(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
|
||||
const ndn::ptr_lib::shared_ptr<ndn::Data>& data,
|
||||
int stepCount,
|
||||
const ndn::OnVerified& onVerified,
|
||||
const ndn::OnVerifyFailed& onVerifyFailed);
|
||||
|
||||
void
|
||||
onSyncDataTimeout(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
|
||||
int retry,
|
||||
int stepCount,
|
||||
const ndn::OnVerified& onVerified,
|
||||
const ndn::OnVerifyFailed& onVerifyFailed);
|
||||
|
||||
@@ -189,17 +186,6 @@ private:
|
||||
void
|
||||
onSyncDataVerified(const ndn::ptr_lib::shared_ptr<ndn::Data>& data);
|
||||
|
||||
void
|
||||
onSyncCert(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
|
||||
const ndn::ptr_lib::shared_ptr<ndn::Data>& cert,
|
||||
ndn::ptr_lib::shared_ptr<ndn::ValidationRequest> previousStep);
|
||||
|
||||
void
|
||||
onSyncCertTimeout(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
|
||||
const ndn::OnVerifyFailed& onVerifyFailed,
|
||||
const ndn::ptr_lib::shared_ptr<ndn::Data>& data,
|
||||
ndn::ptr_lib::shared_ptr<ndn::ValidationRequest> nextStep);
|
||||
|
||||
void
|
||||
processSyncInterest (const std::string &name,
|
||||
DigestConstPtr digest, bool timedProcessing=false);
|
||||
@@ -252,9 +238,9 @@ private:
|
||||
LogicPerBranchCallback m_onUpdateBranch;
|
||||
bool m_perBranch;
|
||||
ndn::ptr_lib::shared_ptr<SyncPolicyManager> m_policyManager;
|
||||
ndn::ptr_lib::shared_ptr<ndn::IdentityManager> m_identityManager;
|
||||
ndn::ptr_lib::shared_ptr<ndn::Verifier> m_verifier;
|
||||
ndn::ptr_lib::shared_ptr<ndn::KeyChain> m_keyChain;
|
||||
ndn::ptr_lib::shared_ptr<ndn::Face> m_face;
|
||||
ndn::ptr_lib::shared_ptr<ndn::Transport> m_transport;
|
||||
uint64_t m_syncRegisteredPrefixId;
|
||||
|
||||
Scheduler m_scheduler;
|
||||
|
||||
+77
-119
@@ -10,10 +10,8 @@
|
||||
|
||||
#include "sync-intro-certificate.h"
|
||||
#include "sync-logging.h"
|
||||
#include <ndn-cpp/security/identity/basic-identity-storage.hpp>
|
||||
#include <ndn-cpp/security/identity/osx-private-key-storage.hpp>
|
||||
#include <ndn-cpp/sha256-with-rsa-signature.hpp>
|
||||
#include <ndn-cpp/security/signature/sha256-with-rsa-handler.hpp>
|
||||
#include <ndn-cpp/security/verifier.hpp>
|
||||
#include <ndn-cpp/security/signature/signature-sha256-with-rsa.hpp>
|
||||
|
||||
#include "sync-policy-manager.h"
|
||||
|
||||
@@ -27,22 +25,13 @@ SyncPolicyManager::SyncPolicyManager(const Name& signingIdentity,
|
||||
const Name& signingCertificateName,
|
||||
const Name& syncPrefix,
|
||||
shared_ptr<Face> face,
|
||||
shared_ptr<Transport> transport,
|
||||
int stepLimit)
|
||||
: m_signingIdentity(signingIdentity)
|
||||
, m_signingCertificateName(signingCertificateName.getPrefix(signingCertificateName.size()-1))
|
||||
, m_syncPrefix(syncPrefix)
|
||||
, m_stepLimit(stepLimit)
|
||||
{
|
||||
// m_transport = make_shared<TcpTransport>();
|
||||
// m_face = make_shared<Face>(m_transport, make_shared<TcpTransport::ConnectionInfo>("localhost"));
|
||||
|
||||
// connectToDaemon();
|
||||
|
||||
shared_ptr<IdentityStorage> publicStorage = make_shared<BasicIdentityStorage>();
|
||||
shared_ptr<PrivateKeyStorage> privateStorage = make_shared<OSXPrivateKeyStorage>();
|
||||
m_identityManager = make_shared<IdentityManager>(publicStorage, privateStorage);
|
||||
|
||||
, m_keyChain(new KeyChain())
|
||||
{
|
||||
Name wotPrefix = syncPrefix;
|
||||
wotPrefix.append("WOT");
|
||||
m_syncPrefixRegex = Regex::fromName(syncPrefix);
|
||||
@@ -55,30 +44,6 @@ SyncPolicyManager::SyncPolicyManager(const Name& signingIdentity,
|
||||
SyncPolicyManager::~SyncPolicyManager()
|
||||
{}
|
||||
|
||||
// void
|
||||
// SyncPolicyManager::connectToDaemon()
|
||||
// {
|
||||
// //Hack! transport does not connect to daemon unless an interest is expressed.
|
||||
// Name name("/ndn");
|
||||
// shared_ptr<ndn::Interest> interest = make_shared<ndn::Interest>(name);
|
||||
// m_face->expressInterest(*interest,
|
||||
// bind(&SyncPolicyManager::onConnectionData, this, _1, _2),
|
||||
// bind(&SyncPolicyManager::onConnectionDataTimeout, this, _1));
|
||||
// }
|
||||
|
||||
// void
|
||||
// SyncPolicyManager::onConnectionData(const shared_ptr<const ndn::Interest>& interest,
|
||||
// const shared_ptr<Data>& data)
|
||||
// {
|
||||
// _LOG_DEBUG("onConnectionData");
|
||||
// }
|
||||
|
||||
// void
|
||||
// SyncPolicyManager::onConnectionDataTimeout(const shared_ptr<const ndn::Interest>& interest)
|
||||
// {
|
||||
// _LOG_DEBUG("onConnectionDataTimeout");
|
||||
// }
|
||||
|
||||
bool
|
||||
SyncPolicyManager::skipVerifyAndTrust (const Data& data)
|
||||
{ return false; }
|
||||
@@ -99,61 +64,66 @@ SyncPolicyManager::checkVerificationPolicy(const shared_ptr<Data>& data,
|
||||
return SYNC_POLICY_MANAGER_NULL_VALIDATION_REQUEST_PTR;
|
||||
}
|
||||
|
||||
const Sha256WithRsaSignature* sigPtr = dynamic_cast<const Sha256WithRsaSignature*> (data->getSignature());
|
||||
if(ndn_KeyLocatorType_KEYNAME != sigPtr->getKeyLocator().getType())
|
||||
{
|
||||
onVerifyFailed(data);
|
||||
return SYNC_POLICY_MANAGER_NULL_VALIDATION_REQUEST_PTR;
|
||||
}
|
||||
try{
|
||||
SignatureSha256WithRsa sig(data->getSignature());
|
||||
|
||||
const Name& keyLocatorName = sigPtr->getKeyLocator().getKeyName();
|
||||
const Name& keyLocatorName = sig.getKeyLocator().getName();
|
||||
|
||||
// if data is intro cert
|
||||
if(m_wotPrefixRegex->match(data->getName()))
|
||||
{
|
||||
// _LOG_DEBUG("Intro Cert");
|
||||
Name keyName = IdentityCertificate::certificateNameToPublicKeyName(keyLocatorName);
|
||||
map<string, PublicKey>::const_iterator it = m_trustedIntroducers.find(keyName.toUri());
|
||||
if(m_trustedIntroducers.end() != it)
|
||||
{
|
||||
if(Sha256WithRsaHandler::verifySignature(*data, it->second))
|
||||
onVerified(data);
|
||||
else
|
||||
onVerifyFailed(data);
|
||||
return SYNC_POLICY_MANAGER_NULL_VALIDATION_REQUEST_PTR;
|
||||
}
|
||||
else
|
||||
return prepareRequest(keyName, true, data, stepCount, onVerified, onVerifyFailed);
|
||||
}
|
||||
// if data is intro cert
|
||||
if(m_wotPrefixRegex->match(data->getName()))
|
||||
{
|
||||
// _LOG_DEBUG("Intro Cert");
|
||||
Name keyName = IdentityCertificate::certificateNameToPublicKeyName(keyLocatorName);
|
||||
map<string, PublicKey>::const_iterator it = m_trustedIntroducers.find(keyName.toUri());
|
||||
if(m_trustedIntroducers.end() != it)
|
||||
{
|
||||
if(Verifier::verifySignature(*data, sig, it->second))
|
||||
onVerified(data);
|
||||
else
|
||||
onVerifyFailed(data);
|
||||
return SYNC_POLICY_MANAGER_NULL_VALIDATION_REQUEST_PTR;
|
||||
}
|
||||
else
|
||||
return prepareRequest(keyName, true, data, stepCount, onVerified, onVerifyFailed);
|
||||
}
|
||||
|
||||
// if data is sync data or chat data
|
||||
if(m_syncPrefixRegex->match(data->getName()) || m_chatDataPolicy->satisfy(*data))
|
||||
{
|
||||
Name keyName = IdentityCertificate::certificateNameToPublicKeyName(keyLocatorName);
|
||||
// if data is sync data or chat data
|
||||
if(m_syncPrefixRegex->match(data->getName()) || m_chatDataPolicy->satisfy(*data))
|
||||
{
|
||||
Name keyName = IdentityCertificate::certificateNameToPublicKeyName(keyLocatorName);
|
||||
|
||||
map<string, PublicKey>::const_iterator it = m_trustedIntroducers.find(keyName.toUri());
|
||||
if(m_trustedIntroducers.end() != it)
|
||||
{
|
||||
if(Sha256WithRsaHandler::verifySignature(*data, it->second))
|
||||
onVerified(data);
|
||||
else
|
||||
onVerifyFailed(data);
|
||||
return SYNC_POLICY_MANAGER_NULL_VALIDATION_REQUEST_PTR;
|
||||
}
|
||||
map<string, PublicKey>::const_iterator it = m_trustedIntroducers.find(keyName.toUri());
|
||||
if(m_trustedIntroducers.end() != it)
|
||||
{
|
||||
if(Verifier::verifySignature(*data, sig, it->second))
|
||||
onVerified(data);
|
||||
else
|
||||
onVerifyFailed(data);
|
||||
return SYNC_POLICY_MANAGER_NULL_VALIDATION_REQUEST_PTR;
|
||||
}
|
||||
|
||||
it = m_trustedProducers.find(keyName.toUri());
|
||||
if(m_trustedProducers.end() != it)
|
||||
{
|
||||
if(Sha256WithRsaHandler::verifySignature(*data, it->second))
|
||||
onVerified(data);
|
||||
else
|
||||
onVerifyFailed(data);
|
||||
return SYNC_POLICY_MANAGER_NULL_VALIDATION_REQUEST_PTR;
|
||||
}
|
||||
it = m_trustedProducers.find(keyName.toUri());
|
||||
if(m_trustedProducers.end() != it)
|
||||
{
|
||||
if(Verifier::verifySignature(*data, sig, it->second))
|
||||
onVerified(data);
|
||||
else
|
||||
onVerifyFailed(data);
|
||||
return SYNC_POLICY_MANAGER_NULL_VALIDATION_REQUEST_PTR;
|
||||
}
|
||||
|
||||
return prepareRequest(keyName, false, data, stepCount, onVerified, onVerifyFailed);
|
||||
}
|
||||
|
||||
return prepareRequest(keyName, false, data, stepCount, onVerified, onVerifyFailed);
|
||||
}
|
||||
}catch(SignatureSha256WithRsa::Error &e){
|
||||
_LOG_DEBUG("SyncPolicyManager Error: " << e.what());
|
||||
onVerifyFailed(data);
|
||||
return SYNC_POLICY_MANAGER_NULL_VALIDATION_REQUEST_PTR;
|
||||
}catch(KeyLocator::Error &e){
|
||||
_LOG_DEBUG("SyncPolicyManager Error: " << e.what());
|
||||
onVerifyFailed(data);
|
||||
return SYNC_POLICY_MANAGER_NULL_VALIDATION_REQUEST_PTR;
|
||||
}
|
||||
|
||||
onVerifyFailed(data);
|
||||
return SYNC_POLICY_MANAGER_NULL_VALIDATION_REQUEST_PTR;
|
||||
}
|
||||
@@ -186,20 +156,6 @@ SyncPolicyManager::addChatDataRule(const Name& prefix,
|
||||
const IdentityCertificate& identityCertificate,
|
||||
bool isIntroducer)
|
||||
{
|
||||
// Name dataPrefix = prefix;
|
||||
// dataPrefix.append("chronos").append(m_syncPrefix.get(-1));
|
||||
// Ptr<Regex> dataRegex = Regex::fromName(prefix);
|
||||
// Name certName = identityCertificate.getName();
|
||||
// Name signerName = certName.getPrefix(certName.size()-1);
|
||||
// Ptr<Regex> signerRegex = Regex::fromName(signerName, true);
|
||||
|
||||
// SpecificPolicyRule rule(dataRegex, signerRegex);
|
||||
// map<Name, SpecificPolicyRule>::iterator it = m_chatDataRules.find(dataPrefix);
|
||||
// if(it != m_chatDataRules.end())
|
||||
// it->second = rule;
|
||||
// else
|
||||
// m_chatDataRules.insert(pair <Name, SpecificPolicyRule > (dataPrefix, rule));
|
||||
|
||||
addTrustAnchor(identityCertificate, isIntroducer);
|
||||
}
|
||||
|
||||
@@ -242,7 +198,6 @@ SyncPolicyManager::prepareRequest(const Name& keyName,
|
||||
|
||||
shared_ptr<ndn::Interest> interest = make_shared<ndn::Interest>(interestName);
|
||||
// _LOG_DEBUG("send interest for intro cert: " << interest->getName());
|
||||
interest->setChildSelector(ndn_Interest_CHILD_SELECTOR_RIGHT);
|
||||
|
||||
OnVerified requestedCertVerifiedCallback = boost::bind(&SyncPolicyManager::onIntroCertVerified,
|
||||
this,
|
||||
@@ -281,10 +236,7 @@ SyncPolicyManager::OnIntroCertInterest(const shared_ptr<const Name>& prefix,
|
||||
map<string, Data>::const_iterator it = m_introCert.find(prefix->toUri());
|
||||
|
||||
if(m_introCert.end() != it)
|
||||
{
|
||||
Blob encodedData = it->second.wireEncode();
|
||||
transport.send(*encodedData);
|
||||
}
|
||||
m_face->put(it->second);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -306,17 +258,17 @@ SyncPolicyManager::onIntroCertVerified(const shared_ptr<Data>& introCertificateD
|
||||
introCertificate->getPublicKeyInfo()));
|
||||
SyncIntroCertificate syncIntroCertificate(m_syncPrefix,
|
||||
introCertificate->getPublicKeyName(),
|
||||
m_identityManager->getDefaultKeyNameForIdentity(m_signingIdentity),
|
||||
m_keyChain->getDefaultKeyNameForIdentity(m_signingIdentity),
|
||||
introCertificate->getNotBefore(),
|
||||
introCertificate->getNotAfter(),
|
||||
introCertificate->getPublicKeyInfo(),
|
||||
SyncIntroCertificate::INTRODUCER);
|
||||
|
||||
Name certName = m_identityManager->getDefaultCertificateNameForIdentity(m_signingIdentity);
|
||||
Name certName = m_keyChain->getDefaultCertificateNameForIdentity(m_signingIdentity);
|
||||
_LOG_DEBUG("Publish Intro Certificate on Verified: " << syncIntroCertificate.getName());
|
||||
m_identityManager->signByCertificate(syncIntroCertificate, certName);
|
||||
m_keyChain->sign(syncIntroCertificate, certName);
|
||||
|
||||
m_transport->send(*syncIntroCertificate.wireEncode());
|
||||
m_face->put(syncIntroCertificate);
|
||||
|
||||
// Name prefix = syncIntroCertificate.getName().getPrefix(syncIntroCertificate.getName().size()-1);
|
||||
|
||||
@@ -339,17 +291,17 @@ SyncPolicyManager::onIntroCertVerified(const shared_ptr<Data>& introCertificateD
|
||||
introCertificate->getPublicKeyInfo()));
|
||||
SyncIntroCertificate syncIntroCertificate(m_syncPrefix,
|
||||
introCertificate->getPublicKeyName(),
|
||||
m_identityManager->getDefaultKeyNameForIdentity(m_signingIdentity),
|
||||
m_keyChain->getDefaultKeyNameForIdentity(m_signingIdentity),
|
||||
introCertificate->getNotBefore(),
|
||||
introCertificate->getNotAfter(),
|
||||
introCertificate->getPublicKeyInfo(),
|
||||
SyncIntroCertificate::PRODUCER);
|
||||
|
||||
Name certName = m_identityManager->getDefaultCertificateNameForIdentity(m_signingIdentity);
|
||||
Name certName = m_keyChain->getDefaultCertificateNameForIdentity(m_signingIdentity);
|
||||
_LOG_DEBUG("Publish Intro Certificate on Verified: " << syncIntroCertificate.getName());
|
||||
m_identityManager->signByCertificate(syncIntroCertificate, certName);
|
||||
m_keyChain->sign(syncIntroCertificate, certName);
|
||||
|
||||
m_transport->send(*syncIntroCertificate.wireEncode());
|
||||
m_face->put(syncIntroCertificate);
|
||||
|
||||
// Name prefix = syncIntroCertificate.getName().getPrefix(syncIntroCertificate.getName().size()-1);
|
||||
|
||||
@@ -367,10 +319,17 @@ SyncPolicyManager::onIntroCertVerified(const shared_ptr<Data>& introCertificateD
|
||||
// }
|
||||
}
|
||||
|
||||
if(Sha256WithRsaHandler::verifySignature(*originalData, introCertificate->getPublicKeyInfo()))
|
||||
onVerified(originalData);
|
||||
else
|
||||
try{
|
||||
SignatureSha256WithRsa sig(originalData->getSignature());
|
||||
if(Verifier::verifySignature(*originalData, sig, introCertificate->getPublicKeyInfo()))
|
||||
onVerified(originalData);
|
||||
else
|
||||
onVerifyFailed(originalData);
|
||||
}catch(SignatureSha256WithRsa::Error &e){
|
||||
onVerifyFailed(originalData);
|
||||
}catch(KeyLocator::Error &e){
|
||||
onVerifyFailed(originalData);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -393,7 +352,6 @@ SyncPolicyManager::onIntroCertVerifyFailed(const shared_ptr<Data>& introCertific
|
||||
interestName.append("INTRODUCER");
|
||||
|
||||
shared_ptr<ndn::Interest> interest = make_shared<ndn::Interest>(interestName);
|
||||
interest->setChildSelector(ndn_Interest_CHILD_SELECTOR_RIGHT);
|
||||
|
||||
OnVerified onRecursiveVerified = boost::bind(&SyncPolicyManager::onIntroCertVerified,
|
||||
this,
|
||||
|
||||
@@ -12,7 +12,8 @@
|
||||
#define SYNC_POLICY_MANAGER_H
|
||||
|
||||
#include <ndn-cpp/face.hpp>
|
||||
#include <ndn-cpp/security/identity/identity-manager.hpp>
|
||||
#include <ndn-cpp/security/key-chain.hpp>
|
||||
#include <ndn-cpp/security/verifier.hpp>
|
||||
#include <ndn-cpp/security/policy/policy-manager.hpp>
|
||||
#include <ndn-cpp/security/certificate/identity-certificate.hpp>
|
||||
#include <ndn-cpp-et/regex/regex.hpp>
|
||||
@@ -30,7 +31,6 @@ public:
|
||||
const ndn::Name& signingCertificateName,
|
||||
const ndn::Name& syncPrefix,
|
||||
ndn::ptr_lib::shared_ptr<ndn::Face> face,
|
||||
ndn::ptr_lib::shared_ptr<ndn::Transport> transport,
|
||||
int m_stepLimit = 3);
|
||||
|
||||
virtual
|
||||
@@ -63,20 +63,7 @@ public:
|
||||
const ndn::IdentityCertificate& identityCertificate,
|
||||
bool isIntroducer);
|
||||
|
||||
// inline void
|
||||
// setFace(ndn::ndn::ptr_lib::shared_ptr<Face> face)
|
||||
// { face_ = face; }
|
||||
|
||||
private:
|
||||
// void
|
||||
// connectToDaemon();
|
||||
|
||||
// void
|
||||
// onConnectionData(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
|
||||
// const ndn::ptr_lib::shared_ptr<ndn::Data>& data);
|
||||
|
||||
// void
|
||||
// onConnectionDataTimeout(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest);
|
||||
|
||||
ndn::ptr_lib::shared_ptr<ndn::ValidationRequest>
|
||||
prepareIntroducerRequest(const ndn::Name& keyName,
|
||||
@@ -155,8 +142,7 @@ private:
|
||||
std::map<std::string, SpecificPolicyRule> m_chatDataRules;
|
||||
std::map<std::string, ndn::Data> m_introCert;
|
||||
|
||||
ndn::ptr_lib::shared_ptr<ndn::IdentityManager> m_identityManager;
|
||||
ndn::ptr_lib::shared_ptr<ndn::Transport> m_transport;
|
||||
ndn::ptr_lib::shared_ptr<ndn::KeyChain> m_keyChain;
|
||||
ndn::ptr_lib::shared_ptr<ndn::Face> m_face;
|
||||
|
||||
};
|
||||
|
||||
+8
-83
@@ -35,53 +35,26 @@ namespace Sync {
|
||||
SyncSocket::SyncSocket (const string &syncPrefix,
|
||||
shared_ptr<SyncPolicyManager> syncPolicyManager,
|
||||
shared_ptr<Face> face,
|
||||
shared_ptr<Transport> transport,
|
||||
NewDataCallback dataCallback,
|
||||
RemoveCallback rmCallback )
|
||||
: m_newDataCallback(dataCallback)
|
||||
, m_syncPolicyManager(syncPolicyManager)
|
||||
, m_transport(transport)
|
||||
, m_verifier(new Verifier(syncPolicyManager))
|
||||
, m_keyChain(new KeyChain())
|
||||
, m_face(face)
|
||||
, m_syncLogic (syncPrefix,
|
||||
syncPolicyManager,
|
||||
face,
|
||||
transport,
|
||||
bind(&SyncSocket::passCallback, this, _1),
|
||||
rmCallback)
|
||||
{
|
||||
shared_ptr<BasicIdentityStorage> publicStorage = make_shared<BasicIdentityStorage>();
|
||||
shared_ptr<OSXPrivateKeyStorage> privateStorage = make_shared<OSXPrivateKeyStorage>();
|
||||
m_identityManager = make_shared<IdentityManager>(publicStorage, privateStorage);
|
||||
m_verifier->setFace(face);
|
||||
}
|
||||
|
||||
SyncSocket::~SyncSocket()
|
||||
{
|
||||
}
|
||||
|
||||
// void
|
||||
// SyncSocket::connectToDaemon()
|
||||
// {
|
||||
// //Hack! transport does not connect to daemon unless an interest is expressed.
|
||||
// Name name("/ndn");
|
||||
// shared_ptr<ndn::Interest> interest = make_shared<ndn::Interest>(name);
|
||||
// m_face->expressInterest(*interest,
|
||||
// bind(&SyncSocket::onConnectionData, this, _1, _2),
|
||||
// bind(&SyncSocket::onConnectionDataTimeout, this, _1));
|
||||
// }
|
||||
|
||||
// void
|
||||
// SyncSocket::onConnectionData(const shared_ptr<const ndn::Interest>& interest,
|
||||
// const shared_ptr<Data>& data)
|
||||
// {
|
||||
// _LOG_DEBUG("onConnectionData");
|
||||
// }
|
||||
|
||||
// void
|
||||
// SyncSocket::onConnectionDataTimeout(const shared_ptr<const ndn::Interest>& interest)
|
||||
// {
|
||||
// _LOG_DEBUG("onConnectionDataTimeout");
|
||||
// }
|
||||
|
||||
bool
|
||||
SyncSocket::publishData(const std::string &prefix, uint32_t session, const char *buf, size_t len, int freshness)
|
||||
{
|
||||
@@ -90,17 +63,15 @@ SyncSocket::publishData(const std::string &prefix, uint32_t session, const char
|
||||
contentNameWithSeqno << prefix << "/" << session << "/" << sequence;
|
||||
|
||||
Name dataName(contentNameWithSeqno.str ());
|
||||
Blob blob((const uint8_t*)buf, len);
|
||||
Name signingIdentity = m_syncPolicyManager->inferSigningIdentity(dataName);
|
||||
|
||||
shared_ptr<Data> data = make_shared<Data>(dataName);
|
||||
data->setContent(blob.buf(), blob.size());
|
||||
data->getMetaInfo().setTimestampMilliseconds(time(NULL) * 1000.0);
|
||||
data->setContent(reinterpret_cast<const uint8_t*>(buf), len);
|
||||
|
||||
Name certificateName = m_identityManager->getDefaultCertificateNameForIdentity(signingIdentity);
|
||||
m_identityManager->signByCertificate(*data, certificateName);
|
||||
Name certificateName = m_keyChain->getDefaultCertificateNameForIdentity(signingIdentity);
|
||||
m_keyChain->sign(*data, certificateName);
|
||||
|
||||
m_transport->send(*data->wireEncode());
|
||||
m_face->put(*data);
|
||||
|
||||
SeqNo s(session, sequence + 1);
|
||||
m_sequenceLog[prefix] = s;
|
||||
@@ -125,59 +96,13 @@ SyncSocket::fetchData(const string &prefix, const SeqNo &seq, const OnVerified&
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
SyncSocket::onChatCert(const shared_ptr<const ndn::Interest>& interest,
|
||||
const shared_ptr<Data>& cert,
|
||||
shared_ptr<ValidationRequest> previousStep)
|
||||
{
|
||||
shared_ptr<ValidationRequest> nextStep = m_syncPolicyManager->checkVerificationPolicy(cert,
|
||||
previousStep->stepCount_,
|
||||
previousStep->onVerified_,
|
||||
previousStep->onVerifyFailed_);
|
||||
|
||||
if (nextStep)
|
||||
m_face->expressInterest
|
||||
(*nextStep->interest_,
|
||||
bind(&SyncSocket::onChatCert, this, _1, _2, nextStep),
|
||||
bind(&SyncSocket::onChatCertTimeout, this, _1, previousStep->onVerifyFailed_, cert, nextStep));
|
||||
}
|
||||
|
||||
void
|
||||
SyncSocket::onChatCertTimeout(const shared_ptr<const ndn::Interest>& interest,
|
||||
const OnVerifyFailed& onVerifyFailed,
|
||||
const shared_ptr<Data>& data,
|
||||
shared_ptr<ValidationRequest> nextStep)
|
||||
{
|
||||
if(nextStep->retry_ > 0)
|
||||
m_face->expressInterest(*interest,
|
||||
bind(&SyncSocket::onChatCert,
|
||||
this,
|
||||
_1,
|
||||
_2,
|
||||
nextStep),
|
||||
bind(&SyncSocket::onChatCertTimeout,
|
||||
this,
|
||||
_1,
|
||||
onVerifyFailed,
|
||||
data,
|
||||
nextStep));
|
||||
else
|
||||
onVerifyFailed(data);
|
||||
}
|
||||
|
||||
void
|
||||
SyncSocket::onChatData(const shared_ptr<const ndn::Interest>& interest,
|
||||
const shared_ptr<Data>& data,
|
||||
const OnVerified& onVerified,
|
||||
const OnVerifyFailed& onVerifyFailed)
|
||||
{
|
||||
shared_ptr<ValidationRequest> nextStep = m_syncPolicyManager->checkVerificationPolicy(data, 0, onVerified, onVerifyFailed);
|
||||
|
||||
if (nextStep)
|
||||
m_face->expressInterest
|
||||
(*nextStep->interest_,
|
||||
bind(&SyncSocket::onChatCert, this, _1, _2, nextStep),
|
||||
bind(&SyncSocket::onChatCertTimeout, this, _1, onVerifyFailed, data, nextStep));
|
||||
m_verifier->verifyData(data, onVerified, onVerifyFailed);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
+4
-25
@@ -26,7 +26,8 @@
|
||||
#include <boost/unordered_map.hpp>
|
||||
#include "sync-seq-no.h"
|
||||
#include <ndn-cpp/face.hpp>
|
||||
#include <ndn-cpp/security/identity/identity-manager.hpp>
|
||||
#include <ndn-cpp/security/verifier.hpp>
|
||||
#include <ndn-cpp/security/key-chain.hpp>
|
||||
#include <utility>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
@@ -57,7 +58,6 @@ public:
|
||||
SyncSocket (const std::string &syncPrefix,
|
||||
ndn::ptr_lib::shared_ptr<SyncPolicyManager> syncPolicyManager,
|
||||
ndn::ptr_lib::shared_ptr<ndn::Face> face,
|
||||
ndn::ptr_lib::shared_ptr<ndn::Transport> transport,
|
||||
NewDataCallback dataCallback,
|
||||
RemoveCallback rmCallback);
|
||||
|
||||
@@ -90,31 +90,10 @@ public:
|
||||
GetLocalPrefix ();
|
||||
|
||||
private:
|
||||
// void
|
||||
// connectToDaemon();
|
||||
|
||||
// void
|
||||
// onConnectionData(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
|
||||
// const ndn::ptr_lib::shared_ptr<ndn::Data>& data);
|
||||
|
||||
// void
|
||||
// onConnectionDataTimeout(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest);
|
||||
|
||||
void
|
||||
passCallback(const std::vector<MissingDataInfo> &v)
|
||||
{ m_newDataCallback(v, this); }
|
||||
|
||||
void
|
||||
onChatCert(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
|
||||
const ndn::ptr_lib::shared_ptr<ndn::Data>& cert,
|
||||
ndn::ptr_lib::shared_ptr<ndn::ValidationRequest> previousStep);
|
||||
|
||||
void
|
||||
onChatCertTimeout(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
|
||||
const ndn::OnVerifyFailed& onVerifyFailed,
|
||||
const ndn::ptr_lib::shared_ptr<ndn::Data>& data,
|
||||
ndn::ptr_lib::shared_ptr<ndn::ValidationRequest> nextStep);
|
||||
|
||||
void
|
||||
onChatData(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
|
||||
const ndn::ptr_lib::shared_ptr<ndn::Data>& data,
|
||||
@@ -135,8 +114,8 @@ private:
|
||||
NewDataCallback m_newDataCallback;
|
||||
SequenceLog m_sequenceLog;
|
||||
ndn::ptr_lib::shared_ptr<SyncPolicyManager> m_syncPolicyManager;
|
||||
ndn::ptr_lib::shared_ptr<ndn::IdentityManager> m_identityManager;
|
||||
ndn::ptr_lib::shared_ptr<ndn::Transport> m_transport;
|
||||
ndn::ptr_lib::shared_ptr<ndn::Verifier> m_verifier;
|
||||
ndn::ptr_lib::shared_ptr<ndn::KeyChain> m_keyChain;
|
||||
ndn::ptr_lib::shared_ptr<ndn::Face> m_face;
|
||||
SyncLogic m_syncLogic;
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user