Go to file
2017-11-05 16:53:45 +01:00
build Decided on a license. 2017-07-01 15:34:13 +02:00
demo Demo should be able to connect. 2017-11-05 16:53:45 +01:00
include Catch errors. 2017-09-25 13:01:13 +02:00
src Error handling only needs last error. 2017-09-25 15:59:23 +02:00
.gitignore Ignore binaries. 2017-11-05 16:35:54 +01:00
CMakeLists.txt Creating new channel file. 2017-09-20 21:02:25 +02:00
CONTRIBUTING.md Doxygen-friendly markdown. 2017-08-18 18:47:56 -05:00
Doxyfile Read from neocomm.h 2017-09-23 11:28:48 +02:00
LICENSE.md Doxygen-friendly markdown. 2017-08-18 18:47:56 -05:00
README.md Added section for the demo in README. 2017-10-03 17:13:18 +02:00

NeoComm

NeoComm is a lightweight completely decentralized and anti-censorship IRC replacement network. The objective of this network is to create a secure form of group instant communication similar to IRC but decentralizing the network, and as a consequence hindering censorship within the network and protecting the network's endurance against malevolent entities that may try to block access to the network.

The API is C compatible (no C++ name mangling) despite the library itself being written in C++ (in order to work with OpenDHT). This should allow for simple bindings to be made, and rewriting the library to C++ should not be difficult either if someone would like to fork.

This repository provides a library with interfaces by which you can access the network, which you are able to use in your own software under the terms & conditions of the library's license.

Network Model

NeoComm tries to avoid any dependency on any central servers in order to avoid central control and censorship of the network itself. For this reason NeoComm works using a DHT network, the technology used in torrenting to allow for nodes to aid each other in peer discovery. This means that the more you connect to the network the less reliant you are on any given node and that new users can connect to specific peer nodes if they are blocked to the default entry nodes. This is because the address of nodes from the previous session can be exported onto your hard disk and reused in later sessions, removing the need to rely on the default entry nodes.

Roadmap

What follows is a list roadmap of features and the (approximate) versions in which they will be implemented. The API will only change in major versions of the library, while minor versions will be dedicated to internal improvements and patch versions to small fixes that got past the release.

  • v1.0-beta:
  • Node connectivity (TBT)
  • Channel functionality (TBT)
  • Messages properly sent and received
  • v1.0:
  • Message encryption
  • P2P Private messages
  • v2.0:
  • SOCKS4a/SOCKS5 proxy support
  • HTTP proxy support
  • v3.0:
  • P2P File transfer
  • Memos (with TTL)

TBT = To Be Tested

API Documentation

NeoComm uses Doxygen to generate its documentation (for NeoComm developers please refer to the contributing section) which generates HTML documentation, which you can do by running doxygen in the root directory of the project or by using the graphical wizard.

Public documentation will be published with every major release.

Example Code

An example program is available in the demo directory which contains a basic usage of NeoComm.

Clients

There are currently no clients available.

Compiling

To build this project you will need a C++11 compatible compiler (GCC is recommended), the OpenDHT library, msgpack-c, and the CMake build system. To build run the following commands from the root directory of the project.

$ cd build/
$ cmake ..
$ make

By default this will build a release build, if you require a debug build run the cmake command with the additional flag -DCMAKE_BUILD_TYPE=debug. It will also build a static library by default, in order to compile a dynamic library add the flag -DBUILD_SHARED_LIB=ON.

Contributing

NeoComm is Free/Libre Open Source Software (FLOSS) and as such is community oriented. Contributions are greatly appreciated in order to keep the project up-to-date. If you would like to contribute something then please read over the contribution guide before making a pull request. If you're looking for something to contribute have a look at our issue tracker for bugs/requests.

License

This project is licensed under the terms & conditions of the GNU Affero General Public License version 3 or greater unless stated otherwise in the file.