mirror of
https://github.com/pocoproject/poco.git
synced 2024-12-13 18:45:10 +01:00
71 lines
1.4 KiB
C++
71 lines
1.4 KiB
C++
//
|
|
// HTTPServerSession.cpp
|
|
//
|
|
// Library: Net
|
|
// Package: HTTPServer
|
|
// Module: HTTPServerSession
|
|
//
|
|
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
|
|
// and Contributors.
|
|
//
|
|
// SPDX-License-Identifier: BSL-1.0
|
|
//
|
|
|
|
|
|
#include "Poco/Net/HTTPServerSession.h"
|
|
|
|
|
|
namespace Poco {
|
|
namespace Net {
|
|
|
|
|
|
HTTPServerSession::HTTPServerSession(const StreamSocket& socket, HTTPServerParams::Ptr pParams):
|
|
HTTPSession(socket, pParams->getKeepAlive()),
|
|
_firstRequest(true),
|
|
_keepAliveTimeout(pParams->getKeepAliveTimeout()),
|
|
_maxKeepAliveRequests(pParams->getMaxKeepAliveRequests())
|
|
{
|
|
setTimeout(pParams->getTimeout());
|
|
this->socket().setReceiveTimeout(pParams->getTimeout());
|
|
}
|
|
|
|
|
|
HTTPServerSession::~HTTPServerSession()
|
|
{
|
|
}
|
|
|
|
|
|
bool HTTPServerSession::hasMoreRequests()
|
|
{
|
|
if (!socket().impl()->initialized()) return false;
|
|
|
|
if (_firstRequest)
|
|
{
|
|
_firstRequest = false;
|
|
--_maxKeepAliveRequests;
|
|
return socket().poll(getTimeout(), Socket::SELECT_READ);
|
|
}
|
|
else if (_maxKeepAliveRequests != 0 && getKeepAlive())
|
|
{
|
|
if (_maxKeepAliveRequests > 0)
|
|
--_maxKeepAliveRequests;
|
|
return buffered() > 0 || socket().poll(_keepAliveTimeout, Socket::SELECT_READ);
|
|
}
|
|
else return false;
|
|
}
|
|
|
|
|
|
SocketAddress HTTPServerSession::clientAddress()
|
|
{
|
|
return socket().peerAddress();
|
|
}
|
|
|
|
|
|
SocketAddress HTTPServerSession::serverAddress()
|
|
{
|
|
return socket().address();
|
|
}
|
|
|
|
|
|
} } // namespace Poco::Net
|