Rename project from slweb to libweb
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.
This commit is contained in:
parent
832e198f8c
commit
0222b75e85
|
@ -1,6 +1,6 @@
|
|||
cmake_minimum_required(VERSION 3.13.5)
|
||||
option(BUILD_EXAMPLES "Build examples" ON)
|
||||
project(slweb C)
|
||||
project(web C)
|
||||
add_library(${PROJECT_NAME}
|
||||
handler.c
|
||||
html.c
|
||||
|
@ -11,12 +11,12 @@ add_subdirectory(dynstr)
|
|||
target_include_directories(${PROJECT_NAME} PUBLIC include)
|
||||
target_link_libraries(${PROJECT_NAME} PUBLIC dynstr)
|
||||
install(TARGETS ${PROJECT_NAME})
|
||||
install(DIRECTORY include/slweb TYPE INCLUDE)
|
||||
file(READ ${CMAKE_CURRENT_LIST_DIR}/slweb.pc slweb_pc)
|
||||
string(REPLACE /usr/local ${CMAKE_INSTALL_PREFIX} slweb_repl_pc ${slweb_pc})
|
||||
file(WRITE ${CMAKE_BINARY_DIR}/slweb.pc ${slweb_repl_pc})
|
||||
install(DIRECTORY include/libweb TYPE INCLUDE)
|
||||
file(READ ${CMAKE_CURRENT_LIST_DIR}/libweb.pc libweb_pc)
|
||||
string(REPLACE /usr/local ${CMAKE_INSTALL_PREFIX} libweb_repl_pc ${libweb_pc})
|
||||
file(WRITE ${CMAKE_BINARY_DIR}/libweb.pc ${libweb_repl_pc})
|
||||
include(GNUInstallDirs)
|
||||
install(FILES ${CMAKE_BINARY_DIR}/slweb.pc
|
||||
install(FILES ${CMAKE_BINARY_DIR}/libweb.pc
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||
add_subdirectory(doc)
|
||||
|
||||
|
|
10
Makefile
10
Makefile
|
@ -1,6 +1,6 @@
|
|||
.POSIX:
|
||||
|
||||
PROJECT = libslweb.a
|
||||
PROJECT = libweb.a
|
||||
PREFIX = /usr/local
|
||||
DST = $(PREFIX)/lib
|
||||
PC_DST = $(DST)/pkgconfig
|
||||
|
@ -17,10 +17,10 @@ OBJECTS = \
|
|||
|
||||
all: $(PROJECT)
|
||||
|
||||
install: all $(PC_DST)/slweb.pc
|
||||
install: all $(PC_DST)/libweb.pc
|
||||
mkdir -p $(PREFIX)/include
|
||||
cp -R include/slweb $(PREFIX)/include
|
||||
chmod 0644 $(PREFIX)/include/slweb/*.h
|
||||
cp -R include/libweb $(PREFIX)/include
|
||||
chmod 0644 $(PREFIX)/include/libweb/*.h
|
||||
mkdir -p $(DST)
|
||||
cp $(PROJECT) $(DST)
|
||||
chmod 0755 $(DST)/$(PROJECT)
|
||||
|
@ -38,7 +38,7 @@ examples: FORCE
|
|||
$(PROJECT): $(OBJECTS)
|
||||
$(AR) $(ARFLAGS) $@ $(OBJECTS)
|
||||
|
||||
$(PC_DST)/slweb.pc: slweb.pc
|
||||
$(PC_DST)/libweb.pc: libweb.pc
|
||||
mkdir -p $(PC_DST)
|
||||
sed -e 's,/usr/local,$(PREFIX),' $< > $@
|
||||
chmod 0644 $@
|
||||
|
|
50
README.md
50
README.md
|
@ -1,11 +1,11 @@
|
|||
# slweb, a simple and lightweight web framework
|
||||
# libweb, a simple and lightweight web framework
|
||||
|
||||
`slweb` is a simple and lightweight implementation of a web server, written in
|
||||
`libweb` is a simple and lightweight implementation of a web server, written in
|
||||
C99 plus POSIX.1-2008 extensions, that can be integrated into applications.
|
||||
|
||||
## Disclaimer
|
||||
|
||||
Intentionally, `slweb` does not share some of the philosophical views from the
|
||||
Intentionally, `libweb` does not share some of the philosophical views from the
|
||||
[suckless project](https://suckless.org). However, it still strives towards
|
||||
portability, minimalism, simplicity and efficiency.
|
||||
|
||||
|
@ -22,18 +22,18 @@ the operation (see example below).
|
|||
- Supports [`multiform/form-data`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)
|
||||
, which makes it useful to transfer large amounts of data, such as
|
||||
binary files.
|
||||
- [A library](include/slweb/html.h) to write HTML programmatically.
|
||||
- [A library](include/libweb/html.h) to write HTML programmatically.
|
||||
|
||||
### TLS
|
||||
|
||||
In order to maintain simplicity and reduce the risk for security bugs, `slweb`
|
||||
In order to maintain simplicity and reduce the risk for security bugs, `libweb`
|
||||
does **not** implement TLS support. Instead, this should be provided by a
|
||||
reverse proxy, such as [`caddy`](https://caddyserver.com/).
|
||||
|
||||
### Root permissions
|
||||
|
||||
`slweb` does not require root permissions. So, in order to avoid the
|
||||
risk for security bugs, **please do not run `slweb` as `root`**.
|
||||
`libweb` does not require root permissions. So, in order to avoid the
|
||||
risk for security bugs, **please do not run `libweb` as `root`**.
|
||||
|
||||
## Requirements
|
||||
|
||||
|
@ -59,13 +59,13 @@ sudo apt install cmake
|
|||
## How to use
|
||||
### Build
|
||||
|
||||
Two build environments are provided for `slweb` - feel free to choose any of
|
||||
Two build environments are provided for `libweb` - feel free to choose any of
|
||||
them:
|
||||
|
||||
- A mostly POSIX-compliant [`Makefile`](Makefile).
|
||||
- A [`CMakeLists.txt`](CMakeLists.txt).
|
||||
|
||||
`slweb` can be built using the standard build process:
|
||||
`libweb` can be built using the standard build process:
|
||||
|
||||
#### Make
|
||||
|
||||
|
@ -73,21 +73,21 @@ them:
|
|||
$ make
|
||||
```
|
||||
|
||||
This would generate a static library, namely `libslweb.a`, on the project
|
||||
This would generate a static library, namely `libweb.a`, on the project
|
||||
top-level directory. Applications can then call the top-level `Makefile` by
|
||||
the use of recursive `make`. For example, assuming `slweb` is contained on a
|
||||
the use of recursive `make`. For example, assuming `libweb` is contained on a
|
||||
subdirectory:
|
||||
|
||||
```make
|
||||
slweb/libslweb.a:
|
||||
+cd slweb && $(MAKE)
|
||||
libweb/libweb.a:
|
||||
+cd libweb && $(MAKE)
|
||||
```
|
||||
|
||||
Additionally, `slweb` can be installed using the `install` target. A
|
||||
Additionally, `libweb` can be installed using the `install` target. A
|
||||
custom prefix can be assigned via the `PREFIX` variable:
|
||||
|
||||
```sh
|
||||
$ make PREFIX=$HOME/slweb-prefix install
|
||||
$ make PREFIX=$HOME/libweb-prefix install
|
||||
```
|
||||
|
||||
By default, `PREFIX` is assigned to `/usr/local`.
|
||||
|
@ -101,28 +101,28 @@ $ cmake ..
|
|||
$ cmake --build .
|
||||
```
|
||||
|
||||
A CMake target, also called `slweb`, is created. This makes it possible
|
||||
to integrate `slweb` into CMake projects via `add_subdirectory` and
|
||||
A CMake target, also called `libweb`, is created. This makes it possible
|
||||
to integrate `libweb` into CMake projects via `add_subdirectory` and
|
||||
`target_link_libraries`. For example:
|
||||
|
||||
```cmake
|
||||
project(example)
|
||||
add_executable(${PROJECT_NAME} main.c)
|
||||
add_subdirectory(slweb)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE slweb)
|
||||
add_subdirectory(libweb)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE libweb)
|
||||
```
|
||||
|
||||
Additionally, `slweb` can be installed using the standard procedure
|
||||
Additionally, `libweb` can be installed using the standard procedure
|
||||
in CMake. As usual, a custom prefix can be assigned via the
|
||||
`CMAKE_INSTALL_PREFIX` variable:
|
||||
|
||||
```sh
|
||||
$ cmake --install build/ -DCMAKE_INSTALL_PREFIX=$HOME/slweb-prefix
|
||||
$ cmake --install build/ -DCMAKE_INSTALL_PREFIX=$HOME/libweb-prefix
|
||||
```
|
||||
|
||||
### Examples
|
||||
|
||||
[A directory](examples) with examples shows how `slweb` can be used by
|
||||
[A directory](examples) with examples shows how `libweb` can be used by
|
||||
applications. These can be built from the top-level directory with:
|
||||
|
||||
```sh
|
||||
|
@ -141,7 +141,7 @@ $ cmake --build .
|
|||
|
||||
## Why this project?
|
||||
|
||||
Originally, `slweb` was part of the
|
||||
Originally, `libweb` was part of the
|
||||
[`slcl`](https://gitea.privatedns.org/xavi92/slcl) project, a lightweight
|
||||
cloud solution also written in C99 plus POSIX extensions. However, there
|
||||
always was a clear separation between application logic and the underlying
|
||||
|
@ -170,14 +170,14 @@ interface called
|
|||
simple as possible for administrators.
|
||||
- The [`onion`](https://github.com/davidmoreno/onion) project, which
|
||||
does follow the HTTP library concept, was initially considered for
|
||||
`slcl`, but has a larger scope than `slweb`, and again simplicity was
|
||||
`slcl`, but has a larger scope than `libweb`, and again simplicity was
|
||||
essential for `slcl`.
|
||||
- And, after all, it was a good excuse to learn about HTTP/1.1.
|
||||
|
||||
## License
|
||||
|
||||
```
|
||||
slweb, a simple and lightweight web framework.
|
||||
libweb, a simple and lightweight web framework.
|
||||
Copyright (C) 2023 Xavier Del Campo Romero
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HANDLER_ADD 3 2023-09-13 0.1.0 "slweb Library Reference"
|
||||
.TH HANDLER_ADD 3 2023-09-13 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
handler_add \- add an endpoint to a web server handler object
|
||||
|
@ -6,7 +6,7 @@ handler_add \- add an endpoint to a web server handler object
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/handler.h>
|
||||
#include <libweb/handler.h>
|
||||
.P
|
||||
int handler_add(struct handler *\fIh\fP, const char *\fIurl\fP, enum http_op \fIop\fP, handler_fn \fIf\fP, void *\fIuser\fP);
|
||||
.fi
|
||||
|
@ -40,13 +40,13 @@ for an exhaustive list of supported operations.
|
|||
|
||||
.I f
|
||||
is a function pointer that shall be executed by
|
||||
.I slweb
|
||||
.I libweb
|
||||
if an incoming request matches the resource and operation defined by
|
||||
.I url
|
||||
and
|
||||
.IR op ,
|
||||
respectively. See
|
||||
.IR slweb_handler (7)
|
||||
.IR libweb_handler (7)
|
||||
for the definition for
|
||||
.IR handler_fn .
|
||||
|
||||
|
@ -77,7 +77,7 @@ for a list of possible errors.
|
|||
.BR handler_alloc (3),
|
||||
.BR handler_free (3),
|
||||
.BR handler_listen (3),
|
||||
.BR slweb_handler (7).
|
||||
.BR libweb_handler (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HANDLER_ALLOC 3 2023-09-13 0.1.0 "slweb Library Reference"
|
||||
.TH HANDLER_ALLOC 3 2023-09-13 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
handler_alloc \- allocate a web server handler object
|
||||
|
@ -6,7 +6,7 @@ handler_alloc \- allocate a web server handler object
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/handler.h>
|
||||
#include <libweb/handler.h>
|
||||
.P
|
||||
struct handler *handler_alloc(const struct handler_cfg *\fIcfg\fP);
|
||||
.fi
|
||||
|
@ -17,17 +17,17 @@ The
|
|||
function allocates a
|
||||
.I "struct handler"
|
||||
object, containing the required data by
|
||||
.I slweb
|
||||
.I libweb
|
||||
to handle a web server. This object is meant to be consumed by
|
||||
other functions from
|
||||
.IR slweb_handler (7).
|
||||
.IR libweb_handler (7).
|
||||
.I cfg
|
||||
defines the initial configuration, whose structure is defined by
|
||||
.IR slweb_handler (7).
|
||||
.IR libweb_handler (7).
|
||||
|
||||
.I "struct handler"
|
||||
is an opaque object internal to
|
||||
.I slweb
|
||||
.I libweb
|
||||
and therefore is not accessible to callers.
|
||||
|
||||
.SH RETURN VALUE
|
||||
|
@ -48,7 +48,7 @@ for a list of possible errors.
|
|||
.BR handler_free (3),
|
||||
.BR handler_add (3),
|
||||
.BR handler_listen (3),
|
||||
.BR slweb_handler (7).
|
||||
.BR libweb_handler (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HANDLER_FREE 3 2023-09-14 0.1.0 "slweb Library Reference"
|
||||
.TH HANDLER_FREE 3 2023-09-14 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
handler_free \- free a web server handler object
|
||||
|
@ -6,7 +6,7 @@ handler_free \- free a web server handler object
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/handler.h>
|
||||
#include <libweb/handler.h>
|
||||
.P
|
||||
void handler_free(struct handler *\fIh\fP);
|
||||
.fi
|
||||
|
@ -29,7 +29,7 @@ No errors are defined.
|
|||
|
||||
.SH SEE ALSO
|
||||
.BR handler_alloc (3),
|
||||
.BR slweb_handler (7).
|
||||
.BR libweb_handler (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HANDLER_LISTEN 3 2023-09-14 0.1.0 "slweb Library Reference"
|
||||
.TH HANDLER_LISTEN 3 2023-09-14 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
handler_listen \- listen to and handle incoming connections on a web
|
||||
|
@ -7,7 +7,7 @@ server
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/handler.h>
|
||||
#include <libweb/handler.h>
|
||||
.P
|
||||
int handler_listen(struct handler *\fIh\fP, unsigned short \fIport\fP);
|
||||
.fi
|
||||
|
@ -46,7 +46,7 @@ No errors are defined.
|
|||
|
||||
.SH FUTURE DIRECTIONS
|
||||
When no configured endpoint matches the incoming request,
|
||||
.I slweb
|
||||
.I libweb
|
||||
shall respond with a
|
||||
.B 404 Not Found
|
||||
HTTP status code with no payload. Since some library users might want
|
||||
|
@ -61,7 +61,7 @@ similarly to its member
|
|||
.BR handler_alloc (3),
|
||||
.BR handler_free (3),
|
||||
.BR handler_add (3),
|
||||
.BR slweb_handler (7),
|
||||
.BR libweb_handler (7),
|
||||
.BR signal (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HTML_NODE_ADD_ATTR 3 2023-09-24 0.1.0 "slweb Library Reference"
|
||||
.TH HTML_NODE_ADD_ATTR 3 2023-09-24 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
html_node_add_attr \- add attribute to a HTML node
|
||||
|
@ -6,7 +6,7 @@ html_node_add_attr \- add attribute to a HTML node
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/html.h>
|
||||
#include <libweb/html.h>
|
||||
.P
|
||||
int html_node_add_attr(struct html_node *\fIn\fP, const char *\fIattr\fP, const char *\fIval\fP);
|
||||
.fi
|
||||
|
@ -27,7 +27,7 @@ is a null-terminated string with the name of the attribute.
|
|||
.I val
|
||||
is a null-terminated string with the value for the attribute.
|
||||
|
||||
.I slweb
|
||||
.I libweb
|
||||
allocates copies of the null-terminated strings defined by
|
||||
.I attr
|
||||
and
|
||||
|
@ -66,7 +66,7 @@ No errors are defined.
|
|||
.BR html_node_free (3),
|
||||
.BR html_node_set_value (3),
|
||||
.BR html_node_set_value_unescaped (3),
|
||||
.BR slweb_http (7).
|
||||
.BR libweb_http (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HTML_NODE_ADD_CHILD 3 2023-09-25 0.1.0 "slweb Library Reference"
|
||||
.TH HTML_NODE_ADD_CHILD 3 2023-09-25 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
html_node_add_child \- add child to a HTML node
|
||||
|
@ -6,7 +6,7 @@ html_node_add_child \- add child to a HTML node
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/html.h>
|
||||
#include <libweb/html.h>
|
||||
.P
|
||||
struct html_node *html_node_add_child(struct html_node *\fIn\fP, const char *\fIelem\fP);
|
||||
.fi
|
||||
|
@ -41,7 +41,7 @@ and one child node:
|
|||
.in +4n
|
||||
.EX
|
||||
#include <dynstr.h>
|
||||
#include <slweb/html.h>
|
||||
#include <libweb/html.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
|
@ -105,7 +105,7 @@ if
|
|||
fails.
|
||||
|
||||
Internally,
|
||||
.I slweb
|
||||
.I libweb
|
||||
calls
|
||||
.IR html_node_add_sibling (3)
|
||||
from a child node when a node already has one.
|
||||
|
@ -113,7 +113,7 @@ from a child node when a node already has one.
|
|||
.SH SEE ALSO
|
||||
.BR html_node_alloc (3),
|
||||
.BR html_node_add_sibling (3),
|
||||
.BR slweb_http (7).
|
||||
.BR libweb_http (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HTML_NODE_ADD_SIBLING 3 2023-09-25 0.1.0 "slweb Library Reference"
|
||||
.TH HTML_NODE_ADD_SIBLING 3 2023-09-25 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
html_node_add_sibling \- add sibling to a HTML node
|
||||
|
@ -6,7 +6,7 @@ html_node_add_sibling \- add sibling to a HTML node
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/html.h>
|
||||
#include <libweb/html.h>
|
||||
.P
|
||||
void html_node_add_sibling(struct html_node *\fIn\fP, struct html_node *\fIsibling\fP);
|
||||
.fi
|
||||
|
@ -44,7 +44,7 @@ was still made public so as to cover possibly less common use cases.
|
|||
.SH SEE ALSO
|
||||
.BR html_node_alloc (3),
|
||||
.BR html_node_add_child (3),
|
||||
.BR slweb_http (7).
|
||||
.BR libweb_http (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HTML_NODE_ALLOC 3 2023-09-15 0.1.0 "slweb Library Reference"
|
||||
.TH HTML_NODE_ALLOC 3 2023-09-15 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
html_node_alloc \- allocate a HTML node
|
||||
|
@ -6,7 +6,7 @@ html_node_alloc \- allocate a HTML node
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/html.h>
|
||||
#include <libweb/html.h>
|
||||
.P
|
||||
struct html_node *html_node_alloc(const char *\fIelement\fP);
|
||||
.fi
|
||||
|
@ -22,7 +22,7 @@ is the name of the HTML tag.
|
|||
|
||||
.I "struct html_node"
|
||||
is an opaque object internal to
|
||||
.I slweb
|
||||
.I libweb
|
||||
and therefore is not accessible to callers.
|
||||
|
||||
.SH RETURN VALUE
|
||||
|
@ -64,7 +64,7 @@ it via
|
|||
.BR html_node_add_attr (3),
|
||||
.BR html_node_add_child (3),
|
||||
.BR html_node_add_sibling (3),
|
||||
.BR slweb_html (7).
|
||||
.BR libweb_html (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HTML_NODE_FREE 3 2023-09-16 0.1.0 "slweb Library Reference"
|
||||
.TH HTML_NODE_FREE 3 2023-09-16 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
html_node_free \- free a HTML node and its children
|
||||
|
@ -6,7 +6,7 @@ html_node_free \- free a HTML node and its children
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/html.h>
|
||||
#include <libweb/html.h>
|
||||
.P
|
||||
void html_node_free(struct html_node *\fIn\fP);
|
||||
.fi
|
||||
|
@ -37,7 +37,7 @@ for a child node.
|
|||
|
||||
.SH SEE ALSO
|
||||
.BR html_node_alloc (3),
|
||||
.BR slweb_html (7).
|
||||
.BR libweb_html (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HTML_NODE_SET_VALUE 3 2023-09-24 0.1.0 "slweb Library Reference"
|
||||
.TH HTML_NODE_SET_VALUE 3 2023-09-24 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
html_node_set_value \- set value to a HTML node
|
||||
|
@ -6,7 +6,7 @@ html_node_set_value \- set value to a HTML node
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/html.h>
|
||||
#include <libweb/html.h>
|
||||
.P
|
||||
int html_node_set_value(struct html_node *\fIn\fP, const char *\fIval\fP);
|
||||
.fi
|
||||
|
@ -25,7 +25,7 @@ or
|
|||
.I val
|
||||
is a null-terminated string with the value to be assigned to the node.
|
||||
|
||||
.I slweb
|
||||
.I libweb
|
||||
allocates a copy of the null-terminated string defined by
|
||||
.IR val .
|
||||
|
||||
|
@ -69,7 +69,7 @@ No errors are defined.
|
|||
.BR html_node_free (3),
|
||||
.BR html_node_set_value_unescaped (3),
|
||||
.BR html_node_add_attr (3),
|
||||
.BR slweb_http (7).
|
||||
.BR libweb_http (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HTML_NODE_SET_VALUE_UNESCAPED 3 2023-09-24 0.1.0 "slweb Library Reference"
|
||||
.TH HTML_NODE_SET_VALUE_UNESCAPED 3 2023-09-24 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
html_node_set_value_unescaped \- set value to a HTML node
|
||||
|
@ -6,7 +6,7 @@ html_node_set_value_unescaped \- set value to a HTML node
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/html.h>
|
||||
#include <libweb/html.h>
|
||||
.P
|
||||
int html_node_set_value_unescaped(struct html_node *\fIn\fP, const char *\fIval\fP);
|
||||
.fi
|
||||
|
@ -25,7 +25,7 @@ or
|
|||
.I val
|
||||
is a null-terminated string with the value to be assigned to the node.
|
||||
|
||||
.I slweb
|
||||
.I libweb
|
||||
allocates a copy of the null-terminated string defined by
|
||||
.IR val .
|
||||
|
||||
|
@ -70,7 +70,7 @@ No errors are defined.
|
|||
.BR html_node_free (3),
|
||||
.BR html_node_set_value (3),
|
||||
.BR html_node_add_attr (3),
|
||||
.BR slweb_http (7).
|
||||
.BR libweb_http (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HTML_SERIALIZE 3 2023-09-24 0.1.0 "slweb Library Reference"
|
||||
.TH HTML_SERIALIZE 3 2023-09-24 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
html_serialize \- add attribute to a HTML node
|
||||
|
@ -6,7 +6,7 @@ html_serialize \- add attribute to a HTML node
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/html.h>
|
||||
#include <libweb/html.h>
|
||||
.P
|
||||
int html_serialize(const struct html_node *\fIn\fP, struct dynstr *\fId\fP);
|
||||
.fi
|
||||
|
@ -41,7 +41,7 @@ No errors are defined.
|
|||
.BR html_node_add_attr (3),
|
||||
.BR html_node_set_value (3),
|
||||
.BR html_node_set_value_unescaped (3),
|
||||
.BR slweb_http (7).
|
||||
.BR libweb_http (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HTTP_ALLOC 3 2023-09-06 0.1.0 "slweb Library Reference"
|
||||
.TH HTTP_ALLOC 3 2023-09-06 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
http_alloc \- allocate a HTTP context object
|
||||
|
@ -6,7 +6,7 @@ http_alloc \- allocate a HTTP context object
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/http.h>
|
||||
#include <libweb/http.h>
|
||||
.P
|
||||
struct http *http_alloc(const struct http_cfg *\fIcfg\fP);
|
||||
.fi
|
||||
|
@ -17,17 +17,17 @@ The
|
|||
function allocates a
|
||||
.I "struct http_ctx"
|
||||
object, containing the required data by
|
||||
.I slweb
|
||||
.I libweb
|
||||
to handle a HTTP connection. This object is meant to be consumed by
|
||||
other functions from
|
||||
.IR slweb .
|
||||
.IR libweb .
|
||||
.I cfg
|
||||
defines the configuration for the HTTP context, whose structure is defined by
|
||||
.IR slweb_http (7).
|
||||
.IR libweb_http (7).
|
||||
|
||||
.I "struct http_ctx"
|
||||
is an opaque object internal to
|
||||
.I slweb
|
||||
.I libweb
|
||||
and therefore is not accessible to callers.
|
||||
|
||||
.SH RETURN VALUE
|
||||
|
@ -46,12 +46,12 @@ for a list of possible errors.
|
|||
|
||||
.SH NOTES
|
||||
This function is designed for internal use by
|
||||
\fIslweb\fR.
|
||||
\fIlibweb\fR.
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR http_free (3),
|
||||
.BR http_update (3),
|
||||
.BR slweb_http (7).
|
||||
.BR libweb_http (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HTTP_COOKIE_CREATE 3 2023-09-07 0.1.0 "slweb Library Reference"
|
||||
.TH HTTP_COOKIE_CREATE 3 2023-09-07 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
http_cookie_create \- creates a HTTP/1.1 cookie
|
||||
|
@ -6,7 +6,7 @@ http_cookie_create \- creates a HTTP/1.1 cookie
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/http.h>
|
||||
#include <libweb/http.h>
|
||||
.P
|
||||
char *http_cookie_create(const char *\fIkey\fP, const char *\fIvalue\fP);
|
||||
.fi
|
||||
|
@ -50,14 +50,14 @@ ExampleHeader=ExampleValue; HttpOnly; Expires Wed, 07 Sep 2023 00:00:00 GMT
|
|||
|
||||
.SH FUTURE DIRECTIONS
|
||||
|
||||
.I slweb
|
||||
.I libweb
|
||||
sets a 1-year expiration date for HTTP cookies due to arbitrary design
|
||||
limitations. Future versions of this library shall allow a custom
|
||||
expiration date as an additional parameter to
|
||||
.IR http_cookie_create (3).
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR slweb_http (7).
|
||||
.BR libweb_http (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HTTP_ENCODE_URL 3 2023-09-07 0.1.0 "slweb Library Reference"
|
||||
.TH HTTP_ENCODE_URL 3 2023-09-07 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
http_encode_url \- allocates a percent-encoded null-terminated string
|
||||
|
@ -6,7 +6,7 @@ http_encode_url \- allocates a percent-encoded null-terminated string
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/http.h>
|
||||
#include <libweb/http.h>
|
||||
.P
|
||||
char *http_encode_url(const char *\fIurl\fP);
|
||||
.fi
|
||||
|
@ -27,7 +27,7 @@ No errors are defined.
|
|||
|
||||
.SH SEE ALSO
|
||||
.BR http_decode_url (3),
|
||||
.BR slweb_http (7).
|
||||
.BR libweb_http (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HTTP_FREE 3 2023-09-06 0.1.0 "slweb Library Reference"
|
||||
.TH HTTP_FREE 3 2023-09-06 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
http_free \- free a HTTP context object
|
||||
|
@ -6,7 +6,7 @@ http_free \- free a HTTP context object
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/http.h>
|
||||
#include <libweb/http.h>
|
||||
.P
|
||||
void http_free(struct http_ctx *\fIh\fP);
|
||||
.fi
|
||||
|
@ -30,7 +30,7 @@ No errors are defined.
|
|||
.SH SEE ALSO
|
||||
.BR http_alloc (3),
|
||||
.BR http_update (3),
|
||||
.BR slweb_http (7).
|
||||
.BR libweb_http (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HTTP_RESPONSE_ADD_HEADER 3 2023-09-07 0.1.0 "slweb Library Reference"
|
||||
.TH HTTP_RESPONSE_ADD_HEADER 3 2023-09-07 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
http_response_add_header \- adds a HTTP/1.1 header to a response
|
||||
|
@ -6,7 +6,7 @@ http_response_add_header \- adds a HTTP/1.1 header to a response
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/http.h>
|
||||
#include <libweb/http.h>
|
||||
.P
|
||||
int http_response_add_header(struct http_response *\fIr\fP, const char *\fIheader\fP, const char *\fIvalue\fP);
|
||||
.fi
|
||||
|
@ -42,7 +42,7 @@ and
|
|||
for a list of possible errors.
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR slweb_http (7).
|
||||
.BR libweb_http (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH HTTP_UPDATE 3 2023-09-06 0.1.0 "slweb Library Reference"
|
||||
.TH HTTP_UPDATE 3 2023-09-06 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
http_update \- updates a HTTP context object
|
||||
|
@ -6,7 +6,7 @@ http_update \- updates a HTTP context object
|
|||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/http.h>
|
||||
#include <libweb/http.h>
|
||||
.P
|
||||
int http_update(struct http_ctx *\fIh\fP, bool *\fIwrite\fP, bool *\fIclose\fP);
|
||||
.fi
|
||||
|
@ -60,12 +60,12 @@ No errors are defined.
|
|||
|
||||
.SH NOTES
|
||||
This function is designed for internal use by
|
||||
.IR slweb .
|
||||
.IR libweb .
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR http_free (3),
|
||||
.BR http_update (3),
|
||||
.BR slweb_http (7).
|
||||
.BR libweb_http (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
PREFIX = /usr/local
|
||||
DST = $(PREFIX)/share/man/man7
|
||||
OBJECTS = \
|
||||
$(DST)/slweb_handler.7 \
|
||||
$(DST)/slweb_html.7 \
|
||||
$(DST)/slweb_http.7
|
||||
$(DST)/libweb_handler.7 \
|
||||
$(DST)/libweb_html.7 \
|
||||
$(DST)/libweb_http.7
|
||||
|
||||
all:
|
||||
|
||||
|
|
|
@ -1,36 +1,36 @@
|
|||
.TH SLWEB_HANDLER 7 2023-09-15 0.1.0 "slweb Library Reference"
|
||||
.TH LIBWEB_HANDLER 7 2023-09-15 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
slweb_handler \- slweb high-level website configuration
|
||||
libweb_handler \- libweb high-level website configuration
|
||||
|
||||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/handler.h>
|
||||
#include <libweb/handler.h>
|
||||
.fi
|
||||
|
||||
.SH DESCRIPTION
|
||||
This component provides abstractions that allow library users to
|
||||
define the behaviour of a web server. Whereas
|
||||
.IR slweb_http (7)
|
||||
.IR libweb_http (7)
|
||||
defines the HTTP/1.1 server implementation and provides a data type
|
||||
(namely
|
||||
.IR "struct http_ctx" )
|
||||
to handle an incoming connection,
|
||||
.IR slweb_handler (7):
|
||||
.IR libweb_handler (7):
|
||||
|
||||
.IP \(bu 2
|
||||
Defines the list of endpoints and supported operations.
|
||||
.IP \(bu 2
|
||||
Defines the port
|
||||
.I slweb
|
||||
.I libweb
|
||||
must listen to.
|
||||
.IP \(bu 2
|
||||
Keeps track of all
|
||||
.I struct http_ctx
|
||||
objects.
|
||||
|
||||
.IR slweb_handler (7)
|
||||
.IR libweb_handler (7)
|
||||
provides the following functions:
|
||||
|
||||
.IP \(bu 2
|
||||
|
@ -83,7 +83,7 @@ are passed directly to the
|
|||
object used to initialize a
|
||||
.I struct http_ctx
|
||||
object. See
|
||||
.IR slweb_http (7)
|
||||
.IR libweb_http (7)
|
||||
for further reference about these members.
|
||||
|
||||
However, a
|
||||
|
@ -104,7 +104,7 @@ typedef int (*\fIhandler_fn\fP)(const struct http_payload *\fIp\fP, struct http_
|
|||
.PP
|
||||
|
||||
Please read
|
||||
.IR slweb_http (7)
|
||||
.IR libweb_http (7)
|
||||
for further refence on
|
||||
.I "struct http_payload"
|
||||
and
|
||||
|
@ -124,16 +124,16 @@ and
|
|||
\fI/index.html\fP
|
||||
as its endpoints. For the sake of simplicity, a static response body is
|
||||
returned, instead of using
|
||||
.IR slweb_html (7)
|
||||
.IR libweb_html (7)
|
||||
to generate HTML data. Please read
|
||||
.IR slweb_html (7)
|
||||
.IR libweb_html (7)
|
||||
for further reference on how to generate dynamic content.
|
||||
|
||||
.PP
|
||||
.in +4n
|
||||
.EX
|
||||
#include <slweb/handler.h>
|
||||
#include <slweb/http.h>
|
||||
#include <libweb/handler.h>
|
||||
#include <libweb/http.h>
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
|
@ -142,7 +142,7 @@ static int hello(const struct http_payload *const pl,
|
|||
{
|
||||
static const char page[] =
|
||||
{
|
||||
"<html><body><p>Hello from slweb!</p></body></html>"
|
||||
"<html><body><p>Hello from libweb!</p></body></html>"
|
||||
};
|
||||
|
||||
*r = (const struct http_response)
|
||||
|
@ -218,7 +218,7 @@ end:
|
|||
.BR handler_alloc (3),
|
||||
.BR handler_add (3),
|
||||
.BR handler_free (3),
|
||||
.BR slweb_http (7).
|
||||
.BR libweb_http (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
|
@ -1,12 +1,12 @@
|
|||
.TH SLWEB_HTML 7 2023-09-15 0.1.0 "slweb Library Reference"
|
||||
.TH LIBWEB_HTML 7 2023-09-15 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
slweb_html \- slweb HTML serializer
|
||||
libweb_html \- libweb HTML serializer
|
||||
|
||||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/html.h>
|
||||
#include <libweb/html.h>
|
||||
.fi
|
||||
|
||||
.SH DESCRIPTION
|
||||
|
@ -14,7 +14,7 @@ This component allows library users to serialize HTML text from a tree
|
|||
structure composed by one or more
|
||||
.I struct html_node
|
||||
objects.
|
||||
.IR slweb_html (7)
|
||||
.IR libweb_html (7)
|
||||
provides the following functions:
|
||||
|
||||
.IP \(bu 2
|
||||
|
@ -94,13 +94,13 @@ shall free the memory used by the root node and all of its children.
|
|||
.SH EXAMPLE
|
||||
The example below is a minimal showcase of some of the features
|
||||
provided by
|
||||
.IR slweb_html (7),
|
||||
.IR libweb_html (7),
|
||||
which prints a minimal HTML file to standard output:
|
||||
|
||||
.PP
|
||||
.in +4n
|
||||
.EX
|
||||
#include <slweb/html.h>
|
||||
#include <libweb/html.h>
|
||||
#include <dynstr.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
@ -110,7 +110,7 @@ int main()
|
|||
int ret = EXIT_FAILURE;
|
||||
struct dynstr d;
|
||||
struct html_node *const html = html_node_alloc("html"), *body;
|
||||
static const char text[] = "testing slweb";
|
||||
static const char text[] = "testing libweb";
|
||||
|
||||
dynstr_init(&d);
|
||||
|
||||
|
@ -152,7 +152,7 @@ This program should write the following data over standard output:
|
|||
.in +4n
|
||||
.EX
|
||||
<html>
|
||||
<body>testing slweb</body>
|
||||
<body>testing libweb</body>
|
||||
</html>
|
||||
.EE
|
||||
.in
|
||||
|
@ -167,7 +167,7 @@ This program should write the following data over standard output:
|
|||
.BR html_node_add_child (3),
|
||||
.BR html_node_add_sibling (3),
|
||||
.BR html_serialize (3),
|
||||
.BR slweb_html (7).
|
||||
.BR libweb_html (7).
|
||||
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 2023 Xavier Del Campo Romero.
|
|
@ -1,17 +1,17 @@
|
|||
.TH SLWEB_HTTP 7 2023-09-15 0.1.0 "slweb Library Reference"
|
||||
.TH LIBWEB_HTTP 7 2023-09-15 0.1.0 "libweb Library Reference"
|
||||
|
||||
.SH NAME
|
||||
slweb_http \- slweb HTTP connection handling and utilities
|
||||
libweb_http \- libweb HTTP connection handling and utilities
|
||||
|
||||
.SH SYNOPSIS
|
||||
.LP
|
||||
.nf
|
||||
#include <slweb/http.h>
|
||||
#include <libweb/http.h>
|
||||
.fi
|
||||
|
||||
.SH DESCRIPTION
|
||||
As one of its key features,
|
||||
\fIslweb\fR
|
||||
\fIlibweb\fR
|
||||
provides a HTTP/1.1-compatible server implementation that can be
|
||||
embedded into applications as a library. While not a complete HTTP/1.1
|
||||
server implementation, the following features are supported:
|
||||
|
@ -42,7 +42,7 @@ The functions listed below are meant for library users:
|
|||
.SS HTTP connection-related functions
|
||||
|
||||
The functions listed below are meant for internal use by
|
||||
.IR slweb :
|
||||
.IR libweb :
|
||||
|
||||
.IP \(bu 2
|
||||
.IR http_alloc (3).
|
||||
|
@ -56,7 +56,7 @@ For example, a list of endpoints is required to define its behaviour,
|
|||
and
|
||||
.I struct http
|
||||
objects must be stored somewhere as long as the connections are active.
|
||||
.IR slweb_handler (7)
|
||||
.IR libweb_handler (7)
|
||||
is the component meant to provide the missing pieces that conform a
|
||||
working web server.
|
||||
|
||||
|
@ -127,7 +127,7 @@ On error, a negative integer is returned.
|
|||
|
||||
.I payload
|
||||
is a function pointer called by
|
||||
.I slweb
|
||||
.I libweb
|
||||
when a new HTTP request has been received.
|
||||
.I p
|
||||
is a read-only pointer to a
|
||||
|
@ -151,7 +151,7 @@ returned.
|
|||
|
||||
.I length
|
||||
is a function pointer called by
|
||||
.I slweb
|
||||
.I libweb
|
||||
when an incoming HTTP request from a client requires to store one or
|
||||
more files on the server, encoded as
|
||||
.IR multipart/form-data .
|
||||
|
@ -198,7 +198,7 @@ can be a null pointer.
|
|||
.SS HTTP payload
|
||||
|
||||
When a client submits a request to the server,
|
||||
.I slweb
|
||||
.I libweb
|
||||
prepares a high-level data structure, called
|
||||
.IR "struct http_payload" ,
|
||||
and passes it to the function pointer defined by
|
||||
|
@ -273,19 +273,19 @@ handles differently:
|
|||
.IP \(bu 2
|
||||
.IR application/x-www-form-urlencoded :
|
||||
suggested for smaller payloads.
|
||||
.I slweb
|
||||
.I libweb
|
||||
shall store the payload in memory, limiting its maximum size to
|
||||
.BR "7999 octets" .
|
||||
|
||||
.IP \(bu 2
|
||||
.IR multipart/form-data :
|
||||
suggested for larger and/or binary payloads.
|
||||
.I slweb
|
||||
.I libweb
|
||||
shall store each non-file name-value pair in memory, limiting the value
|
||||
length to
|
||||
.BR "8000 octets" .
|
||||
On the other hand,
|
||||
.I slweb
|
||||
.I libweb
|
||||
shall store each file into the temporary directory defined by
|
||||
.I struct http_cfg
|
||||
member
|
||||
|
@ -377,7 +377,7 @@ shall be a null pointer.
|
|||
.SS HTTP responses
|
||||
|
||||
Some function pointers used by
|
||||
.I slweb
|
||||
.I libweb
|
||||
require to initialize a
|
||||
.I "struct http_response"
|
||||
object that defines the response that must be sent to the client.
|
||||
|
@ -437,7 +437,7 @@ is a read-only opaque pointer to a buffer in memory, whose length is
|
|||
defined by
|
||||
.I n
|
||||
(see definition below).
|
||||
.I slweb
|
||||
.I libweb
|
||||
shall select
|
||||
.I ro
|
||||
as the output payload if both
|
||||
|
@ -452,7 +452,7 @@ is non-zero.
|
|||
is an opaque pointer to a buffer in memory, whose length is defined by
|
||||
.I n
|
||||
(see definition below).
|
||||
.I slweb
|
||||
.I libweb
|
||||
shall select
|
||||
.I rw
|
||||
as the output payload if both
|
||||
|
@ -471,7 +471,7 @@ is a
|
|||
pointer opened for reading that defines the payload to be sent to the
|
||||
client, whose length is defined by
|
||||
.IR n .
|
||||
.I slweb
|
||||
.I libweb
|
||||
shall select
|
||||
.I f
|
||||
as the output payload if
|
||||
|
@ -514,20 +514,20 @@ must be a null pointer.
|
|||
|
||||
.SS Transport Layer Security (TLS)
|
||||
By design,
|
||||
.I slweb
|
||||
.I libweb
|
||||
does
|
||||
.BI not
|
||||
implement TLS (Transport Layer Security). It is assumed this should
|
||||
be provided by a reverse proxy instead, a kind of project that is
|
||||
usually maintained by a larger community than
|
||||
.I slweb
|
||||
.I libweb
|
||||
and audited for security vulnerabilities.
|
||||
|
||||
.SH NOTES
|
||||
.SS Comparing against other HTTP server implementations
|
||||
While it is well understood that other solutions provide fully-fledged
|
||||
server implementations as standalone executables,
|
||||
.I slweb
|
||||
.I libweb
|
||||
strives to be as small and easy to use as possible, intentionally
|
||||
limiting its scope while covering a good range of use cases.
|
||||
|
||||
|
@ -550,13 +550,13 @@ or
|
|||
.BR -- .
|
||||
|
||||
This means it is not possible for
|
||||
.I slweb
|
||||
.I libweb
|
||||
to determine the number of files or their lengths in a HTTP request
|
||||
unless the whole request is read, which not might be possible for large
|
||||
requests. Therefore, the
|
||||
.B Content-Length
|
||||
is the only rough estimation
|
||||
.I slweb
|
||||
.I libweb
|
||||
can rely on, and therefore is the value passed to the
|
||||
.I length
|
||||
function pointer in
|
||||
|
@ -568,7 +568,7 @@ function pointer in
|
|||
The handling of
|
||||
.B 100-continue
|
||||
requests is not done correctly:
|
||||
.I slweb
|
||||
.I libweb
|
||||
calls the function pointed to by
|
||||
.I "struct http_cfg"
|
||||
member
|
||||
|
@ -581,7 +581,7 @@ headers are processed.
|
|||
.SH FUTURE DIRECTIONS
|
||||
.SS Limitations on the number of HTTP cookies
|
||||
So far,
|
||||
.I slweb
|
||||
.I libweb
|
||||
shall only append at most
|
||||
.B one
|
||||
HTTP cookie to a
|
||||
|
@ -599,12 +599,12 @@ object containing the number of HTTP cookies in the request.
|
|||
|
||||
.SS Handling application/x-www-form-urlencoded data
|
||||
Due to historical reasons,
|
||||
.I slweb
|
||||
.I libweb
|
||||
treated
|
||||
.IR application/x-www-form-urlencoded -data
|
||||
as a binary blob. While this was changed to a null-terminated string in
|
||||
order to allow applications to avoid unnecessary memory allocations,
|
||||
.I slweb
|
||||
.I libweb
|
||||
still does not decode the data, instead forcing applications to do so.
|
||||
Future versions of this library shall replace
|
||||
.I "struct http_post"
|
||||
|
@ -622,7 +622,7 @@ as a union that only holds one possible data type. While this might
|
|||
look counterintuitive, this is because
|
||||
.B POST
|
||||
is the only HTTP/1.1 operation
|
||||
.I slweb
|
||||
.I libweb
|
||||
supports that requires to store a payload. However, future versions of
|
||||
this library might extend its support for other HTTP/1.1 operations
|
||||
that could require to store a payload, while keeping the memory
|
|
@ -1,4 +1,4 @@
|
|||
cmake_minimum_required(VERSION 3.13)
|
||||
project(hello C)
|
||||
add_executable(hello main.c)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE slweb dynstr)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE web dynstr)
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
PROJECT = hello
|
||||
DEPS = \
|
||||
main.o
|
||||
SLWEB = ../../libslweb.a
|
||||
LIBWEB = ../../libweb.a
|
||||
DYNSTR = ../../dynstr/libdynstr.a
|
||||
CFLAGS = -I ../../include -I ../../dynstr/include
|
||||
SLWEB_FLAGS = -L ../../ -l slweb
|
||||
LIBWEB_FLAGS = -L ../../ -l libweb
|
||||
DYNSTR_FLAGS = -L ../../dynstr -l dynstr
|
||||
|
||||
all: $(PROJECT)
|
||||
|
@ -16,10 +16,10 @@ clean:
|
|||
|
||||
FORCE:
|
||||
|
||||
$(PROJECT): $(DEPS) $(SLWEB) $(DYNSTR)
|
||||
$(CC) $(LDFLAGS) $(DEPS) $(SLWEB_FLAGS) $(DYNSTR_FLAGS) -o $@
|
||||
$(PROJECT): $(DEPS) $(LIBWEB) $(DYNSTR)
|
||||
$(CC) $(LDFLAGS) $(DEPS) $(LIBWEB_FLAGS) $(DYNSTR_FLAGS) -o $@
|
||||
|
||||
$(SLWEB): FORCE
|
||||
$(LIBWEB): FORCE
|
||||
+cd ../../ && $(MAKE)
|
||||
|
||||
$(DYNSTR): FORCE
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# "Hello world" example
|
||||
|
||||
This example shows a minimal setup for an application using `slweb`. When
|
||||
This example shows a minimal setup for an application using `libweb`. When
|
||||
executed, it starts a HTTP/1.1 server on port `8080` and returns an example
|
||||
website reading "Hello from slweb!" when either `/` or `/index.html` are
|
||||
website reading "Hello from libweb!" when either `/` or `/index.html` are
|
||||
accessed by clients.
|
||||
|
||||
## How to build
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include <dynstr.h>
|
||||
#include <slweb/handler.h>
|
||||
#include <slweb/html.h>
|
||||
#include <slweb/http.h>
|
||||
#include <libweb/handler.h>
|
||||
#include <libweb/html.h>
|
||||
#include <libweb/http.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -30,7 +30,7 @@ static int hello(const struct http_payload *const pl,
|
|||
fprintf(stderr, "%s: html_node_add_child p failed\n", __func__);
|
||||
goto end;
|
||||
}
|
||||
else if (html_node_set_value(p, "Hello from slweb!"))
|
||||
else if (html_node_set_value(p, "Hello from libweb!"))
|
||||
{
|
||||
fprintf(stderr, "%s: html_node_set_value p failed\n", __func__);
|
||||
goto end;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
cmake_minimum_required(VERSION 3.13)
|
||||
project(html C)
|
||||
add_executable(html main.c)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE slweb dynstr)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE web dynstr)
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
PROJECT = html
|
||||
DEPS = \
|
||||
main.o
|
||||
SLWEB = ../../libslweb.a
|
||||
LIBWEB = ../../libweb.a
|
||||
DYNSTR = ../../dynstr/libdynstr.a
|
||||
CFLAGS = -I ../../include -I ../../dynstr/include
|
||||
SLWEB_FLAGS = -L ../../ -l slweb
|
||||
LIBWEB_FLAGS = -L ../../ -l libweb
|
||||
DYNSTR_FLAGS = -L ../../dynstr -l dynstr
|
||||
|
||||
all: $(PROJECT)
|
||||
|
@ -16,10 +16,10 @@ clean:
|
|||
|
||||
FORCE:
|
||||
|
||||
$(PROJECT): $(DEPS) $(SLWEB) $(DYNSTR)
|
||||
$(CC) $(LDFLAGS) $(DEPS) $(SLWEB_FLAGS) $(DYNSTR_FLAGS) -o $@
|
||||
$(PROJECT): $(DEPS) $(LIBWEB) $(DYNSTR)
|
||||
$(CC) $(LDFLAGS) $(DEPS) $(LIBWEB_FLAGS) $(DYNSTR_FLAGS) -o $@
|
||||
|
||||
$(SLWEB): FORCE
|
||||
$(LIBWEB): FORCE
|
||||
+cd ../../ && $(MAKE)
|
||||
|
||||
$(DYNSTR): FORCE
|
||||
|
|
|
@ -20,6 +20,6 @@ should be written to the standard output:
|
|||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
</head>
|
||||
<body>testing slweb</body>
|
||||
<body>testing libweb</body>
|
||||
</html>
|
||||
```
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include <slweb/html.h>
|
||||
#include <libweb/html.h>
|
||||
#include <dynstr.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
@ -9,7 +9,7 @@ int main()
|
|||
struct dynstr d;
|
||||
struct html_node *const html = html_node_alloc("html"), *head,
|
||||
*meta, *body;
|
||||
static const char text[] = "testing slweb";
|
||||
static const char text[] = "testing libweb";
|
||||
|
||||
dynstr_init(&d);
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#define _POSIX_C_SOURCE 200809L
|
||||
|
||||
#include "slweb/handler.h"
|
||||
#include "slweb/http.h"
|
||||
#include "slweb/server.h"
|
||||
#include "slweb/wildcard_cmp.h"
|
||||
#include "libweb/handler.h"
|
||||
#include "libweb/http.h"
|
||||
#include "libweb/server.h"
|
||||
#include "libweb/wildcard_cmp.h"
|
||||
#include <errno.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
|
2
html.c
2
html.c
|
@ -1,6 +1,6 @@
|
|||
#define _POSIX_C_SOURCE 200809L
|
||||
|
||||
#include "slweb/html.h"
|
||||
#include "libweb/html.h"
|
||||
#include <dynstr.h>
|
||||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
|
|
2
http.c
2
http.c
|
@ -1,6 +1,6 @@
|
|||
#define _POSIX_C_SOURCE 200809L
|
||||
|
||||
#include "slweb/http.h"
|
||||
#include "libweb/http.h"
|
||||
#include <dynstr.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef HANDLER_H
|
||||
#define HANDLER_H
|
||||
|
||||
#include "slweb/http.h"
|
||||
#include "libweb/http.h"
|
||||
#include <stddef.h>
|
||||
|
||||
typedef int (*handler_fn)(const struct http_payload *p,
|
|
@ -3,9 +3,9 @@ exec_prefix=${prefix}
|
|||
includedir=${prefix}/include
|
||||
libdir=${exec_prefix}/lib
|
||||
|
||||
Name: slweb
|
||||
Url: https://gitea.privatedns.org/xavi/slweb
|
||||
Name: libweb
|
||||
Url: https://gitea.privatedns.org/xavi/libweb
|
||||
Description: A simple and lightweight web framework
|
||||
Version: 0.1.0
|
||||
Cflags: -I${includedir}
|
||||
Libs: -L${libdir} -lslweb
|
||||
Libs: -L${libdir} -llibweb
|
2
server.c
2
server.c
|
@ -6,7 +6,7 @@
|
|||
#define _POSIX_C_SOURCE 200809L
|
||||
#endif
|
||||
|
||||
#include "slweb/server.h"
|
||||
#include "libweb/server.h"
|
||||
#include <fcntl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include "slweb/wildcard_cmp.h"
|
||||
#include "libweb/wildcard_cmp.h"
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
|
|
Loading…
Reference in New Issue