server search for client completed with host:port

This commit is contained in:
LuckyLaszlo
2022-08-06 04:46:40 +02:00
parent 79bdc1ecbf
commit 05c7faf1f3
10 changed files with 71 additions and 23 deletions

View File

@@ -356,24 +356,31 @@ void Webserv::_delete_file(Client *client, const std::string &path)
ServerConfig &Webserv::_determine_process_server(Client *client)
{
/*
TODO : determine virtual server based on ip_address::port and server_name
Ior now its just based on server_name.
(maybe with a map< string, std::vector<ServerConfig> > where the string is "ip_adress::port")
http://nginx.org/en/docs/http/request_processing.html
_determine_process_server() should be complete.
TODO : test it
*/
std::string &server_name = client->get_headers("Host");
std::vector<ServerConfig>::iterator it = _servers.begin();
std::vector<ServerConfig>::iterator default_server = _servers.end();
while (it != _servers.end())
{
if ( std::find(it->server_name.begin(), it->server_name.end(), server_name) != it->server_name.end() )
break;
if (it->host == client->lsocket->host
&& it->port == client->lsocket->port)
{
if ( std::find(it->server_name.begin(), it->server_name.end(), server_name) != it->server_name.end() )
break;
else if (default_server == _servers.end())
default_server = it;
}
++it;
}
if (it != _servers.end())
return (*it);
else
return (_servers.front());
return (*default_server);
}
LocationConfig &Webserv::_determine_location(ServerConfig &server, std::string &path)