proxlib/README
2024-09-30 22:41:21 +02:00

76 lines
2.7 KiB
Plaintext

+=============+
| proxlib |
+=============+
Proxy C library for HTTP/HTTPs
KEYS
NOT -> NOTE
RFC -> RFC DOCUMENT
RES -> RESOURCE
NOT: I have yet to turn this piece of clutter into a library.
RFC: datatracker.ietf.org/doc/html/rfc1945
RES: cs.princeton.edu/courses/archive/spr13/cos461/assignments-proxy.html
RES: en.wikipedia.org/wiki/Proxy_server
RES: en.wikipedia.org/wiki/HTTP_tunnel#HTTP_CONNECT_method
RES: Beej's Guide to Network Programming - Using Internet Sockets
RES: TCP/IP sockets in C - Practical guide for programmers 2nd edition
RES: tinyproxy.github.io
RES: github.com/nginx/nginx
TECHNICALS
* Parsing is carried by a dedicated sub-library which I wrote named parslib.
* Mass string comparisons are carried by another dedicated sub-library which
I wrote named streecmp. It runs in O(n) time. n being the lenght of the string -
no matter the amount of strings you want to compare it against (I am indeed
aware it is nonetheless worse than hashtables - maybe one day I will implement
those on my own as well).
* After the connection is established with the upstream server, a relay loop
is started in which the client data is relayed to the server's socket and
server data is relayed to client's socket. This is highly inspired from
tinyproxy.
* HTTPs is achieved through CONNECT tunelling
RES: en.wikipedia.org/wiki/HTTP_tunnel#HTTP_CONNECT_method
TASKS
+ indicates it being DONE
* indicates it ACTIVELY BEING TAKEN CARE OF
@ indicates it being TODO
? indicates that I am still unsure whether to spend my time on it
[+] forward data between client/server
[+] connect with parslib
implement client message parsing
implement server message parsing
[+] add loose string checking for headers
[+] relaying mechanism
[+] implement HTTPS
[+] cover all possible body segmentation standards
cover Content-Length
cover "chunked transfer encoding"
[*] more testing, debugging, fixing
[*] verify and search for memory leaks
[?] caching
[?] hashtables for header lookup
[?] support "compress transfer encoding"
[?] support "deflate transfer encoding"
[?] support "gzip/x-gzip transfer encoding"
COMMITS
Each commit is prefixed with an indicator token of what the change is
*mostly* about. List of tokens is:
* init: change initialized the repository
* repo: change is about the repository in general
* proxy: change is about the proxy in general
* logic: change is about proxy logic - parsing, forwarding, ...
* fix: change is about fixing a bug or TODO