Commit Graph

933 Commits

Author SHA1 Message Date
Jordan Bancino aeb49f80e5 Add support for OpenSSL. This is a good demo of how easy it is to support TLS libraries. 2023-03-24 02:41:01 +00:00
Jordan Bancino 007e639b0c Don't require the TLS_ in the environment variable.
It's redundant.
2023-03-24 00:25:44 +00:00
Jordan Bancino fe32c652cd Fix bug in HttpClient where it wouldn't retry on EAGAIN. 2023-03-24 00:23:49 +00:00
Jordan Bancino 20d41d794b Fix compile error. I had this in here at some point, not sure where it went. 2023-03-23 17:41:02 +00:00
Jordan Bancino b4e4263cea Remove my testing configuration from contrib/development.conf 2023-03-23 16:40:23 +00:00
Jordan Bancino e13442c122 Fix strange behavior in TlsLibreSSL.
tls_read() and tls_write() may return TLS_WANT_POLLIN or TLS_WANT_POLLOUT
if data isn't ready to be read or written yet. We have to account for this
by converting it to EAGAIN, which is how a typical read() or write()
function should behave.

Also installed a SIGPIPE handler; we do not want to be terminated by
SIGPIPE, and it's safe to ignore this signal because it should be
handled thoroughly in the code.
2023-03-23 16:39:15 +00:00
Jordan Bancino 2441f07848 Add support for spinning up multiple HTTP servers.
This is useful for having a TLS and a non-TLS version port, like Synapse.
I verified that the multiple-servers does in fact work as intended,
although the TLS server part is broken; I must be doing something
incorrectly with LibreSSL in setting up the server.
2023-03-23 02:12:45 +00:00
Jordan Bancino 2fab7b55fe Remove obsolete warning about setting root directory.
We don't use chroot() anymore.
2023-03-22 18:30:30 +00:00
Jordan Bancino 089d8d4d94 Only install the memory hook if -v is given.
This way, we can still set the debug level in the configuration, and not
see the log just absolutely flooded with memory allocations and whatnot.
This is helpful because I want debug messages to show up in development,
but not in production, but having all the memory logging makes it
almost impossible to pick anything else out of the log. I want the
feature available, just not on by default because it's useful in limited
circumstances.
2023-03-22 18:29:05 +00:00
Jordan Bancino 9ec330f40a Log once we get the response status, not right when we get the request. 2023-03-22 18:13:59 +00:00
Jordan Bancino fccd15b239 Don't unconditionally close standard input; it may have been used and
closed before. If it was never used, it was never opened.
2023-03-22 18:12:46 +00:00
Jordan Bancino 35f65a667d Update changelog. 2023-03-22 17:49:06 +00:00
Jordan Bancino 8faf6f2126 Delete TelodendriaConfig.c 2023-03-22 17:20:53 +00:00
Jordan Bancino fc975e6a93 TelodendriaConfig -> Config 2023-03-22 17:17:30 +00:00
Jordan Bancino 413c7ad803 Start building support for running multiple HTTP servers.
The standard use case for this is going to be running a TLS and a non-TLS
HTTP server. I can't see a need for *more* than two, but it is theoretically
possible.

