aboutsummaryrefslogtreecommitdiff
path: root/webservd
diff options
context:
space:
mode:
authorCasey Dahlin <sadmac@google.com>2016-02-26 16:03:49 -0800
committerCasey Dahlin <sadmac@google.com>2016-03-01 11:20:06 -0800
commit3e121f22d4c1353d7b9a5c89c98a52c43d077380 (patch)
treea36f5c308b2f7018cb1f21d595f213e63539e747 /webservd
parent2135964d7048ab91ec9cc51952e4022b4a1cb0aa (diff)
downloadwebservd-3e121f22d4c1353d7b9a5c89c98a52c43d077380.tar.gz
Implement binder response object
With this, we can now call the actual request handler. Change-Id: I836ba7f5c90273186709664bb5fb9fa7aff2972b Test: Build continues to pass in binder mode Bug: 27204884
Diffstat (limited to 'webservd')
-rw-r--r--webservd/Android.mk24
-rw-r--r--webservd/main.cc36
2 files changed, 47 insertions, 13 deletions
diff --git a/webservd/Android.mk b/webservd/Android.mk
index 7d072bd..2224f0d 100644
--- a/webservd/Android.mk
+++ b/webservd/Android.mk
@@ -26,8 +26,12 @@ LOCAL_MODULE := webservd
LOCAL_SHARED_LIBRARIES := \
libcrypto \
libfirewalld-client \
- libwebserv \
- libwebserv-proxies-internal \
+ libwebserv
+
+ifeq ($(system_webservd_use_dbus),true)
+LOCAL_SHARED_LIBRARIES += \
+ libwebserv-proxies-internal
+endif
ifdef BRILLO
@@ -39,18 +43,12 @@ endif
LOCAL_SRC_FILES := \
config.cc \
- dbus_bindings/dbus-service-config.json \
- dbus_bindings/org.chromium.WebServer.ProtocolHandler.dbus-xml \
- dbus_bindings/org.chromium.WebServer.Server.dbus-xml \
- dbus_protocol_handler.cc \
- dbus_request_handler.cc \
error_codes.cc \
firewalld_firewall.cc \
log_manager.cc \
main.cc \
protocol_handler.cc \
request.cc \
- server.cc \
temp_file_manager.cc \
utils.cc \
@@ -64,6 +62,16 @@ LOCAL_SRC_FILES += \
binder_server.cc
endif
+ifeq ($(system_webservd_use_dbus),true)
+LOCAL_SRC_FILES += \
+ dbus_bindings/dbus-service-config.json \
+ dbus_bindings/org.chromium.WebServer.ProtocolHandler.dbus-xml \
+ dbus_bindings/org.chromium.WebServer.Server.dbus-xml \
+ dbus_protocol_handler.cc \
+ dbus_request_handler.cc \
+ server.cc
+endif
+
ifdef BRILLO
LOCAL_SRC_FILES += keystore_encryptor.cc
else
diff --git a/webservd/main.cc b/webservd/main.cc
index c32b138..c6bf364 100644
--- a/webservd/main.cc
+++ b/webservd/main.cc
@@ -22,10 +22,13 @@
#ifdef WEBSERV_USE_BINDER
#include <binderwrapper/binder_wrapper.h>
#include <brillo/binder_watcher.h>
+#include <brillo/daemons/daemon.h>
#endif // WEBSERV_USE_BINDER
+#ifdef WEBSERV_USE_DBUS
#include <brillo/dbus/async_event_sequencer.h>
#include <brillo/dbus/exported_object_manager.h>
#include <brillo/daemons/dbus_daemon.h>
+#endif // WEBSERV_USE_DBUS
#include <brillo/flag_helper.h>
#if !defined(__ANDROID__)
#include <brillo/minijail/minijail.h>
@@ -37,7 +40,9 @@
#endif // WEBSERV_USE_BINDER
#include "webservd/config.h"
#include "webservd/log_manager.h"
+#ifdef WEBSERV_USE_DBUS
#include "webservd/server.h"
+#endif
#include "webservd/utils.h"
#ifdef WEBSERV_USE_BINDER
@@ -54,23 +59,39 @@ using FirewallImpl = webservd::PermissionBrokerFirewall;
using brillo::dbus_utils::AsyncEventSequencer;
+#ifdef WEBSERV_USE_DBUS
+using BaseDaemon = brillo::DBusServiceDaemon;
+#else
+using BaseDaemon = brillo::Daemon;
+#endif // WEBSERV_USE_DBUS
+
namespace {
const char kDefaultConfigFilePath[] = "/etc/webservd/config";
+
+#ifdef WEBSERV_USE_DBUS
const char kServiceName[] = "org.chromium.WebServer";
const char kRootServicePath[] = "/org/chromium/WebServer";
+#endif // WEBSERV_USE_DBUS
+
#if !defined(__ANDROID__)
const char kWebServerUserName[] = "webservd";
const char kWebServerGroupName[] = "webservd";
#endif // !defined(__ANDROID__)
-class Daemon final : public brillo::DBusServiceDaemon {
+class Daemon final : public BaseDaemon {
public:
+#ifdef WEBSERV_USE_DBUS
explicit Daemon(webservd::Config config)
: DBusServiceDaemon{kServiceName, kRootServicePath},
config_{std::move(config)} {}
+#else
+ explicit Daemon(webservd::Config config)
+ : config_{std::move(config)} {}
+#endif // WEBSERV_USE_DBUS
protected:
+#ifdef WEBSERV_USE_DBUS
void RegisterDBusObjectsAsync(AsyncEventSequencer* sequencer) override {
webservd::LogManager::Init(base::FilePath{config_.log_directory});
server_.reset(new webservd::Server{
@@ -83,11 +104,12 @@ class Daemon final : public brillo::DBusServiceDaemon {
void OnShutdown(int* /* return_code */) override {
server_.reset();
}
+#endif // WEBSERV_USE_DBUS
private:
#ifdef WEBSERV_USE_BINDER
int OnInit() override {
- int result = brillo::DBusServiceDaemon::OnInit();
+ int result = brillo::Daemon::OnInit();
if (result != EX_OK) {
return result;
}
@@ -97,9 +119,11 @@ class Daemon final : public brillo::DBusServiceDaemon {
return EX_OSERR;
}
+ server_.reset(new webservd::BinderServer(config_));
+
if (!android::BinderWrapper::Get()->RegisterService(
webservd::kWebserverBinderServiceName,
- new webservd::BinderServer(config_))) {
+ server_.get())) {
return EX_OSERR;
}
@@ -109,10 +133,12 @@ class Daemon final : public brillo::DBusServiceDaemon {
#endif // WEBSERV_USE_BINDER
webservd::Config config_;
+#ifdef WEBSERV_USE_DBUS
std::unique_ptr<webservd::Server> server_;
-#ifdef WEBSERV_USE_BINDER
+#else
+ std::unique_ptr<webservd::BinderServer> server_;
brillo::BinderWatcher binder_watcher_;
-#endif // WEBSERV_USE_BINDER
+#endif // WEBSERV_USE_DBUS
DISALLOW_COPY_AND_ASSIGN(Daemon);
};