#include <HttpReply.h>

Inheritance diagram for HttpReply:
Collaboration diagram for HttpReply:

Public Types

typedef RefCount< HttpReplyPointer
 
enum  Sources {
  srcUnknown = 0,
  srcHttps = 1 << 0,
  srcFtps = 1 << 1,
  srcIcaps = 1 << 2,
  srcEcaps = 1 << 3,
  srcHttp = 1 << (16 + 0),
  srcFtp = 1 << (16 + 1),
  srcIcap = 1 << (16 + 2),
  srcEcap = 1 << (16 + 3),
  srcGopher = 1 << (16 + 14),
  srcWhois = 1 << (16 + 15),
  srcUnsafe = 0xFFFF0000,
  srcSafe = 0x0000FFFF
}
 Who may have created or modified this message? More...
 
enum  ParseState {
  psReadyToParseStartLine = 0,
  psReadyToParseHeaders,
  psParsed,
  psError
}
 parse state of HttpReply or HttpRequest More...
 

Public Member Functions

void * operator new (size_t byteCount)
 
void operator delete (void *address)
 
 HttpReply ()
 
 ~HttpReply ()
 
virtual void reset ()
 
virtual bool sanityCheckStartLine (const char *buf, const size_t hdr_len, Http::StatusCode *error)
 
const HttpHdrContRangecontentRange () const
 
virtual int httpMsgParseError ()
 
virtual bool expectingBody (const HttpRequestMethod &, int64_t &) const
 
virtual bool inheritProperties (const Http::Message *)
 
Pointer recreateOnNotModified (const HttpReply &reply304) const
 
void setHeaders (Http::StatusCode status, const char *reason, const char *ctype, int64_t clen, time_t lmt, time_t expires)
 
MemBufpack () const
 
HttpReplyPointer make304 () const
 
void redirect (Http::StatusCode, const char *)
 
int64_t bodySize (const HttpRequestMethod &) const
 
bool receivedBodyTooLarge (HttpRequest &, int64_t receivedBodySize)
 
bool expectedBodyTooLarge (HttpRequest &request)
 
int validatorsMatch (HttpReply const *other) const
 
void packHeadersUsingFastPacker (Packable &p) const
 
void packHeadersUsingSlowPacker (Packable &p) const
 same as packHeadersUsingFastPacker() but assumes that p cannot quickly process small additions More...
 
HttpReplyclone () const
 
void removeStaleWarnings ()
 Remove Warnings with warn-date different from Date value. More...
 
virtual void hdrCacheInit ()
 
bool olderThan (const HttpReply *them) const
 
void removeIrrelevantContentLength ()
 Some response status codes prohibit sending Content-Length (RFC 7230 section 3.3.2). More...
 
virtual void configureContentLengthInterpreter (Http::ContentLengthInterpreter &)
 configures the interpreter as needed More...
 
bool parseHeader (Http1::Parser &hp)
 parses reply header using Parser More...
 
void packInto (Packable *, bool full_uri) const
 produce a message copy, except for a few connection-specific settings More...
 
void setContentLength (int64_t)
 [re]sets Content-Length header and cached value More...
 
bool persistent () const
 
void putCc (const HttpHdrCc *otherCc)
 copies Cache-Control header to this message More...
 
bool parse (const char *buf, const size_t sz, bool eol, Http::StatusCode *error)
 
bool parseCharBuf (const char *buf, ssize_t end)
 
int httpMsgParseStep (const char *buf, int len, int atEnd)
 
void firstLineBuf (MemBuf &)
 useful for debugging More...
 

Static Public Member Functions

static int UseCount ()
 
static HttpReplyPointer MakeConnectionEstablished ()
 construct and return an HTTP/200 (Connection Established) response More...
 

Public Attributes

time_t date
 
time_t last_modified
 
time_t expires
 
String content_type
 
HttpHdrScsurrogate_control
 
short int keep_alive
 
