Proxy C library for HTTP/s protocol
Go to file
2024-09-12 19:58:33 +02:00
parslib@55835087d3 proxy: finish re-writing all proxy states 2024-09-12 19:31:01 +02:00
.gitignore proxy: add basic title parsing 2024-07-21 22:41:14 +02:00
.gitmodules proxy: begin transition from regex to parslib 2024-09-08 22:00:58 +02:00
Makefile proxy: finish re-writing all proxy states 2024-09-12 19:31:01 +02:00
proxlib proxy: finish re-writing all proxy states 2024-09-12 19:31:01 +02:00
proxlib.c proxy: finish re-writing all proxy states 2024-09-12 19:31:01 +02:00
proxlib.h repo: update docs 2024-09-12 19:58:33 +02:00
README repo: update docs 2024-09-12 19:58:33 +02:00

+=============+
|   proxlib   |
+=============+

    Proxy C library for HTTP/s protocol 

    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

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).

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
    [DOING] Cover all possible body segmentation standards
        [DONE] Cover Content-Length
        [DOING] Cover "chunked transfer encoding"
        [DOING] Cover "compress transfer encoding"
        [DOING] Cover "deflate transfer encoding"
        [DOING] Cover "gzip/x-gzip transfer encoding"
    [ACTIVELY DOING] More testing, debugging, fixing
    [ACTIVELY DOING] Verify and search for memory leaks
    [TODO] Implement HTTPS with OpenSSL, LibreSSL, or BearSSL
    [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