Skip to content
This repository has been archived by the owner on Jan 23, 2023. It is now read-only.

LEP-006: external module repository #12

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions 006-libuv-external-module-repository.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
| Title | External module repository |
|--------|----------------------------|
| Author | @CurlyMoo |
| Status | Draft |
| Date | 31-12-2017 |

Proposal
========
For my own software `pilight` I have developed various modules that I use on top of libuv. The reason for me to develop this stuff myself and not use existing libraries, is that I can use a single libuv loop for all functionality I need. Using external libraries require additional threads, additional non-blocking io loops etc. The downside of this, is that my code is not as complete as some existing libraries, and the code is probably of less quality. Despite all of this, what I have written so far is:

- NTP synchronisation (IPv6 supported)
- HTTP post and get (IPv6 and SSL supported)
- SSDP server and client
- MAIL sent through smtp (IPv6 and SSL supported)
- Webserver with websockets (SSL supported)
- Eventpool based on the observer pattern.
- ARP discovery.
- ICMP.

The SSL library used is mbedtls.

All code has been written in pure C and is mostly modular. The biggest downside is that all code uses my eventpool for handling SSL connections. I therefor also use the pure `uv_poll_t` functionality a lot to keep close to socket programming.

However, that of course doesn't mean that things cannot be improved further with the help of others.

So, my proposal is to create a repository that hosts all kinds external components built on top of libuv. Other developers can then help maintain the code and ensure its functionality and quality. By having these modules stored close to libuv, other developers can more easily find existing implementations on top of libuv, and make use of it.