• Stars
    star
    1,024
  • Rank 44,961 (Top 0.9 %)
  • Language
    C++
  • License
    GNU General Publi...
  • Created almost 10 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

OpenDHT: a C++17 Distributed Hash Table implementation


OpenDHT

A lightweight C++17 Distributed Hash Table implementation.

OpenDHT provides an easy to use distributed in-memory data store. Every node in the network can read and write values to the store. Values are distributed over the network, with redundancy.

  • Lightweight and scalable, designed for large networks and small devices
  • High resilience to network disruption
  • Public key cryptography layer providing optional data signature and encryption (using GnuTLS)
  • IPv4 and IPv6 support
  • Clean and powerful C++17 map API
  • Bindings for C, Rust & Python 3
  • REST API with optional HTTP client+server with push notification support

Documentation

See the wiki: https://github.com/savoirfairelinux/opendht/wiki

How-to build and install

Build instructions: https://github.com/savoirfairelinux/opendht/wiki/Build-the-library

Examples

C++ example

The tools directory includes simple example programs :

  • dhtnode, a command line tool, allowing to run a DHT node and perform operations supported by the library (get, put etc.) with text values.
  • dhtchat, a very simple IM client working over the dht.

Example program launching a DHT node, connecting to the network and performing some basic operations:

#include <opendht.h>
#include <vector>

int main()
{
    dht::DhtRunner node;

    // Launch a dht node on a new thread, using a
    // generated RSA key pair, and listen on port 4222.
    node.run(4222, dht::crypto::generateIdentity(), true);

    // Join the network through any running node,
    // here using a known bootstrap node.
    node.bootstrap("bootstrap.jami.net", "4222");

    // put some data on the dht
    std::vector<uint8_t> some_data(5, 10);
    node.put("unique_key", some_data);

    // put some data on the dht, signed with our generated private key
    node.putSigned("unique_key_42", some_data);

    // get data from the dht
    node.get("other_unique_key", [](const std::vector<std::shared_ptr<dht::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
    });

    // wait for dht threads to end
    node.join();
    return 0;
}

Python 3 example

import opendht as dht

node = dht.DhtRunner()
node.run()

# Join the network through any running node,
# here using a known bootstrap node.
node.bootstrap("bootstrap.jami.net", "4222")

# blocking call (provide callback arguments to make the call non-blocking)
node.put(dht.InfoHash.get("unique_key"), dht.Value(b'some binary data'))

results = node.get(dht.InfoHash.get("unique_key"))
for r in results:
    print(r)

Dependencies

  • msgpack-c 1.2+, used for data serialization.
  • GnuTLS 3.3+, used for cryptographic operations.
  • Nettle 2.4+, a GnuTLS dependency for crypto.
  • (optional) restinio used for the REST API.
  • (optional) jsoncpp 1.7.4-3+, used for the REST API.
  • Build tested with GCC 7+ (GNU/Linux, Windows with MinGW), Clang/LLVM (GNU/Linux, Android, macOS, iOS).
  • Build tested with Microsoft Visual Studio 2017, 2019, 2022

Contact

IRC: join us on Libera.chat at #opendht.

License

Copyright (C) 2014-2023 Savoir-faire Linux Inc.

OpenDHT is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

See COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html for the full GPLv3 license.

Acknowledgements

This project was originally based on https://github.com/jech/dht by Juliusz Chroboczek. It is independent from another project called OpenDHT (Sean Rhea. Ph.D. Thesis, 2005), now extinct.

More Repositories

1

num2words

Modules to convert numbers to words. 42 --> forty-two
Python
785
star
2

jami-project

This (mirror) repo groups all parts of Jami.
Shell
182
star
3

jami-daemon

Mirror of Gerrit Jami Core Library and Daemon
C++
142
star
4

jami-client-android

Mirror of Gerrit Jami Android Client
Kotlin
138
star
5

ansible-nexus3-oss

Ansible role to provision Nexus Repository Manager 3.x for RedHat/CentOS
Groovy
110
star
6

jami-client-gnome

Mirror of Gerrit Jami GNOME Client
C++
74
star
7

sous-chef

Sous-Chef is a web application to help organizations to plan and deliver meals, and to manage clients files.
Python
66
star
8

cqfd

