-
Notifications
You must be signed in to change notification settings - Fork 0
Mirror for my proxlib project.
0xdeadbeer/proxlib
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
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
About
Mirror for my proxlib project.