/*
- * $Id: http.h,v 1.32 2007/08/09 23:30:53 rousskov 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 "comm.h"
#include "forward.h"
#include "Server.h"
+#include "ChunkedCodingParser.h"
class HttpStateData : public ServerStateData
{
HttpStateData(FwdState *);
~HttpStateData();
- static IOCB SendComplete;
- static IOCB ReadReplyWrapper;
static void httpBuildRequestHeader(HttpRequest * request,
HttpRequest * orig_request,
StoreEntry * entry,
bool sendRequest();
void processReplyHeader();
void processReplyBody();
- void readReply(size_t len, comm_err_t flag, int xerrno);
+ void readReply(const CommIoCbParams &io);
virtual void maybeReadVirginBody(); // read response data from the network
int cacheableReply();
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;
virtual HttpRequest *originalRequest();
private:
+ AsyncCall::Pointer closeHandler;
enum ConnectionStatus {
INCOMPLETE_MSG,
COMPLETE_PERSISTENT_MSG,
virtual void handleRequestBodyProducerAborted();
void writeReplyBody();
+ bool decodeAndWriteReplyBody();
void doneSendingRequestBody();
void requestBodyHandler(MemBuf &);
- virtual void sentRequestBody(int fd, size_t size, comm_err_t errflag);
+ virtual void sentRequestBody(const CommIoCbParams &io);
+ void sendComplete(const CommIoCbParams &io);
+ void httpStateConnClosed(const CommCloseCbParams ¶ms);
+ void httpTimeout(const CommTimeoutCbParams ¶ms);
+
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);
};