#include <HttpHeader.h>

Inheritance diagram for HttpHeader:
Collaboration diagram for HttpHeader:

Public Member Functions

 HttpHeader ()
 
 HttpHeader (const http_hdr_owner_type owner)
 
 HttpHeader (const HttpHeader &other)
 
 ~HttpHeader ()
 
HttpHeaderoperator= (const HttpHeader &other)
 
void clean ()
 
void append (const HttpHeader *src)
 
void update (const HttpHeader *fresh)
 
bool needUpdate (const HttpHeader *fresh) const
 
void compact ()
 
int parse (const char *header_start, size_t len, Http::ContentLengthInterpreter &interpreter)
 
int parse (const char *buf, size_t buf_len, bool atEnd, size_t &hdr_sz, Http::ContentLengthInterpreter &interpreter)
 
void packInto (Packable *p, bool mask_sensitive_info=false) const
 
HttpHeaderEntrygetEntry (HttpHeaderPos *pos) const
 
HttpHeaderEntryfindEntry (Http::HdrType id) const
 
int delByName (const SBuf &name)
 
int delByName (const char *name)
 
int delById (Http::HdrType id)
 
void delAt (HttpHeaderPos pos, int &headers_deleted)
 
void refreshMask ()
 
void addEntry (HttpHeaderEntry *e)
 
void insertEntry (HttpHeaderEntry *e)
 
String getList (Http::HdrType id) const
 
bool getList (Http::HdrType id, String *s) const
 
bool conflictingContentLength () const
 
String getStrOrList (Http::HdrType id) const
 
String getByName (const SBuf &name) const
 
String getByName (const char *name) const
 
String getById (Http::HdrType id) const
 
bool getByIdIfPresent (Http::HdrType id, String *result) const
 
bool hasNamed (const SBuf &s, String *value=0) const
 
bool hasNamed (const char *name, unsigned int namelen, String *value=0) const
 
SBuf getByNameListMember (const char *name, const char *member, const char separator) const
 
SBuf getListMember (Http::HdrType id, const char *member, const char separator) const
 
int has (Http::HdrType id) const
 
void addVia (const AnyP::ProtocolVersion &ver, const HttpHeader *from=0)
 
void putInt (Http::HdrType id, int number)
 
void putInt64 (Http::HdrType id, int64_t number)
 
void putTime (Http::HdrType id, time_t htime)
 
void putStr (Http::HdrType id, const char *str)
 
void putAuth (const char *auth_scheme, const char *realm)
 
void putCc (const HttpHdrCc *cc)
 
void putContRange (const HttpHdrContRange *cr)
 
void putRange (const HttpHdrRange *range)
 
void putSc (HttpHdrSc *sc)
 
void putWarning (const int code, const char *const text)
 add a Warning header More...
 
void putExt (const char *name, const char *value)
 
int getInt (Http::HdrType id) const
 
int64_t getInt64 (Http::HdrType id) const
 
time_t getTime (Http::HdrType id) const
 
const char * getStr (Http::HdrType id) const
 
const char * getLastStr (Http::HdrType id) const
 
HttpHdrCcgetCc () const
 
HttpHdrRangegetRange () const
 
HttpHdrScgetSc () const
 
HttpHdrContRangegetContRange () const
 
SBuf getAuthToken (Http::HdrType id, const char *auth_scheme) const
 
ETag getETag (Http::HdrType id) const
 
TimeOrTag getTimeOrTag (Http::HdrType id) const
 
int hasListMember (Http::HdrType id, const char *member, const char separator) const
 
int hasByNameListMember (const char *name, const char *member, const char separator) const
 
void removeHopByHopEntries ()
 
bool chunked () const
 
bool unsupportedTe () const
 whether message used an unsupported and/or invalid Transfer-Encoding More...
 

Public Attributes

std::vector< HttpHeaderEntry *, PoolingAllocator< HttpHeaderEntry * > > entries
 
HttpHeaderMask mask
 
