📄 kadcppapi.cpp
字号:
#include <iostream>#include <sstream>#include "KadCppApi.h"using namespace std;// Default valuesstring HASH_INDEX = "SIP2PEMIR";KadCppApi::KadCppApi(const string& inifilename, int leafmode, int initNetwork) { KadClog_open("KadC.log"); // Removes KadC loggin from standard output. log = new Logger("KadCppApi"); log->debug("Constructor called..."); context = KadC_start(const_cast<char*> (inifilename.c_str()), leafmode, initNetwork);}KadCppApi::~KadCppApi() { log->debug("Destructor called..."); KadC_stop(&context); delete log;}void KadCppApi::close() { KadC_stop(&context); log->debug("API closed...");}int KadCppApi::getKNodesCount() { return KadC_getnknodes(&context);}int KadCppApi::getContactsCount() { return KadC_getncontacts(&context);}int KadCppApi::getFirewallStatus() { return KadC_getfwstatus(&context);}unsigned long KadCppApi::getExternalIP() { return KadC_getextIP(&context); }string KadCppApi::getHashId() { //return KadC_getourhashID(&context); return "not yet implemented";}unsigned short KadCppApi::getUDPport() { return KadC_getourUDPport(&context);}unsigned short KadCppApi::getTCPport() { return KadC_getourTCPport(&context);}void KadCppApi::printStatus() { log->debug("Status: ", context.s); log->debug("Number of kNodes: ", KadC_getnknodes(&context)); log->debug("Number of contacts: " , KadC_getncontacts(&context));}int KadCppApi::publish(const string & key, const string & value) { log->debug("Publishing: " + key + " = " + value); string index = HASH_INDEX + key; string metalist = key + "=" + value; return KadC_republish(&context, const_cast<char*> (index.c_str()), const_cast<char*> (HASH_INDEX.c_str()), const_cast<char*> (metalist.c_str()), 5, 10);}/** * Searches for a key */string KadCppApi::search(const string & key) { log->debug("searching for key: " + key); // Create Hash for the key string index = HASH_INDEX + key; string foundString = ""; // get rbt * void * voidPtr = KadC_find(&context, const_cast<char*> (index.c_str()), "", 5, 1, 10); // Iterate over rbt void * iter; KadCdictionary * pkd; for(iter = rbt_begin(voidPtr); iter != NULL; iter = rbt_next(voidPtr, iter)) { pkd = rbt_value(iter); KadCtag_iter kdIter; KadCtag_begin (pkd, &kdIter); for (int i = 0; i < kdIter.tagsleft; i++) { // Get Value of first tag //return string(kdIter.tagvalue); if (foundString == "") { foundString = string((kdIter.tagvalue)); } // KadCtag_next(&kdIter); } } // Iterate again and free memory for (iter = rbt_begin(voidPtr); iter != NULL; iter = rbt_begin(voidPtr)) { pkd = rbt_value(iter); rbt_erase(voidPtr, iter); KadCdictionary_destroy(pkd); } return foundString; // not found}// UPdate ini filevoid KadCppApi::updateIniFile() { // TODO - simply cannot link the method name. I don't know why. //KadC_write_inifile(&context, NULL); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -