ModXact.cc
Go to the documentation of this file.
47 const SBuf Adaptation::Icap::ChunkExtensionValueParser::UseOriginalBodyName("use-original-body");
55 HttpRequest *virginCause, AccessLogEntry::Pointer &alp, Adaptation::Icap::ServiceRep::Pointer &aService):
398 bool Adaptation::Icap::ModXact::virginBodyEndReached(const Adaptation::Icap::VirginBodyAct &act) const
407 size_t Adaptation::Icap::ModXact::virginContentSize(const Adaptation::Icap::VirginBodyAct &act) const
419 const char *Adaptation::Icap::ModXact::virginContentData(const Adaptation::Icap::VirginBodyAct &act) const
591 const size_t size = adapted.body_pipe->putMoreData(virginContentData(virginBodySending), sizeMax);
1097 debugs(93, 5, "have " << readBuf.length() << ' ' << description << " bytes to parse; state: " << state.parsing);
1103 debugs(93, (!parsed && error) ? 2 : 5, description << " parsing result: " << parsed << " detail: " << error);
1134 const bool promisesToSendTrailer = icapReply->header.getByIdIfPresent(Http::HdrType::TRAILER, &trailers);
1135 const bool supportsTrailers = icapReply->header.hasListMember(Http::HdrType::ALLOW, "trailers", ',');
1138 Must((promisesToSendTrailer == supportsTrailers) || (!promisesToSendTrailer && supportsTrailers));
1140 debugs(93, DBG_IMPORTANT, "ERROR: ICAP Trailer response header field must not be empty (salvaged)");
1412 size_t resultLen = base64_encode_update(&ctx, base64buf, request->extacl_user.size(), reinterpret_cast<const uint8_t*>(request->extacl_user.rawBuf()));
1413 resultLen += base64_encode_update(&ctx, base64buf+resultLen, 1, reinterpret_cast<const uint8_t*>(":"));
1414 resultLen += base64_encode_update(&ctx, base64buf+resultLen, request->extacl_passwd.size(), reinterpret_cast<const uint8_t*>(request->extacl_passwd.rawBuf()));
1425 buf.appendf(SQUIDSTRINGPH ": " SQUIDSTRINGPH "\r\n", SQUIDSTRINGPRINT(name), SQUIDSTRINGPRINT(value));
1571 size_t resultLen = base64_encode_update(&ctx, base64buf, strlen(value), reinterpret_cast<const uint8_t*>(value));
1581 Adaptation::Icap::ModXact::encapsulateHead(MemBuf &icapBuf, const char *section, MemBuf &httpBuf, const Http::Message *head)
2011 adapted.header->sources |= (service().cfg().connectionEncryption ? Http::Message::srcIcaps : Http::Message::srcIcap);
2016 Adaptation::Icap::ModXactLauncher::ModXactLauncher(Http::Message *virginHeader, HttpRequest *virginCause, AccessLogEntry::Pointer &alp, Adaptation::ServicePointer aService):
2058 bool Adaptation::Icap::TrailerParser::parse(const char *buf, int len, int atEnd, Http::StatusCode *error) {
int hasListMember(Http::HdrType id, const char *member, const char separator) const
Definition: HttpHeader.cc:1668
virtual void noteBodyProducerAborted(BodyPipe::Pointer)
Definition: ModXact.cc:1258
void makeAllowHeader(MemBuf &buf)
Definition: ModXact.cc:1522
Definition: StatusCode.h:30
Definition: BodyPipe.h:100
#define JobCallback(dbgSection, dbgLevel, Dialer, job, method)
Convenience macro to create a Dialer-based job callback.
Definition: AsyncJobCalls.h:69
void makeAdaptedBodyPipe(const char *what)
Definition: ModXact.cc:1852
VirginBodyAct virginBodySending
Definition: ModXact.h:298
void expectProductionEndAfter(uint64_t extraSize)
sets or checks body size
Definition: BodyPipe.cc:184
CBDATA_NAMESPACED_CLASS_INIT(Adaptation::Icap, ModXact)
Definition: StatusCode.h:86
Definition: SquidString.h:25
Definition: base64.h:68
bool allowedPostview206
Definition: ModXact.h:334
class AccessLogEntry::IcapLogEntry icap
bool needsMoreSpace() const
Definition: TeChunkedParser.cc:82
Definition: ServiceConfig.h:22
void encapsulateHead(MemBuf &icapBuf, const char *section, MemBuf &httpBuf, const Http::Message *head)
Definition: ModXact.cc:1581
Definition: icp_opcode.h:15
Definition: AsyncJob.h:31
Definition: ModXact.h:60
bool allowedPostview204
Definition: ModXact.h:333
void recordXactFinish(int hid)
record the end of a xact identified by its history ID
Definition: History.cc:60
std::vector< HttpHeaderEntry *, PoolingAllocator< HttpHeaderEntry * > > entries
Definition: HttpHeader.h:165
bool canBackupEverything() const
Definition: ModXact.cc:1687
::Parser::Tokenizer Tokenizer
Definition: TeChunkedParser.h:32
Parses and stores ICAP trailer header block.
Definition: ModXact.h:110
Definition: TeChunkedParser.h:51
Definition: Notes.h:167
Definition: ServiceRep.h:59
Definition: StatusCode.h:21
void error(char *format,...)
void decideWritingAfterPreview(const char *previewKind)
determine state.writing after we wrote the entire preview
Definition: ModXact.cc:295
char * client_username_header
Definition: Config.h:36
void recordMeta(const HttpHeader *lm)
store the last meta header fields received from the adaptation service
Definition: History.cc:139
bool parsingHeaders() const
Definition: ModXact.h:353
Adaptation::History::Pointer adaptLogHistory() const
Returns possibly nil history, creating it if adapt. logging is enabled.
Definition: HttpRequest.cc:418
Adaptation::History::Pointer adaptHistory(bool createIfNone=false) const
Returns possibly nil history, creating it if requested.
Definition: HttpRequest.cc:407
#define Must(condition)
Like assert() but throws an exception instead of aborting the process.
Definition: TextException.h:69
virtual void reset()=0
virtual void noteBodyProductionEnded(BodyPipe::Pointer)
Definition: ModXact.cc:1245
Definition: RegisteredHeaders.h:80
HttpHeaderEntry * getEntry(HttpHeaderPos *pos) const
Definition: HttpHeader.cc:601
void callWhenAvailable(AsyncCall::Pointer &cb, bool priority=false)
Definition: ServiceRep.cc:413
Definition: RegisteredHeaders.h:78
Definition: RequestMethod.h:26
virtual const char * status() const
internal cleanup; do not call directly
Definition: Xaction.cc:663
Definition: MethodType.h:22
Definition: Client.h:16
static const SBuf UseOriginalBodyName
Definition: ModXact.h:135
virtual void parse(Tokenizer &tok, const SBuf &extName) override
Definition: ModXact.cc:2070
void applyTrailerRules()
prohibits Content-Length in GET/HEAD requests
Definition: ContentLengthInterpreter.h:42
virtual void fillDoneStatus(MemBuf &buf) const
Definition: ModXact.cc:1778
uint64_t useOriginalBody() const
Definition: ModXact.h:132
size_t virginContentSize(const VirginBodyAct &act) const
Definition: ModXact.cc:407
bool httpHeaderHasConnDir(const HttpHeader *hdr, const SBuf &directive)
Definition: HttpHeaderTools.cc:90
const HttpRequest & virginRequest() const
locates the request, either as a cause or as a virgin message itself
Definition: ModXact.cc:389
virtual void fillDoneStatus(MemBuf &buf) const
Definition: Xaction.cc:692
virtual void callException(const std::exception &e)
called when the job throws during an async call
Definition: Xaction.cc:401
enum Adaptation::Icap::Preview::State theState
void writeSomeBody(const char *label, size_t size)
Definition: ModXact.cc:322
Definition: StatusCode.h:22
void callWhenReady(AsyncCall::Pointer &cb)
Definition: ServiceRep.cc:431
VirginBodyAct virginBodyWriting
Definition: ModXact.h:297
char * toStr(char *buf, const unsigned int blen, int force=AF_UNSPEC) const
Definition: Address.cc:802
bool expectIcapTrailers() const
whether ICAP response header indicates ICAP trailers presence
Definition: ModXact.cc:1131
bool getXxRecord(String &name, String &value) const
returns true and fills the record fields iff there is a db record
Definition: History.cc:110
Definition: StatusCode.h:32
Definition: err_detail_type.h:33
virtual bool inheritProperties(const Http::Message *)=0
Definition: BodyPipe.h:90
int attempts
the number of times we tried to get to the service, including this time
Definition: Xaction.h:61
void handle206PartialContent()
Definition: ModXact.cc:932
const char * virginContentData(const VirginBodyAct &act) const
Definition: ModXact.cc:419
ModXactLauncher(Http::Message *virginHeader, HttpRequest *virginCause, AccessLogEntry::Pointer &alp, Adaptation::ServicePointer s)
Definition: ModXact.cc:2016
void parseExtensionValuesWith(ChunkExtensionValueParser *parser)
Definition: TeChunkedParser.h:62
bool virginBodyEndReached(const VirginBodyAct &act) const
Definition: ModXact.cc:398
Definition: HttpReply.h:24
virtual void noteMoreBodyDataAvailable(BodyPipe::Pointer)
Definition: ModXact.cc:1236
SBuf getByNameListMember(const char *name, const char *member, const char separator) const
Definition: HttpHeader.cc:960
ModXact(Http::Message *virginHeader, HttpRequest *virginCause, AccessLogEntry::Pointer &alp, ServiceRep::Pointer &s)
Definition: ModXact.cc:54
enum Adaptation::Icap::ModXact::State::Writing writing
virtual Xaction * createXaction()
Definition: ModXact.cc:2026
void disableBypass(const char *reason, bool includeGroupBypass)
Definition: ModXact.cc:720
bool parsePart(Part *part, const char *description)
Definition: ModXact.cc:1094
bool setConsumerIfNotLate(const Consumer::Pointer &aConsumer)
Definition: BodyPipe.cc:228
bool parse(const char *buf, int len, int atEnd, Http::StatusCode *error)
Definition: ModXact.cc:2058
virtual void handleCommConnected()
Definition: ModXact.cc:190
class AccessLogEntry::IcpDetails icp
class AccessLogEntry::HttpDetails http
Definition: parse.c:160
void stopParsing(const bool checkUnparsedData=true)
Definition: ModXact.cc:1216
Definition: AccessCheck.h:24
void updateHistory(bool start)
starts or stops transaction accounting in ICAP history
Definition: ModXact.cc:2041
virtual void detailError(int errDetail)
record error detail in the virgin request if possible
Definition: ModXact.cc:1985
virtual void clearError()
clear stored error details, if any; used for retries/repeats
Definition: ModXact.cc:1997
enum Adaptation::Icap::ModXact::State::Parsing parsing
int recordXactStart(const String &serviceId, const timeval &when, bool retrying)
record the start of a xact, return xact history ID
Definition: History.cc:50
Definition: Elements.h:17
class AccessLogEntry::CacheDetails cache
Definition: ModXact.h:106
class Adaptation::Icap::ModXact::State state
void disableRepeats(const char *reason)
Definition: Xaction.cc:136
void packInto(Packable *, bool full_uri) const
produce a message copy, except for a few connection-specific settings
Definition: Message.cc:278
void prepareLogWithRequestDetails(HttpRequest *, AccessLogEntry::Pointer &)
Definition: client_side.cc:324
size_t base64_encode_final(struct base64_encode_ctx *ctx, char *dst)
Definition: base64.c:308
virtual void noteBodyConsumerAborted(BodyPipe::Pointer)
Definition: ModXact.cc:1282
void noteServiceAvailable()
Definition: ModXact.cc:168
Definition: ModXact.h:141
Definition: RegisteredHeaders.h:30
Definition: err_detail_type.h:31
void setPayloadBuffer(MemBuf *parsedContent)
set the buffer to be used to store decoded chunk data
Definition: TeChunkedParser.h:58
void stopProducingFor(RefCount< BodyPipe > &, bool atEof)
Definition: BodyPipe.cc:107
void finishNullOrEmptyBodyPreview(MemBuf &buf)
Definition: ModXact.cc:1724
void detailError(err_type aType, int aDetail)
sets error detail if no earlier detail was available
Definition: HttpRequest.cc:468
Definition: StatusCode.h:26
size_t base64_encode_update(struct base64_encode_ctx *ctx, char *dst, size_t length, const uint8_t *src)
Definition: base64.c:265
void handleCommWroteHeaders()
Definition: ModXact.cc:219
enum Adaptation::Icap::ModXact::State::Sending sending
void packHead(MemBuf &httpBuf, const Http::Message *head)
Definition: ModXact.cc:1621
void makeUsernameHeader(const HttpRequest *request, MemBuf &buf)
Definition: ModXact.cc:1555
void appendf(const char *fmt,...) PRINTF_FORMAT_ARG2
Append operation with printf-style arguments.
Definition: Packable.h:61
Definition: Elements.h:17
virtual void fillPendingStatus(MemBuf &buf) const
Definition: Xaction.cc:677
size_t HttpReply *STUB StoreEntry const KeyScope scope const HttpRequestMethod & method
Definition: stub_store.cc:108
Definition: Address.h:40
bool wantsPreview(const SBuf &urlPath, size_t &wantedSize) const
Definition: ServiceRep.cc:331
void setOutcome(const XactOutcome &xo)
Definition: Xaction.cc:585
Definition: MemBuf.h:23
void stopConsumingFrom(RefCount< BodyPipe > &)
Definition: BodyPipe.cc:118
#define TexcHere(msg)
legacy convenience macro; it is not difficult to type Here() now
Definition: TextException.h:55
bool parseCharBuf(const char *buf, ssize_t end)
Definition: Message.cc:148
Auth::UserRequest::Pointer auth_user_request
Definition: HttpRequest.h:127
Definition: RegisteredHeaders.h:96
void addLastRequestChunk(MemBuf &buf)
Definition: ModXact.cc:372
Http::StatusCode status() const
retrieve the status code for this status line
Definition: StatusLine.h:45
bool sawUseOriginalBody() const
Definition: ModXact.h:131
Definition: HttpRequest.h:48
Definition: ModXact.h:106
virtual void fillPendingStatus(MemBuf &buf) const
Definition: ModXact.cc:1738
bool getByIdIfPresent(Http::HdrType id, String *result) const
Definition: HttpHeader.cc:914
#define MAX_IPSTRLEN
Length of buffer that needs to be allocated to old a null-terminated IP-string.
Definition: forward.h:23
Definition: err_type.h:62
bool doneConsumingVirgin() const
Definition: ModXact.h:343
bool parse(const char *buf, const size_t sz, bool eol, Http::StatusCode *error)
Definition: Message.cc:80
void makeRequestHeaders(MemBuf &buf)
Definition: ModXact.cc:1382
Definition: BodyPipe.h:61
bool expectHttpBody() const
whether ICAP response header indicates HTTP body presence
Definition: ModXact.cc:1126
void maybeAllocateHttpMsg()
Definition: ModXact.cc:733
void updateXxRecord(const char *name, const String &value)
sets or resets a cross-transactional database record
Definition: History.cc:104
void prepPartialBodyEchoing(uint64_t pos)
Definition: ModXact.cc:1025
virtual bool expectingBody(const HttpRequestMethod &, int64_t &) const =0
virtual void callException(const std::exception &e)
called when the job throws during an async call
Definition: ModXact.cc:668
virtual bool fillVirginHttpHeader(MemBuf &) const
Definition: ModXact.cc:1975
ChunkExtensionValueParser extensionParser
Definition: ModXact.h:322
Definition: StatusCode.h:27
void openChunk(MemBuf &buf, size_t chunkSize, bool ieof)
Definition: ModXact.cc:379
virtual void noteMoreBodySpaceAvailable(BodyPipe::Pointer)
Definition: ModXact.cc:1271
virtual void handleCommWrote(size_t size)
Definition: ModXact.cc:209
uint64_t payloadData
total size of payload block(s) excluding transfer encoding overheads
Definition: MessageSizes.h:24
Definition: HttpHeader.h:50
Definition: Xaction.h:37
MessageSizes clientRequestSz
counters for the original request received from client
Definition: AccessLogEntry.h:97
bool expectHttpHeader() const
whether ICAP response header indicates HTTP header presence
Definition: ModXact.cc:1121
Definition: Launcher.h:47
virtual void handleCommRead(size_t size)
Definition: ModXact.cc:570
Definition: RegisteredHeaders.h:113
void updateNextServices(const String &services)
sets or resets next services for the Adaptation::Iterator to notice
Definition: History.cc:120
Adaptation::Icap::History::Pointer icapHistory() const
Returns possibly nil history, creating it if icap logging is enabled.
Definition: HttpRequest.cc:392
Definition: Elements.h:19
bool gotEncapsulated(const char *section) const
Definition: ModXact.cc:1803
Definition: err_detail_type.h:30
Definition: Elements.h:19