Refactor: find TargetResource in connectionReceiveHeader
Refactor: delete HTTPResponse, use HTTPRequest instead
Misc
1. Select server configuration for connection
new function hasValidServerConfig() : compares serverSocket of connection with configs in ConfigFile and finds a match. Match is if host and port are equal. If more than one matches are found, selects first match.
If no matches found, tries to match with a wildcard server (right now only IPv4, i.e. 0.0.0.0). If one is present, it only needs to match port.
Overload: if additionally a host string is passed, also checks server_name of found matches
Connection::Connection: when constructing a new Connection, vector of servers need to be passed. Ctor of connection does this check (aka selects a default server)
connectionReceiveHeader: after receiving a complete request header, checks if Host header field is present. If it is, checks server config again
imitates nginx, see also resources in #59
2. Write own implementation of getnameinfo()
formerly used getnameinfo() to parse struct addr* > getting host and port as string. Turns out this function is not allowed (I think I looked at older version of subject)
Implemented own version, but only for IPv4.
If we want to support IPv6, we need to implement additional algorithm
3. Use gethostname()
when a new Connection is constructed, it gets clientSock (representing client host:port) and serverSock (representing server host:port)
if a wildcard server (0.0.0.0) would accept() the connection, the wildcard host would be saved, not the actual host.
to find out actual host (e.g. 127.0.0.1) gethostname() is used
double checked if function is allowed in subject.
is needed to select correct server config
4. Refactor: find TargetResource in connectionReceiveHeader
we need info about target ressource (or more precise: about target location) earlier than in ResponseBuilder: e.g. maxbodysize can be set in location
moved TargetResourceHandler into Server. It is called in connectionReceiveHeader, after complete request header was received.
needed to refactor to adapt to new place in code
also refactored connectionReceiveHeader() by splitting of handleCompleteRequestHeader()
adapted tests
5. Refactor: delete HTTPResponse, use HTTPRequest instead
HTTPResponse was only used in ResponseBuilder and friends.
Much of it was just copied over from HTTPRequest.
Supplemented stuff to HTTPRequest and deleted HTTPResponse entirely
Refactored ResponseBuilder and friend to directly use HTTPRequest
adapted tests
6. Misc
adapted error msg in FileSystemPolicy; AutoIndexHandler; TargetResourceHandler to use logger
moved timestamp generation in connectionReceiveHeader and connectionReceiveBody higher up, adapted tests
clear() connection buffer in connectionBuildResponse
add constructor for HTTPRequest to set default values
Summary
1. Select server configuration for connection
2. Write own implementation of getnameinfo()
3. Use gethostname()
4. Refactor: find TargetResource in connectionReceiveHeader
5. Refactor: delete HTTPResponse, use HTTPRequest instead
6. Misc
closes #59