summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNicolas "Pixel" Noble <pixel@nobis-crew.org>2013-12-24 07:45:39 +0100
committerNicolas "Pixel" Noble <pixel@nobis-crew.org>2013-12-24 07:45:39 +0100
commitc60645d3effc7ec04b4e7a413e0a2b552e3fa90e (patch)
tree150216073ce542817721d6ea20aa6e1d32b848aa /src
parentd2938865f2421e160adc18e86dd7813278035c70 (diff)
parent61202b565e7c440cae443d71f78b6c506ab60f38 (diff)
Merge branch 'master' of /pub/repo.git/Balau
Diffstat (limited to 'src')
-rw-r--r--src/BString.cc18
-rw-r--r--src/HelperTasks.cc4
-rw-r--r--src/HttpServer.cc7
3 files changed, 25 insertions, 4 deletions
diff --git a/src/BString.cc b/src/BString.cc
index 57febcd..d14280c 100644
--- a/src/BString.cc
+++ b/src/BString.cc
@@ -22,6 +22,24 @@ Balau::String & Balau::String::set(const char * fmt, va_list ap) {
return *this;
}
+Balau::String & Balau::String::append(const char * fmt, va_list ap) {
+ unsigned int l;
+#ifdef _WIN32
+ // Microsoft is stupid.
+ char tt[65536];
+ l = _vsnprintf(tt, sizeof(tt)-1, fmt, ap);
+ tt[65535] = 0;
+ std::string::append(tt, l);
+#else
+ char * t;
+ l = vasprintf(&t, fmt, ap);
+ std::string::append(t, l);
+ free(t);
+#endif
+
+ return *this;
+}
+
int Balau::String::strchrcnt(char c) const {
unsigned int l = length();
int r = 0;
diff --git a/src/HelperTasks.cc b/src/HelperTasks.cc
index ab1c2a9..074aa8d 100644
--- a/src/HelperTasks.cc
+++ b/src/HelperTasks.cc
@@ -21,7 +21,7 @@ void Balau::CopyTask::Do() {
toread = std::min(toread, (ssize_t) COPY_BUFSIZE);
m_read = m_s->read(m_buffer, toread);
AAssert(m_read >= 0, "Error while reading");
- if (m_s->isEOF() || !m_read)
+ if (!m_read)
return;
m_written = 0;
m_state = 1;
@@ -33,6 +33,8 @@ void Balau::CopyTask::Do() {
} while (m_read != m_written);
m_state = 0;
m_current += m_read;
+ if (m_s->isEOF())
+ return;
}
}
}
diff --git a/src/HttpServer.cc b/src/HttpServer.cc
index 8eea5bb..43594e9 100644
--- a/src/HttpServer.cc
+++ b/src/HttpServer.cc
@@ -436,15 +436,15 @@ bool Balau::HttpWorker::handleClient() {
bool gotOne = false;
for (auto j = connVals.begin(); j != connVals.end(); j++) {
String t = j->trim();
- if ((t == "close") && (!gotOne)) {
+ if ((t.lower() == "close") && (!gotOne)) {
gotOne = true;
persistent = false;
- } else if ((t == "keep-alive") && (!gotOne)) {
+ } else if ((t.lower() == "keep-alive") && (!gotOne)) {
gotOne = true;
persistent = true;
} else if (t == "TE") {
Printer::elog(E_HTTPSERVER, "%s got the 'TE' connection marker (which is still unknown)", m_name.to_charp());
- } else if (t == "Upgrade") {
+ } else if (t.lower() == "upgrade") {
upgrade = true;
persistent = true;
} else {
@@ -559,6 +559,7 @@ bool Balau::HttpWorker::handleClient() {
auto f = m_server->findAction(uri.to_charp(), host.to_charp());
if (f.action) {
+ setOkayToEAgain(false);
m_strm->detach();
IO<OutputCheck> out(new OutputCheck(m_socket));
Http::Request req;