2024-09-04 09:10:08 +00:00
|
|
|
+=============+
|
|
|
|
| proxlib |
|
|
|
|
+=============+
|
2024-07-21 17:43:17 +00:00
|
|
|
|
2024-09-30 20:41:21 +00:00
|
|
|
Proxy C library for HTTP/HTTPs
|
2024-07-31 14:19:34 +00:00
|
|
|
|
2024-09-30 20:41:21 +00:00
|
|
|
KEYS
|
|
|
|
|
|
|
|
NOT -> NOTE
|
|
|
|
RFC -> RFC DOCUMENT
|
|
|
|
RES -> RESOURCE
|
|
|
|
|
|
|
|
NOT: I have yet to turn this piece of clutter into a library.
|
2024-09-17 16:49:01 +00:00
|
|
|
|
2024-07-31 14:19:34 +00:00
|
|
|
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
|
2024-09-30 20:41:21 +00:00
|
|
|
RES: en.wikipedia.org/wiki/HTTP_tunnel#HTTP_CONNECT_method
|
|
|
|
RES: Beej's Guide to Network Programming - Using Internet Sockets
|
2024-07-31 14:19:34 +00:00
|
|
|
RES: TCP/IP sockets in C - Practical guide for programmers 2nd edition
|
|
|
|
|
2024-09-30 20:41:21 +00:00
|
|
|
RES: tinyproxy.github.io
|
2024-09-17 16:49:01 +00:00
|
|
|
RES: github.com/nginx/nginx
|
|
|
|
|
2024-08-01 07:32:47 +00:00
|
|
|
TECHNICALS
|
|
|
|
|
2024-09-12 17:58:33 +00:00
|
|
|
* 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).
|
2024-09-17 16:49:01 +00:00
|
|
|
* 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.
|
2024-09-30 20:41:21 +00:00
|
|
|
* HTTPs is achieved through CONNECT tunelling
|
|
|
|
RES: en.wikipedia.org/wiki/HTTP_tunnel#HTTP_CONNECT_method
|
2024-09-12 17:58:33 +00:00
|
|
|
|
|
|
|
TASKS
|
|
|
|
|
2024-09-30 20:41:21 +00:00
|
|
|
+ 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"
|
2024-08-01 07:32:47 +00:00
|
|
|
|
2024-07-31 14:19:34 +00:00
|
|
|
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, ...
|
2024-08-01 07:32:47 +00:00
|
|
|
* fix: change is about fixing a bug or TODO
|
2024-07-21 17:43:17 +00:00
|
|
|
|