We shouldn't have to change anything with the database or anything; it
should suffice to simply spin up more HTTP servers, and they should
interact with each other the same way a single HTTP server with multiple
threads will.
2023-03-22 17:00:48 +00:00
Jordan Bancino e30fa3ee33 Remove remnants of non-global LogConfig from TelodendriaConfig 2023-03-22 16:31:24 +00:00
Jordan Bancino e6f3dfad18 Add an ArraySet() method for replacing entries in an array.
This is much more efficient than using ArrayDelete() and ArrayInsert(),
and will serve us well in the future.
2023-03-22 16:31:06 +00:00
Jordan Bancino b8d00bc8bf Make td run warn if Memory.txt gets created. 2023-03-22 14:57:57 +00:00
Jordan Bancino f3c4c0ac65 Add a global log configuration.
This is the easiest and cleanest way to get logging into some of the
fundamental APIs, such as the database and TLS APIs. We don't want to
have to pass logging functions to those, but they can safely use the
global logging configuration.
2023-03-22 14:52:04 +00:00
Jordan Bancino 8782aa046d Fix compile error in Tls, work on getting certs and keys into HttpServer. 2023-03-22 02:18:31 +00:00
Jordan Bancino bdaea9872e Format source code. 2023-03-22 01:46:45 +00:00
Jordan Bancino b58ca7d22e Start working on adding TLS support to HttpServer. 2023-03-22 01:46:24 +00:00
Jordan Bancino 6561b5bae1 Add TLS build support to td. 2023-03-22 01:17:42 +00:00
Jordan Bancino 996356832e Define TLS API, update HttpClient to support optional TLS.
Also added a LibreSSL TLS implementation. Client is verified to work;
server has not been tested yet.
2023-03-22 00:41:21 +00:00
Jordan Bancino d1b4ecff48 Apparently the order of LDFLAGS matters to some compilers.
Also don't to -pg in debug mode, because that's not supported on all
compilers either.
2023-03-22 00:13:27 +00:00
Jordan Bancino 63d07365db Don't close standard output twice, that leads to a segfault! 2023-03-22 00:12:04 +00:00
Jordan Bancino 2a92d0de7e Fix bit flag check. 2023-03-22 00:11:24 +00:00
Jordan Bancino 4a27f50538 Remove calls to pledge(), unveil(), and chroot().
Not only does this make us more POSIX, it actually makes things a lot
easier because TLS implementations will need to be able to access the
trusted certificates file, which most likely will not live in the
data directory.
2023-03-20 19:23:37 +00:00
Jordan Bancino 6c9e939b9f Fix broken IoVprintf().
You can't call vsnprintf() on the same va_list more than once! I learned
this the hard way with StreamVprintf().
2023-03-18 14:55:04 +00:00
Jordan Bancino 5289c16e2b Convert all code to new Stream API.
Also made a number of improvmements to tt, making it compatible with more
shells.
2023-03-18 14:32:09 +00:00
Jordan Bancino a97a593f21 Format code. 2023-03-16 16:53:18 +00:00
Jordan Bancino 27b3b6cdc6 Add StreamPuts(), don't make StreamVprintf() defer to IoVprintf(). 2023-03-16 16:51:41 +00:00
Jordan Bancino 8539a03d5b Add StreamFile() convenience method. 2023-03-16 16:25:24 +00:00
Jordan Bancino e0a3760a37 Don't buffer in IoWrite(), indicate that fwrite() returns size_t, not ssize_t. 2023-03-16 14:17:04 +00:00
Jordan Bancino 6ee1857f5f Format source code. 2023-03-16 12:29:38 +00:00
Jordan Bancino 7d9770fc12 Add some convenience functions for working with Io and Stream.
Also broke out IoFd into it's own file, and did the same with IoFile.
2023-03-16 12:28:55 +00:00
Jordan Bancino 65f4c90df3 Rename HttpStream() to HttpServerStream() to match HttpClientStream() 2023-03-16 02:17:48 +00:00
Jordan Bancino ff52cc78dc Update TODO 2023-03-15 17:30:14 +00:00
Jordan Bancino ab4755240a Add IoCopy() and StreamCopy()
Both do buffered reads and writes, but IoCopy() uses IoRead() and
IoWrite() directly, whereas StreamCopy() relies on StreamGetc() and
StreamPutc(), which manipulate the stream buffers.
2023-03-15 17:14:16 +00:00
Jordan Bancino 92da3542a6 Move low-level fopencookie()/funopen() functionality to Io API.
The Stream API now provides the buffered I/O functionality analogous to
the C standard library.
2023-03-15 16:47:34 +00:00
Jordan Bancino 5dbaf3c223 Apply #65, remove printf() in Db, and make tt show login messages. 2023-03-15 13:36:49 +00:00
Jordan Bancino afc7667737 Begin prototyping Stream API. 2023-03-15 02:40:23 +00:00
Jordan Bancino ae97d8116c Apply #64: Registration tokens. 2023-03-14 00:37:24 +00:00
Jordan Bancino 76bfa120ee Fix CPU pin if clients don't shutdown() their socket properly.
If we haven't read any bytes yet, then we try a few times a few ms apart
to see if we get anything. If not, treat it as an EOF. Otherwise, read
bytes until we get an EOF or EAGAIN. EAGAIN after a consistent read of
bytes is treaded as an EOF immediately.
2023-03-12 15:08:50 +00:00
Jordan Bancino 62cd1cdc98 Misc changes. 2023-03-12 03:37:57 +00:00
Jordan Bancino 7fa982a16f Fix bug in Uia 2023-03-12 03:36:40 +00:00
Jordan Bancino aba1ef9251 Add some more documentation. 2023-03-12 03:36:19 +00:00
Jordan Bancino b4a394c44b Move send-patch and td to section one of the manual.
I think they fit there better.
2023-03-10 23:02:09 +00:00
Jordan Bancino 64add9c9ab Fix unused variable warning. 2023-03-10 20:12:25 +00:00
Jordan Bancino 3037f12907 Add tt and http-debug-server tools. 2023-03-10 18:48:52 +00:00