summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--include/sitecing/acomponent.h1
-rw-r--r--lib/sitecing_interface_cgi.cc4
-rw-r--r--src/Makefile.am2
3 files changed, 5 insertions, 2 deletions
diff --git a/include/sitecing/acomponent.h b/include/sitecing/acomponent.h
index 160e854..461f8a6 100644
--- a/include/sitecing/acomponent.h
+++ b/include/sitecing/acomponent.h
@@ -1,27 +1,28 @@
1#ifndef __SITECING_ACOMPONENT_H 1#ifndef __SITECING_ACOMPONENT_H
2#define __SITECING_ACOMPONENT_H 2#define __SITECING_ACOMPONENT_H
3 3
4#include <cstdarg>
4#include "sitecing/sitecing_interface.h" 5#include "sitecing/sitecing_interface.h"
5 6
6/** 7/**
7 * @file 8 * @file
8 * @brief The acomponent class declaration. 9 * @brief The acomponent class declaration.
9 */ 10 */
10 11
11namespace sitecing { 12namespace sitecing {
12 13
13 /** 14 /**
14 * An abstract base class for sitecing components. 15 * An abstract base class for sitecing components.
15 */ 16 */
16 class acomponent { 17 class acomponent {
17 public: 18 public:
18 /** 19 /**
19 * Pointer to the interface object, used to communicate with the 20 * Pointer to the interface object, used to communicate with the
20 * site-C-ing core. 21 * site-C-ing core.
21 */ 22 */
22 sitecing_interface *__SCIF; 23 sitecing_interface *__SCIF;
23 24
24 acomponent(); 25 acomponent();
25 virtual ~acomponent(); 26 virtual ~acomponent();
26 27
27 /** 28 /**
diff --git a/lib/sitecing_interface_cgi.cc b/lib/sitecing_interface_cgi.cc
index 59ae25a..1acb23c 100644
--- a/lib/sitecing_interface_cgi.cc
+++ b/lib/sitecing_interface_cgi.cc
@@ -1,48 +1,50 @@
1#include <cassert> 1#include <cassert>
2#include "sitecing/sitecing_interface_cgi.h" 2#include "sitecing/sitecing_interface_cgi.h"
3 3
4namespace sitecing { 4namespace sitecing {
5 5
6 sitecing_interface_cgi::sitecing_interface_cgi(sitespace *s) 6 sitecing_interface_cgi::sitecing_interface_cgi(sitespace *s)
7 : outs(&prebuffer), sitecing_interface(&outs), ss(s), cgigw(NULL), headers_flushed(false) { 7 : outs(&prebuffer), sitecing_interface(&outs), ss(s), cgigw(NULL), headers_flushed(false) {
8 } 8 }
9 9
10 void sitecing_interface_cgi::prepare(kingate::cgi_gateway *cg) { 10 void sitecing_interface_cgi::prepare(kingate::cgi_gateway *cg) {
11 cgigw = cg; 11 cgigw = cg;
12 headers.clear(); 12 headers.clear();
13 headers["Content-Type"] = "text/html"; 13 headers["Content-Type"] = "text/html";
14 prebuffer.str(""); 14 prebuffer.str("");
15 headers_flushed = false; 15 headers_flushed = false;
16 set_buffering(true); 16 set_buffering(true);
17 } 17 }
18 18
19 void sitecing_interface_cgi::flush(bool keep_buffering) { 19 void sitecing_interface_cgi::flush(bool keep_buffering) {
20 assert(cgigw); 20 assert(cgigw);
21 flush_headers(); 21 flush_headers();
22 if(is_buffering()) { 22 if(is_buffering()) {
23 streampos count = prebuffer.pubseekoff(0,ios_base::cur,ios_base::out); 23 streampos count = prebuffer.pubseekoff(0,ios_base::cur,ios_base::out);
24 cgigw->out().write(prebuffer.str().c_str(),count); 24 if(count>0) {
25 cgigw->out().write(prebuffer.str().c_str(),count);
26 }
25 prebuffer.str(""); 27 prebuffer.str("");
26 } 28 }
27 cgigw->out().flush(); 29 cgigw->out().flush();
28 set_buffering(keep_buffering); 30 set_buffering(keep_buffering);
29 } 31 }
30 32
31 void sitecing_interface_cgi::set_buffering(bool do_buffer) { 33 void sitecing_interface_cgi::set_buffering(bool do_buffer) {
32 if(!do_buffer) 34 if(!do_buffer)
33 flush_headers(); 35 flush_headers();
34 outs.rdbuf(do_buffer?&prebuffer:cgigw->out().rdbuf()); 36 outs.rdbuf(do_buffer?&prebuffer:cgigw->out().rdbuf());
35 } 37 }
36 38
37 bool sitecing_interface_cgi::is_buffering() { 39 bool sitecing_interface_cgi::is_buffering() {
38 return outs.rdbuf()==&prebuffer; 40 return outs.rdbuf()==&prebuffer;
39 } 41 }
40 42
41 void sitecing_interface_cgi::flush_headers() { 43 void sitecing_interface_cgi::flush_headers() {
42 assert(cgigw); 44 assert(cgigw);
43 if(headers_flushed) 45 if(headers_flushed)
44 return; 46 return;
45 for(kingate::headers::const_iterator i=headers.begin();i!=headers.end();i++) 47 for(kingate::headers::const_iterator i=headers.begin();i!=headers.end();i++)
46 cgigw->out() << i->first << ": " << i->second << "\n"; 48 cgigw->out() << i->first << ": " << i->second << "\n";
47 cgigw->out() << "\n"; 49 cgigw->out() << "\n";
48 headers_flushed = true; 50 headers_flushed = true;
diff --git a/src/Makefile.am b/src/Makefile.am
index 2ec650d..e6fb31a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -13,25 +13,25 @@ LIBS += ${top_builddir}/lib/libsitecing.la ${DOTCONF_LIBS} \
13 ${PCREPP_LIBS} 13 ${PCREPP_LIBS}
14 14
15sitecing_fastcgi_SOURCES = sitecing-fastcgi.cc \ 15sitecing_fastcgi_SOURCES = sitecing-fastcgi.cc \
16 COPYING.cc 16 COPYING.cc
17sitecing_fastcgi_LDADD = ${KINGATE_FCGI_LIBS} 17sitecing_fastcgi_LDADD = ${KINGATE_FCGI_LIBS}
18sitecing_fastcgi_LDFLAGS = -rdynamic 18sitecing_fastcgi_LDFLAGS = -rdynamic
19sitecing_fastcgi_DEPENDENCIES = ${top_builddir}/lib/libsitecing.la 19sitecing_fastcgi_DEPENDENCIES = ${top_builddir}/lib/libsitecing.la
20 20
21sitecing_plaincgi_SOURCES = sitecing-plaincgi.cc \ 21sitecing_plaincgi_SOURCES = sitecing-plaincgi.cc \
22 COPYING.cc 22 COPYING.cc
23sitecing_plaincgi_LDFLAGS = -rdynamic 23sitecing_plaincgi_LDFLAGS = -rdynamic
24sitecing_plaincgi_LDADD = ${KINGATE_PLAINCGI_LIBS} 24sitecing_plaincgi_LDADD = ${KINGATE_PLAINCGI_LIBS}
25sitecing_plaincgi_DEPENDENCIES = ${top_builddir}/lib/libsitecing.la 25sitecing_plaincgi_DEPENDENCIES = ${top_builddir}/lib/libsitecing.la
26 26
27sitecing_build_SOURCES = sitecing-build.cc \ 27sitecing_build_SOURCES = sitecing-build.cc \
28 COPYING.cc 28 COPYING.cc
29sitecing_build_LDADD = ${KINGATE_LIBS} 29sitecing_build_LDADD = ${KINGATE_LIBS}
30sitecing_build_DEPENDENCIES = ${top_builddir}/lib/libsitecing.la 30sitecing_build_DEPENDENCIES = ${top_builddir}/lib/libsitecing.la
31 31
32COPYING.cc: ${top_srcdir}/COPYING 32COPYING.cc: ${top_srcdir}/COPYING
33 echo "const char * COPYING =" >$@ || (rm $@;exit 1) 33 echo "const char * COPYING =" >$@ || (rm $@;exit 1)
34 sed 's/"/\\"/g' $< | sed 's/^/\"/' | sed 's/$$/\\n\"/' >>$@ || (rm $@;exit 1) 34 sed 's/"/\\"/g' $< | sed 's/^/\"/' | sed 's/$$/\\n\"/' >>$@ || (rm $@;exit 1)
35 echo ";" >>$@ || (rm $@;exit 1) 35 echo ";" >>$@ || (rm $@;exit 1)
36 36
37EXTRA_DIST = ${sitecing_fastcgi_SOURCES} ${sitecing_PLAINCGI_SOURCES} 37EXTRA_DIST = ${sitecing_fastcgi_SOURCES} ${sitecing_plaincgi_SOURCES}