http_hdr_owner_type owner
 
int len
 

Protected Member Functions

void removeConnectionHeaderEntries ()
 
bool skipUpdateHeader (const Http::HdrType id) const
 
void updateWarnings ()
 

Static Protected Member Functions

static bool Isolate (const char **parse_start, size_t l, const char **blk_start, const char **blk_end)
 

Private Member Functions

HttpHeaderEntryfindLastEntry (Http::HdrType id) const
 

Private Attributes

bool conflictingContentLength_
 
bool teUnsupported_ = false
 

Detailed Description

Definition at line 71 of file HttpHeader.h.

Constructor & Destructor Documentation

◆ HttpHeader() [1/3]

HttpHeader::HttpHeader ( )

Definition at line 146 of file HttpHeader.cc.

References entries, httpHeaderMaskInit(), and mask.

◆ HttpHeader() [2/3]

HttpHeader::HttpHeader ( const http_hdr_owner_type  owner)
explicit

Definition at line 152 of file HttpHeader.cc.

References assert, debugs, entries, hoEnd, hoNone, httpHeaderMaskInit(), mask, and owner.

◆ HttpHeader() [3/3]

HttpHeader::HttpHeader ( const HttpHeader other)

Definition at line 161 of file HttpHeader.cc.

References entries, httpHeaderMaskInit(), mask, and update().

◆ ~HttpHeader()

HttpHeader::~HttpHeader ( )

Definition at line 168 of file HttpHeader.cc.

References clean().

Member Function Documentation

◆ addEntry()

◆ addVia()

◆ append()

void HttpHeader::append ( const HttpHeader src)

Definition at line 239 of file HttpHeader.cc.

References addEntry(), assert, debugs, and entries.

Referenced by HttpRequest::clone(), HttpReply::clone(), and ESIVarState::ESIVarState().

◆ chunked()

bool HttpHeader::chunked ( ) const
inline

whether the message uses chunked Transfer-Encoding optimized implementation relies on us rejecting/removing other codings

Definition at line 165 of file HttpHeader.h.

References has(), and Http::TRANSFER_ENCODING.

Referenced by HttpReply::expectingBody(), HttpRequest::expectingBody(), and HttpStateData::processReplyHeader().

◆ clean()

◆ compact()

void HttpHeader::compact ( )

Definition at line 756 of file HttpHeader.cc.

References entries.

Referenced by HttpReply::recreateOnNotModified().

◆ conflictingContentLength()

bool HttpHeader::conflictingContentLength ( ) const
inline

Definition at line 113 of file HttpHeader.h.

References conflictingContentLength_.

Referenced by clientIsContentLengthValid().

◆ delAt()

◆ delById()

◆ delByName() [1/2]

int HttpHeader::delByName ( const char *  name)
inline
Deprecated:
use SBuf method instead. performance regression: reallocates

Definition at line 105 of file HttpHeader.h.

References delByName().

Referenced by delByName().

◆ delByName() [2/2]

int HttpHeader::delByName ( const SBuf name)

deletes all fields with a given name, if any.

Returns
#fields deleted

Definition at line 692 of file HttpHeader.cc.

References CBIT_SET, debugs, delAt(), getEntry(), HttpHeaderInitPos, httpHeaderMaskInit(), and mask.

Referenced by update().

◆ findEntry()

◆ findLastEntry()

HttpHeaderEntry * HttpHeader::findLastEntry ( Http::HdrType  id) const
private

Definition at line 672 of file HttpHeader.cc.

References Http::any_registered_header(), assert, CBIT_TEST, entries, Http::HeaderLookupTable, mask, and NULL.

Referenced by getLastStr().

◆ getAuthToken()

SBuf HttpHeader::getAuthToken ( Http::HdrType  id,
const char *  auth_scheme 
) const

◆ getById()

String HttpHeader::getById ( Http::HdrType  id) const

Definition at line 927 of file HttpHeader.cc.

