=== modified file 'src/HttpBody.cc' --- src/HttpBody.cc 2009-01-21 03:47:47 +0000 +++ src/HttpBody.cc 2011-12-03 21:09:59 +0000 @@ -34,43 +34,40 @@ */ #include "squid.h" +#include "HttpBody.h" #include "MemBuf.h" -void -httpBodyInit(HttpBody * body) +HttpBody::HttpBody() : mb(new MemBuf) +{} + +HttpBody::~HttpBody() { - body->mb = new MemBuf; + clear(); + delete mb; } void -httpBodyClean(HttpBody * body) +HttpBody::clear() { - assert(body); - - if (!body->mb->isNull()) - body->mb->clean(); - - delete body->mb; - - body->mb = NULL; + if(!mb->isNull()) + mb->clean(); } /* set body by absorbing mb */ void -httpBodySet(HttpBody * body, MemBuf * mb) +HttpBody::setMb(MemBuf * mb_) { - assert(body); - assert(body->mb->isNull()); - delete body->mb; - body->mb = mb; /* absorb */ + clear(); + delete mb; + mb = mb_; /* absorb */ } void -httpBodyPackInto(const HttpBody * body, Packer * p) +HttpBody::packInto(Packer * p) const { - assert(body && p); + assert(p); - if (body->mb->contentSize()) - packerAppend(p, body->mb->content(), body->mb->contentSize()); + if (mb->contentSize()) + packerAppend(p, mb->content(), mb->contentSize()); } === added file 'src/HttpBody.h' --- src/HttpBody.h 1970-01-01 00:00:00 +0000 +++ src/HttpBody.h 2011-12-03 21:09:59 +0000 @@ -0,0 +1,77 @@ +/* + * 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. + * + * HttpBody.h + * + * Created on: Dec 1, 2011 + * Author: kinkie + * + */ + +#ifndef HTTPBODY_H_ +#define HTTPBODY_H_ + +#include "MemBuf.h" +class Packer; + +/** Representation of a short predetermined message + * + * This class is useful to represent short HTTP messages, whose + * contents are known in advance, e.g. error messages + */ +class HttpBody { +public: + HttpBody(); + ~HttpBody(); + /** absorb the MemBuf, discarding anything currently stored + * + * After this call the lifetime of the passed MemBuf is managed + * by the HttpBody. + */ + void setMb(MemBuf *); + /** output the HttpBody contents into the supplied packer + * + * \note: contents are not cleared by the output operation + */ + void packInto(Packer *) const; + /// clear the HttpBody contents + void clear(); + + /// check whether there is any contents in the HttpBody + bool hasContent() const { return (mb->contentSize()>0); } + /// return the size of the HttpBody's message contents + mb_size_t contentSize() const { return mb->contentSize(); } + /// return a pointer to the storage of the HttpBody + char *content() const { return mb->content(); } +private: + HttpBody& operator=(const HttpBody&); //not implemented + HttpBody(const HttpBody&); // not implemented + MemBuf *mb; +}; + + +#endif /* HTTPBODY_H_ */ === modified file 'src/HttpReply.cc' --- src/HttpReply.cc 2011-12-03 12:40:23 +0000 +++ src/HttpReply.cc 2011-12-03 21:09:59 +0000 @@ -36,6 +36,7 @@ #include "squid.h" #include "SquidTime.h" #include "Store.h" +#include "HttpBody.h" #include "HttpReply.h" #include "HttpHdrContRange.h" #include "HttpHdrCc.h" @@ -94,7 +95,6 @@ void HttpReply::init() { - httpBodyInit(&body); hdrCacheInit(); httpStatusLineInit(&sline); pstate = psReadyToParseStartLine; @@ -121,7 +121,7 @@ // points to a pipe that is owned and initiated by another object. body_pipe = NULL; - httpBodyClean(&body); + body.clear(); hdrCacheClean(); header.clean(); httpStatusLineClean(&sline); @@ -140,7 +140,7 @@ HttpReply::packInto(Packer * p) { packHeadersInto(p); - httpBodyPackInto(&body, p); + body.packInto(p); } /* create memBuf, create mem-based packer, pack, destroy packer, return MemBuf */ === modified file 'src/HttpReply.h' --- src/HttpReply.h 2010-09-11 23:58:15 +0000 +++ src/HttpReply.h 2011-12-03 21:09:59 +0000 @@ -32,6 +32,7 @@ #ifndef SQUID_HTTPREPLY_H #define SQUID_HTTPREPLY_H +#include "HttpBody.h" #include "HttpMsg.h" #include "HttpStatusLine.h" === modified file 'src/Makefile.am' --- src/Makefile.am 2011-11-26 12:27:23 +0000 +++ src/Makefile.am 2011-12-03 21:09:59 +0000 @@ -358,6 +358,7 @@ HttpHeaderMask.h \ HttpHeaderRange.h \ HttpHeaderTools.cc \ + HttpBody.h \ HttpBody.cc \ HttpControlMsg.h \ HttpMsg.cc \ @@ -1042,6 +1043,7 @@ cbdata.cc \ cbdata.h \ ETag.cc \ + HttpBody.h \ HttpBody.cc \ HttpHdrCc.h \ HttpHdrCc.cc \ @@ -1307,6 +1309,7 @@ HelperChildConfig.cc \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHeader.cc \ HttpHeaderTools.cc \ @@ -1447,6 +1450,7 @@ event.cc \ fd.cc \ filemap.cc \ + HttpBody.h \ HttpBody.cc \ HttpHdrCc.h \ HttpHdrCc.cc \ @@ -1623,6 +1627,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHeader.cc \ HttpHeaderTools.cc \ @@ -1811,6 +1816,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHeader.cc \ HttpHeaderTools.cc \ @@ -1997,6 +2003,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHdrCc.h \ HttpHdrCc.cc \ @@ -2225,6 +2232,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHeader.cc \ HttpHeaderTools.cc \ @@ -2414,6 +2422,8 @@ tests/stub_helper.cc \ tests/stub_HelperChildConfig.cc \ tests/stub_http.cc \ + HttpBody.h \ + HttpBody.cc \ tests/stub_HttpReply.cc \ tests/stub_HttpRequest.cc \ tests/stub_libcomm.cc \ @@ -2551,6 +2561,7 @@ fd.cc \ disk.cc \ filemap.cc \ + HttpBody.h \ HttpBody.cc \ HttpReply.cc \ HttpStatusLine.cc \ @@ -2680,6 +2691,7 @@ event.cc \ fd.cc \ filemap.cc \ + HttpBody.h \ HttpBody.cc \ HttpHdrCc.cc \ HttpHdrContRange.cc \ @@ -2809,6 +2821,7 @@ fd.cc \ disk.cc \ filemap.cc \ + HttpBody.h \ HttpBody.cc \ HttpReply.cc \ HttpStatusLine.cc \ @@ -2940,6 +2953,7 @@ fd.cc \ disk.cc \ filemap.cc \ + HttpBody.h \ HttpBody.cc \ HttpReply.cc \ HttpStatusLine.cc \ @@ -3098,6 +3112,7 @@ hier_code.h \ $(HTCPSOURCE) \ http.cc \ + HttpBody.h \ HttpBody.cc \ HttpHdrCc.h \ HttpHdrCc.cc \ === modified file 'src/errorpage.cc' --- src/errorpage.cc 2011-11-27 21:34:50 +0000 +++ src/errorpage.cc 2011-12-03 21:09:59 +0000 @@ -1213,7 +1213,7 @@ rep->header.putStr(HDR_CONTENT_LANGUAGE, "en"); } - httpBodySet(&rep->body, content); + rep->body.setMb(content); /* do not memBufClean() or delete the content, it was absorbed by httpBody */ } === modified file 'src/esi/Esi.cc' --- src/esi/Esi.cc 2011-12-03 12:40:23 +0000 +++ src/esi/Esi.cc 2011-12-03 21:09:59 +0000 @@ -1465,15 +1465,15 @@ err->err_msg = errormessage; errormessage = NULL; rep = err->BuildHttpReply(); - assert (rep->body.mb->contentSize() >= 0); - size_t errorprogress = rep->body.mb->contentSize(); + assert (rep->body.hasContent()); + size_t errorprogress = rep->body.contentSize(); /* Tell esiSend where to start sending from */ outbound_offset = 0; /* copy the membuf from the reply to outbound */ - while (errorprogress < (size_t)rep->body.mb->contentSize()) { + while (errorprogress < (size_t)rep->body.contentSize()) { appendOutboundData(new ESISegment); - errorprogress += outboundtail->append(rep->body.mb->content() + errorprogress, rep->body.mb->contentSize() - errorprogress); + errorprogress += outboundtail->append(rep->body.content() + errorprogress, rep->body.contentSize() - errorprogress); } /* the esiCode now thinks that the error is the outbound, === modified file 'src/protos.h' --- src/protos.h 2011-11-03 10:02:02 +0000 +++ src/protos.h 2011-12-03 21:09:59 +0000 @@ -222,18 +222,6 @@ #include "HttpStatusCode.h" SQUIDCEXTERN const char *httpStatusString(http_status status); -/* Http Body */ -/* init/clean */ -SQUIDCEXTERN void httpBodyInit(HttpBody * body); -SQUIDCEXTERN void httpBodyClean(HttpBody * body); -/* get body ptr (always use this) */ -SQUIDCEXTERN const char *httpBodyPtr(const HttpBody * body); -/* set body, does not clone mb so you should not reuse it */ -SQUIDCEXTERN void httpBodySet(HttpBody * body, MemBuf * mb); - -/* pack */ -SQUIDCEXTERN void httpBodyPackInto(const HttpBody * body, Packer * p); - /* Http Cache Control Header Field */ SQUIDCEXTERN void httpHdrCcInitModule(void); SQUIDCEXTERN void httpHdrCcCleanModule(void); === modified file 'src/store.cc' --- src/store.cc 2011-11-22 11:12:32 +0000 +++ src/store.cc 2011-12-03 21:09:59 +0000 @@ -1872,7 +1872,7 @@ rep->packHeadersInto(&p); mem_obj->markEndOfReplyHeaders(); - httpBodyPackInto(&rep->body, &p); + rep->body.packInto(&p); packerClean(&p); } === modified file 'src/structs.h' --- src/structs.h 2011-11-08 10:54:37 +0000 +++ src/structs.h 2011-12-03 21:09:59 +0000 @@ -704,18 +704,6 @@ unsigned long *file_map; }; -/* - * Note: HttpBody is used only for messages with a small content that is - * known a priory (e.g., error messages). - */ - -class MemBuf; - -struct _HttpBody { - /* private */ - MemBuf *mb; -}; - #include "SquidString.h" /* http header extention field */ === modified file 'src/typedefs.h' --- src/typedefs.h 2011-12-01 06:36:36 +0000 +++ src/typedefs.h 2011-12-03 21:09:59 +0000 @@ -62,8 +62,6 @@ typedef struct _HttpHeaderStat HttpHeaderStat; -typedef struct _HttpBody HttpBody; - typedef struct _domain_ping domain_ping; typedef struct _domain_type domain_type; === modified file 'src/urn.cc' --- src/urn.cc 2011-11-27 12:37:35 +0000 +++ src/urn.cc 2011-12-03 21:09:59 +0000 @@ -444,7 +444,7 @@ rep->header.putStr(HDR_LOCATION, min_u->url); } - httpBodySet(&rep->body, mb); + rep->body.setMb(mb); /* don't clean or delete mb; rep->body owns it now */ e->replaceHttpReply(rep); e->complete();