shithub: tcp80x

Clone

clone: git://shithub.us/phil9/tcp80x gits://shithub.us/phil9/tcp80x
push: hjgit://shithub.us/phil9/tcp80x
patches to: telephil9@gmail.com

Last commit

accab6a9 – phil9 <telephil9@gmail.com> authored on 2021/11/19 01:46
small fix

About

tcp80x
=======
tcp80x is an HTTP server with some pseudo-CGI support.  
This is a merger of execfs and tcp80, both written by cinap_lenrek.

Installation:
-------------
Install with `mk install`  
Create a `/rc/bin/service/tcp80` file:  
```
#!/bin/rc
exec /bin/tcp80x -r /path/to/rules
```

Request handling:
-----------------
`tcp80x` handles request as follows:
1. Parse the request location
2. Try to match the location against defined rules
3. If a rule matches, execute the associated command line (see Rules)
4. If not, look for a matching file in `/usr/web` and serve it

NB:
- Unless `-t` flag is passed to tcp80x, `/usr/web` is bound to `/` before serving static files.
- For scripts to work properly, they need to return a proper HTTP response.

Rules:
-------
The rules file is used to match incoming requests against a regular expression
and if a match is found execute the command associated with the regular expression.
The format is:
```
# Comment
<regex>\t<command line>\n
```
The command line is transformed with regsub(2) meaning that it can contain references
to matches in the regex in the form '\n' where n is a digit. 

Example:
--------
First we create a rule file:
```
/hello/([^'/]+)	/bin/hello '\1'
```

Then, a `hello` script:
```
#!/bin/rc
rfork en
echo 'HTTP/1.1 200'
echo ''
echo 'Hello '^$1
```

We can now browse to `http://server/hello/bob` which should be displaying 'Hello bob'.

Credits:
--------
cinap_lenrek:
- [execfs](https://www.felloff.net/usr/cinap_lenrek/execfs.tgz)
- [tcp80](https://www.felloff.net/usr/cinap_lenrek/tcp80.tgz)

License:
--------
MIT