Http::StatusLine sline
 
HttpBody body
 
String protoPrefix
 
bool do_clean
 
AnyP::ProtocolVersion http_ver
 
HttpHeader header
 
HttpHdrCccache_control = nullptr
 
int hdr_sz = 0
 
int64_t content_length = 0
 
ParseState pstate = Http::Message::psReadyToParseStartLine
 the current parsing state More...
 
BodyPipe::Pointer body_pipe
 optional pipeline to receive message body More...
 
uint32_t sources = 0
 The message sources. More...
 

Protected Member Functions

virtual void packFirstLineInto (Packable *p, bool) const
 
virtual bool parseFirstLine (const char *start, const char *end)
 
bool parseHeader (Http1::Parser &, Http::ContentLengthInterpreter &)
 

Private Member Functions

void init ()
 
void clean ()
 
void hdrCacheClean ()
 
void packInto (MemBuf &) const
 
MemBufpacked304Reply () const
 
time_t hdrExpirationTime ()
 
void calcMaxBodySize (HttpRequest &request) const
 
String removeStaleWarningValues (const String &value)
 

Static Private Member Functions

static Mem::AllocatorProxyPool ()
 

Private Attributes

int64_t bodySizeMax
 
HttpHdrContRangecontent_range
 parsed Content-Range; nil for non-206 responses! More...
 

Detailed Description

Definition at line 24 of file HttpReply.h.

Member Typedef Documentation

◆ Pointer

Definition at line 26 of file HttpReply.h.

Member Enumeration Documentation

◆ ParseState

enum Http::Message::ParseState
inherited
Enumerator
psReadyToParseStartLine 
psReadyToParseHeaders 
psParsed 
psError 

Definition at line 87 of file Message.h.

◆ Sources

enum Http::Message::Sources
inherited
Enumerator
srcUnknown 
srcHttps 

https_port or bumped http_port tunnel; HTTPS server

srcFtps 

ftps_port or SFTP server; currently unused

srcIcaps 

Secure ICAP service.

srcEcaps 

eCAP service that is considered secure; currently unused

srcHttp 

http_port or HTTP server

srcFtp 

ftp_port or FTP server

srcIcap 

traditional ICAP service without encryption

srcEcap 

eCAP service that uses insecure libraries/daemons

srcGopher 

Gopher server.

srcWhois 

Whois server.

srcUnsafe 

Unsafe sources mask.

srcSafe 

Safe sources mask.

Definition at line 29 of file Message.h.

Constructor & Destructor Documentation

◆ HttpReply()

HttpReply::HttpReply ( )

Definition at line 29 of file HttpReply.cc.

References init().

Referenced by clone().

◆ ~HttpReply()

HttpReply::~HttpReply ( )

Definition at line 43 of file HttpReply.cc.

References clean(), and do_clean.

Member Function Documentation

◆ bodySize()

◆ calcMaxBodySize()

void HttpReply::calcMaxBodySize ( HttpRequest request) const
private

◆ clean()

void HttpReply::clean ( )
private

◆ clone()

HttpReply * HttpReply::clone ( ) const
virtual

Clone this reply. Could be done as a copy-contructor but we do not want to accidently copy a HttpReply..

Implements Http::Message.

Definition at line 573 of file HttpReply.cc.

References HttpHeader::append(), Http::Message::body_pipe, Http::Message::hdr_sz, hdrCacheInit(), Http::Message::header, Http::Message::http_ver, HttpReply(), Http::Message::pstate, and sline.

Referenced by clientReplyContext::cloneReply(), and recreateOnNotModified().

◆ configureContentLengthInterpreter()

void HttpReply::configureContentLengthInterpreter ( Http::ContentLengthInterpreter )
virtual

◆ contentRange()

const HttpHdrContRange * HttpReply::contentRange ( ) const

◆ expectedBodyTooLarge()

bool HttpReply::expectedBodyTooLarge ( HttpRequest request)