References getByIdIfPresent().

◆ getByIdIfPresent()

bool HttpHeader::getByIdIfPresent ( Http::HdrType  id,
String result 
) const

returns true iff a [possibly empty] field identified by id is there when returning true, also sets the result parameter (if it is not nil)

Definition at line 941 of file HttpHeader.cc.

References Http::BAD_HDR, getStrOrList(), and has().

Referenced by getById(), hasNamed(), and parse().

◆ getByName() [1/2]

String HttpHeader::getByName ( const char *  name) const

Definition at line 909 of file HttpHeader.cc.

References hasNamed().

◆ getByName() [2/2]

◆ getByNameListMember()

SBuf HttpHeader::getByNameListMember ( const char *  name,
const char *  member,
const char  separator 
) const

searches for the first matching key=value pair within the name-identified field

Returns
the value of the found pair or an empty string

Definition at line 987 of file HttpHeader.cc.

References assert, getByName(), and getListMember().

Referenced by Format::Format::assemble().

◆ getCc()

◆ getContRange()

◆ getEntry()

◆ getETag()

◆ getInt()

◆ getInt64()

◆ getLastStr()

◆ getList() [1/2]

◆ getList() [2/2]

bool HttpHeader::getList ( Http::HdrType  id,
String s 
) const

◆ getListMember()

SBuf HttpHeader::getListMember ( Http::HdrType  id,
const char *  member,
const char  separator 
) const

searches for the first matching key=value pair within the field

Returns
the value of the found pair or an empty string

Definition at line 998 of file HttpHeader.cc.

References Http::any_registered_header(), assert, getListMember(), and getStrOrList().

Referenced by ESIVariableCookie::eval().

◆ getRange()

◆ getSc()

◆ getStr()

◆ getStrOrList()

◆ getTime()

◆ getTimeOrTag()

◆ has()

◆ hasByNameListMember()

int HttpHeader::hasByNameListMember ( const char *  name,
const char *  member,
const char  separator 
) const

Definition at line 1733 of file HttpHeader.cc.

References assert, getByName(), NULL, and strListGetItem().

Referenced by Adaptation::Icap::Options::configure().

◆ hasListMember()

◆ hasNamed() [1/2]

◆ hasNamed() [2/2]

bool HttpHeader::hasNamed ( const SBuf s,
String value = 0 
) const

returns true iff a [possibly empty] named field is there when returning true, also sets the value parameter (if it is not nil)

Definition at line 935 of file HttpHeader.cc.

References SBuf::length(), and SBuf::rawContent().

Referenced by getByName(), ACLHTTPHeaderData::match(), and needUpdate().

◆ insertEntry()

◆ Isolate()

bool HttpHeader::Isolate ( const char **  parse_start,
size_t  l,
const char **  blk_start,
const char **  blk_end 
)
staticprotected

either finds the end of headers or returns false If the end was found: *parse_start points to the first character after the header delimiter *blk_start points to the first header character (i.e. old parse_start value) *blk_end points to the first header delimiter character (CR or LF in CR?LF). If block starts where it ends, then there are no fields in the header.

Definition at line 333 of file HttpHeader.cc.

References assert, and headersEnd().

Referenced by parse().

◆ needUpdate()

bool HttpHeader::needUpdate ( const HttpHeader fresh) const
Returns
whether calling update(fresh) would change our set of fields

Definition at line 252 of file HttpHeader.cc.

References entries, getByName(), hasNamed(), skipUpdateHeader(), and Http::WARNING.

Referenced by HttpReply::recreateOnNotModified().

◆ operator=()

HttpHeader & HttpHeader::operator= ( const HttpHeader other)

Definition at line 175 of file HttpHeader.cc.

References assert, clean(), conflictingContentLength_, len, owner, teUnsupported_, and update().

◆ packInto()

◆ parse() [1/2]

int HttpHeader::parse ( const char *  buf,
size_t  buf_len,
bool  atEnd,
size_t hdr_sz,
Http::ContentLengthInterpreter interpreter 
)

