Webserv
Loading...
Searching...
No Matches
ServerBlock.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "config/Block.hpp"
5
6namespace http {
7class Request;
8}
9
10namespace config {
11
12typedef std::map<std::string, LocationBlock> LocationBlockMap;
13
22class ServerBlock : public Block {
23public:
25
26 // ============================== Public Interface ==============================
27
33 bool hasLocation(LocationBlock const &) const;
34
39 void addLocation(LocationBlock const &);
40
46 LocationBlock const *matchLocation(http::Request const &req) const;
47 LocationBlock const *matchPrefixLocation(http::Request const &req) const;
48
49 // ============================== Getters & Setters =============================
50
55 int port() const;
56
61 std::string const &address() const;
62
63 // ================================= Fluent API =================================
64
70 ServerBlock &port(int port);
71
77 ServerBlock &address(std::string const &address);
78
79private:
80 int port_;
81 std::string address_;
83 std::vector<std::string>
85
86 friend std::ostream &operator<<(std::ostream &o, ServerBlock const &t);
87 friend class Validator;
88};
89
90typedef std::vector<ServerBlock> ServerBlockVec;
91
92namespace details {
93
94bool matchServerName(std::vector<std::string> const &, std::string const &);
95LocationBlock const *bestMatchLocation(LocationBlockMap const &ls, std::string const &path);
97 std::vector<std::string> const &paths,
98 std::string const &uri);
99
100} // namespace details
101
102} // namespace config
Block(std::string const &name)
Definition Block.cpp:11
Represents a single 'location' block from the configuration file.
Definition LocationBlock.hpp:18
std::string address_
The binding IP address.
Definition ServerBlock.hpp:81
int port() const
Gets the port number this server listens on.
Definition ServerBlock.cpp:44
bool hasLocation(LocationBlock const &) const
Checks if a location with the same path already exists.
Definition ServerBlock.cpp:25
friend class Validator
Definition ServerBlock.hpp:87
LocationBlock const * matchPrefixLocation(http::Request const &req) const
Definition ServerBlock.cpp:21
friend std::ostream & operator<<(std::ostream &o, ServerBlock const &t)
Definition ServerBlock.cpp:53
LocationBlockMap locations_
Map of configured location blocks, keyed by path.
Definition ServerBlock.hpp:82
void addLocation(LocationBlock const &)
Adds a new LocationBlock to this server configuration.
Definition ServerBlock.cpp:29
int port_
The listening port.
Definition ServerBlock.hpp:80
std::string const & address() const
Gets the IP address this server binds to.
Definition ServerBlock.cpp:51
std::vector< std::string > extensionPaths_
List of extension location paths in declaration order.
Definition ServerBlock.hpp:84
LocationBlock const * matchLocation(http::Request const &req) const
Finds the best-matching location block for a given request URI.
Definition ServerBlock.cpp:11
ServerBlock()
Definition ServerBlock.cpp:9
Definition Request.hpp:66
Definition Mapper.hpp:29
LocationBlock const * bestMatchLocation(LocationBlockMap const &ls, std::string const &path)
Definition ServerBlockDetails.cpp:18
bool matchServerName(std::vector< std::string > const &, std::string const &)
Definition ServerBlockDetails.cpp:10
LocationBlock const * matchExtensionLocation(LocationBlockMap const &ls, std::vector< std::string > const &paths, std::string const &uri)
Definition ServerBlockDetails.cpp:57
Definition ArgumentFactory.hpp:5
std::vector< ServerBlock > ServerBlockVec
Definition ServerBlock.hpp:90
std::map< std::string, LocationBlock > LocationBlockMap
Definition ServerBlock.hpp:12
Definition IArgument.hpp:5