From ef18c9c988730813f6299d0c7792920e525137fd Mon Sep 17 00:00:00 2001 From: Pixel Date: Sat, 19 Nov 2011 11:13:48 -0800 Subject: Handling more Connection tags, separated with commas; and adding the 'split' method to String. --- src/HttpServer.cc | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'src/HttpServer.cc') diff --git a/src/HttpServer.cc b/src/HttpServer.cc index d99e1ea..3da8cf5 100644 --- a/src/HttpServer.cc +++ b/src/HttpServer.cc @@ -254,14 +254,23 @@ bool Balau::HttpWorker::handleClient() { Http::StringMap::iterator i = httpHeaders.find("Connection"); if (i != httpHeaders.end()) { - if (i->second == "close") { - persistent = false; - } else if (i->second == "keep-alive") { - persistent = true; - } else { - Balau::Printer::elog(Balau::E_HTTPSERVER, "%s has an improper Connection HTTP header", m_name.to_charp()); - send400(); - return false; + String conn = i->second; + String::List connVals = conn.split(','); + bool gotOne = false; + for (String::List::iterator j = connVals.begin(); j != connVals.end(); j++) { + if ((*j == "close") && (!gotOne)) { + gotOne = true; + persistent = false; + } else if ((*j == "keep-alive") && (!gotOne)) { + gotOne = true; + persistent = true; + } else if (*j == "TE") { + Balau::Printer::elog(Balau::E_HTTPSERVER, "%s got the 'TE' connection marker (which is still unknown)", m_name.to_charp()); + } else { + Balau::Printer::elog(Balau::E_HTTPSERVER, "%s has an improper Connection HTTP header (%s)", m_name.to_charp(), j->to_charp()); + send400(); + return false; + } } } else { persistent = true; -- cgit v1.2.3