mirror of https://github.com/aria2/aria2
Conditional compile for WebSocket.
WebSocket support depends on Message Digest support.pull/16/merge
parent
7bc2a14d9f
commit
fcbdecfd1e
|
@ -93,7 +93,7 @@ Dependency
|
||||||
|
|
||||||
.External Library Dependency
|
.External Library Dependency
|
||||||
[options="header"]
|
[options="header"]
|
||||||
|====================================================
|
|==================================================================
|
||||||
|features |dependency
|
|features |dependency
|
||||||
|HTTPS |GnuTLS or OpenSSL
|
|HTTPS |GnuTLS or OpenSSL
|
||||||
|BitTorrent |libnettle+libgmp or libgcrypt or OpenSSL
|
|BitTorrent |libnettle+libgmp or libgcrypt or OpenSSL
|
||||||
|
@ -103,7 +103,8 @@ Dependency
|
||||||
|Async DNS |C-Ares
|
|Async DNS |C-Ares
|
||||||
|Firefox3/Chromium cookie|libsqlite3
|
|Firefox3/Chromium cookie|libsqlite3
|
||||||
|XML-RPC |libxml2 or Expat.
|
|XML-RPC |libxml2 or Expat.
|
||||||
|====================================================
|
|JSON-RPC over WebSocket |libnettle or libgcrypt or OpenSSL
|
||||||
|
|==================================================================
|
||||||
|
|
||||||
Note;;
|
Note;;
|
||||||
|
|
||||||
|
|
14
configure.ac
14
configure.ac
|
@ -562,9 +562,15 @@ if test "x$have_option_const_name" = "xyes"; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_CONFIG_SUBDIRS([deps/wslay])
|
AC_CONFIG_SUBDIRS([deps/wslay])
|
||||||
LIBS="\$(top_builddir)/deps/wslay/lib/libwslay.la $LIBS"
|
if test "x$enable_message_digest" = "xyes"; then
|
||||||
# $(top_srcdir) for `make distcheck`
|
enable_websocket=yes
|
||||||
CPPFLAGS="-I\$(top_builddir)/deps/wslay/lib/includes -I\$(top_srcdir)/deps/wslay/lib/includes $CPPFLAGS"
|
AC_DEFINE([ENABLE_WEBSOCKET], [1],
|
||||||
|
[Define 1 if WebSocket support is enabled.])
|
||||||
|
LIBS="\$(top_builddir)/deps/wslay/lib/libwslay.la $LIBS"
|
||||||
|
# $(top_srcdir) for `make distcheck`
|
||||||
|
CPPFLAGS="-I\$(top_builddir)/deps/wslay/lib/includes -I\$(top_srcdir)/deps/wslay/lib/includes $CPPFLAGS"
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL([ENABLE_WEBSOCKET], [test "x$enable_websocket" = "xyes"])
|
||||||
|
|
||||||
AC_CONFIG_FILES([Makefile
|
AC_CONFIG_FILES([Makefile
|
||||||
src/Makefile
|
src/Makefile
|
||||||
|
@ -599,3 +605,5 @@ echo "Epoll: $have_epoll"
|
||||||
echo "Bittorrent: $enable_bittorrent"
|
echo "Bittorrent: $enable_bittorrent"
|
||||||
echo "Metalink: $enable_metalink"
|
echo "Metalink: $enable_metalink"
|
||||||
echo "XML-RPC: $enable_xml_rpc"
|
echo "XML-RPC: $enable_xml_rpc"
|
||||||
|
echo "Message Digest: $enable_message_digest"
|
||||||
|
echo "WebSocket: $enable_websocket"
|
||||||
|
|
|
@ -43,7 +43,6 @@
|
||||||
#include "RequestGroupMan.h"
|
#include "RequestGroupMan.h"
|
||||||
#include "HttpServerBodyCommand.h"
|
#include "HttpServerBodyCommand.h"
|
||||||
#include "HttpServerResponseCommand.h"
|
#include "HttpServerResponseCommand.h"
|
||||||
#include "WebSocketResponseCommand.h"
|
|
||||||
#include "RecoverableException.h"
|
#include "RecoverableException.h"
|
||||||
#include "prefs.h"
|
#include "prefs.h"
|
||||||
#include "Option.h"
|
#include "Option.h"
|
||||||
|
@ -51,9 +50,14 @@
|
||||||
#include "wallclock.h"
|
#include "wallclock.h"
|
||||||
#include "fmt.h"
|
#include "fmt.h"
|
||||||
#include "SocketRecvBuffer.h"
|
#include "SocketRecvBuffer.h"
|
||||||
#include "MessageDigest.h"
|
|
||||||
#include "message_digest_helper.h"
|
|
||||||
#include "base64.h"
|
#include "base64.h"
|
||||||
|
#ifdef ENABLE_MESSAGE_DIGEST
|
||||||
|
# include "MessageDigest.h"
|
||||||
|
# include "message_digest_helper.h"
|
||||||
|
#endif // ENABLE_MESSAGE_DIGEST
|
||||||
|
#ifdef ENABLE_WEBSOCKET
|
||||||
|
# include "WebSocketResponseCommand.h"
|
||||||
|
#endif // ENABLE_WEBSOCKET
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
@ -108,6 +112,8 @@ void HttpServerCommand::checkSocketRecvBuffer()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ENABLE_WEBSOCKET
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
// Creates server's WebSocket accept key which will be sent in
|
// Creates server's WebSocket accept key which will be sent in
|
||||||
// Sec-WebSocket-Accept header field. The |clientKey| is the value
|
// Sec-WebSocket-Accept header field. The |clientKey| is the value
|
||||||
|
@ -139,6 +145,8 @@ int websocketHandshake(const SharedHandle<HttpHeader>& header)
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
#endif // ENABLE_WEBSOCKET
|
||||||
|
|
||||||
bool HttpServerCommand::execute()
|
bool HttpServerCommand::execute()
|
||||||
{
|
{
|
||||||
if(e_->getRequestGroupMan()->downloadFinished() || e_->isHaltRequested()) {
|
if(e_->getRequestGroupMan()->downloadFinished() || e_->isHaltRequested()) {
|
||||||
|
@ -170,6 +178,7 @@ bool HttpServerCommand::execute()
|
||||||
const std::string& connectionHd = header->find("connection");
|
const std::string& connectionHd = header->find("connection");
|
||||||
if(util::strieq(upgradeHd.begin(), upgradeHd.end(), "websocket") &&
|
if(util::strieq(upgradeHd.begin(), upgradeHd.end(), "websocket") &&
|
||||||
util::strieq(connectionHd.begin(), connectionHd.end(), "upgrade")) {
|
util::strieq(connectionHd.begin(), connectionHd.end(), "upgrade")) {
|
||||||
|
#ifdef ENABLE_WEBSOCKET
|
||||||
int status = websocketHandshake(header);
|
int status = websocketHandshake(header);
|
||||||
Command* command;
|
Command* command;
|
||||||
if(status == 101) {
|
if(status == 101) {
|
||||||
|
@ -193,6 +202,15 @@ bool HttpServerCommand::execute()
|
||||||
e_->addCommand(command);
|
e_->addCommand(command);
|
||||||
e_->setNoWait(true);
|
e_->setNoWait(true);
|
||||||
return true;
|
return true;
|
||||||
|
#else // !ENABLE_WEBSOCKET
|
||||||
|
httpServer_->feedResponse(400);
|
||||||
|
Command* command = new HttpServerResponseCommand(getCuid(),
|
||||||
|
httpServer_, e_,
|
||||||
|
socket_);
|
||||||
|
e_->addCommand(command);
|
||||||
|
e_->setNoWait(true);
|
||||||
|
return true;
|
||||||
|
#endif // !ENABLE_WEBSOCKET
|
||||||
} else {
|
} else {
|
||||||
if(e_->getOption()->getAsInt(PREF_RPC_MAX_REQUEST_SIZE) <
|
if(e_->getOption()->getAsInt(PREF_RPC_MAX_REQUEST_SIZE) <
|
||||||
httpServer_->getContentLength()) {
|
httpServer_->getContentLength()) {
|
||||||
|
|
|
@ -227,16 +227,23 @@ SRCS = Socket.h\
|
||||||
rpc_helper.cc rpc_helper.h\
|
rpc_helper.cc rpc_helper.h\
|
||||||
WatchProcessCommand.cc WatchProcessCommand.h\
|
WatchProcessCommand.cc WatchProcessCommand.h\
|
||||||
UnknownOptionException.cc UnknownOptionException.h\
|
UnknownOptionException.cc UnknownOptionException.h\
|
||||||
WebSocketSession.cc WebSocketSession.h\
|
|
||||||
WebSocketSessionMan.cc WebSocketSessionMan.h\
|
|
||||||
WebSocketResponseCommand.cc WebSocketResponseCommand.h\
|
|
||||||
WebSocketInteractionCommand.cc WebSocketInteractionCommand.h\
|
|
||||||
Notifier.cc Notifier.h
|
Notifier.cc Notifier.h
|
||||||
|
|
||||||
if MINGW_BUILD
|
if MINGW_BUILD
|
||||||
SRCS += WinConsoleFile.cc WinConsoleFile.h
|
SRCS += WinConsoleFile.cc WinConsoleFile.h
|
||||||
endif # MINGW_BUILD
|
endif # MINGW_BUILD
|
||||||
|
|
||||||
|
if ENABLE_WEBSOCKET
|
||||||
|
SRCS += WebSocketSession.cc WebSocketSession.h\
|
||||||
|
WebSocketSessionMan.cc WebSocketSessionMan.h\
|
||||||
|
WebSocketResponseCommand.cc WebSocketResponseCommand.h\
|
||||||
|
WebSocketInteractionCommand.cc WebSocketInteractionCommand.h
|
||||||
|
endif # ENABLE_WEBSOCKET
|
||||||
|
|
||||||
|
if !ENABLE_WEBSOCKET
|
||||||
|
SRCS += NullWebSocketMan.h
|
||||||
|
endif # !ENABLE_WEBSOCKET
|
||||||
|
|
||||||
if HAVE_SOME_XMLLIB
|
if HAVE_SOME_XMLLIB
|
||||||
SRCS += XmlAttr.cc XmlAttr.h\
|
SRCS += XmlAttr.cc XmlAttr.h\
|
||||||
XmlParser.h\
|
XmlParser.h\
|
||||||
|
|
|
@ -63,7 +63,11 @@
|
||||||
#include "UriListParser.h"
|
#include "UriListParser.h"
|
||||||
#include "SingletonHolder.h"
|
#include "SingletonHolder.h"
|
||||||
#include "Notifier.h"
|
#include "Notifier.h"
|
||||||
#include "WebSocketSessionMan.h"
|
#ifdef ENABLE_WEBSOCKET
|
||||||
|
# include "WebSocketSessionMan.h"
|
||||||
|
#else // !ENABLE_WEBSOCKET
|
||||||
|
# include "NullWebSocketSessionMan.h"
|
||||||
|
#endif // !ENABLE_WEBSOCKET
|
||||||
#ifdef ENABLE_SSL
|
#ifdef ENABLE_SSL
|
||||||
# include "TLSContext.h"
|
# include "TLSContext.h"
|
||||||
#endif // ENABLE_SSL
|
#endif // ENABLE_SSL
|
||||||
|
|
|
@ -34,8 +34,12 @@
|
||||||
/* copyright --> */
|
/* copyright --> */
|
||||||
#include "Notifier.h"
|
#include "Notifier.h"
|
||||||
#include "RequestGroup.h"
|
#include "RequestGroup.h"
|
||||||
#include "WebSocketSessionMan.h"
|
|
||||||
#include "LogFactory.h"
|
#include "LogFactory.h"
|
||||||
|
#ifdef ENABLE_WEBSOCKET
|
||||||
|
# include "WebSocketSessionMan.h"
|
||||||
|
#else // !ENABLE_WEBSOCKET
|
||||||
|
# include "NullWebSocketSessionMan.h"
|
||||||
|
#endif // !ENABLE_WEBSOCKET
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
/* <!-- copyright */
|
||||||
|
/*
|
||||||
|
* aria2 - The high speed download utility
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 Tatsuhiro Tsujikawa
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give
|
||||||
|
* permission to link the code of portions of this program with the
|
||||||
|
* OpenSSL library under certain conditions as described in each
|
||||||
|
* individual source file, and distribute linked combinations
|
||||||
|
* including the two.
|
||||||
|
* You must obey the GNU General Public License in all respects
|
||||||
|
* for all of the code used other than OpenSSL. If you modify
|
||||||
|
* file(s) with this exception, you may extend this exception to your
|
||||||
|
* version of the file(s), but you are not obligated to do so. If you
|
||||||
|
* do not wish to do so, delete this exception statement from your
|
||||||
|
* version. If you delete this exception statement from all source
|
||||||
|
* files in the program, then also delete it here.
|
||||||
|
*/
|
||||||
|
/* copyright --> */
|
||||||
|
#ifndef D_NULL_WEB_SOCKET_SESSION_MAN_H
|
||||||
|
#define D_NULL_WEB_SOCKET_SESSION_MAN_H
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "SharedHandle.h"
|
||||||
|
|
||||||
|
// Empty implementation for build without WebSocket support.
|
||||||
|
|
||||||
|
namespace aria2 {
|
||||||
|
|
||||||
|
class RequestGroup;
|
||||||
|
|
||||||
|
namespace rpc {
|
||||||
|
|
||||||
|
class WebSocketSession {};
|
||||||
|
|
||||||
|
class WebSocketSessionMan {
|
||||||
|
public:
|
||||||
|
WebSocketSessionMan() {}
|
||||||
|
~WebSocketSessionMan() {}
|
||||||
|
void addSession(const SharedHandle<WebSocketSession>& wsSession) {}
|
||||||
|
void removeSession(const SharedHandle<WebSocketSession>& wsSession) {}
|
||||||
|
void addNotification(const std::string& method, const RequestGroup* group) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace rpc
|
||||||
|
|
||||||
|
} // aria2
|
||||||
|
|
||||||
|
#endif // D_NULL_WEB_SOCKET_SESSION_MAN_H
|
Loading…
Reference in New Issue