fetch: Switch code to use ndn-cxx
This commit also moves code to ndn::chronoshare namespace and changes
logging to show file and line number of the logging statement.
Change-Id: I075320644166cea9d5d3ef65bb26a2cabfd4dc5a
diff --git a/src/fetch-manager.hpp b/src/fetch-manager.hpp
index 8372e9d..5dae0ff 100644
--- a/src/fetch-manager.hpp
+++ b/src/fetch-manager.hpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2013-2016, Regents of the University of California.
+ * Copyright (c) 2013-2017, Regents of the University of California.
*
* This file is part of ChronoShare, a decentralized file sharing application over NDN.
*
@@ -21,31 +21,38 @@
#ifndef FETCH_MANAGER_H
#define FETCH_MANAGER_H
-#include "ccnx-wrapper.h"
-#include "executor.h"
-#include "fetch-task-db.h"
-#include "scheduler.h"
-#include <boost/exception/all.hpp>
-#include <boost/function.hpp>
-#include <boost/shared_ptr.hpp>
-#include <list>
-#include <stdint.h>
-#include <string>
+#include "fetch-task-db.hpp"
+#include "fetcher.hpp"
+#include "core/chronoshare-common.hpp"
-#include "fetcher.h"
+#include <ndn-cxx/util/scheduler-scoped-event-id.hpp>
+#include <ndn-cxx/util/scheduler.hpp>
+
+#include <list>
+
+namespace ndn {
+namespace chronoshare {
class FetchManager
{
public:
+ class Error : public std::runtime_error
+ {
+ public:
+ explicit Error(const std::string& what)
+ : std::runtime_error(what)
+ {
+ }
+ };
+
enum { PRIORITY_NORMAL, PRIORITY_HIGH };
- typedef boost::function<Ccnx::Name(const Ccnx::Name&)> Mapping;
- typedef boost::function<void(Ccnx::Name& deviceName, Ccnx::Name& baseName, uint64_t seq, Ccnx::PcoPtr pco)>
- SegmentCallback;
- typedef boost::function<void(Ccnx::Name& deviceName, Ccnx::Name& baseName)> FinishCallback;
- FetchManager(Ccnx::CcnxWrapperPtr ccnx,
- const Mapping& mapping,
- const Ccnx::Name& broadcastForwardingHint,
+ typedef function<Name(const Name&)> Mapping;
+ typedef function<void(Name& deviceName, Name& baseName, uint64_t seq, shared_ptr<Data> data)> SegmentCallback;
+ typedef function<void(Name& deviceName, Name& baseName)> FinishCallback;
+
+public:
+ FetchManager(Face& face, const Mapping& mapping, const Name& broadcastForwardingHint,
uint32_t parallelFetches = 3,
const SegmentCallback& defaultSegmentCallback = SegmentCallback(),
const FinishCallback& defaultFinishCallback = FinishCallback(),
@@ -53,30 +60,26 @@
virtual ~FetchManager();
void
- Enqueue(const Ccnx::Name& deviceName, const Ccnx::Name& baseName,
- const SegmentCallback& segmentCallback, const FinishCallback& finishCallback,
- uint64_t minSeqNo, uint64_t maxSeqNo, int priority = PRIORITY_NORMAL);
+ Enqueue(const Name& deviceName, const Name& baseName, const SegmentCallback& segmentCallback,
+ const FinishCallback& finishCallback, uint64_t minSeqNo, uint64_t maxSeqNo,
+ int priority = PRIORITY_NORMAL);
// Enqueue using default callbacks
void
- Enqueue(const Ccnx::Name& deviceName, const Ccnx::Name& baseName, uint64_t minSeqNo,
- uint64_t maxSeqNo, int priority = PRIORITY_NORMAL);
-
- // only for Fetcher
- inline Ccnx::CcnxWrapperPtr
- GetCcnx();
+ Enqueue(const Name& deviceName, const Name& baseName, uint64_t minSeqNo, uint64_t maxSeqNo,
+ int priority = PRIORITY_NORMAL);
private:
// Fetch Events
void
- DidDataSegmentFetched(Fetcher& fetcher, uint64_t seqno, const Ccnx::Name& basename,
- const Ccnx::Name& name, Ccnx::PcoPtr data);
+ DidDataSegmentFetched(Fetcher& fetcher, uint64_t seqno, const Name& basename, const Name& name,
+ shared_ptr<Data> data);
void
DidNoDataTimeout(Fetcher& fetcher);
void
- DidFetchComplete(Fetcher& fetcher, const Ccnx::Name& deviceName, const Ccnx::Name& baseName);
+ DidFetchComplete(Fetcher& fetcher, const Name& deviceName, const Name& baseName);
void
ScheduleFetches();
@@ -85,44 +88,33 @@
TimedWait(Fetcher& fetcher);
private:
- Ndnx::NdnxWrapperPtr m_ndnx;
+ Face& m_face;
Mapping m_mapping;
uint32_t m_maxParallelFetches;
uint32_t m_currentParallelFetches;
- boost::mutex m_parellelFetchMutex;
+ std::mutex m_parellelFetchMutex;
// optimized list structure for fetch queue
typedef boost::intrusive::member_hook<Fetcher, boost::intrusive::list_member_hook<>,
- &Fetcher::m_managerListHook>
- MemberOption;
+ &Fetcher::m_managerListHook> MemberOption;
typedef boost::intrusive::list<Fetcher, MemberOption> FetchList;
FetchList m_fetchList;
- SchedulerPtr m_scheduler;
- ExecutorPtr m_executor;
- TaskPtr m_scheduleFetchesTask;
+ Scheduler m_scheduler;
+ util::scheduler::ScopedEventId m_scheduledFetchesEvent;
+
SegmentCallback m_defaultSegmentCallback;
FinishCallback m_defaultFinishCallback;
FetchTaskDbPtr m_taskDb;
- const Ndnx::Name m_broadcastHint;
+ const Name m_broadcastHint;
+ boost::asio::io_service& m_ioService;
};
-Ccnx::CcnxWrapperPtr
-FetchManager::GetCcnx()
-{
- return m_ndnx;
-}
+typedef shared_ptr<FetchManager> FetchManagerPtr;
-typedef boost::error_info<struct tag_errmsg, std::string> errmsg_info_str;
-namespace Error {
-struct FetchManager : virtual boost::exception, virtual std::exception
-{
-};
-}
-
-typedef boost::shared_ptr<FetchManager> FetchManagerPtr;
-
+} // namespace chronoshare
+} // namespace ndn
#endif // FETCHER_H