Proxy C library for HTTP/s protocol
Go to file
Kevin Jerebica 13d0a69535 proxy: introduce tls/ssl changes
still needs fixing and optimizations, but
so far it looks good to me
2024-09-30 22:27:03 +02:00
parslib@55835087d3 proxy: finish re-writing all proxy states 2024-09-12 19:31:01 +02:00
.gitignore proxy: implement a relaying system 2024-09-17 18:40:01 +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: introduce tls/ssl changes 2024-09-30 22:27:03 +02:00
proxlib.c proxy: introduce tls/ssl changes 2024-09-30 22:27:03 +02:00
proxlib.h proxy: implement a relaying system 2024-09-17 18:40:01 +02:00
README repo: update readme 2024-09-17 18:49:01 +02:00

+=============+
|   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