Simple and easy multithreaded web applications in C
https://ari.lt/gh/vessel
|
||
---|---|---|
assets | ||
core | ||
doc | ||
lab | ||
old | ||
scripts | ||
tests | ||
web | ||
.clang-format | ||
.clang-tidy | ||
.editorconfig | ||
.gitignore | ||
CODE.md | ||
CONTRIBUTORS.md | ||
LICENSE | ||
Makefile | ||
README.md | ||
vessel_valgrind |
Vessel
NOTE: Vessel is in pre-alpha development stage. DO NOT use it anywhere outside of testing and contributing! The API can and WILL change. Kittens will die if you run Vessel in prod!!! Also excuse my activity, school's a lot :')
Simple and easy multithreaded web applications in C
Contributing
Either make a git.ari.lt account and fork the repository, OR e-mail me patches at ari@ari.lt
. You will be credited :) (pls do not make 50 contributions just fixing one typo at the time tyy)
Todo
- Templating
- Hashmap implementation
- Thread safety
- Dynamic array
- Thread safety
- Common file format implementation
- JSON
- XML
- Form
- CSV
- Buffering (Stream abstraction)
- Operations
- Use file descriptor/open
- Read
- Readb / readbf
- Write
- Writef (formatted write)
- Flush
- Stop (stop buffering)
- Thread safety
- Operations
- Abstractions over raw TCP connections
- Hooks
- Pre- and post- open
- Pre- close
- TLS/SSL (OpenSSL and LibreSSL)
- Thread safety
- Hooks
- Abstraction over HTTP server, using TCP abstractions
- HTTP request parser
- 1.0
- 1.1
- TODO: Implement keep-alive connections.
- 2
- HTTP request path parser
- Path parser
- Path dynamic template parser
- TODO: Change the formatting to be inline.
- HTTP response writer
- Unchunked
- Chunked
- Compression
- Thread safety
- HTTP routing, using HTTP abstractions
- Route parser
- Hooks
- Before and after request
- Not found
- Bad request
- Server error
- Cleanup
- Thread safety
- HTTP request parser
- Databases.
- MySQL/MariaDB client
- Postgresql
- Filesystem DB
- Sqlite
- LMDB
- Other protocol abstractions
- HTTP client
- Memcached client
- Optimise
- Hook resolution
- Route resolution
- Caching (etags and file content)
- Full IPv4 and IPv6 support
- IPv4
- IPv6
- Default rendered pages
- Server error.
- Not found.
- Bad request.
- No route. (reroute to 404?)
- Timeout. (504?)
- No worker. (drop connection?)
- Documentation, motivation, and philosophy.
- Developer tooling. (
vessel
CLI)- Automated testing.
- File server.
- Building.
- Reloading and rebuilding.
- Make a new project.
- Vessel plugins. (
vessel get [git URL]
?)
- Cross-platform (all features working)
- Linux (Debian, Ubuntu, RHEL, Alpine, NixOS)
- BSD (FreeBSD, OpenBSD)
- Windows (10, 11, server)
- Cygwin (for Windows)
- MacOS
- Compatibility wrappers
- Sleeping
- Threads (pthreads)
- Socket syscalls
- Filesystem syscalls
- Path formats
- Endianess fixes
- Time and time spans
Refactoring
- Check whether the right types are used everywhere. Fix if not.
- Check whether all paths free memory without exception, fix possible memory leaks.
- More and better error checking. Better error reporting through return values. (for example, forms)
- Code restructuring/cleanup.
- Automated testing.
- Make sure invalid input doesn't crash the whole application. More testing. All errors should be reported and handled appropriately.
- Clean up mem.c
- Patch up pthread usage to hold the lock for as little as possible without data corruption or loss.
- Improve the building process by removing Make
- Improve printf() formatting (PRIu64 for example instead of %ju)
- Track whether an object was already initialised and don't allow double-init.