//
// HTTPServerParams.h
//
// Library: Net
// Package: HTTPServer
// Module:  HTTPServerParams
//
// Definition of the HTTPServerParams class.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier:	BSL-1.0
//


#ifndef Net_HTTPServerParams_INCLUDED
#define Net_HTTPServerParams_INCLUDED


#include "Poco/Net/Net.h"
#include "Poco/Net/TCPServerParams.h"


namespace Poco {
namespace Net {


class Net_API HTTPServerParams: public TCPServerParams
	/// This class is used to specify parameters to both the
	/// HTTPServer, as well as to HTTPRequestHandler objects.
	///
	/// Subclasses may add new parameters to the class.
{
public:
	using Ptr = Poco::AutoPtr<HTTPServerParams>;

	HTTPServerParams();
		/// Creates the HTTPServerParams.
		///
		/// Sets the following default values:
		///   - timeout:              60 seconds
		///   - keepAlive:            true
		///   - maxKeepAliveRequests: 0
		///   - keepAliveTimeout:     10 seconds

	void setServerName(const std::string& serverName);
		/// Sets the name and port (name:port) that the server uses to identify itself.
		///
		/// If this is not set to valid DNS name for your host, server-generated
		/// redirections will not work.

	const std::string& getServerName() const;
		/// Returns the name and port (name:port) that the server uses to identify itself.

	void setSoftwareVersion(const std::string& softwareVersion);
		/// Sets the server software name and version that the server uses to identify
		/// itself. If this is set to a non-empty string, the server will
		/// automatically include a Server header field with the value given
		/// here in every response it sends.
		///
		/// The format of the softwareVersion string should be name/version
		/// (e.g. MyHTTPServer/1.0).

	const std::string& getSoftwareVersion() const;
		/// Returns the server software name and version that the server uses to
		/// identify itself.

	void setTimeout(const Poco::Timespan& timeout);
		/// Sets the connection timeout for HTTP connections.

	const Poco::Timespan& getTimeout() const;
		/// Returns the connection timeout for HTTP connections.

	void setKeepAlive(bool keepAlive);
		/// Enables (keepAlive == true) or disables (keepAlive == false)
		/// persistent connections.

	bool getKeepAlive() const;
		/// Returns true if persistent connections are enabled.

	void setKeepAliveTimeout(const Poco::Timespan& timeout);
		/// Sets the keep-alive timeout for persistent HTTP connections.

	const Poco::Timespan& getKeepAliveTimeout() const;
		/// Returns the keep-alive timeout for persistent HTTP connections.

	void setMaxKeepAliveRequests(int maxKeepAliveRequests);
		/// Specifies the maximum number of requests allowed
		/// during a persistent connection. 0 means unlimited
		/// connections.

	int getMaxKeepAliveRequests() const;
		/// Returns the maximum number of requests allowed
		/// during a persistent connection, or 0 if
		/// unlimited connections are allowed.

	void setAutoDecodeHeaders(bool autoDecode);
		/// Enables or disables automatic HTTP header value conversions, for example
		/// RFC2047.
		/// Default is true: convert header values when reading HTTP header.

	bool getAutoDecodeHeaders() const;
		/// Returns true if automatic conversion of HTTP header values
		/// when reading HTTP header.

protected:
	virtual ~HTTPServerParams();
		/// Destroys the HTTPServerParams.

private:
	std::string    _serverName;
	std::string    _softwareVersion;
	Poco::Timespan _timeout;
	bool           _keepAlive;
	int            _maxKeepAliveRequests;
	Poco::Timespan _keepAliveTimeout;
	bool           _autoDecodeHeaders;
};


//
// inlines
//
inline const std::string& HTTPServerParams::getServerName() const
{
	return _serverName;
}


inline const std::string& HTTPServerParams::getSoftwareVersion() const
{
	return _softwareVersion;
}


inline const Poco::Timespan& HTTPServerParams::getTimeout() const
{
	return _timeout;
}


inline bool HTTPServerParams::getKeepAlive() const
{
	return _keepAlive;
}


inline int HTTPServerParams::getMaxKeepAliveRequests() const
{
	return _maxKeepAliveRequests;
}


inline const Poco::Timespan& HTTPServerParams::getKeepAliveTimeout() const
{
	return _keepAliveTimeout;
}


inline bool HTTPServerParams::getAutoDecodeHeaders() const
{
	return _autoDecodeHeaders;
}


} } // namespace Poco::Net


#endif // Net_HTTPServerParams_INCLUDED