Checks whether expected body exceeds known maximum size. Requires a prior call to calcMaxBodySize().

Definition at line 525 of file HttpReply.cc.

References bodySizeMax, calcMaxBodySize(), debugs, expectingBody(), HERE(), and HttpRequest::method.

Referenced by clientReplyContext::processReplyAccess().

◆ expectingBody()

◆ firstLineBuf()

void Http::Message::firstLineBuf ( MemBuf mb)
inherited

Definition at line 295 of file Message.cc.

References Http::Message::packFirstLineInto().

◆ hdrCacheClean()

void HttpReply::hdrCacheClean ( )
private

◆ hdrCacheInit()

◆ hdrExpirationTime()

◆ httpMsgParseError()

int HttpReply::httpMsgParseError ( )
virtual

◆ httpMsgParseStep()

◆ inheritProperties()

bool HttpReply::inheritProperties ( const Http::Message aMsg)
virtual

Implements Http::Message.

Definition at line 589 of file HttpReply.cc.

References keep_alive, and Http::Message::sources.

◆ init()

void HttpReply::init ( void  )
private

◆ make304()

◆ MakeConnectionEstablished()

HttpReplyPointer HttpReply::MakeConnectionEstablished ( )
static

◆ olderThan()

bool HttpReply::olderThan ( const HttpReply them) const

whether our Date header value is smaller than theirs

Returns
false if any information is missing

Definition at line 664 of file HttpReply.cc.

References date.

◆ operator delete()

void HttpReply::operator delete ( void *  address)
inline

Definition at line 26 of file HttpReply.h.

◆ operator new()

void* HttpReply::operator new ( size_t  byteCount)
inline

Definition at line 26 of file HttpReply.h.

◆ pack()

MemBuf * HttpReply::pack ( ) const

◆ packed304Reply()

MemBuf * HttpReply::packed304Reply ( ) const
private
Returns
construct 304 reply and pack it into a MemBuf

Definition at line 157 of file HttpReply.cc.

References make304().

◆ packFirstLineInto()

virtual void HttpReply::packFirstLineInto ( Packable p,
bool   
) const
inlineprotectedvirtual

Implements Http::Message.

Definition at line 164 of file HttpReply.h.

References Http::StatusLine::packInto(), and parseFirstLine().

◆ packHeadersUsingFastPacker()

void HttpReply::packHeadersUsingFastPacker ( Packable p) const

adds status line and header to the given Packable assumes that p can quickly process small additions

Definition at line 86 of file HttpReply.cc.

References Packable::append(), Http::Message::header, Http::StatusLine::packInto(), HttpHeader::packInto(), and sline.

Referenced by packHeadersUsingSlowPacker(), packInto(), and AccessLogEntry::packReplyHeaders().

◆ packHeadersUsingSlowPacker()

void HttpReply::packHeadersUsingSlowPacker ( Packable p) const

◆ packInto() [1/2]

void Http::Message::packInto ( Packable p,
bool  full_uri 
) const
inherited

◆ packInto() [2/2]

void HttpReply::packInto ( MemBuf buf) const
private

Definition at line 103 of file HttpReply.cc.

References body, packHeadersUsingFastPacker(), and HttpBody::packInto().

Referenced by pack().

◆ parse()

◆ parseCharBuf()

bool Http::Message::parseCharBuf ( const char *  buf,
ssize_t  end 
)
inherited

parseCharBuf() takes character buffer of HTTP headers (buf), which may not be NULL-terminated, and fills in an Http::Message structure. The parameter 'end' specifies the offset to the end of the reply headers. The caller may know where the end is, but is unable to NULL-terminate the buffer. This function returns true on success.

Definition at line 148 of file Message.cc.

References MemBuf::append(), MemBuf::buf, MemBuf::clean(), Http::Message::httpMsgParseStep(), MemBuf::init(), Http::Message::reset(), MemBuf::size, and MemBuf::terminate().

