]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/client_side_request.h
SourceFormat Enforcement
[thirdparty/squid.git] / src / client_side_request.h
index eaa5f9211e4b045ed4c2d10bb1d9cf5de3407465..6364521e9699a90a6bfd397b3a546e37e393b7b6 100644 (file)
@@ -1,41 +1,18 @@
 /*
- * SQUID Web Proxy Cache          http://www.squid-cache.org/
- * ----------------------------------------------------------
- *
- *  Squid is the result of efforts by numerous individuals from
- *  the Internet community; see the CONTRIBUTORS file for full
- *  details.   Many organizations have provided support for Squid's
- *  development; see the SPONSORS file for full details.  Squid is
- *  Copyrighted (C) 2001 by the Regents of the University of
- *  California; see the COPYRIGHT file for full details.  Squid
- *  incorporates software developed and/or copyrighted by other
- *  sources; see the CREDITS file for full details.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
  *
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
  */
 
 #ifndef SQUID_CLIENTSIDEREQUEST_H
 #define SQUID_CLIENTSIDEREQUEST_H
 
-#include "HttpHeader.h"
-#include "clientStream.h"
-#include "client_side.h"
 #include "AccessLogEntry.h"
-#include "dlink.h"
-#include "base/AsyncJob.h"
+#include "acl/forward.h"
+#include "client_side.h"
+#include "clientStream.h"
 #include "HttpHeaderRange.h"
 #include "LogTags.h"
 
@@ -45,8 +22,6 @@
 class HttpMsg;
 #endif
 
-class acl_access;
-class ACLFilledChecklist;
 class ClientRequestContext;
 class ConnStateData;
 class MemObject;
@@ -56,17 +31,13 @@ int clientBeginRequest(const HttpRequestMethod&, char const *, CSCB *, CSD *, Cl
 
 class ClientHttpRequest
 #if USE_ADAPTATION
-        : public Adaptation::Initiator, // to start adaptation transactions
-        public BodyConsumer     // to receive reply bodies in request satisf. mode
+    : public Adaptation::Initiator, // to start adaptation transactions
+      public BodyConsumer     // to receive reply bodies in request satisf. mode
 #endif
 {
+    CBDATA_CLASS(ClientHttpRequest);
 
 public:
-    void *operator new (size_t);
-    void operator delete (void *);
-#if USE_ADAPTATION
-    void *toCbdata() { return this; }
-#endif
     ClientHttpRequest(ConnStateData *csd);
     ~ClientHttpRequest();
     /* Not implemented - present to prevent synthetic operations */
@@ -96,7 +67,7 @@ public:
      */
     Comm::ConnectionPointer clientConnection;
 
-    HttpRequest *request;              /* Parsed URL ... */
+    HttpRequest *request;       /* Parsed URL ... */
     char *uri;
     char *log_uri;
     String store_id; /* StoreID for transactions where the request member is nil */
@@ -107,14 +78,13 @@ public:
         size_t headers_sz;
     } out;
 
-    HttpHdrRangeIter range_iter;       /* data for iterating thru range specs */
-    size_t req_sz;             /* raw request size on input, not current request size */
+    HttpHdrRangeIter range_iter;    /* data for iterating thru range specs */
+    size_t req_sz;      /* raw request size on input, not current request size */
 
     /// the processing tags associated with this request transaction.
     // NP: still an enum so each stage altering it must take care when replacing it.
     LogTags logType;
 
-    struct timeval start_time;
     AccessLogEntry::Pointer al; ///< access.log entry
 
     struct {
@@ -138,6 +108,9 @@ public:
     ClientRequestContext *calloutContext;
     void doCallouts();
 
+    /// Build an error reply. For use with the callouts.
+    void calloutsError(const err_type error, const int errDetail);
+
 #if USE_ADAPTATION
     // AsyncJob virtual methods
     virtual bool doneAll() const {
@@ -152,7 +125,7 @@ private:
     StoreEntry *loggingEntry_;
     ConnStateData * conn_;
 
-#if USE_SSL
+#if USE_OPENSSL
     /// whether (and how) the request needs to be bumped
     Ssl::BumpMode sslBumpNeed_;
 
@@ -160,11 +133,11 @@ public:
     /// returns raw sslBump mode value
     Ssl::BumpMode sslBumpNeed() const { return sslBumpNeed_; }
     /// returns true if and only if the request needs to be bumped
-    bool sslBumpNeeded() const { return sslBumpNeed_ == Ssl::bumpServerFirst || sslBumpNeed_ == Ssl::bumpClientFirst; }
+    bool sslBumpNeeded() const { return sslBumpNeed_ == Ssl::bumpServerFirst || sslBumpNeed_ == Ssl::bumpClientFirst || sslBumpNeed_ == Ssl::bumpBump || sslBumpNeed_ == Ssl::bumpPeek || sslBumpNeed_ == Ssl::bumpStare; }
     /// set the sslBumpNeeded state
     void sslBumpNeed(Ssl::BumpMode mode);
     void sslBumpStart();
-    void sslBumpEstablish(comm_err_t errflag);
+    void sslBumpEstablish(Comm::Flag errflag);
 #endif
 
 #if USE_ADAPTATION
@@ -172,10 +145,11 @@ public:
 public:
     void startAdaptation(const Adaptation::ServiceGroupPointer &g);
 
-    // private but exposed for ClientRequestContext
+private:
+    /// Handles an adaptation client request failure.
+    /// Bypasses the error if possible, or build an error reply.
     void handleAdaptationFailure(int errDetail, bool bypassable = false);
 
-private:
     // Adaptation::Initiator API
     virtual void noteAdaptationAnswer(const Adaptation::Answer &answer);
     void handleAdaptedHeader(HttpMsg *msg);
@@ -198,9 +172,6 @@ private:
     bool request_satisfaction_mode;
     int64_t request_satisfaction_offset;
 #endif
-
-private:
-    CBDATA_CLASS(ClientHttpRequest);
 };
 
 /* client http based routines */
@@ -211,11 +182,12 @@ int clientHttpRequestStatus(int fd, ClientHttpRequest const *http);
 void clientAccessCheck(ClientHttpRequest *);
 
 /* ones that should be elsewhere */
-void tunnelStart(ClientHttpRequest *, int64_t *, int *);
+void tunnelStart(ClientHttpRequest *, int64_t *, int *, const AccessLogEntry::Pointer &al);
 
 #if _USE_INLINE_
-#include "Store.h"
 #include "client_side_request.cci"
+#include "Store.h"
 #endif
 
 #endif /* SQUID_CLIENTSIDEREQUEST_H */
+