cqfd helps running commands inside the Docker container configured for your project, keeping the user and working directory the same inside the container
Shell
65
star
9

sflvault

The networked credentials store and authentication manager
Python
60
star
10

jami-libclient

Mirror of Gerrit Jami Libclient (formerly LibRingClient, or LRC for short) Library
C++
31
star
11

cukinia

A simple on-target system test framework for Linux
Shell
30
star
12

odoo_payroll

Odoo Payroll
Python
28
star
13

monitoring-tools

Collection of monitoring tools for Shinken, Nagios, etc.
Python
28
star
14

jami-client-windows

Mirror of Gerrit Jami Windows Client
C++
25
star
15

meta-embedded-containers

Provide two approaches to embed Docker container(s) into a target root filesystem with Yocto. The Docker images will be pulled from an external Docker registry.
BitBake
21
star
16

jami-client-macos

Mirror of Gerrit Jami macOS Client
Objective-C++
20
star
17

jami-client-ios

Mirror of Gerrit Jami iOS Client
Swift
17
star
18

ansible-django

Provisions a Django project behind nginx/uwsgi
Shell
16
star
19

ansible-reboot-if-needed

Reboots hosts if needed, pausing for confirmation
14
star
20

flake8-copyright

Adds copyright checks to flake8
Python
14
star
21

mod-influxdb

Shinken module for exporting data to InfluxDB
Python
13
star
22

project-addons

Odoo project related addons
Python
11
star
23

ansible-gitpush-deploy

Shell
10
star
24

odoo-cms-theme-exploration

An exploration of theme for odoo-cms with bootflat for Odoo
JavaScript
10
star
25

ansible-puma-rbenv-nginx

Deploy a Ruby rbenv environment with Puma and Nginx virtual host all-in-one.
Shell
9
star
26

django-vagrant-demo

Showcase of a Django project automatically deploying itself locally with Vagrant
JavaScript
8
star
27

training-odoo

Training doc
8
star
28

jami-client-qt

C++
8
star
29

flashlight-search

An instanceable and customizable search portlet for Liferay 7
Java
7
star
30

ansible-php-fpm-nginx

7
star
31

openerp-pyui

Generate OpenERP XML views through a Python API
Python
7
star
32

jami-nameservice

Mirror of Gerrit jami-nameserver project
JavaScript
7
star
33

redmine-add-ldap-user-to-group

Automatically add newly logged-in LDAP user to a specific group.
Ruby
7
star
34

ansible-nginx

Installs and globally configures nginx
6
star
35

meta-jami

BitBake
6
star
36

office-365-integration

Office365 integration for Liferay gives an out of the box access to use the msgraph-sdk from your own Liferay plugin. This includes the ability to let your user login to Microsoft with Auth0.
Java
6
star
37

drupal-monitoring

Containers stack for the Bansho drupal module
Python
5
star
38

vanilla-slick

Soon! The vanilla JavaScript version of the last carousel you'll ever need!
JavaScript
5
star
39

jami-client-uwp

Mirror of Gerrit Jami UWP Client
C++
5
star
40

ringme.js

A library to display a « Ring Me » button on a website.
JavaScript
5
star
41

redmine-issue-status-auto-open

Redmine Plugin : When someone spent time on a task, automatically switch it's status to open if the current status order is below.
Ruby
5
star
42

secure-odoo

Secure Odoo
Python
4
star
43

colorlogging

Simple color logging for Python.
Python
4
star
44

dhtnet

Mirror
C++
4
star
45

redmine-timebank

Show a table with summation total of spent and estimated hours, story points, remaining and projected in version pages.
Ruby
4
star
46

mod-booster-snmp

Shinken module for boosting SNMP connections
Python
3
star
47

quick-phone_ts-tpc-7990

Uses Yocto to build an image which runs quick-phone on the TS-TPC-7990
Shell
3
star
48

redmine-list-of-roles-members

Redmine Plugin : Easily get a list of all members of a Role grouped by projects.
HTML
3
star
49

ansible-uwsgi-nginx

This Ansible role will install uWSGI as needed from official repositories, create NGINX virtual host, manage apps with theirs UNIX sockets + ensure that required plugins are installed.
3
star
50

meta-jami-imx-toradex

BitBake
2
star
51

ansible-ssh-access

