Gromox - Groupware server backend with MAPI/HTTP, RPC/HTTP, IMAP, POP3 and PHP-MAPI support for grommunio

Gromox is the central groupware server component of grommunio. It is capable of serving as a replacement for Microsoft Exchange and compatibles. Connectivity options include RPC/HTTP (Outlook Anywhere), IMAP, POP3, an SMTP-speaking LDA, and a PHP module with a Z-MAPI function subset.

Gromox relies on other components to provide a sensibly complete mail system, such as Postfix as a mail transfer agent, and grommunio-admin for user management. A web interface is available with grommunio-web. The grommunio Appliance ships these essentials and has a ready-to-run installation of Gromox.

Support is available through grommunio GmbH and its partners. See https://grommunio.com/ for details.

The source code repository and technical issue tracker can be found at https://github.com/grommunio/gromox .

Instructions for compilation are in doc/install.rst.

Owner
grommunio
Comprehensive communication and collaboration solution
grommunio
Comments
  • Makefile.am ordering issue

    Makefile.am ordering issue

    Looks like there is an issue with the ordering of files in Makefile.am because a dependency is not expressed. Installing/relinking of libgxm_exmdb_local.la fails because at that point in time libgromox_mapi.so is not yet built or something.

    libtool: warning: '/home/buildozer/aports/testing/grommunio-gromox/src/gromox-gromox-1.1/libgromox_common.la' has not been installed in '/usr/lib'
    libtool: install: /usr/bin/install -c .libs/rebuild /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/libexec/gromox/rebuild
    libtool: install: /usr/bin/install -c .libs/libgromox_epoll.so.0.0.0T /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib/libgromox_epoll.so.0.0.0
    libtool: install: (cd /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib && { ln -s -f libgromox_epoll.so.0.0.0 libgromox_epoll.so.0 || { rm -f libgromox_epoll.so.0 && ln -s libgromox_epoll.so.0.0.0 libgromox_epoll.so.0; }; })
    libtool: install: (cd /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib && { ln -s -f libgromox_epoll.so.0.0.0 libgromox_epoll.so || { rm -f libgromox_epoll.so && ln -s libgromox_epoll.so.0.0.0 libgromox_epoll.so; }; })
    libtool: install: /usr/bin/install -c .libs/libgromox_epoll.lai /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib/libgromox_epoll.la
    libtool: warning: relinking 'libgromox_mapi.la'
    libtool: install: (cd /home/buildozer/aports/testing/grommunio-gromox/src/gromox-gromox-1.1; /bin/sh "/home/buildozer/aports/testing/grommunio-gromox/src/gromox-gromox-1.1/libtool"  --silent --tag CXX --mode=relink g++ -Wall -Wmissing-declarations -std=c++17 -fvisibility=hidden -fv
    isibility-inlines-hidden -fvisibility=default -Os -fomit-frame-pointer -g -fpermissive -Wl,--as-needed -o libgromox_mapi.la -rpath /usr/lib lib/mapi/libgromox_mapi_la-apple_util.lo lib/mapi/libgromox_mapi_la-applefile.lo lib/mapi/libgromox_mapi_la-binhex.lo lib/mapi/libgromox_mapi_
    la-eid_array.lo lib/mapi/libgromox_mapi_la-element_data.lo lib/mapi/libgromox_mapi_la-html.lo lib/mapi/libgromox_mapi_la-idset.lo lib/mapi/libgromox_mapi_la-macbinary.lo lib/mapi/libgromox_mapi_la-oxcical.lo lib/mapi/libgromox_mapi_la-oxcmail.lo lib/mapi/libgromox_mapi_la-oxvcard.l
    o lib/mapi/libgromox_mapi_la-pcl.lo lib/mapi/libgromox_mapi_la-proptag_array.lo lib/mapi/libgromox_mapi_la-propval.lo lib/mapi/libgromox_mapi_la-restriction.lo lib/mapi/libgromox_mapi_la-rop_util.lo lib/mapi/libgromox_mapi_la-rtf.lo lib/mapi/libgromox_mapi_la-rtfcp.lo lib/mapi/libg
    romox_mapi_la-rule_actions.lo lib/mapi/libgromox_mapi_la-sortorder_set.lo lib/mapi/libgromox_mapi_la-tarray_set.lo lib/mapi/libgromox_mapi_la-tnef.lo lib/mapi/libgromox_mapi_la-tpropval_array.lo -lgumbo -lHX libgromox_common.la libgromox_email.la -inst-prefix-dir /home/buildozer/ap
    orts/testing/grommunio-gromox/pkg/grommunio-gromox)
    libtool: install: /usr/bin/install -c .libs/libgxm_alias_translator.soT /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib/gromox/libgxm_alias_translator.so
    libtool: install: /usr/bin/install -c .libs/libgxm_alias_translator.lai /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib/gromox/libgxm_alias_translator.la
    libtool: warning: relinking 'libgxm_exmdb_local.la'
    libtool: install: (cd /home/buildozer/aports/testing/grommunio-gromox/src/gromox-gromox-1.1; /bin/sh "/home/buildozer/aports/testing/grommunio-gromox/src/gromox-gromox-1.1/libtool"  --silent --tag CXX --mode=relink g++ -Wall -Wmissing-declarations -std=c++17 -fvisibility=hidden -fv
    isibility-inlines-hidden -Os -fomit-frame-pointer -g -fpermissive -avoid-version -module -Wl,--version-script=./default.sym -Wl,--as-needed -o libgxm_exmdb_local.la -rpath /usr/lib/gromox mda/exmdb_local/auto_response.lo mda/exmdb_local/bounce_audit.lo mda/exmdb_local/bounce_produc
    er.lo mda/exmdb_local/cache_queue.lo mda/exmdb_local/exmdb_client.lo mda/exmdb_local/exmdb_local.lo mda/exmdb_local/main.lo mda/exmdb_local/net_failure.lo -lpthread -lHX libgromox_common.la libgromox_email.la libgromox_exrpc.la libgromox_mapi.la -inst-prefix-dir /home/buildozer/apo
    rts/testing/grommunio-gromox/pkg/grommunio-gromox)
    /home/buildozer/aports/testing/grommunio-gromox/src/gromox-gromox-1.1/.libs/libgromox_mapi.so: file not recognized: file format not recognized
    collect2: error: ld returned 1 exit status
    libtool:   error: error: relink 'libgxm_exmdb_local.la' with the above command before installing it
    make[2]: *** [Makefile:1986: install-pkglibLTLIBRARIES] Error 1
    make[2]: *** Waiting for unfinished jobs....
    libtool: install: /usr/bin/install -c .libs/libgromox_mapi.so.0.0.0T /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib/libgromox_mapi.so.0.0.0
    libtool: install: (cd /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib && { ln -s -f libgromox_mapi.so.0.0.0 libgromox_mapi.so.0 || { rm -f libgromox_mapi.so.0 && ln -s libgromox_mapi.so.0.0.0 libgromox_mapi.so.0; }; })
    libtool: install: (cd /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib && { ln -s -f libgromox_mapi.so.0.0.0 libgromox_mapi.so || { rm -f libgromox_mapi.so && ln -s libgromox_mapi.so.0.0.0 libgromox_mapi.so; }; })
    libtool: install: /usr/bin/install -c .libs/libgromox_mapi.lai /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib/libgromox_mapi.la
    libtool: warning: relinking 'libgromox_exrpc.la'
    libtool: install: (cd /home/buildozer/aports/testing/grommunio-gromox/src/gromox-gromox-1.1; /bin/sh "/home/buildozer/aports/testing/grommunio-gromox/src/gromox-gromox-1.1/libtool"  --silent --tag CXX --mode=relink g++ -Wall -Wmissing-declarations -std=c++17 -fvisibility=hidden -fv
    isibility-inlines-hidden -Os -fomit-frame-pointer -g -fpermissive -Wl,--as-needed -o libgromox_exrpc.la -rpath /usr/lib lib/exmdb_ext.lo lib/exmdb_rpc.lo libgromox_mapi.la -inst-prefix-dir /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox)
    libtool: install: /usr/bin/install -c .libs/libgromox_exrpc.so.0.0.0T /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib/libgromox_exrpc.so.0.0.0
    libtool: install: (cd /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib && { ln -s -f libgromox_exrpc.so.0.0.0 libgromox_exrpc.so.0 || { rm -f libgromox_exrpc.so.0 && ln -s libgromox_exrpc.so.0.0.0 libgromox_exrpc.so.0; }; })
    libtool: install: (cd /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib && { ln -s -f libgromox_exrpc.so.0.0.0 libgromox_exrpc.so || { rm -f libgromox_exrpc.so && ln -s libgromox_exrpc.so.0.0.0 libgromox_exrpc.so; }; })
    libtool: install: /usr/bin/install -c .libs/libgromox_exrpc.lai /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib/libgromox_exrpc.la
    libtool: warning: relinking 'libgromox_rpc.la'
    libtool: install: (cd /home/buildozer/aports/testing/grommunio-gromox/src/gromox-gromox-1.1; /bin/sh "/home/buildozer/aports/testing/grommunio-gromox/src/gromox-gromox-1.1/libtool"  --silent --tag CXX --mode=relink g++ -Wall -Wmissing-declarations -std=c++17 -fvisibility=hidden -fv
    isibility-inlines-hidden -fvisibility=default -Os -fomit-frame-pointer -g -fpermissive -Wl,--as-needed -o libgromox_rpc.la -rpath /usr/lib lib/rpc/libgromox_rpc_la-arcfour.lo lib/rpc/libgromox_rpc_la-crc32.lo lib/rpc/libgromox_rpc_la-hmacmd5.lo lib/rpc/libgromox_rpc_la-ndr.lo lib/r
    pc/libgromox_rpc_la-ntlmdes.lo lib/rpc/libgromox_rpc_la-ntlmssp.lo -lcrypto -lHX libgromox_common.la -inst-prefix-dir /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox)
    libtool: install: /usr/bin/install -c .libs/libgromox_rpc.so.0.0.0T /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib/libgromox_rpc.so.0.0.0
    libtool: install: (cd /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib && { ln -s -f libgromox_rpc.so.0.0.0 libgromox_rpc.so.0 || { rm -f libgromox_rpc.so.0 && ln -s libgromox_rpc.so.0.0.0 libgromox_rpc.so.0; }; })
    libtool: install: (cd /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib && { ln -s -f libgromox_rpc.so.0.0.0 libgromox_rpc.so || { rm -f libgromox_rpc.so && ln -s libgromox_rpc.so.0.0.0 libgromox_rpc.so; }; })
    libtool: install: /usr/bin/install -c .libs/libgromox_rpc.lai /home/buildozer/aports/testing/grommunio-gromox/pkg/grommunio-gromox/usr/lib/libgromox_rpc.la
    libtool: warning: remember to run 'libtool --finish /usr/lib'
    make[2]: Leaving directory '/home/buildozer/aports/testing/grommunio-gromox/src/gromox-gromox-1.1'
    make[1]: *** [Makefile:4498: install-am] Error 2
    make[1]: Leaving directory '/home/buildozer/aports/testing/grommunio-gromox/src/gromox-gromox-1.1'
    make: *** [Makefile:4491: install] Error 2
    
  •  error: invalid conversion from 'const char*' to 'char*' [-fpermissive]

    error: invalid conversion from 'const char*' to 'char*' [-fpermissive]

    exch/exmdb_provider/message.cpp: In function 'long int message_rectify_message(const char*, const MESSAGE_CONTENT*, MESSAGE_CONTENT*)':
    exch/exmdb_provider/message.cpp:1926:9: error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
     1926 |    pc = account;
          |         ^~~~~~~
          |         |
          |         const char*
    exch/exmdb_provider/message.cpp: In function 'long int message_rule_new_message(long int, const char*, const char*, uint32_t, sqlite3*, uint64_t, uint64_t, const char*, DOUBLE_LIST*, DOUBLE_LIST*)':
    exch/exmdb_provider/message.cpp:4254:12: error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
     4254 |       pc = account;
          |            ^~~~~~~
          |            |
          |            const char*
    make[1]: *** [Makefile:3433: exch/exmdb_provider/message.lo] Error 1
    

    Needs a fix.

  • Accessing admin interface

    Accessing admin interface

    Hi all,

    after installing the appliance as virtual machine on my home lab VMware ESXi host and installing nano and open-vm-tools, I now want to start with configuring Grammm. But I can't access the URL https:///grammm/admin/interface as it is shown on the console of the appliance.

    I get this error:

    Die Antwort von hat zu lange gedauert ERR_CONNECTION_TIMED_OUT

    I can access the appliance console via SSH. Because of the incomplete documentation I don't know what to do next.

    Kind Regards.

  • Documentation?

    Documentation?

    Hi all,

    I'm interested in testing Grammm in my home lab. But I don't find any documention about the requirements of Grammm and how to install it.

    Can you provide the documentation, please?

    Thank You.

  • use shm_mkstemp(3) on OpenBSD where O_TMPFILE is not available

    use shm_mkstemp(3) on OpenBSD where O_TMPFILE is not available

    O_TMPFILE is not available on OpenBSD however we can use shm_mkstemp(3) to generate a temporary shared memory object that we can unlink right after creating it so that when all the file descriptors referencing it are closed, the object will be gone.

  • gromox/lib/dbop_mysql.cpp:53 - Admin Role name allowing for only 32 characters

    gromox/lib/dbop_mysql.cpp:53 - Admin Role name allowing for only 32 characters

    When creating domains through the admin web interface and checking "Create domain admin role", a database error occurs if the domain name is longer than 17 characters since the generated role name results in "Domain Admin ({DomainName})".

    We tracked the issue down to line 53 in gromox/lib/dbop_mysql.cpp where the admin roles table gets initially created. There the name field is set to be 32 characters long. There were no "patches" found in the table upgrades at the bottom of the file.

    We would advise in allowing for longer names, 64 characters should suffice.

    (Some other varchar-fields from other tables may need some overthinking too, but nothing struck us so far except maybe telephone numbers being only 20 characters while titles allowing for up to 128 characters)

  • grommunio mapi.so side by side with kopano mapi.so

    grommunio mapi.so side by side with kopano mapi.so

    Is that somehow easily possible? Right now both projects provide the php .so and .ini for mapi. Is it possible to easily move or patch the projects to use their corresponding mapi implementations?

  • lib/email/mjson.cpp:1133:5: warning: 'b_digit' may be used uninitialized in this function [-Wmaybe-uninitialized]

    lib/email/mjson.cpp:1133:5: warning: 'b_digit' may be used uninitialized in this function [-Wmaybe-uninitialized]

    lib/email/mjson.cpp: In function 'long int mjson_record_node(MJSON*, char*, int, int)':
    lib/email/mjson.cpp:1133:5: warning: 'b_digit' may be used uninitialized in this function [-Wmaybe-uninitialized]
     1133 |     if (TRUE == b_digit && ',' == value[i]) {
          |     ^~
    
  • Imap Status command failing for folder name with spaces

    Imap Status command failing for folder name with spaces

    Hello together, while trying the Grammm appliance, I encountered a severe bug in the Gromox Imap implementation with respect to the IMAP specification. By default, the Grammm web interface automatically creates a default folder called "Deleted Items" for trash purpose (which indeed is common default behaviour of mail servers). When connecting with IMAP, every tested client at first successfully connects, but fails when fetching folder status information.

    Here is a raw IMAP log from a connecting client indicating that such a folder with space in its name should be escaped/enclosed in brackets: 17:25:12.377 Imap::Mailbox::NumberOfMessagesTask attached to INBOX Completed 17:25:12.389 <<< * STATUS Deleted Items (MESSAGES 0 UNSEEN 0 RECENT 0) 17:25:12.389 <<< * STATUS Deleted Items (MESSAGES 0 UNSEEN 0 RECENT 0) 8 OK STATUS completed 17:25:12.389 UnexpectedHere Could not parse list: expected a list enclosed in (), but got something else instead 17:25:12.389 Imap::Mailbox::NumberOfMessagesTask attached to Deleted Items Failed: Going offline

    I like very much the idea of Grammm as an promising alternative for Exchange, but IMAP is a major requirement and established mail protocol. I'm looking forward for an answer and progress in the entire development of Grammm!


    I'm aware, this is not related to Gromox development. But another aspect I encountered while testing the appliance is, that the Gromox-Imap configuration, which is prepared by the Appliance configuration, is wrong. In the configuration file the config directive "imap_support_stls" is prepared, but from looking in the source code of the Gromox-Imap module, this very directive should be called "imap_support_starttls". It seems, that these two possibilities doesn't fit to each other.

    Where can I post/send to such appliance issues I encountered??

    Thank you very much for your support and your great work with Grammm!

  • use pkg-config to get the ldap library requirements and fallback to header searching

    use pkg-config to get the ldap library requirements and fallback to header searching

    OpenLDAP ships with a pkg-config file and on *BSD systems the files of openldap is installed outside of default search paths, so relying on the pkg-config file is the best way to go. This commit makes pkg-config the preferred way, while falling back to the original header and library search because not everyone is shipping the ldap.pc file.

    This also adds an error message if the ldap library cannot be found.

  • imap idle not implemented right

    imap idle not implemented right

    idle is responding with + idling, but is not supposed to show tag. this prevents idle from working on strict clients.

    fix can be something like:

    int imap_cmd_parser_idle(int argc, char **argv, IMAP_CONTEXT *pcontext)
    {
            size_t string_length = 0;
    
            if (!pcontext->is_authed())
                    return 1804;
            if (argc != 2)
                    return 1800;
            gx_strlcpy(pcontext->tag_string, argv[0], arsizeof(pcontext->tag_string));
            pcontext->sched_stat = SCHED_STAT_IDLING;
            auto imap_reply_str = resource_get_imap_code(1602, 1, &string_length);
            pcontext->connection.write(imap_reply_str, string_length);
            return 0;
    }
    
RPC++ is a tool for Discord RPC (Rich Presence) to let your friends know about your Linux system
RPC++ is a tool for Discord RPC (Rich Presence) to let your friends know about your Linux system

RPC++ RPC++ is a tool for Discord RPC (Rich Presence) to let your friends know about your Linux system Installing requirements Arch based systems pacm

Jul 6, 2022
H2O - the optimized HTTP/1, HTTP/2, HTTP/3 server

H2O - an optimized HTTP server with support for HTTP/1.x, HTTP/2 and HTTP/3 (experimental) Copyright (c) 2014-2019 DeNA Co., Ltd., Kazuho Oku, Tatsuhi

Dec 30, 2022
Dec 15, 2022
Ultra fast and low latency asynchronous socket server & client C++ library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and 10K connections problem solution
Ultra fast and low latency asynchronous socket server & client C++ library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and 10K connections problem solution

CppServer Ultra fast and low latency asynchronous socket server & client C++ library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and

Jan 3, 2023
A project designed for the esp8266 D1 Mini or the esp8266 D1 Mini PRO to provide a wifi http server and dns server.
A project designed for the esp8266 D1 Mini or the esp8266 D1 Mini PRO to provide a wifi http server and dns server.

PS4 Server 9.00 This is a project designed for the esp8266 D1 Mini or the esp8266 D1 Mini PRO to provide a wifi http server and dns server. this is fo

Nov 28, 2022
9front http server with basic CGI support

tcp80x tcp80x is an HTTP server with some pseudo-CGI support. This is a merger of execfs and tcp80, both written by cinap_lenrek. Installation: Instal

Nov 27, 2021
Pushpin is a reverse proxy server written in C++ that makes it easy to implement WebSocket, HTTP streaming, and HTTP long-polling services.
Pushpin is a reverse proxy server written in C++ that makes it easy to implement WebSocket, HTTP streaming, and HTTP long-polling services.

Pushpin is a reverse proxy server written in C++ that makes it easy to implement WebSocket, HTTP streaming, and HTTP long-polling services. The project is unique among realtime push solutions in that it is designed to address the needs of API creators. Pushpin is transparent to clients and integrates easily into an API stack.

Jan 2, 2023
A collection of C++ HTTP libraries including an easy to use HTTP server.
A collection of C++ HTTP libraries including an easy to use HTTP server.

Proxygen: Facebook's C++ HTTP Libraries This project comprises the core C++ HTTP abstractions used at Facebook. Internally, it is used as the basis fo

Jan 4, 2023
πŸš€ Coroutine-based concurrency library for PHP

English | δΈ­ζ–‡ Swoole is an event-driven asynchronous & coroutine-based concurrency networking communication engine with high performance written in C++

Dec 30, 2022
We use Clash as the backend proxy, which supports Shadowsocks(R), V2Ray, and Trojan protocols.
We use Clash as the backend proxy, which supports Shadowsocks(R), V2Ray, and Trojan protocols.

We use Clash as the backend proxy, which supports Shadowsocks(R), V2Ray, and Trojan protocols.

Dec 31, 2022
gRPC - An RPC library and framework Baind Unity 3D Project

Unity 3D Compose for Desktop and Android, a modern UI framework for C ++ , C# that makes building performant and beautiful user interfaces easy and enjoyable.

May 19, 2022
πŸš€ Discord RPC Blocker for Lunar Client
πŸš€ Discord RPC Blocker for Lunar Client

?? Soyuz Soyuz has one simple purpose; listen for incoming Discord RPC requests from Lunar Client and block them! Limitations Windows only Soon to com

Oct 6, 2022
C++ framework for json-rpc (json remote procedure call)
C++ framework for json-rpc (json remote procedure call)

I am currently working on a new C++17 implementation -> json-rpc-cxx. Master Develop | libjson-rpc-cpp This framework provides cross platform JSON-RPC

Dec 28, 2022
modern C++(C++11), simple, easy to use rpc framework

modern C++(C++11), simple, easy to use rpc framework

Jan 4, 2023
RPC based on C++ Workflow. Supports Baidu bRPC, Tencent tRPC, thrift protocols.
RPC based on C++ Workflow. Supports Baidu bRPC, Tencent tRPC, thrift protocols.

δΈ­ζ–‡η‰ˆε…₯口 SRPC Introduction SRPC is an RPC system developed by Sogou. Its main features include: Base on Sogou C++ Workflow, with the following features:

Jan 3, 2023
Fastest RPC in the west
Fastest RPC in the west

smf - the fastest RPC in the West We're looking for a new maintainer for the SMF project. As I have little time to keep up with issues. Please let me

Dec 28, 2022
Apache Thrift is a lightweight, language-independent software stack for point-to-point RPC implementation
Apache Thrift is a lightweight, language-independent software stack for point-to-point RPC implementation

Apache Thrift Introduction Thrift is a lightweight, language-independent software stack for point-to-point RPC implementation. Thrift provides clean a

Jan 7, 2023
A very simple, fast, multithreaded, platform independent HTTP and HTTPS server and client library implemented using C++11 and Boost.Asio.

A very simple, fast, multithreaded, platform independent HTTP and HTTPS server and client library implemented using C++11 and Boost.Asio. Created to be an easy way to make REST resources available from C++ applications.

Dec 23, 2022
Small and fast cross-platform networking library, with support for messaging, IPv6, HTTP, SSL and WebSocket.

frnetlib Frnetlib, is a cross-platform, small and fast networking library written in C++. There are no library dependencies (unless you want to use SS

Nov 25, 2022