Parses headers stored in a buffer.

Returns
1 and sets hdr_sz on success
0 when needs more data
-1 on error

Definition at line 355 of file HttpHeader.cc.

References buf, Isolate(), and parse().

◆ parse() [2/2]

◆ putAuth()

void HttpHeader::putAuth ( const char *  auth_scheme,
const char *  realm 
)

◆ putCc()

◆ putContRange()

◆ putExt()

void HttpHeader::putExt ( const char *  name,
const char *  value 
)

◆ putInt()

◆ putInt64()

◆ putRange()

void HttpHeader::putRange ( const HttpHdrRange range)

◆ putSc()

void HttpHeader::putSc ( HttpHdrSc sc)

◆ putStr()

◆ putTime()

◆ putWarning()

void HttpHeader::putWarning ( const int  code,
const char *const  text 
)

Definition at line 1148 of file HttpHeader.cc.

References buf, code, putStr(), text, visible_appname_string, and Http::WARNING.

Referenced by clientReplyContext::buildReplyHeader().

◆ refreshMask()

◆ removeConnectionHeaderEntries()

void HttpHeader::removeConnectionHeaderEntries ( )
protected

◆ removeHopByHopEntries()

◆ skipUpdateHeader()

bool HttpHeader::skipUpdateHeader ( const Http::HdrType  id) const
protected

Definition at line 286 of file HttpHeader.cc.

References Http::VARY, and Http::WARNING.

Referenced by needUpdate(), and update().

◆ unsupportedTe()

bool HttpHeader::unsupportedTe ( ) const
inline

Definition at line 168 of file HttpHeader.h.

References teUnsupported_.

◆ update()

void HttpHeader::update ( const HttpHeader fresh)

replaces fields with matching names and adds fresh fields with new names also updates Http::HdrType::WARNINGs, assuming fresh is a 304 reply TODO: Refactor most callers to avoid special handling of WARNINGs.

Definition at line 297 of file HttpHeader.cc.

References addEntry(), assert, HttpHeaderEntry::clone(), debugs, delById(), delByName(), getEntry(), Http::HeaderLookupTable, HttpHeaderInitPos, HttpHeaderEntry::id, HttpHeaderEntry::name, Http::OTHER, skipUpdateHeader(), and updateWarnings().

Referenced by HttpHeader(), operator=(), ESIInclude::prepareRequestHeaders(), and HttpReply::recreateOnNotModified().

◆ updateWarnings()

void HttpHeader::updateWarnings ( )
protected

Definition at line 273 of file HttpHeader.cc.

References delAt(), getEntry(), HttpHeaderInitPos, and Http::WARNING.

Referenced by update().

Member Data Documentation

◆ conflictingContentLength_

bool HttpHeader::conflictingContentLength_
private

found different Content-Length fields

Definition at line 191 of file HttpHeader.h.

Referenced by clean(), conflictingContentLength(), operator=(), and parse().

◆ entries

◆ len

int HttpHeader::len

length when packed, not counting terminating null-byte

Definition at line 174 of file HttpHeader.h.

Referenced by addEntry(), clean(), delAt(), insertEntry(), operator=(), peerDigestRequest(), and HttpRequest::prefixLen().

◆ mask

HttpHeaderMask HttpHeader::mask

◆ owner

http_hdr_owner_type HttpHeader::owner

request or reply

Definition at line 173 of file HttpHeader.h.

Referenced by clean(), getCc(), getSc(), HttpStateData::httpBuildRequestHeader(), HttpHeader(), operator=(), and parse().

◆ teUnsupported_

bool HttpHeader::teUnsupported_ = false
private

unsupported encoding, unnecessary syntax characters, and/or invalid field-value found in Transfer-Encoding header

Definition at line 194 of file HttpHeader.h.

Referenced by clean(), operator=(), parse(), and unsupportedTe().


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

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors