Update of /cvsroot/mod-c/ehtml/src
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv11351/src
Modified Files:
Response.cpp
Log Message:
* Added support for apache output stream.
Index: Response.cpp
===================================================================
RCS file: /cvsroot/mod-c/ehtml/src/Response.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** Response.cpp 13 Sep 2006 13:57:07 -0000 1.4
--- Response.cpp 5 Oct 2006 14:53:59 -0000 1.5
***************
*** 25,30 ****
Response::Response( EHTMLApplication * App )
! : RequestContext( App->GetRequestContext() ), Application( App )
{
}
--- 25,32 ----
Response::Response( EHTMLApplication * App )
! : RequestContext( App->GetRequestContext() ), Application( App ),
! _stream(&_buf), _buf(App->GetRequestContext()->r)
{
+ _stream.rdbuf(&_buf);
}
***************
*** 36,37 ****
--- 38,96 ----
}
+ ApacheResponseStreamBuf::ApacheResponseStreamBuf(request_rec* r): _r(r) {
+ setp(_buf, _buf + sizeof(_buf));
+ }
+
+ ApacheResponseStreamBuf::~ApacheResponseStreamBuf() {
+ sync();
+ }
+
+ streamsize ApacheResponseStreamBuf::sputc(char c) {
+ ProfileMe();
+ return ap_rwrite(&c, 1, _r);
+ }
+
+ streamsize ApacheResponseStreamBuf::sputn(char* s, streamsize n) {
+ return xsputn(const_cast<char*>(s), n);
+ }
+
+ streamsize ApacheResponseStreamBuf::sputn(const char* s, streamsize n) {
+ return xsputn(s, n);
+ }
+
+ streamsize ApacheResponseStreamBuf::xsputn(char* s, streamsize n) {
+ return xsputn(const_cast<char*>(s), n);
+ }
+
+ streamsize ApacheResponseStreamBuf::xsputn(const char* s, streamsize n) {
+ ProfileMe();
+ return ap_rwrite(s, n, _r);
+ }
+
+ int ApacheResponseStreamBuf::sync() {
+ ProfileMe();
+ streamsize pending (pptr() - pbase());
+ int dev = 0;
+
+ if (pending) {
+ streamsize nwrote = ap_rwrite(pbase(), pending, _r);
+ pbump(-nwrote);
+ if (nwrote != pending)
+ dev = -1;
+ }
+ return dev;
+ }
+
+ char ApacheResponseStreamBuf::overflow(char c) {
+ ProfileMe();
+ streamsize pending(pptr() - pbase());
+
+ if (pending && sync())
+ return traits_type::eof();
+
+ if (c != traits_type::eof())
+ ap_rwrite(&c, 1, _r);
+
+ return c;
+ }
+
|