Allow override of the session number (required by NLSR)
Change-Id: Ifb08868d6a640518aa826d3bec4546dc4e001dfa
diff --git a/src/logic.cpp b/src/logic.cpp
index 81d84c8..c987109 100644
--- a/src/logic.cpp
+++ b/src/logic.cpp
@@ -110,7 +110,8 @@
const time::milliseconds& resetInterestLifetime,
const time::milliseconds& syncInterestLifetime,
const time::milliseconds& syncReplyFreshness,
- const time::milliseconds& recoveryInterestLifetime)
+ const time::milliseconds& recoveryInterestLifetime,
+ const name::Component& session)
: m_face(face)
, m_syncPrefix(syncPrefix)
, m_defaultUserPrefix(defaultUserPrefix)
@@ -134,7 +135,7 @@
{
_LOG_DEBUG_ID(">> Logic::Logic");
- addUserNode(m_defaultUserPrefix, defaultSigningId);
+ addUserNode(m_defaultUserPrefix, defaultSigningId, session);
m_syncReset = m_syncPrefix;
m_syncReset.append("reset");
@@ -194,7 +195,7 @@
}
void
-Logic::addUserNode(const Name& userPrefix, const Name& signingId)
+Logic::addUserNode(const Name& userPrefix, const Name& signingId, const name::Component& session)
{
if (userPrefix == EMPTY_NAME)
return;
@@ -205,7 +206,12 @@
m_nodeList[userPrefix].userPrefix = userPrefix;
m_nodeList[userPrefix].signingId = signingId;
Name sessionName = userPrefix;
- sessionName.appendNumber(ndn::time::toUnixTimestamp(ndn::time::system_clock::now()).count());
+ if (!session.empty()) {
+ sessionName.append(session);
+ }
+ else {
+ sessionName.appendNumber(ndn::time::toUnixTimestamp(ndn::time::system_clock::now()).count());
+ }
m_nodeList[userPrefix].sessionName = sessionName;
m_nodeList[userPrefix].seqNo = 0;
reset(false);
diff --git a/src/logic.hpp b/src/logic.hpp
index 1aef992..a2fec3b 100644
--- a/src/logic.hpp
+++ b/src/logic.hpp
@@ -117,6 +117,7 @@
* @param syncInterestLifetime The lifetime of sync interest
* @param syncReplyFreshness The FreshnessPeriod of sync reply
* @param recoveryInterestLifetime The lifetime of recovery interest
+ * @param session Manually defined session ID
*/
Logic(ndn::Face& face,
const Name& syncPrefix,
@@ -129,7 +130,8 @@
const time::milliseconds& resetInterestLifetime = DEFAULT_RESET_INTEREST_LIFETIME,
const time::milliseconds& syncInterestLifetime = DEFAULT_SYNC_INTEREST_LIFETIME,
const time::milliseconds& syncReplyFreshness = DEFAULT_SYNC_REPLY_FRESHNESS,
- const time::milliseconds& recoveryInterestLifetime = DEFAULT_RECOVERY_INTEREST_LIFETIME);
+ const time::milliseconds& recoveryInterestLifetime = DEFAULT_RECOVERY_INTEREST_LIFETIME,
+ const name::Component& session = {});
~Logic();
@@ -165,9 +167,10 @@
*
* @param userPrefix prefix of the added node
* @param signingId signing Id of the added node
+ * @param session manually defined session ID
*/
void
- addUserNode(const Name& userPrefix, const Name& signingId = DEFAULT_NAME);
+ addUserNode(const Name& userPrefix, const Name& signingId = DEFAULT_NAME, const name::Component& session = {});
/// @brief remove the node from the local session
void
diff --git a/src/socket.cpp b/src/socket.cpp
index a4c1673..4468fb7 100644
--- a/src/socket.cpp
+++ b/src/socket.cpp
@@ -39,12 +39,14 @@
const UpdateCallback& updateCallback,
const Name& signingId,
std::shared_ptr<Validator> validator,
- const time::milliseconds& syncInterestLifetime)
+ const time::milliseconds& syncInterestLifetime,
+ const name::Component& session)
: m_userPrefix(userPrefix)
, m_face(face)
, m_logic(face, syncPrefix, userPrefix, updateCallback, Logic::DEFAULT_NAME, Logic::DEFAULT_VALIDATOR,
Logic::DEFAULT_RESET_TIMER, Logic::DEFAULT_CANCEL_RESET_TIMER, Logic::DEFAULT_RESET_INTEREST_LIFETIME,
- syncInterestLifetime)
+ syncInterestLifetime, Logic::DEFAULT_SYNC_REPLY_FRESHNESS, Logic::DEFAULT_RECOVERY_INTEREST_LIFETIME,
+ session)
, m_signingId(signingId)
, m_validator(validator)
{
@@ -67,7 +69,7 @@
}
void
-Socket::addSyncNode(const Name& prefix, const Name& signingId)
+Socket::addSyncNode(const Name& prefix, const Name& signingId, const name::Component& session)
{
if (prefix == DEFAULT_NAME)
return;
@@ -80,7 +82,7 @@
if (m_userPrefix == DEFAULT_NAME)
m_userPrefix = prefix;
- m_logic.addUserNode(prefix, signingId);
+ m_logic.addUserNode(prefix, signingId, session);
m_registeredPrefixList[prefix] =
m_face.setInterestFilter(prefix,
bind(&Socket::onInterest, this, _1, _2),
@@ -103,7 +105,6 @@
m_ims.erase(prefix);
m_logic.removeUserNode(prefix);
-
}
void
diff --git a/src/socket.hpp b/src/socket.hpp
index b7b0858..81fc806 100644
--- a/src/socket.hpp
+++ b/src/socket.hpp
@@ -65,7 +65,8 @@
const UpdateCallback& updateCallback,
const Name& signingId = DEFAULT_NAME,
std::shared_ptr<Validator> validator = DEFAULT_VALIDATOR,
- const time::milliseconds& syncInterestLifetime = Logic::DEFAULT_SYNC_INTEREST_LIFETIME);
+ const time::milliseconds& syncInterestLifetime = Logic::DEFAULT_SYNC_INTEREST_LIFETIME,
+ const name::Component& session = {});
~Socket();
@@ -82,9 +83,10 @@
*
* @param prefix Prefix of the new node
* @param signingId Signing ID for the packet sent out by the new node
+ * @param session Manually defined session number
*/
void
- addSyncNode(const Name& prefix, const Name& signingId = DEFAULT_NAME);
+ addSyncNode(const Name& prefix, const Name& signingId = DEFAULT_NAME, const name::Component& session = {});
/**
* @brief Remove a sync node under same logic
diff --git a/tests/unit-tests/test-socket.cpp b/tests/unit-tests/test-socket.cpp
index 3fd0d26..4c4984b 100644
--- a/tests/unit-tests/test-socket.cpp
+++ b/tests/unit-tests/test-socket.cpp
@@ -1,6 +1,6 @@
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
/*
- * Copyright (c) 2012-2017 University of California, Los Angeles
+ * Copyright (c) 2012-2018 University of California, Los Angeles
*
* This file is part of ChronoSync, synchronization library for distributed realtime
* applications for NDN.
@@ -50,7 +50,11 @@
userPrefix,
face,
isNum ? bind(&SocketTestApp::fetchNumbers, this, _1) :
- bind(&SocketTestApp::fetchAll, this, _1))
+ bind(&SocketTestApp::fetchAll, this, _1),
+ Logic::DEFAULT_NAME,
+ Logic::DEFAULT_VALIDATOR,
+ Logic::DEFAULT_SYNC_INTEREST_LIFETIME,
+ name::Component::fromEscapedString("override"))
{
}
@@ -325,6 +329,9 @@
BOOST_CHECK_EQUAL(app[0]->toString(), app[1]->toString());
BOOST_CHECK_EQUAL(app[0]->toString(), app[2]->toString());
+
+ BOOST_CHECK_EQUAL(sessionName[0], Name("/user0/override"));
+ BOOST_CHECK_EQUAL(sessionName[1], Name("/user1/override"));
}
BOOST_AUTO_TEST_CASE(BasicNumber)