A C++ wrapper for the basic C datatypes defined by the pEpEngine.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
roker 16cf6ce9c3 add stringlist wrapper. 11 months ago
src add stringlist wrapper. 11 months ago
test Yay, all tests are green now! \o/ 11 months ago
.gitignore add .gitignore 12 months ago
LICENSE Initial commit 1 year ago
Makefile make 'all' a PONY target. 11 months ago
Makefile.conf add Makefiles & Makefile.conf, stolen from libpEpAdapter. 12 months ago
README.md copy discussion result from pad to README.md 1 year ago


libpEpDatatypes – A C++ wrapper for the basic C datatypes defined by the pEpEngine.


Requirements & Platforms

  • License: GPL3

  • C++ standard: C++11

  • supported compilers: at least gcc and clang (both have to work)

  • Build sytem: GNU Make – Platforms: Linux, macOS ** Target: static library libpEpDatatypes.a

  • Windows and Android builds will be done separatly

Design goals & principles

  • implement move c'tor & operator for cheep moves
  • Qpen question: deep copy / shallow copy (with ref couning?) / only explicit copy?
  • always initialize all members. Better safe than sorry.
  • Ownership of the member pointees: rule of thumb: "const" pointees are non-owned, non-const pointees are owned by the data structure. Exceptional cases are documented explicitly.

Public API

  • defined in namespace pEp::DT
  • header files are installed in PREFIX/include/pEp/ and are used via #include <pEp/filename.hh> – (Also shared with libpEpAdapter!)
  • the linked list datatypes implement the API of std::forward_list

Example usage

The following API is the target we're heading to:

#include <pEp/Types.hh>
#include <pEp/Adapter.hh>

int main()
    pEp::Message msg = "From: Alice Cooper <alice@mail.com>\n"
                       "To: Bob Smith <bob@mail.com>\n"
                       "Subject: Meeting\n"
                       "Dear Bob,\n"
                       "I will come.\n"

    try {
        auto enc = msg.encrypt();
    catch (pEp::err& e)

    return 0;

As an intermediate step the p≡p API in the engine must be fully supported:

#include <pEp/message_api.h> // from pEpEngine
#include <pEp/Types.hh>      // from libpEpDatatypes
#include <pEp/Adapter.hh>    // from libpEpDatatypes

int main()
    pEp::Message msg_plain =
            "From: Alice Cooper <alice@mail.com>\nTo: Bob "
            "Smith <bob@mail.com>\nSubject: Meeting\n\n"
            "Dear Bob,\n\nI will come.\n\nAlice."_CRLF;
    ::message* msg_enc = nullptr;
    PEP_STATUS status = encrypt_message(msg_plain, enc_enc, ...);
    pEp::Message msg{std::move(msg_enc)}; // ownership of the pointee goes to 'msg'
    return 0;

Implementation details

  • Code-formatting: clang-format. Please try and use .clang-format from libpEpAdapter
  • Include guards: #ifdef/#define style (not #pragma once), naming style: LIBPEPDATATYPES_FILENAME_HH