summaryrefslogtreecommitdiff
path: root/src/HttpHeaderProcessor.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-01-25 09:58:40 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-01-25 09:58:40 +0000
commit0742e3921f185613f98c2b31cd03182d8aa1d6f5 (patch)
treed658bfc69cb3cec3cf4cab9fb4ee89062bed9e24 /src/HttpHeaderProcessor.cc
parent9505df51efaf83dd90818cb1c29487f286632f14 (diff)
2009-01-25 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added experimental built-in HTTP server. Currently, when a client accesses to the server, it responds with the current download progress. By default, it is disabled. To enable the server, give --enable-http-server option. To change the default port number for the server to listen to, use --http-server-listen-port option. The response HTML is very simple and refreshes it self each 1 second. Because of this refresh, you see flicker in normal web browser such as Firefox. I recommend to use console-based browser such as elinks, w3m. To connect to the server, run 'elinks http://localhost:6800/' while running aria2. Please replace port number '6800'(which is default) with your preference. * src/DownloadEngineFactory.cc * src/HttpHeader.cc * src/HttpHeader.h * src/HttpHeaderProcessor.cc * src/HttpHeaderProcessor.h * src/HttpListenCommand.cc * src/HttpListenCommand.h * src/HttpServer.cc * src/HttpServer.h * src/HttpServerCommand.cc * src/HttpServerCommand.h * src/HttpServerResponseCommand.cc * src/HttpServerResponseCommand.h * src/Makefile.am * src/OptionHandlerFactory.cc * src/Util.cc * src/Util.h * src/help_tags.h * src/option_processing.cc * src/prefs.cc * src/prefs.h * src/usage_text.h * test/HttpHeaderProcessorTest.cc * test/UtilTest.cc
Diffstat (limited to 'src/HttpHeaderProcessor.cc')
-rw-r--r--src/HttpHeaderProcessor.cc25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/HttpHeaderProcessor.cc b/src/HttpHeaderProcessor.cc
index 9b2ef0e0..e5d2d46b 100644
--- a/src/HttpHeaderProcessor.cc
+++ b/src/HttpHeaderProcessor.cc
@@ -111,6 +111,31 @@ SharedHandle<HttpHeader> HttpHeaderProcessor::getHttpResponseHeader()
return httpHeader;
}
+SharedHandle<HttpHeader> HttpHeaderProcessor::getHttpRequestHeader()
+{
+ // The minimum case of the first line is:
+ // GET / HTTP/1.x
+ // At least 14bytes before \r\n or \n.
+ std::string::size_type delimpos = std::string::npos;
+ if(((delimpos = _buf.find("\r\n")) == std::string::npos &&
+ (delimpos = _buf.find("\n")) == std::string::npos) ||
+ delimpos < 14) {
+ throw DlRetryEx(EX_NO_STATUS_HEADER);
+ }
+ std::deque<std::string> firstLine;
+ Util::slice(firstLine, _buf.substr(0, delimpos), ' ', true);
+ if(firstLine.size() != 3) {
+ throw DlAbortEx("Malformed HTTP request header.");
+ }
+ SharedHandle<HttpHeader> httpHeader(new HttpHeader());
+ httpHeader->setMethod(firstLine[0]);
+ httpHeader->setRequestPath(firstLine[1]);
+ httpHeader->setVersion(firstLine[2]);
+ std::istringstream strm(_buf.substr(14));
+ httpHeader->fill(strm);
+ return httpHeader;
+}
+
std::string HttpHeaderProcessor::getHeaderString() const
{
std::string::size_type delimpos = std::string::npos;