mirror of
https://github.com/pocoproject/poco.git
synced 2025-04-17 15:14:48 +02:00
178 lines
5.2 KiB
C++
178 lines
5.2 KiB
C++
//
|
|
// HTTPMessage.h
|
|
//
|
|
// $Id: //poco/svn/Net/include/Poco/Net/HTTPMessage.h#2 $
|
|
//
|
|
// Library: Net
|
|
// Package: HTTP
|
|
// Module: HTTPMessage
|
|
//
|
|
// Definition of the HTTPMessage class.
|
|
//
|
|
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
|
|
// and Contributors.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person or organization
|
|
// obtaining a copy of the software and accompanying documentation covered by
|
|
// this license (the "Software") to use, reproduce, display, distribute,
|
|
// execute, and transmit the Software, and to prepare derivative works of the
|
|
// Software, and to permit third-parties to whom the Software is furnished to
|
|
// do so, all subject to the following:
|
|
//
|
|
// The copyright notices in the Software and this entire statement, including
|
|
// the above license grant, this restriction and the following disclaimer,
|
|
// must be included in all copies of the Software, in whole or in part, and
|
|
// all derivative works of the Software, unless such copies or derivative
|
|
// works are solely in the form of machine-executable object code generated by
|
|
// a source language processor.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
|
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
|
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
|
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
// DEALINGS IN THE SOFTWARE.
|
|
//
|
|
|
|
|
|
#ifndef Net_HTTPMessage_INCLUDED
|
|
#define Net_HTTPMessage_INCLUDED
|
|
|
|
|
|
#include "Poco/Net/Net.h"
|
|
#include "Poco/Net/MessageHeader.h"
|
|
|
|
|
|
namespace Poco {
|
|
namespace Net {
|
|
|
|
|
|
class MediaType;
|
|
|
|
|
|
class Net_API HTTPMessage: public MessageHeader
|
|
/// The base class for HTTPRequest and HTTPResponse.
|
|
///
|
|
/// Defines the common properties of all HTTP messages.
|
|
/// These are version, content length, content type
|
|
/// and transfer encoding.
|
|
{
|
|
public:
|
|
void setVersion(const std::string& version);
|
|
/// Sets the HTTP version for this message.
|
|
|
|
const std::string& getVersion() const;
|
|
/// Returns the HTTP version for this message.
|
|
|
|
void setContentLength(int length);
|
|
/// Sets the Content-Length header.
|
|
///
|
|
/// If length is UNKNOWN_CONTENT_LENGTH, removes
|
|
/// the Content-Length header.
|
|
|
|
int getContentLength() const;
|
|
/// Returns the content length for this message,
|
|
/// which may be UNKNOWN_CONTENT_LENGTH if
|
|
/// no Content-Length header is present.
|
|
|
|
void setTransferEncoding(const std::string& transferEncoding);
|
|
/// Sets the transfer encoding for this message.
|
|
///
|
|
/// The value should be either IDENTITY_TRANSFER_CODING
|
|
/// or CHUNKED_TRANSFER_CODING.
|
|
|
|
const std::string& getTransferEncoding() const;
|
|
/// Returns the transfer encoding used for this
|
|
/// message.
|
|
///
|
|
/// Normally, this is the value of the Transfer-Encoding
|
|
/// header field. If no such field is present,
|
|
/// returns IDENTITY_TRANSFER_CODING.
|
|
|
|
void setChunkedTransferEncoding(bool flag);
|
|
/// If flag is true, sets the Transfer-Encoding header to
|
|
/// chunked. Otherwise, removes the Transfer-Encoding
|
|
/// header.
|
|
|
|
bool getChunkedTransferEncoding() const;
|
|
/// Returns true if the Transfer-Encoding header is set
|
|
/// and its value is chunked.
|
|
|
|
void setContentType(const std::string& mediaType);
|
|
/// Sets the content type for this message.
|
|
///
|
|
/// Specify NO_CONTENT_TYPE to remove the
|
|
/// Content-Type header.
|
|
|
|
void setContentType(const MediaType& mediaType);
|
|
/// Sets the content type for this message.
|
|
|
|
const std::string& getContentType() const;
|
|
/// Returns the content type for this message.
|
|
///
|
|
/// If no Content-Type header is present,
|
|
/// returns UNKNOWN_CONTENT_TYPE.
|
|
|
|
void setKeepAlive(bool keepAlive);
|
|
/// Sets the value of the Connection header field.
|
|
///
|
|
/// The value is set to "Keep-Alive" if keepAlive is
|
|
/// true, or to "Close" otherwise.
|
|
|
|
bool getKeepAlive() const;
|
|
/// Returns true if
|
|
/// * the message has a Connection header field and its value is "Keep-Alive"
|
|
/// * the message is a HTTP/1.1 message and not Connection header is set
|
|
/// Returns false otherwise.
|
|
|
|
static const std::string HTTP_1_0;
|
|
static const std::string HTTP_1_1;
|
|
|
|
static const std::string IDENTITY_TRANSFER_ENCODING;
|
|
static const std::string CHUNKED_TRANSFER_ENCODING;
|
|
|
|
static const int UNKNOWN_CONTENT_LENGTH;
|
|
static const std::string UNKNOWN_CONTENT_TYPE;
|
|
|
|
static const std::string CONTENT_LENGTH;
|
|
static const std::string CONTENT_TYPE;
|
|
static const std::string TRANSFER_ENCODING;
|
|
static const std::string CONNECTION;
|
|
|
|
static const std::string CONNECTION_KEEP_ALIVE;
|
|
static const std::string CONNECTION_CLOSE;
|
|
|
|
protected:
|
|
HTTPMessage();
|
|
/// Creates the HTTPMessage with version HTTP/1.0.
|
|
|
|
HTTPMessage(const std::string& version);
|
|
/// Creates the HTTPMessage and sets
|
|
/// the version.
|
|
|
|
virtual ~HTTPMessage();
|
|
/// Destroys the HTTPMessage.
|
|
|
|
private:
|
|
HTTPMessage(const HTTPMessage&);
|
|
HTTPMessage& operator = (const HTTPMessage&);
|
|
|
|
std::string _version;
|
|
};
|
|
|
|
|
|
//
|
|
// inlines
|
|
//
|
|
inline const std::string& HTTPMessage::getVersion() const
|
|
{
|
|
return _version;
|
|
}
|
|
|
|
|
|
} } // namespace Poco::Net
|
|
|
|
|
|
#endif // Net_HTTPMessage_INCLUDED
|