Facilitates SSH access from one remote to other(s)
2
star
52

lightweight-liferay-theme

An example of a lightweight liferay theme
FreeMarker
2
star
53

liferay-theme-switcher

A theme switcher module for Liferay 7
Java
2
star
54

odoo-env

A Docker image for Odoo development
2
star
55

starlight

Cross-functional skill tracking system for Agile teams. 🌟
Python
2
star
56

ansible-sync-cron

Provisions crontab entries allowing to rsync folders.
2
star
57

multi-redmine

Installs and configure Redmine from it Git repo, needs rbenv environment.
2
star
58

quick-phone

QML
2
star
59

sflphone

The free software enterprise-class softphone for GNU/Linux
2
star
60

meta-jami-imx

2
star
61

ansible-ansible-install

Installs ansible on the target host, possibly in a virtualenv
2
star
62

connector-rt

Connector between Odoo and Request Tracker (https://www.bestpractical.com/rt/)
2
star
63

pack-vmware-system-https

Checks for VMware virtual machine and ESX/ESXi
2
star
64

redmine-role-members-batch-copy

Copy or move in batch the members of a role to another role in all projects.
HTML
2
star
65

redmine-subtask-overview-enhanced

Show time spent and estimated time of each tasks into the subtasks overview of a task page.
Ruby
2
star
66

jmeter-openstack

JMeter OpenStack, easily develop performance tests for OpenStack
Java
2
star
67

odoo-ci

Odoo image to do CI of our public modules.
Dockerfile
1
star
68

ansible-compile-website

Ansible role that crawl sitemap URLs pages in order to fill all the caches.
1
star
69

oe-sfl

BitBake
1
star
70

lampd

A Drupal-oriented LAMP stack base image for Docker, based on Phusion
Dockerfile
1
star
71

pack-linux-system-nrpe

1
star
72

sflphone-test

1
star
73

ansible-postgres-install

Installs postgresql server on debian jessie
1
star
74

odoo-sh-sfl

1
star
75

pack-generic-repodeb-http

Debian and Ubuntu repository active checks with HTTP requests
1
star
76

mattermost_bot_poc

A Mattermost bot POC to explore the possibilities (yet another hello world project)
Python
1
star
77

ansible-django-deploy

Ansible role to set up a Django project in a non-privileged environment.
Jinja
1
star
78

WAQ2017-exercices-react.js

Repo des exercices de la présentation https://savoirfairelinux.github.io/WAQ2017-react.js
JavaScript
1
star
79

angular-application-example

Angular Application Example
HTML
1
star
80

angular-ringme.js

Angular component for Ringme.js (https://github.com/savoirfairelinux/ringme.js)
1
star
81

pack-generic-radius

Generic pack for radius check
1
star
82

pack-generic-redis

Shinken pack for redis server
1
star
83

ansible-redmine

Installs and globally configures Redmine in a secure way.
1
star
84

mod-carbon

Python
1
star
85

openerp-sane

Small utilities to ease OpenERP development
Python
1
star
86

hr-addons

HR related Odoo addons
Python
1
star
87

OpenERP-sentry-patch

Patch for setting up OpenERP to work with sentry for Exception reporting
1
star
88

test-report-pdf

Generate a cukinia test report with AsciiDoc
Python
1
star
89

pack-generic-multisite-http

CheckMK Multisite active checks with HTTP requests
1
star
90

ansible-fail2ban

Easily edit and deploy simple Fail2ban service into your server on the fly with easy configuration.
1
star
91

fabmob

Répertoire des contributions faites dans le cadre de la Fabrique de mobilité
Python
1
star
92

node-server-example

Node Server Example
JavaScript
1
star
93

ossec-decoders-and-rules

OSSEC customs decoders and rules for various applications that are not in the default OSSEC
Python
1
star
94

PiKake

Remote controlled dashboard for the minix neo Z64
Python
1
star
95

web-addons

Web related addons
JavaScript
1
star
96

ansible-backup-cron

Shell
1
star
97

pack-generic-smb

Pack to monitor samba shared directory
1
star
98

stock-addons

Odoo stock related addons
Python
1
star
99

pack-generic-ssh

SSH active checks with SSH request
1
star
100

pack-generic-ldap

LDAP active checks with LDAP requests
1
star