aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* .gitmodule: Point dynstr to high-availability mirrorXavier Del Campo Romero2023-11-221-1/+1
| | | | | https://gitea.privatedns.org is a small Gitea instance running on a home server, which might be problematic for large deployments.
* headers/main.c: Update to new handler interfaceXavier Del Campo Romero2023-11-201-2/+11
|
* Merge pull request 'Add support for HTTP `PUT`' (#3) from ↵xavi2023-11-209-41/+380
|\ | | | | | | | | | | midokura-xavi/libweb:put into master Reviewed-on: https://gitea.privatedns.org/xavi/libweb/pulls/3
| * Add PUT server exampleXavier Del Campo2023-11-207-1/+142
| |
| * http.c. Limit multipart/form-data to POSTXavier Del Campo2023-11-201-0/+6
| |
| * http: Add support for PUTXavier Del Campo2023-11-202-40/+232
|/ | | | | | | | | | | | | | Notes: - Since curl would use the "Expect: 100-continue" header field for PUT operations, this was a good operation to fix the existing issues in its implementation. Breaking changes: - expect_continue is no longer exclusive to struct http_post. Now, it has been moved into struct http_payload and it is up to users to check it.
* Merge pull request 'Fix double-free on failed `server_client_close`' (#2) ↵xavi2023-11-202-6/+2
|\ | | | | | | | | | | from midokura-xavi/libweb:fix-double-free into master Reviewed-on: https://gitea.privatedns.org/xavi/libweb/pulls/2
| * Fix double-free on failed server_client_closeXavier Del Campo2023-11-202-6/+2
| | | | | | | | | | Even if server_client_close fails, it is needed for client_free to remove the dangling reference from h->clients.
* | Merge pull request 'Allow `listen_port` to return selected port number' (#1) ↵xavi2023-11-2013-52/+149
|\ \ | |/ |/| | | | | | | from midokura-xavi/libweb:listen-port into master Reviewed-on: https://gitea.privatedns.org/xavi/libweb/pulls/1
| * doc: Update handler_{loop,listen}Xavier Del Campo2023-11-206-40/+114
| |
| * examples/hello: Update according to handler_loopXavier Del Campo2023-11-202-5/+18
| |
| * Split handler_loop from handler_listenXavier Del Campo2023-11-204-6/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Some applications might set up a struct handler object to listen on any port i.e., 0, but still need a way to determine which port number was eventually selected by the implementation. Therefore, handler_listen has been reduced to the server initialization bit, whereas the main loop has been split into its own function, namely handler_loop. Because of these changes, it no longer made sense for libweb to write the selected port to standard output, as this is something now applications can do on their own.
| * README.md: Use generic term for copyright holdersXavier Del Campo2023-11-201-1/+1
|/ | | | | | Similarly to other projects within the free software community, a generic term is used so as to avoid listing every single contributor to the project.
* Send HTTP headers to payload callbackXavier Del Campo Romero2023-11-1812-13/+232
| | | | | | | | | | | | Even if libweb already parses some common headers, such as Content-Length, some users might find it interesting to inspect which headers were received from a request. Since HTTP/1.1 does not define a limit on the number of maximum headers a client can send, for security reasons a maximum value must be provided by the user. Any extra headers shall be then discarded by libweb. An example application showing this new feature is also provided.
* http.c: Fix more issues with partial boundariesXavier Del Campo Romero2023-11-121-19/+36
| | | | | | | | | - http_memmem must not check strlen(a) > n because, in case of a partial boundary, it would wrongfully return NULL. - If one or more characters from a partial boundary are found at the end of a buffer, but the next buffer does not start with the rest of the boundary, the accumulated boundary must be reset, and then look for a new boundary.
* http.c: Fix several issues with partial boundariesXavier Del Campo Romero2023-11-121-11/+17
| | | | | | | | | | - Writing to m->boundary[len] did not make any sense, as len is not meant to change between calls to read_mf_boundary_byte. - For the same reason, memset(3)ing "len + 1" did not make any sense. - When a partial boundary is found, http_memmem must still return st. - Calling reset_boundary with prev == 0 did not make sense, since that case typically means a partial boundary was found on a previous iteration, so m->blen must not be reset.
* doc: Add man3 page for http_decode_urldecode-urlXavier Del Campo Romero2023-11-122-0/+42
| | | | | | | Suprisingly, this man page was missing on the 0.1.0 release. The recent signature changes on http_decode_url have already been reflected.
* http: Make http_decode_url return intXavier Del Campo Romero2023-11-122-33/+43
| | | | | So far, it was not possible callers to distinguish between decoding errors, as caused by ill-formed input, from fatal errors.
* http.c: Avoid use of dynstr_append_or_ret_nonzeroXavier Del Campo Romero2023-11-121-10/+46
| | | | | | | This macro would return a positive integer on failure. However, functions called by http_update should only return a positive integer for user input-related errors, not fatal errors such as those related to failed memory allocations.
* http.c: Avoid writing body for HEAD requestsXavier Del Campo Romero2023-11-121-1/+8
| | | | As opposed to GET or POST requests, HEAD must not write any body bytes.
* Bump dynstrXavier Del Campo Romero2023-11-101-0/+0
| | | | | | | | | | | | | The commit below is relevant to fix CMake builds: Author: Xavier Del Campo Romero <xavi.dcr@tutanota.com> Date: Fri Nov 10 14:43:39 2023 +0100 CMakeLists.txt: Fix missing parameter names VERSION must be indicated when passing a version string to project(). Also, LANGUAGES must be also be passed when the language name is not the only argument to project() (apart from the project name itself).
* CMakeLists.txt: Fix missing LANGUAGESXavier Del Campo Romero2023-11-101-1/+1
| | | | | When the language name is not the only argument for project() (other than the project name itself), LANGUAGES must be indicated.
* Makefile: Replace -Og with -O1v0.1.0-rc6v0.1.0Xavier Del Campo Romero2023-10-251-1/+1
| | | | | Only the latter is defined by POSIX.1-2008. Even if there are still some non-portable flags defined by CFLAGS, it is a good idea to reduce them.
* Bump dynstr to v0.1.0-rc4Xavier Del Campo Romero2023-10-251-0/+0
|
* Adhere to GNU Make directory variablesXavier Del Campo Romero2023-10-254-48/+70
|
* Makefile: Build libweb also as a shared libraryXavier Del Campo Romero2023-10-253-6/+22
|
* Bump dynstr to v0.1.0-rc3v0.1.0-rc5Xavier Del Campo Romero2023-10-251-0/+0
|
* CMakeLists.txt: set project VERSIONXavier Del Campo Romero2023-10-251-1/+1
|
* examples: Fix wrong library nameXavier Del Campo Romero2023-10-252-2/+2
|
* CMake: Use in-tree dynstr if not availablev0.1.0-rc4Xavier Del Campo Romero2023-10-162-1/+23
|
* Bump dynstr to v0.1.0-rc2Xavier Del Campo Romero2023-10-161-0/+0
|
* libweb.pc: Fix wrong -l flagXavier Del Campo Romero2023-10-161-1/+1
|
* Rename project from slweb to libwebv0.1.0-rc3Xavier Del Campo Romero2023-10-1144-196/+196
| | | | | | | | | | | | It was found out there was another project of the same name around (https://git.sr.ht/~strahinja/slweb/), also related to website generation. In order to avoid confusion, a new name has been chosen for this project. Surprisingly, libweb was not in use by any distributions (according to https://repology.org and AUR index), and it should reflect well the intention behind this project i.e., being a library to build web-related stuff.
* server.c: Replace sequential calls with loopXavier Del Campo Romero2023-10-101-14/+18
|
* http: Support HEADXavier Del Campo Romero2023-10-102-1/+6
|
* Bump dynstrv0.1.0-rc2Xavier Del Campo Romero2023-10-021-0/+0
| | | | | | | | | | | | | dynstr got its v0.1.0-rc1 release, and this commit introduces a fix: commit 0e779caae658f118d535e9f0a74f0012eefca9a0 Author: Xavier Del Campo Romero <xavi.dcr@tutanota.com> Date: Mon Oct 2 14:38:53 2023 +0200 CMakeLists.txt: add cmake_minimum_required This command is mandatory for all CMake projects. 3.0 was chosen since dynstr does not require any newer CMake features.
* Install man pagesv0.1.0-rc1Xavier Del Campo Romero2023-09-276-0/+68
|
* Add man pagesXavier Del Campo Romero2023-09-2721-0/+2246
|
* http.h: Remove stale commentXavier Del Campo Romero2023-09-271-1/+0
| | | | | This shall be replaced with more meaningful man pages for all functions in slweb.
* Add slweb.pcXavier Del Campo Romero2023-09-273-1/+24
|
* README.md: Add install instructionsXavier Del Campo Romero2023-09-271-0/+17
|
* Makefile, CMakeLists.txt: Add installation targetsXavier Del Campo Romero2023-09-272-0/+12
|
* server.c: Fix build on FreeBSDXavier Del Campo Romero2023-09-261-0/+6
|
* examples/Makefile: Add html exampleXavier Del Campo Romero2023-09-251-1/+7
|
* Add HTML serializer exampleXavier Del Campo Romero2023-09-156-0/+116
|
* CMakeLists.txt: Fix examples not buildingXavier Del Campo Romero2023-09-151-1/+1
| | | | | Default value for a CMake option() must always be passed as the third parameter.
* http: Use null-terminated string for POST dataXavier Del Campo Romero2023-09-092-5/+5
| | | | | | | | | application/x-www-form-urlencoded-data is (or should be) always text, so it is preferrable to define struct http_post member "data" as a null- terminated string. For applications already making this assumption, this change should now remove the need for string duplication.
* .gitignore: Add examples/hello/helloXavier Del Campo Romero2023-09-091-0/+1
|
* http: Insert name into http_post_fileXavier Del Campo Romero2023-09-092-1/+2
| | | | | Whereas slcl, the project where slweb started, ignored this field, some applications might require it.
* http: Allow multiple non-file Content-DispositionXavier Del Campo Romero2023-09-092-14/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Now, slweb accepts requests such as: --boundary Content-Disposition: form-data; name="field1" value1 --boundary Content-Disposition: form-data; name="field2" value2 --boundary Content-Disposition: form-data; name="field3"; filename="example.txt" The following breaking changes have been introduced: Member "dir" from struct http_post was a leftover from the days where slcl and slweb were one project. It did not make sense for slweb, since it should not decide which Content-Disposition names are allowed. In other words, "dir" was only relevant in the scope of slcl. Member "n" from struct http_post used to have two meanings: - The length of a URL-encoded request. - The number of files on a multipart/form-data request. Since "npairs" had to be introduced to struct http_post, it did not make sense to keep this dual meaning any more. Therefore, "n" has been restricted to the former, whereas a new member, called "nfiles", has been introduced for the latter.