From d000cb5fd7187b467ea37e26423104bc0b26e7f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrienberaud@gmail.com> Date: Thu, 20 Nov 2014 18:51:48 -0500 Subject: [PATCH] Update README.md --- README.md | 69 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 52 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index a8f7c3ce..c5816e9d 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,20 @@ A lightweight C++11 Distributed Hash Table implementation * Light C++11 Kademlia DHT library * Simple API - * Support for arbitrary value types with common types built-in: simple blob (user data) or bittorrent-style "service announcement" - * "Identity" layer with data signature and encryption (using GnuTLS) - * Value edition authentified by the identity layer or with custom per-value-type hooks + * Support for arbitrary value types (with common types built-in) + * Optional crypto layer with data signature and encryption (using GnuTLS) + * Value edition authentified by the crypto layer or with custom per-value-type hooks * Fast bootstrap and announce time * Originally based on https://github.com/jech/dht by Juliusz Chroboczek ***work in progress*** +Licence +- +Copyright (C) 2014 Savoir-Faire Linux Inc. + +Licenced under the GNU General Public License version 3, though the core routing library (dht.cpp) is licenced under the MIT licence. + Dependencies - - GnuTLS 3.1+, used to compute hashes and for the identity layer. @@ -19,28 +25,57 @@ Dependencies TODO - * Event listening + * Long term value persistance * Documention * ... Examples - ```c++ -dht::DhtRunner node; +#include <dht.h> -// Launch a new dht node using generated RSA keys, -// and listen on port 4222. -node.run(4222, dht::crypto::generateIdentity()); +int main() { + dht::DhtRunner node; -// put some data on the dht -std::vector<uint8_t> some_data(5, 10); -node.put("unique_key", some_data); + // Launch a dht node on a new thread, using + // generated RSA keys, and listen on port 4222. + node.run(4222, dht::crypto::generateIdentity(), true); -// get data from the dht -node.get("other_unique_key", [](const std::vector<std::shared_ptr<Value>>& values) { - // Callback called when values are found - for (const auto& value : values) - std::cout << "Found value: " << value << std::endl; - return true; // return false to stop the search -}); + // put some data on the dht + std::vector<uint8_t> some_data(5, 10); + node.put("unique_key", some_data); + + // get data from the dht + node.get("other_unique_key", [](const std::vector<std::shared_ptr<Value>>& values) { + // Callback called when values are found + for (const auto& value : values) + std::cout << "Found value: " << value << std::endl; + return true; // return false to stop the search + }); + + // here we could wait for some operations to complete + // instead of ending now. + + // wait for dht threads to end + node.join(); +} +``` +How-to install the library +- +```bash +# clone the repo +git clone https://github.com/aberaud/dht.git + +# build and install +cd dht +./autogen.sh && ./configure +make +sudo make install +``` + +How-to build a simple client app +- +```bash +g++ main.cpp -std=c++11 -ldhtcpp -lgnutls ``` -- GitLab