Referenced by Adaptation::Icap::ModXact::makeRequestHeaders(), store_client::readBody(), and urnHandleReply().

◆ parseFirstLine()

bool HttpReply::parseFirstLine ( const char *  start,
const char *  end 
)
protectedvirtual

Implements Http::Message.

Definition at line 455 of file HttpReply.cc.

References Http::StatusLine::parse(), protoPrefix, and sline.

Referenced by packFirstLineInto().

◆ parseHeader() [1/2]

bool HttpReply::parseHeader ( Http1::Parser hp)

◆ parseHeader() [2/2]

◆ persistent()

bool Http::Message::persistent ( ) const
inherited
Return values
truethe message sender asks to keep the connection open.
falsethe message sender will close the connection.

Factors other than the headers may result in connection closure.

Definition at line 261 of file Message.cc.

References Http::Message::header, Http::Message::http_ver, httpHeaderHasConnDir(), and Http::ProtocolVersion().

Referenced by clientReplyContext::buildReplyHeader(), clientSetKeepaliveFlag(), hdrCacheInit(), and HttpStateData::sendRequest().

◆ Pool()

static Mem::AllocatorProxy& HttpReply::Pool ( )
inlinestaticprivate

Definition at line 26 of file HttpReply.h.

◆ putCc()

void Http::Message::putCc ( const HttpHdrCc otherCc)
inherited

◆ receivedBodyTooLarge()

bool HttpReply::receivedBodyTooLarge ( HttpRequest request,
int64_t  receivedBodySize 
)

Checks whether received body exceeds known maximum size. Requires a prior call to calcMaxBodySize().

Definition at line 517 of file HttpReply.cc.

References bodySizeMax, calcMaxBodySize(), debugs, and HERE().

Referenced by clientReplyContext::replyStatus().

◆ recreateOnNotModified()

HttpReply::Pointer HttpReply::recreateOnNotModified ( const HttpReply reply304) const
Returns
nil (if no updates are necessary)
a new reply combining this reply with 304 updates (otherwise)

Definition at line 263 of file HttpReply.cc.

References clone(), HttpHeader::compact(), hdrCacheClean(), hdrCacheInit(), Http::Message::header, HttpHeader::needUpdate(), and HttpHeader::update().

Referenced by StoreEntry::updateOnNotModified().

◆ redirect()

◆ removeIrrelevantContentLength()

◆ removeStaleWarnings()

◆ removeStaleWarningValues()

String HttpReply::removeStaleWarningValues ( const String value)
private

Remove warning-values with warn-date different from Date value from a single header entry. Returns a string with all valid warning-values.

Definition at line 619 of file HttpReply.cc.

References String::append(), date, len, p, parse_rfc1123(), String::size(), strListGetItem(), String::termedBuf(), and xisspace.

Referenced by removeStaleWarnings().

◆ reset()

void HttpReply::reset ( )
virtual

◆ sanityCheckStartLine()

bool HttpReply::sanityCheckStartLine ( const char *  buf,
const size_t  hdr_len,
Http::StatusCode error 
)
virtual
Return values
trueon success
falseand sets *error to zero when needs more data
falseand sets *error to a positive Http::StatusCode on error

Checks the first line of an HTTP Reply is valid. currently only checks "HTTP/" exists.

NP: not all error cases are detected yet. Some are left for detection later in parse.

Implements Http::Message.

Definition at line 400 of file HttpReply.cc.

References String::cmp(), debugs, protoPrefix, String::psize(), Http::scInvalidHeader, String::size(), and xisdigit.

Referenced by testHttpReply::testSanityCheckFirstLine().

◆ setContentLength()

void Http::Message::setContentLength ( int64_t  clen)
inherited

◆ setHeaders()

◆ UseCount()

static int HttpReply::UseCount ( )
inlinestatic

Definition at line 26 of file HttpReply.h.

