Skip to content

0xdeadbeer/proxlib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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