aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* 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.
* http.c: Use BUFSIZ instead of arbitrary valueXavier Del Campo Romero2023-09-071-1/+1
| | | | | | | | | | | | | | According to C99 7.19.1p3: BUFSIZ is a macro that expands to an integer constant expression that is the size of the buffer used by the setbuf function. In other words, this means BUFSIZ is the most optimal length for a buffer that reads a file into memory in chunks using fread(3). Note: the number of bytes sent to the client might be less than BUFSIZ, so this would act as a bottleneck, no matter how large the buffer passed to fread(3) is.
* handler: Define port as unsigned shortXavier Del Campo Romero2023-09-072-2/+2
| | | | | Port numbers are unsigned by definition. Fortunately, this was a minor issues since server_init was doing an implicit cast to unsigned short.
* hello/main.c: Add missing length callbackXavier Del Campo Romero2023-09-071-1/+17
| | | | | Even if the feature is unsupported by the application, slweb requires `length` to be a valid function pointer.
* http.c: Return error if check_length failsXavier Del Campo Romero2023-09-071-0/+7
| | | | | Otherwise, fatal errors coming from the h->cfg.length would be unnoticed, causing slweb to attempt to send a response.