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
This commit is contained in:
Tatsuhiro Tsujikawa
2009-01-25 09:58:40 +00:00
parent 9505df51ef
commit 0742e3921f
26 changed files with 1023 additions and 12 deletions

View File

@@ -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;