]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/http.h
Cleanup: zap CVS Id tags
[thirdparty/squid.git] / src / http.h
index 8b11dc9354c13691a834e9a4a0d0db4190d57fc9..ab6e3d76d03bdb319b51359424532cb143942e6c 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: http.h,v 1.2 2002/10/14 08:16:58 robertc Exp $
+ * $Id$
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
  *  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.
 
 #include "StoreIOBuffer.h"
 #include "comm.h"
+#include "forward.h"
+#include "Server.h"
+#include "ChunkedCodingParser.h"
+
+class HttpStateData : public ServerStateData
+{
+
+public:
+    HttpStateData(FwdState *);
+    ~HttpStateData();
+
+    static void httpBuildRequestHeader(HttpRequest * request,
+                                       HttpRequest * orig_request,
+                                       StoreEntry * entry,
+                                       HttpHeader * hdr_out,
+                                       http_state_flags flags);
+
+    virtual int dataDescriptor() const;
+    /* should be private */
+    bool sendRequest();
+    void processReplyHeader();
+    void processReplyBody();
+    void readReply(const CommIoCbParams &io);
+    virtual void maybeReadVirginBody(); // read response data from the network
+    int cacheableReply();
 
-class HttpStateData {
-    public:
-    void processReplyHeader(const char *, int);
-    void processReplyData(const char *, int);
-    IOCB readReply;
-    void maybeReadData();
-
-    StoreEntry *entry;
-    request_t *request;
-    char *reply_hdr;
-    size_t reply_hdr_size;
-    int reply_hdr_state;
     peer *_peer;               /* peer request made to */
     int eof;                   /* reached end-of-object? */
-    request_t *orig_request;
+    int lastChunk;             /* reached last chunk of a chunk-encoded reply */
+    HttpRequest *orig_request;
     int fd;
     http_state_flags flags;
-    FwdState *fwd;
-    int do_next_read;
     size_t read_sz;
-    char buf[SQUID_TCP_SO_RCVBUF];
+    int header_bytes_read;     // to find end of response,
+    int reply_bytes_read;      // without relying on StoreEntry
+    MemBuf *readBuf;
+    bool ignoreCacheControl;
+    bool surrogateNoStore;
+
+    void processSurrogateControl(HttpReply *);
+
+protected:
+    virtual HttpRequest *originalRequest();
+
+private:
+    AsyncCall::Pointer closeHandler;
+    enum ConnectionStatus {
+        INCOMPLETE_MSG,
+        COMPLETE_PERSISTENT_MSG,
+        COMPLETE_NONPERSISTENT_MSG
+    };
+    ConnectionStatus statusIfComplete() const;
+    ConnectionStatus persistentConnStatus() const;
+    void keepaliveAccounting(HttpReply *);
+    void checkDateSkew(HttpReply *);
+
+    bool continueAfterParsingHeader();
+
+    virtual void haveParsedReplyHeaders();
+    virtual void closeServer(); // end communication with the server
+    virtual bool doneWithServer() const; // did we end communication?
+    virtual void abortTransaction(const char *reason); // abnormal termination
+
+    // consuming request body
+    virtual void handleMoreRequestBodyAvailable();
+    virtual void handleRequestBodyProducerAborted();
+
+    void writeReplyBody();
+    bool decodeAndWriteReplyBody();
+    void doneSendingRequestBody();
+    void requestBodyHandler(MemBuf &);
+    virtual void sentRequestBody(const CommIoCbParams &io);
+    void sendComplete(const CommIoCbParams &io);
+    void httpStateConnClosed(const CommCloseCbParams &params);
+    void httpTimeout(const CommTimeoutCbParams &params);
+
+    mb_size_t buildRequestPrefix(HttpRequest * request,
+                                 HttpRequest * orig_request,
+                                 StoreEntry * entry,
+                                 MemBuf * mb,
+                                 http_state_flags flags);
+    static bool decideIfWeDoRanges (HttpRequest * orig_request);
+    bool peerSupportsConnectionPinning() const;
+
+    ChunkedCodingParser *httpChunkDecoder;
+private:
+    CBDATA_CLASS2(HttpStateData);
 };
 
 #endif /* SQUID_HTTP_H */