◆ validatorsMatch()

Member Data Documentation

◆ body

HttpBody HttpReply::body

for small constant memory-resident text bodies only

Definition at line 62 of file HttpReply.h.

Referenced by ErrorState::BuildHttpReply(), clean(), ESIContext::fail(), packInto(), and urnHandleReply().

◆ body_pipe

◆ bodySizeMax

int64_t HttpReply::bodySizeMax
mutableprivate

cached result of calcMaxBodySize

Definition at line 159 of file HttpReply.h.

Referenced by calcMaxBodySize(), clean(), expectedBodyTooLarge(), and receivedBodyTooLarge().

◆ cache_control

◆ content_length

◆ content_range

HttpHdrContRange* HttpReply::content_range
private

Definition at line 161 of file HttpReply.h.

Referenced by contentRange(), hdrCacheClean(), and hdrCacheInit().

◆ content_type

String HttpReply::content_type

◆ date

time_t HttpReply::date

◆ do_clean

bool HttpReply::do_clean

Definition at line 66 of file HttpReply.h.

Referenced by init(), and ~HttpReply().

◆ expires

◆ hdr_sz

◆ header

HttpHeader Http::Message::header
inherited

Definition at line 75 of file Message.h.

Referenced by StoreEntry::adjustVary(), Ftp::Gateway::appendSuccessHeader(), Format::Format::assemble(), assembleVaryKey(), authDigestNoncePurge(), Auth::UserRequest::authenticate(), ConnStateData::buildFakeRequest(), ErrorState::BuildHttpReply(), Http::One::Server::buildHttpRequest(), Http::Stream::buildRangeHeader(), clientReplyContext::buildReplyHeader(), ESIVarState::buildVary(), HttpRequest::canHandle1xx(), HttpRequest::clean(), clean(), clientBeginRequest(), clientCheckPinning(), clientGetMoreData(), clientIfRangeMatch(), clientInterpretRequestHeaders(), clientIsContentLengthValid(), clientProcessRequest(), HttpRequest::clone(), clone(), ErrorState::compileLegacyCode(), HttpRequest::conditional(), Adaptation::Icap::Options::configure(), MimeIcon::created(), Ftp::Relay::createHttpReply(), ErrorState::Dump(), Adaptation::Icap::ModXact::encapsulateHead(), ESIContextNew(), Adaptation::Icap::ModXact::expectIcapTrailers(), expectingBody(), HttpRequest::expectingBody(), Mgr::Action::fillEntry(), Ftp::Gateway::ftpAuthRequired(), ftpSendStor(), Ssl::ErrorDetailsManager::getErrorDetail(), Adaptation::Icap::ModXact::gotEncapsulated(), Adaptation::Icap::OptXact::handleCommRead(), Ftp::Server::handleFeatReply(), Ftp::Server::handleRequest(), StoreEntry::hasIfMatchEtag(), StoreEntry::hasIfNoneMatchEtag(), StoreEntry::hasOneOfEtags(), hdrCacheInit(), Http::Message::hdrCacheInit(), HttpRequest::hdrCacheInit(), hdrExpirationTime(), HttpStateData::httpBuildRequestHeader(), Log::Format::HttpdCombined(), httpMakeVaryMark(), Http::Message::httpMsgParseStep(), Ftp::HttpReplyWrapper(), TemplateFile::loadFor(), Ftp::Gateway::loginFailed(), make304(), Adaptation::Icap::ModXact::makeRequestHeaders(), ACLHTTPReqHeaderStrategy::match(), ACLHTTPRepHeaderStrategy::match(), ACLRequestHeaderStrategy< header >::match(), ACLReplyHeaderStrategy< header >::match(), mcast_encode(), HttpRequest::pack(), packHeadersUsingFastPacker(), Http::Message::packInto(), Http::Message::parseHeader(), HttpRequest::parseHeader(), CacheManager::ParseHeaders(), Adaptation::Icap::ModXact::parseIcapHead(), Adaptation::Icap::OptXact::parseResponse(), peerDigestRequest(), Http::Message::persistent(), HttpRequest::prefixLen(), prepareLogWithRequestDetails(), Ftp::PrintReply(), clientReplyContext::processConditional(), clientReplyContext::processExpired(), Http::One::Server::processParsedRequest(), HttpStateData::processReplyHeader(), purgeEntriesByHeader(), Http::Message::putCc(), recreateOnNotModified(), redirect(), removeIrrelevantContentLength(), removeStaleWarnings(), HttpStateData::reusableReply(), Ftp::Relay::sendCommand(), Http::Message::setContentLength(), Ftp::Server::setDataCommand(), setHeaders(), UrnState::setUriResFromRequest(), Log::Format::SquidReferer(), Log::Format::SquidUserAgent(), Mgr::Inquirer::start(), CacheManager::start(), Ftp::Gateway::start(), HttpStateData::statusIfComplete(), urlCheckRequest(), urnHandleReply(), validatorsMatch(), varyEvaluateMatch(), Http::One::Server::writeControlMsgAndCall(), Ftp::Server::writeCustomReply(), Ftp::Server::writeErrorReply(), Ftp::Server::writeForwardedReply(), and Ftp::Server::writeForwardedReplyAndCall().

