implementing getLocalPrefix method
This commit is contained in:
1 parent
60126e01a5
commit
50f7e9f4d5
3 files changed
+81
No files matched your search
@@ -21,6 +21,11 @@
|
||||
*/
|
||||
|
||||
#include "sync-ccnx-wrapper.h"
|
||||
|
||||
extern "C" {
|
||||
#include <ccn/fetch.h>
|
||||
}
|
||||
|
||||
#include "sync-log.h"
|
||||
#include <poll.h>
|
||||
#include <boost/throw_exception.hpp>
|
||||
@@ -455,6 +460,76 @@ CcnxWrapper::clearInterestFilter (const std::string &prefix)
|
||||
ccn_charbuf_destroy(&pname);
|
||||
}
|
||||
|
||||
string
|
||||
CcnxWrapper::getLocalPrefix ()
|
||||
{
|
||||
recursive_mutex::scoped_lock lock(m_mutex);
|
||||
|
||||
string retval = "";
|
||||
|
||||
struct ccn_charbuf *templ = ccn_charbuf_create();
|
||||
ccn_charbuf_append_tt(templ, CCN_DTAG_Interest, CCN_DTAG);
|
||||
ccn_charbuf_append_tt(templ, CCN_DTAG_Name, CCN_DTAG);
|
||||
ccn_charbuf_append_closer(templ); /* </Name> */
|
||||
// XXX - use pubid if possible
|
||||
ccn_charbuf_append_tt(templ, CCN_DTAG_MaxSuffixComponents, CCN_DTAG);
|
||||
ccnb_append_number(templ, 1);
|
||||
ccn_charbuf_append_closer(templ); /* </MaxSuffixComponents> */
|
||||
ccnb_tagged_putf(templ, CCN_DTAG_Scope, "%d", 2);
|
||||
ccn_charbuf_append_closer(templ); /* </Interest> */
|
||||
|
||||
struct ccn_charbuf *name = ccn_charbuf_create ();
|
||||
int res = ccn_name_from_uri (name, "/local/ndn/prefix");
|
||||
if (res < 0) {
|
||||
_LOG_ERROR ("Something wrong with `ccn_name_from_uri` call");
|
||||
}
|
||||
else
|
||||
{
|
||||
struct ccn_fetch *fetch = ccn_fetch_new (m_handle);
|
||||
|
||||
struct ccn_fetch_stream *stream = ccn_fetch_open (fetch, name, "/local/ndn/prefix",
|
||||
templ, 4, CCN_V_HIGHEST, 0);
|
||||
if (stream == NULL) {
|
||||
_LOG_ERROR ("Cannot create ccn_fetch_stream");
|
||||
}
|
||||
else
|
||||
{
|
||||
ostringstream os;
|
||||
|
||||
char buf[256];
|
||||
while ((res = ccn_fetch_read (stream, buf, sizeof(buf))) != 0) {
|
||||
if (res > 0) {
|
||||
os << string(buf, res);
|
||||
} else if (res == CCN_FETCH_READ_NONE) {
|
||||
fflush(stdout);
|
||||
if (ccn_run (m_handle, 1000) < 0) {
|
||||
_LOG_ERROR ("error during ccn_run");
|
||||
break;
|
||||
}
|
||||
} else if (res == CCN_FETCH_READ_END) {
|
||||
break;
|
||||
} else if (res == CCN_FETCH_READ_TIMEOUT) {
|
||||
break;
|
||||
} else {
|
||||
_LOG_ERROR ("fatal error. should be reported");
|
||||
break;
|
||||
}
|
||||
}
|
||||
retval = os.str ();
|
||||
stream = ccn_fetch_close(stream);
|
||||
}
|
||||
fetch = ccn_fetch_destroy(fetch);
|
||||
}
|
||||
|
||||
ccn_charbuf_destroy (&name);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
DataClosurePass::DataClosurePass (CallbackType type, int retry, const CcnxWrapper::StringDataCallback &strDataCallback): ClosurePass(type, retry), m_callback(NULL)
|
||||
{
|
||||
m_callback = new CcnxWrapper::StringDataCallback (strDataCallback);
|
||||
|
||||
@@ -89,6 +89,9 @@ public:
|
||||
|
||||
SyncLogic &
|
||||
getLogic () { return m_syncLogic; }
|
||||
|
||||
std::string
|
||||
getLocalPrefix () { return m_ccnxHandle->getLocalPrefix (); }
|
||||
|
||||
private:
|
||||
void
|
||||
|
||||
@@ -141,6 +141,9 @@ public:
|
||||
int
|
||||
publishRawData (const std::string &name, const char *buf, size_t len, int freshness);
|
||||
|
||||
std::string
|
||||
getLocalPrefix ();
|
||||
|
||||
private:
|
||||
void
|
||||
connectCcnd();
|
||||
|
||||
Reference in new issue
Block a user