ccnx tunnel; in progress
diff --git a/include/ccnx-tunnel.h b/include/ccnx-tunnel.h
new file mode 100644
index 0000000..cddfcd5
--- /dev/null
+++ b/include/ccnx-tunnel.h
@@ -0,0 +1,84 @@
+#ifndef CCNX_TUNNEL_H
+#define CCNX_TUNNEL_H
+
+#include <sync/sync-ccnx-wrapper.h>
+#include <string>
+#include <boost/function.hpp>
+#include <boost/variant.hpp>
+#include <boost/thread/locks.hpp>
+#include <utility>
+#include <map>
+
+using namespace Sync;
+using namespace std;
+
+// Eventually, Sync::CcnxWrapper should be moved to this namespace.
+// It has nothing to do with Sync.
+namespace Ccnx
+{
+
+class CcnxTunnel : public CcnxWrapper
+{
+public:
+ typedef boost::variant<StringDataCallback, RawDataCallback> DataCallback;
+ typedef multimap<string, DataCallback> PendingInterestTable;
+ typedef multimap<string, InterestCallback> RegisteredInterestTable;
+ typedef multimap<string, DataCallback>iterator PitIter;
+ typedef multimap<string, InterestCallback>iterator RitIter;
+ typedef boost::shared_mutex Lock;
+ typedef boost::unique_lock<Lock> WriteLock;
+ typedef boost::shared_lock<Lock> ReadLock;
+
+
+ CcnxTunnel();
+ virtual ~CcnxTunnel();
+
+ // name is topology-independent
+ virtual int
+ publishRawData(const string &name, const char *buf, size_t len, int freshness);
+
+ // prefix is topology-independent
+ virtual int
+ setInterestFilter(const string &prefix, const InterestCallback &interestCallback);
+
+ // prefix is topology-independent
+ // this clears all entries with key equal to prefix
+ virtual void
+ clearInterestFilter(const string &prefix);
+
+ // subclass should provide translation service from topology-independent name
+ // to routable name
+ virtual string
+ queryRoutableName(string &name) = 0;
+
+ // subclass should implement the function to store ContentObject with topoloy-independent
+ // name to the permanent storage; default does nothing
+ virtual void
+ storeContentObject(string &name, ContentObjectPtr co) {}
+
+ // should be called when connect to a different network
+ void
+ refreshLocalPrefix();
+
+ static bool
+ isPrefix(string &prefix, string &name);
+
+protected:
+ void
+ handleTunneledInterest(string tunneldInterest);
+
+ virtual int
+ sendInterest (const std::string &strInterest, void *dataPass);
+
+protected:
+ // need a way to update local prefix, perhaps using macports trick, but eventually we need something more portable
+ string m_localPrefix;
+ PendingInterestTable m_pit;
+ RegisteredInterestTable m_rit;
+ Lock m_pitLock;
+ Lock m_ritLock;
+};
+
+};
+
+#endif