Checkpoint towards Fetcher with forwarding hint support
diff --git a/ccnx/ccnx-name.cpp b/ccnx/ccnx-name.cpp
index a59cf8a..4573ed1 100644
--- a/ccnx/ccnx-name.cpp
+++ b/ccnx/ccnx-name.cpp
@@ -155,6 +155,14 @@
}
Name &
+Name::appendComp(const Name &comp)
+{
+ m_comps.insert (m_comps.end (),
+ comp.m_comps.begin (), comp.m_comps.end ());
+ return *this;
+}
+
+Name &
Name::appendComp(const Bytes &comp)
{
m_comps.push_back(comp);
@@ -169,16 +177,6 @@
}
Name &
-Name::appendComp(const Name &name)
-{
- for (vector<Bytes>::const_iterator i = name.m_comps.begin (); i != name.m_comps.end (); i++)
- {
- appendComp (*i);
- }
- return *this;
-}
-
-Name &
Name::appendComp (const void *buf, size_t size)
{
Bytes comp (reinterpret_cast<const unsigned char*> (buf), reinterpret_cast<const unsigned char*> (buf) + size);
@@ -190,7 +188,7 @@
{
Bytes comp;
comp.push_back (0);
-
+
while (number > 0)
{
comp.push_back (static_cast<unsigned char> (number & 0xFF));
diff --git a/ccnx/ccnx-name.h b/ccnx/ccnx-name.h
index ec55397..a07f854 100644
--- a/ccnx/ccnx-name.h
+++ b/ccnx/ccnx-name.h
@@ -80,15 +80,15 @@
operator CcnxCharbufPtr () const { return toCcnxCharbuf (); }
Name &
+ appendComp(const Name &comp);
+
+ Name &
appendComp(const Bytes &comp);
Name &
appendComp(const string &compStr);
Name &
- appendComp(const Name &name);
-
- Name &
appendComp(const void *buf, size_t size);
/**
diff --git a/ccnx/ccnx-tunnel.cpp b/ccnx/ccnx-tunnel.cpp
index 6bf117f..def125a 100644
--- a/ccnx/ccnx-tunnel.cpp
+++ b/ccnx/ccnx-tunnel.cpp
@@ -26,8 +26,8 @@
{
CcnxTunnel::CcnxTunnel()
- : CcnxWrapper()
- , m_localPrefix("/")
+ : CcnxWrapper()
+ , m_localPrefix("/")
{
refreshLocalPrefix();
}
diff --git a/ccnx/ccnx-tunnel.h b/ccnx/ccnx-tunnel.h
index ce56775..01dbf5e 100644
--- a/ccnx/ccnx-tunnel.h
+++ b/ccnx/ccnx-tunnel.h
@@ -22,10 +22,7 @@
#ifndef CCNX_TUNNEL_H
#define CCNX_TUNNEL_H
-#include "ccnx-common.h"
#include "ccnx-wrapper.h"
-#include "ccnx-name.h"
-#include "ccnx-selectors.h"
#define _OVERRIDE
#ifdef __GNUC__
diff --git a/ccnx/ccnx-wrapper.h b/ccnx/ccnx-wrapper.h
index 1127316..938b890 100644
--- a/ccnx/ccnx-wrapper.h
+++ b/ccnx/ccnx-wrapper.h
@@ -19,13 +19,6 @@
class CcnxWrapper
{
public:
- typedef boost::shared_mutex Lock;
- typedef boost::unique_lock<Lock> WriteLock;
- typedef boost::shared_lock<Lock> ReadLock;
-
- typedef boost::recursive_mutex RecLock;
- typedef boost::unique_lock<RecLock> UniqueRecLock;
-
typedef boost::function<void (const Name &)> InterestCallback;
CcnxWrapper();
@@ -69,6 +62,13 @@
/// @endcond
protected:
+ typedef boost::shared_mutex Lock;
+ typedef boost::unique_lock<Lock> WriteLock;
+ typedef boost::shared_lock<Lock> ReadLock;
+
+ typedef boost::recursive_mutex RecLock;
+ typedef boost::unique_lock<RecLock> UniqueRecLock;
+
ccn* m_handle;
RecLock m_mutex;
boost::thread m_thread;
diff --git a/src/fetcher.cc b/src/fetcher.cc
index 01a82a4..edbabb4 100644
--- a/src/fetcher.cc
+++ b/src/fetcher.cc
@@ -21,6 +21,7 @@
#include "fetcher.h"
#include "fetch-manager.h"
+#include "ccnx-pco.h"
#include <boost/make_shared.hpp>
#include <boost/ref.hpp>
@@ -88,7 +89,7 @@
continue;
// cout << ">>> " << m_minSendSeqNo+1 << endl;
- m_ccnx->sendInterest (Name (m_name)(m_minSendSeqNo+1),
+ m_ccnx->sendInterest (Name (m_forwardingHint)(m_name)(m_minSendSeqNo+1),
Closure (bind(&Fetcher::OnData, this, m_minSendSeqNo+1, _1, _2),
bind(&Fetcher::OnTimeout, this, m_minSendSeqNo+1, _1)),
Selectors().interestLifetime (1)); // Alex: this lifetime should be changed to RTO
@@ -100,7 +101,21 @@
void
Fetcher::OnData (uint32_t seqno, const Ccnx::Name &name, const Ccnx::Bytes &content)
{
- m_onDataSegment (*this, seqno, m_name, name, content);
+ if (m_forwardingHint == Name ())
+ m_onDataSegment (*this, seqno, m_name, name, content);
+ else
+ {
+ try {
+ ParsedContentObject pco (content);
+ m_onDataSegment (*this, seqno, m_name, pco.name (), pco.content ());
+ }
+ catch (MisformedContentObjectException &e)
+ {
+ cerr << "MisformedContentObjectException..." << endl;
+ // no idea what should do...
+ // let's ignore for now
+ }
+ }
m_activePipeline --;
m_lastPositiveActivity = date_time::second_clock<boost::posix_time::ptime>::universal_time();
diff --git a/src/sync-log.cc b/src/sync-log.cc
index 058627f..6bd03aa 100644
--- a/src/sync-log.cc
+++ b/src/sync-log.cc
@@ -40,7 +40,7 @@
, m_localName (localName)
{
UpdateDeviceSeqNo (localName, 0);
-
+
sqlite3_stmt *stmt;
int res = sqlite3_prepare_v2 (m_db, "SELECT device_id, seq_no FROM SyncNodes WHERE device_name=?", -1, &stmt, 0);