# hyle4888887/42webserv architecture

> Architecture diagram of the GitHub repository hyle4888887/42webserv, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/hyle4888887/42webserv
- Repository: https://github.com/hyle4888887/42webserv

## Overview

Webserv is a configurable C++98 HTTP server. Its principal workflow parses configuration at startup, opens listeners, receives and parses client requests, applies route-specific behavior, and returns HTTP responses; configured CGI requests run an external interpreter. The graph preserves documented static serving, uploads, redirects, directory listings, and error pages. Several runtime files were not excerpted, so their links rely on README statements; edges are omitted where neither excerpts nor documentation establish a relationship.

Main entry points: [`HTTP/handle.cpp`](https://github.com/hyle4888887/42webserv/blob/main/HTTP/handle.cpp) (Route and method handling), [`HTTP/build.cpp`](https://github.com/hyle4888887/42webserv/blob/main/HTTP/build.cpp) (HTTP response building), [`parser/configParser.cpp`](https://github.com/hyle4888887/42webserv/blob/main/parser/configParser.cpp) (Config parser), [`main.cpp`](https://github.com/hyle4888887/42webserv/blob/main/main.cpp) (Program entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_configuration["Configuration"]
  node_lexer["Config lexer<br/>[lexer.cpp]"]
  node_config_parser["Config parser<br/>[configParser.cpp]"]
  node_config_model["Server and route settings<br/>[serverConfig.hpp]"]
end

subgraph group_network["Server runtime"]
  node_entry["Program entry<br/>[main.cpp]"]
  node_listeners["Listener sockets<br/>[socket.cpp]"]
  node_event_loop["Poll event loop<br/>[server.cpp]"]
  node_client_io["Client I/O"]
end

subgraph group_http["HTTP handling"]
  node_request_parser["Request parsing<br/>[HTTP.cpp]"]
  node_route_handling["Route and method handling<br/>[handle.cpp]"]
  node_response_build["HTTP response building<br/>[build.cpp]"]
  node_response_format["Response formatting<br/>[response.cpp]"]
  node_file_download["File downloads<br/>[buildHTTP.cpp]"]
end

subgraph group_cgi["CGI execution"]
  node_cgi_dispatch["CGI dispatch<br/>[handleCGI.cpp]"]
  node_cgi_process["CGI process startup<br/>[start.cpp]"]
  node_cgi_response["CGI response conversion<br/>[buildResponse.cpp]"]
end

subgraph group_content["Content and errors"]
  node_static_content["Static files and listings<br/>[handle.cpp]"]
  node_uploads["Uploads and deletion<br/>[handle.cpp]"]
  node_redirects["Redirect handling<br/>[build.cpp]"]
  node_error_pages["Error pages<br/>[response.cpp]"]
end

node_operator(("Server operator"))
node_config_input["Config file"]
node_client(("HTTP client"))
node_cgi_interpreter["CGI interpreter"]

node_operator -->|"selects"| node_config_input
node_entry -->|"parses config"| node_config_parser
node_config_input -->|"provides directives"| node_config_parser
node_config_parser -->|"tokenizes via"| node_lexer
node_config_parser -->|"builds settings"| node_config_model
node_entry -->|"opens listeners"| node_listeners
node_entry -->|"runs server"| node_event_loop
node_config_model -.->|"configures binds"| node_listeners
node_event_loop -->|"dispatches I/O"| node_client_io
node_client -->|"connects to"| node_listeners
node_client_io -->|"parses request"| node_request_parser
node_request_parser -->|"provides request"| node_route_handling
node_config_model -->|"configures routes"| node_route_handling
node_route_handling -->|"selects response"| node_response_build
node_response_build -->|"formats response"| node_response_format
node_route_handling -->|"serves files"| node_static_content
node_route_handling -->|"handles methods"| node_uploads
node_response_build -->|"builds redirects"| node_redirects
node_response_build -->|"uses error pages"| node_error_pages
node_event_loop -->|"assembles response"| node_file_download
node_route_handling -->|"dispatches CGI"| node_cgi_dispatch
node_cgi_dispatch -->|"starts process"| node_cgi_process
node_cgi_process -->|"executes script"| node_cgi_interpreter
node_cgi_dispatch -->|"converts output"| node_cgi_response
node_response_build -.->|"returns response"| node_client

click node_config_input "https://github.com/hyle4888887/42webserv/blob/main/config/conf_default"
click node_entry "https://github.com/hyle4888887/42webserv/blob/main/main.cpp"
click node_lexer "https://github.com/hyle4888887/42webserv/blob/main/parser/lexer.cpp"
click node_config_parser "https://github.com/hyle4888887/42webserv/blob/main/parser/configParser.cpp"
click node_config_model "https://github.com/hyle4888887/42webserv/blob/main/parser/serverConfig.hpp"
click node_listeners "https://github.com/hyle4888887/42webserv/blob/main/server/socket.cpp"
click node_event_loop "https://github.com/hyle4888887/42webserv/blob/main/server/server.cpp"
click node_client_io "https://github.com/hyle4888887/42webserv/blob/main/server/handleOperation.cpp"
click node_request_parser "https://github.com/hyle4888887/42webserv/blob/main/HTTP/HTTP.cpp"
click node_route_handling "https://github.com/hyle4888887/42webserv/blob/main/HTTP/handle.cpp"
click node_response_build "https://github.com/hyle4888887/42webserv/blob/main/HTTP/build.cpp"
click node_response_format "https://github.com/hyle4888887/42webserv/blob/main/HTTP/response.cpp"
click node_file_download "https://github.com/hyle4888887/42webserv/blob/main/server/buildHTTP.cpp"
click node_cgi_dispatch "https://github.com/hyle4888887/42webserv/blob/main/server/handleCGI.cpp"
click node_cgi_process "https://github.com/hyle4888887/42webserv/blob/main/CGI/start.cpp"
click node_cgi_response "https://github.com/hyle4888887/42webserv/blob/main/CGI/buildResponse.cpp"
click node_static_content "https://github.com/hyle4888887/42webserv/blob/main/HTTP/handle.cpp"
click node_uploads "https://github.com/hyle4888887/42webserv/blob/main/HTTP/handle.cpp"
click node_redirects "https://github.com/hyle4888887/42webserv/blob/main/HTTP/build.cpp"
click node_error_pages "https://github.com/hyle4888887/42webserv/blob/main/HTTP/response.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_lexer,node_config_parser,node_config_model,node_client toneBlue
class node_entry,node_listeners,node_event_loop,node_client_io toneAmber
class node_request_parser,node_route_handling,node_response_build,node_response_format,node_file_download,node_operator toneMint
class node_cgi_dispatch,node_cgi_process,node_cgi_response toneRose
class node_static_content,node_uploads,node_redirects,node_error_pages,node_cgi_interpreter toneIndigo
class node_config_input toneTeal
```

## Components

### Configuration

- [Config lexer](https://github.com/hyle4888887/42webserv/blob/main/parser/lexer.cpp): `parser/lexer.cpp`
- [Config parser](https://github.com/hyle4888887/42webserv/blob/main/parser/configParser.cpp): `parser/configParser.cpp`
- [Server and route settings](https://github.com/hyle4888887/42webserv/blob/main/parser/serverConfig.hpp): `parser/serverConfig.hpp`

### Server runtime

- [Program entry](https://github.com/hyle4888887/42webserv/blob/main/main.cpp): `main.cpp`
- [Listener sockets](https://github.com/hyle4888887/42webserv/blob/main/server/socket.cpp): `server/socket.cpp`
- [Poll event loop](https://github.com/hyle4888887/42webserv/blob/main/server/server.cpp): `server/server.cpp`
- [Client I/O](https://github.com/hyle4888887/42webserv/blob/main/server/handleOperation.cpp): `server/handleOperation.cpp`

### HTTP handling

- [Request parsing](https://github.com/hyle4888887/42webserv/blob/main/HTTP/HTTP.cpp): `HTTP/HTTP.cpp`
- [Route and method handling](https://github.com/hyle4888887/42webserv/blob/main/HTTP/handle.cpp): `HTTP/handle.cpp`
- [HTTP response building](https://github.com/hyle4888887/42webserv/blob/main/HTTP/build.cpp): `HTTP/build.cpp`
- [Response formatting](https://github.com/hyle4888887/42webserv/blob/main/HTTP/response.cpp): `HTTP/response.cpp`
- [File downloads](https://github.com/hyle4888887/42webserv/blob/main/server/buildHTTP.cpp): `server/buildHTTP.cpp`

### CGI execution

- [CGI dispatch](https://github.com/hyle4888887/42webserv/blob/main/server/handleCGI.cpp): `server/handleCGI.cpp`
- [CGI process startup](https://github.com/hyle4888887/42webserv/blob/main/CGI/start.cpp): `CGI/start.cpp`
- [CGI response conversion](https://github.com/hyle4888887/42webserv/blob/main/CGI/buildResponse.cpp): `CGI/buildResponse.cpp`

### Content and errors

- [Static files and listings](https://github.com/hyle4888887/42webserv/blob/main/HTTP/handle.cpp): `HTTP/handle.cpp`
- [Uploads and deletion](https://github.com/hyle4888887/42webserv/blob/main/HTTP/handle.cpp): `HTTP/handle.cpp`
- [Redirect handling](https://github.com/hyle4888887/42webserv/blob/main/HTTP/build.cpp): `HTTP/build.cpp`
- [Error pages](https://github.com/hyle4888887/42webserv/blob/main/HTTP/response.cpp): `HTTP/response.cpp`

### Other components

- **Server operator**
- [Config file](https://github.com/hyle4888887/42webserv/blob/main/config/conf_default): `config/conf_default`
- **HTTP client**
- **CGI interpreter**

## Connections

- Server operator → Config file: selects (evidence: `README.md`)
- Program entry → Config parser: parses config (evidence: `main.cpp`)
- Config file → Config parser: provides directives (evidence: `README.md`)
- Config parser → Config lexer: tokenizes via (evidence: `README.md`)
- Config parser → Server and route settings: builds settings
- Program entry → Listener sockets: opens listeners (evidence: `main.cpp`)
- Program entry → Poll event loop: runs server (evidence: `main.cpp`)
- Server and route settings → Listener sockets: configures binds
- Poll event loop → Client I/O: dispatches I/O (evidence: `server/server.cpp`)
- HTTP client → Listener sockets: connects to (evidence: `README.md`)
- Client I/O → Request parsing: parses request (evidence: `README.md`)
- Request parsing → Route and method handling: provides request (evidence: `README.md`)
- Server and route settings → Route and method handling: configures routes (evidence: `README.md`)
- Route and method handling → HTTP response building: selects response (evidence: `README.md`)
- HTTP response building → Response formatting: formats response
- Route and method handling → Static files and listings: serves files (evidence: `README.md`)
- Route and method handling → Uploads and deletion: handles methods (evidence: `HTTP/handle.cpp`)
- HTTP response building → Redirect handling: builds redirects (evidence: `README.md`)
- HTTP response building → Error pages: uses error pages (evidence: `README.md`)
- Poll event loop → File downloads: assembles response (evidence: `README.md`)
- Route and method handling → CGI dispatch: dispatches CGI (evidence: `README.md`)
- CGI dispatch → CGI process startup: starts process (evidence: `README.md`)
- CGI process startup → CGI interpreter: executes script (evidence: `README.md`)
- CGI dispatch → CGI response conversion: converts output (evidence: `README.md`)
- HTTP response building → HTTP client: returns response
