Proxy C library for HTTP/s protocol
parslib@55835087d3 | ||
.gitignore | ||
.gitmodules | ||
Makefile | ||
proxlib | ||
proxlib.c | ||
proxlib.h | ||
README |
+=============+ | proxlib | +=============+ Proxy C library for HTTP/s protocol NOTE: 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: Beej's Guide to Network Programming - Using Internet Sockets RES: en.wikipedia.org/wiki/Proxy_server 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. TASKS [DONE] Forward data between client/server [DONE] Connect with parslib [DONE] Implement client message parsing [DONE] Implement server message parsing [DONE] Add loose string checking for headers [DONE] Relaying mechanism [DOING] Cover all possible body segmentation standards [DONE] Cover Content-Length [DONE] Cover "chunked transfer encoding" [TODO] Cover "compress transfer encoding" [TODO] Cover "deflate transfer encoding" [TODO] Cover "gzip/x-gzip transfer encoding" [ACTIVELY DOING] More testing, debugging, fixing [ACTIVELY DOING] Verify and search for memory leaks [TODO] Implement HTTPS [TODO] Caching? 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