◆ http_ver

◆ keep_alive

◆ last_modified

time_t HttpReply::last_modified

Definition at line 46 of file HttpReply.h.

Referenced by hdrCacheInit(), make304(), setHeaders(), storeLog(), and validatorsMatch().

◆ protoPrefix

◆ pstate

◆ sline

Http::StatusLine HttpReply::sline
public, writable, but use httpReply* interfaces when possible

Definition at line 60 of file HttpReply.h.

Referenced by Auth::UserRequest::AddReplyAuthHeader(), asHandleReply(), bodySize(), Http::Stream::buildRangeHeader(), clientReplyContext::buildReplyHeader(), Adaptation::Icap::Launcher::canRepeat(), clean(), clone(), clientReplyContext::cloneReply(), FwdState::complete(), Adaptation::Icap::Options::configure(), configureContentLengthInterpreter(), contentRange(), Adaptation::Icap::ModXact::encapsulateHead(), ErrorState::ErrorState(), esiBufferRecipient(), ESIContextNew(), expectingBody(), Adaptation::Icap::Xaction::finalizeLogInfo(), Adaptation::Icap::ModXact::finalizeLogInfo(), Ftp::Server::handleDataReply(), clientReplyContext::handleIMSReply(), HttpStateData::handleMoreRequestBodyAvailable(), Http::Tunneler::handleResponse(), hdrCacheInit(), httpMsgParseError(), Ftp::HttpReplyWrapper(), init(), ClientHttpRequest::logRequest(), make304(), MakeConnectionEstablished(), Client::maybePurgeOthers(), mcast_encode(), netdbExchangeHandleReply(), packHeadersUsingFastPacker(), parseFirstLine(), Adaptation::Icap::ModXact::parseIcapHead(), peerDigestFetchReply(), peerDigestSwapInHeaders(), clientReplyContext::processConditional(), Http::One::Server::processParsedRequest(), clientReplyContext::processReplyAccess(), clientReplyContext::processReplyAccessResult(), HttpStateData::processReplyHeader(), Adaptation::Ecap::StatusLineRep::reasonPhrase(), redirect(), FwdState::reforward(), removeIrrelevantContentLength(), HttpStateData::reusableReply(), setHeaders(), clientReplyContext::setReplyToReply(), CacheManager::start(), Adaptation::Ecap::StatusLineRep::statusCode(), storeLog(), urnHandleReply(), and Ftp::Server::writeErrorReply().

◆ sources

◆ surrogate_control

HttpHdrSc* HttpReply::surrogate_control

The documentation for this class was generated from the following files:

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors