implementing getLocalPrefix method
diff --git a/ccnx/sync-ccnx-wrapper.cc b/ccnx/sync-ccnx-wrapper.cc
index 4759903..c27aeb3 100644
--- a/ccnx/sync-ccnx-wrapper.cc
+++ b/ccnx/sync-ccnx-wrapper.cc
@@ -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 @@
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);
diff --git a/include/sync-app-socket.h b/include/sync-app-socket.h
index 851a14c..a878c9d 100644
--- a/include/sync-app-socket.h
+++ b/include/sync-app-socket.h
@@ -89,6 +89,9 @@
SyncLogic &
getLogic () { return m_syncLogic; }
+
+ std::string
+ getLocalPrefix () { return m_ccnxHandle->getLocalPrefix (); }
private:
void
diff --git a/include/sync-ccnx-wrapper.h b/include/sync-ccnx-wrapper.h
index cc94a04..843ab54 100644
--- a/include/sync-ccnx-wrapper.h
+++ b/include/sync-ccnx-wrapper.h
@@ -141,6 +141,9 @@
int
publishRawData (const std::string &name, const char *buf, size_t len, int freshness);
+ std::string
+ getLocalPrefix ();
+
private:
void
connectCcnd();