]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/http.h
Cleanup: zap CVS Id tags
[thirdparty/squid.git] / src / http.h
index 177c58b00fa0610e2a8c685ed44942febd297bc7..ab6e3d76d03bdb319b51359424532cb143942e6c 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: http.h,v 1.9 2003/08/10 11:00:43 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
+class HttpStateData : public ServerStateData
 {
 
 public:
-    static CWCB SendComplete;
-    void processReplyHeader(const char *, int);
-    void processReplyData(const char *, size_t);
-    IOCB readReply;
-    void maybeReadData();
+    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();
 
-    StoreEntry *entry;
-    HttpRequest *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? */
+    int lastChunk;             /* reached last chunk of a chunk-encoded reply */
     HttpRequest *orig_request;
     int fd;
     http_state_flags flags;
-    FwdState *fwd;
-    off_t currentOffset;
-    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,
@@ -75,6 +89,40 @@ private:
     };
     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 */