summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packaging/csr-framework.spec28
-rw-r--r--packaging/csr.manifest.in2
-rw-r--r--src/framework/CMakeLists.txt1
-rw-r--r--src/framework/client/async-logic.cpp2
-rw-r--r--src/framework/client/content-screening.cpp2
-rw-r--r--src/framework/client/handle-ext.cpp4
-rw-r--r--src/framework/client/handle-ext.h2
-rw-r--r--src/framework/client/handle.cpp8
-rw-r--r--src/framework/client/handle.h7
-rw-r--r--src/framework/client/web-protection.cpp2
-rw-r--r--src/framework/common/connection.cpp7
-rw-r--r--src/framework/common/connection.h4
-rw-r--r--src/framework/common/dispatcher.cpp4
-rw-r--r--src/framework/common/dispatcher.h4
-rw-r--r--src/framework/common/service.cpp35
-rw-r--r--src/framework/common/service.h9
-rw-r--r--src/framework/common/socket-descriptor.cpp74
-rw-r--r--src/framework/common/socket-descriptor.h46
-rw-r--r--src/framework/common/socket.cpp45
-rw-r--r--src/framework/common/socket.h15
-rw-r--r--src/framework/main/csr-main.cpp2
-rw-r--r--src/framework/service/server-service.cpp6
-rw-r--r--src/framework/service/server-service.h2
-rw-r--r--src/framework/ui/askuser.cpp4
-rw-r--r--src/framework/ui/popup/main.cpp2
-rw-r--r--src/framework/ui/popup/popup-service.cpp3
-rw-r--r--src/framework/ui/popup/popup-service.h2
-rw-r--r--systemd/CMakeLists.txt8
-rw-r--r--systemd/csr-admin.socket.in (renamed from systemd/csr.socket.in)6
-rw-r--r--systemd/csr-cs.socket.in16
-rw-r--r--systemd/csr-wp.socket.in16
-rw-r--r--systemd/csr.service.in6
32 files changed, 293 insertions, 81 deletions
diff --git a/packaging/csr-framework.spec b/packaging/csr-framework.spec
index 5237272..8f3f640 100644
--- a/packaging/csr-framework.spec
+++ b/packaging/csr-framework.spec
@@ -115,7 +115,9 @@ make %{?jobs:-j%jobs}
mkdir -p %{buildroot}%{_unitdir}/multi-user.target.wants
mkdir -p %{buildroot}%{_unitdir}/sockets.target.wants
ln -s ../%{service_name}.service %{buildroot}%{_unitdir}/multi-user.target.wants/%{service_name}.service
-ln -s ../%{service_name}.socket %{buildroot}%{_unitdir}/sockets.target.wants/%{service_name}.socket
+ln -s ../%{service_name}-cs.socket %{buildroot}%{_unitdir}/sockets.target.wants/%{service_name}-cs.socket
+ln -s ../%{service_name}-wp.socket %{buildroot}%{_unitdir}/sockets.target.wants/%{service_name}-wp.socket
+ln -s ../%{service_name}-admin.socket %{buildroot}%{_unitdir}/sockets.target.wants/%{service_name}-admin.socket
ln -s ../%{service_name}-popup.socket %{buildroot}%{_unitdir}/sockets.target.wants/%{service_name}-popup.socket
mkdir -p %{buildroot}%{ro_data_dir}/license
@@ -134,21 +136,27 @@ cp data/scripts/*.sql %{buildroot}%{ro_db_dir}
%post
systemctl daemon-reload
if [ $1 = 1 ]; then
- systemctl start %{service_name}.socket
- systemctl start %{service_name}.service
+ systemctl start %{service_name}-cs.socket
+ systemctl start %{service_name}-wp.socket
+ systemctl start %{service_name}-admin.socket
systemctl start %{service_name}-popup.socket
+ systemctl start %{service_name}.service
fi
if [ $1 = 2 ]; then
- systemctl restart %{service_name}.socket
- systemctl restart %{service_name}.service
+ systemctl restart %{service_name}-cs.socket
+ systemctl restart %{service_name}-wp.socket
+ systemctl restart %{service_name}-admin.socket
systemctl restart %{service_name}-popup.socket
+ systemctl restart %{service_name}.service
fi
%preun
if [ $1 = 0 ]; then
systemctl stop %{service_name}.service
- systemctl stop %{service_name}.socket
+ systemctl stop %{service_name}-cs.socket
+ systemctl stop %{service_name}-wp.socket
+ systemctl stop %{service_name}-admin.socket
systemctl stop %{service_name}-popup.socket
fi
@@ -171,10 +179,14 @@ fi
%{bin_dir}/%{service_name}-popup
%{_unitdir}/multi-user.target.wants/%{service_name}.service
%{_unitdir}/%{service_name}.service
-%{_unitdir}/sockets.target.wants/%{service_name}.socket
-%{_unitdir}/%{service_name}.socket
%{_unitdir}/%{service_name}-popup.service
+%{_unitdir}/sockets.target.wants/%{service_name}-cs.socket
+%{_unitdir}/sockets.target.wants/%{service_name}-wp.socket
+%{_unitdir}/sockets.target.wants/%{service_name}-admin.socket
%{_unitdir}/sockets.target.wants/%{service_name}-popup.socket
+%{_unitdir}/%{service_name}-cs.socket
+%{_unitdir}/%{service_name}-wp.socket
+%{_unitdir}/%{service_name}-admin.socket
%{_unitdir}/%{service_name}-popup.socket
%dir %{ro_data_dir}/%{service_name}
diff --git a/packaging/csr.manifest.in b/packaging/csr.manifest.in
index d889c37..f93d919 100644
--- a/packaging/csr.manifest.in
+++ b/packaging/csr.manifest.in
@@ -19,7 +19,7 @@
<smack request="pkgmgr::db" type="rwx" />
</request>
<permit>
- <smack permit="_" type="rx" />
+ <smack permit="_" type="rwx" />
<smack permit="xorg" type="rx" />
<smack permit="pkgmgr" type="rx" />
<smack permit="pkgmgr-server" type="rx" />
diff --git a/src/framework/CMakeLists.txt b/src/framework/CMakeLists.txt
index 92c38cd..73dbadd 100644
--- a/src/framework/CMakeLists.txt
+++ b/src/framework/CMakeLists.txt
@@ -39,6 +39,7 @@ SET(${TARGET_CSR_COMMON}_SRCS
common/mainloop.cpp
common/service.cpp
common/socket.cpp
+ common/socket-descriptor.cpp
common/credential.cpp
)
diff --git a/src/framework/client/async-logic.cpp b/src/framework/client/async-logic.cpp
index b72e1a1..bf716a4 100644
--- a/src/framework/client/async-logic.cpp
+++ b/src/framework/client/async-logic.cpp
@@ -36,7 +36,7 @@ AsyncLogic::AsyncLogic(HandleExt *handle, void *userdata,
m_cb(handle->m_cb),
m_userdata(userdata),
m_isStopped(isStopped),
- m_dispatcher(new Dispatcher("/tmp/." SERVICE_NAME ".socket"))
+ m_dispatcher(new Dispatcher(SockId::CS))
{
// disable ask user option for async request for now
copyKvp<int>(CsContext::Key::CoreUsage);
diff --git a/src/framework/client/content-screening.cpp b/src/framework/client/content-screening.cpp
index 156f804..33257d7 100644
--- a/src/framework/client/content-screening.cpp
+++ b/src/framework/client/content-screening.cpp
@@ -113,7 +113,7 @@ int csr_cs_context_create(csr_cs_context_h *phandle)
return CSR_ERROR_INVALID_PARAMETER;
*phandle = reinterpret_cast<csr_cs_context_h>(
- new Client::HandleExt(ContextShPtr(new CsContext())));
+ new Client::HandleExt(SockId::CS, ContextShPtr(new CsContext())));
return CSR_ERROR_NONE;
diff --git a/src/framework/client/handle-ext.cpp b/src/framework/client/handle-ext.cpp
index 9b02ebe..8e67aeb 100644
--- a/src/framework/client/handle-ext.cpp
+++ b/src/framework/client/handle-ext.cpp
@@ -31,8 +31,8 @@
namespace Csr {
namespace Client {
-HandleExt::HandleExt(ContextShPtr &&context) :
- Handle(std::move(context)),
+HandleExt::HandleExt(SockId id, ContextShPtr &&context) :
+ Handle(id, std::move(context)),
m_stop(false)
{
}
diff --git a/src/framework/client/handle-ext.h b/src/framework/client/handle-ext.h
index f4c1f24..6636597 100644
--- a/src/framework/client/handle-ext.h
+++ b/src/framework/client/handle-ext.h
@@ -39,7 +39,7 @@ namespace Client {
class HandleExt : public Handle {
public:
- explicit HandleExt(ContextShPtr &&);
+ explicit HandleExt(SockId id, ContextShPtr &&);
virtual ~HandleExt();
void dispatchAsync(const Task &task);
diff --git a/src/framework/client/handle.cpp b/src/framework/client/handle.cpp
index 1449e4c..0bf405f 100644
--- a/src/framework/client/handle.cpp
+++ b/src/framework/client/handle.cpp
@@ -28,13 +28,17 @@
namespace Csr {
namespace Client {
-Handle::Handle(ContextShPtr &&context) :
- m_ctx(std::forward<ContextShPtr>(context))
+Handle::Handle(SockId id, ContextShPtr &&context) :
+ m_sockId(id), m_ctx(std::forward<ContextShPtr>(context))
{
if (!m_ctx)
ThrowExc(InvalidParam, "context shouldn't be null");
}
+Handle::Handle(SockId id) : m_sockId(id)
+{
+}
+
Handle::~Handle()
{
}
diff --git a/src/framework/client/handle.h b/src/framework/client/handle.h
index e9e1614..8f2625c 100644
--- a/src/framework/client/handle.h
+++ b/src/framework/client/handle.h
@@ -27,13 +27,15 @@
#include "common/icontext.h"
#include "common/dispatcher.h"
+#include "common/socket-descriptor.h"
namespace Csr {
namespace Client {
class Handle {
public:
- explicit Handle(ContextShPtr &&);
+ explicit Handle(SockId, ContextShPtr &&);
+ explicit Handle(SockId);
virtual ~Handle();
template<typename Type, typename ...Args>
@@ -50,6 +52,7 @@ protected:
std::vector<ResultListPtr> m_resultLists;
private:
+ SockId m_sockId;
std::unique_ptr<Dispatcher> m_dispatcher;
ContextShPtr m_ctx;
};
@@ -58,7 +61,7 @@ template<typename Type, typename ...Args>
Type Handle::dispatch(Args &&...args)
{
if (m_dispatcher == nullptr)
- m_dispatcher.reset(new Dispatcher("/tmp/." SERVICE_NAME ".socket"));
+ m_dispatcher.reset(new Dispatcher(m_sockId));
return m_dispatcher->methodCall<Type>(std::forward<Args>(args)...);
}
diff --git a/src/framework/client/web-protection.cpp b/src/framework/client/web-protection.cpp
index 4f2de9d..4683ee3 100644
--- a/src/framework/client/web-protection.cpp
+++ b/src/framework/client/web-protection.cpp
@@ -42,7 +42,7 @@ int csr_wp_context_create(csr_wp_context_h *phandle)
return CSR_ERROR_INVALID_PARAMETER;
*phandle = reinterpret_cast<csr_wp_context_h>(
- new Client::Handle(std::make_shared<WpContext>()));
+ new Client::Handle(SockId::WP, std::make_shared<WpContext>()));
return CSR_ERROR_NONE;
diff --git a/src/framework/common/connection.cpp b/src/framework/common/connection.cpp
index 8ba9bea..291c265 100644
--- a/src/framework/common/connection.cpp
+++ b/src/framework/common/connection.cpp
@@ -58,7 +58,12 @@ RawBuffer Connection::receive() const
return m_socket.read();
}
-int Connection::getFd() const
+SockId Connection::getSockId() const noexcept
+{
+ return m_socket.getSockId();
+}
+
+int Connection::getFd() const noexcept
{
return m_socket.getFd();
}
diff --git a/src/framework/common/connection.h b/src/framework/common/connection.h
index effb806..57fa514 100644
--- a/src/framework/common/connection.h
+++ b/src/framework/common/connection.h
@@ -43,7 +43,9 @@ public:
void send(const RawBuffer &) const;
RawBuffer receive(void) const;
- int getFd(void) const;
+
+ SockId getSockId(void) const noexcept;
+ int getFd(void) const noexcept;
const Credential &getCredential();
private:
diff --git a/src/framework/common/dispatcher.cpp b/src/framework/common/dispatcher.cpp
index 2c0a0d6..ec38255 100644
--- a/src/framework/common/dispatcher.cpp
+++ b/src/framework/common/dispatcher.cpp
@@ -27,7 +27,7 @@
namespace Csr {
-Dispatcher::Dispatcher(const std::string &path) : m_address(path)
+Dispatcher::Dispatcher(SockId sockId) : m_sockId(sockId)
{
}
@@ -38,7 +38,7 @@ Dispatcher::~Dispatcher()
void Dispatcher::connect()
{
- m_connection = std::make_shared<Connection>(Socket::connect(m_address));
+ m_connection = std::make_shared<Connection>(Socket::connect(m_sockId));
}
void Dispatcher::disconnect()
diff --git a/src/framework/common/dispatcher.h b/src/framework/common/dispatcher.h
index e819a49..3f5063a 100644
--- a/src/framework/common/dispatcher.h
+++ b/src/framework/common/dispatcher.h
@@ -30,7 +30,7 @@ namespace Csr {
class Dispatcher {
public:
- Dispatcher(const std::string &path);
+ Dispatcher(SockId);
virtual ~Dispatcher();
Dispatcher(const Dispatcher &) = delete;
@@ -46,7 +46,7 @@ private:
void connect(void);
void disconnect(void);
- std::string m_address;
+ SockId m_sockId;
ConnShPtr m_connection;
};
diff --git a/src/framework/common/service.cpp b/src/framework/common/service.cpp
index d359487..215b8c4 100644
--- a/src/framework/common/service.cpp
+++ b/src/framework/common/service.cpp
@@ -21,6 +21,7 @@
*/
#include "common/service.h"
+#include <utility>
#include <sys/types.h>
#include <sys/epoll.h>
@@ -29,10 +30,8 @@
namespace Csr {
-Service::Service(const std::string &address) : m_address(address)
+Service::Service()
{
- DEBUG("Service constructed with address[" << address << "]");
-
setNewConnectionCallback(nullptr);
setCloseConnectionCallback(nullptr);
}
@@ -41,31 +40,33 @@ Service::~Service()
{
}
+void Service::add(const SockId &id)
+{
+ m_sockIds.insert(id);
+}
+
void Service::start(int timeout)
{
INFO("Service start!");
- Socket socket(m_address);
+ for (const auto &id : m_sockIds) {
+ auto socket = std::make_shared<Socket>(id);
- DEBUG("Get systemd socket[" << socket.getFd()
- << "] with address[" << m_address << "]");
+ DEBUG("Get systemd socket[" << socket->getFd() <<
+ "] for sock id: " << static_cast<int>(id));
- m_loop.addEventSource(socket.getFd(), EPOLLIN | EPOLLHUP | EPOLLRDHUP,
- [&](uint32_t event) {
- if (event != EPOLLIN)
- return;
+ m_loop.addEventSource(socket->getFd(), EPOLLIN | EPOLLHUP | EPOLLRDHUP,
+ [this, socket](uint32_t event) {
+ if (event != EPOLLIN)
+ return;
- m_onNewConnection(std::make_shared<Connection>(socket.accept()));
- });
+ this->m_onNewConnection(std::make_shared<Connection>(socket->accept()));
+ });
+ }
m_loop.run(timeout);
}
-void Service::stop()
-{
- INFO("Service stop!");
-}
-
void Service::setNewConnectionCallback(const ConnCallback &/*callback*/)
{
/* TODO: scoped-lock */
diff --git a/src/framework/common/service.h b/src/framework/common/service.h
index 1f323b5..c99fc83 100644
--- a/src/framework/common/service.h
+++ b/src/framework/common/service.h
@@ -23,9 +23,11 @@
#include <string>
#include <functional>
+#include <set>
#include "common/connection.h"
#include "common/mainloop.h"
+#include "common/socket-descriptor.h"
namespace Csr {
@@ -33,7 +35,7 @@ using ConnCallback = std::function<void(const ConnShPtr &)>;
class Service {
public:
- Service(const std::string &address);
+ Service();
virtual ~Service();
Service(const Service &) = delete;
@@ -41,8 +43,8 @@ public:
Service(Service &&) = delete;
Service &operator=(Service &&) = delete;
+ virtual void add(const SockId &) final;
virtual void start(int timeout) final;
- virtual void stop(void) final;
/* ConnCallback param should throw exception to handle error */
virtual void setNewConnectionCallback(const ConnCallback &) final;
@@ -56,7 +58,8 @@ private:
std::unordered_map<int, ConnShPtr> m_connectionRegistry;
Mainloop m_loop;
- std::string m_address;
+
+ std::set<SockId> m_sockIds;
};
}
diff --git a/src/framework/common/socket-descriptor.cpp b/src/framework/common/socket-descriptor.cpp
new file mode 100644
index 0000000..b2e3aa5
--- /dev/null
+++ b/src/framework/common/socket-descriptor.cpp
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/*
+ * @file socket-descriptor.h
+ * @author Kyungwook Tak (k.tak@samsung.com)
+ * @version 1.0
+ * @brief Socket path and privileges
+ */
+#include "common/socket-descriptor.h"
+
+#include <map>
+
+#include "common/exception.h"
+
+namespace Csr {
+
+namespace {
+
+const std::map<SockId, SocketDescriptor> g_sockDescMap {
+ {
+ SockId::CS,
+ SocketDescriptor("/tmp/." SERVICE_NAME "-cs.socket",
+ "http://tizen.org/privilege/antivirus.scan")
+ },
+ {
+ SockId::WP,
+ SocketDescriptor("/tmp/." SERVICE_NAME "-wp.socket",
+ "http://tizen.org/privilege/antivirus.webprotect")
+ },
+ {
+ SockId::ADMIN,
+ SocketDescriptor("/tmp/." SERVICE_NAME "-admin.socket",
+ "http://tizen.org/privilege/antivirus.admin")
+ },
+ {
+ SockId::POPUP,
+ SocketDescriptor("/tmp/." SERVICE_NAME "-popup.socket",
+ std::string())
+ }
+};
+
+} // namespace anonymous
+
+SocketDescriptor::SocketDescriptor(const std::string &_path, const std::string &_priv) :
+ path(_path), privilege(_priv) {}
+
+const SocketDescriptor &getSockDesc(const SockId &id)
+{
+ switch (id) {
+ case SockId::CS:
+ case SockId::WP:
+ case SockId::ADMIN:
+ case SockId::POPUP:
+ return g_sockDescMap.at(id);
+
+ default:
+ ThrowExc(InternalError, "Invalid sock id to descriptor map");
+ }
+}
+
+}
diff --git a/src/framework/common/socket-descriptor.h b/src/framework/common/socket-descriptor.h
new file mode 100644
index 0000000..7926a0d
--- /dev/null
+++ b/src/framework/common/socket-descriptor.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/*
+ * @file socket-descriptor.h
+ * @author Kyungwook Tak (k.tak@samsung.com)
+ * @version 1.0
+ * @brief Socket path and privileges
+ */
+#pragma once
+
+#include <map>
+#include <string>
+
+namespace Csr {
+
+enum class SockId : int {
+ CS = 0x01, // Content scanning
+ WP = 0x02, // Web protection
+ ADMIN = 0x03, // Admin which controls engine
+ POPUP = 0x04, // Popup service
+};
+
+struct SocketDescriptor {
+ const std::string path;
+ const std::string privilege;
+
+ SocketDescriptor() {}
+ SocketDescriptor(const std::string &path, const std::string &priv);
+};
+
+const SocketDescriptor &getSockDesc(const SockId &);
+
+}
diff --git a/src/framework/common/socket.cpp b/src/framework/common/socket.cpp
index 3ac49c5..a637c0d 100644
--- a/src/framework/common/socket.cpp
+++ b/src/framework/common/socket.cpp
@@ -35,38 +35,41 @@ namespace Csr {
namespace {
+int g_sd_listen_fds = -1;
+
int createSystemdSocket(const std::string &path)
{
- int n = ::sd_listen_fds(-1);
+ if (g_sd_listen_fds == -1)
+ g_sd_listen_fds = ::sd_listen_fds(0);
- if (n < 0)
+ if (g_sd_listen_fds < 0)
ThrowExc(SocketError, "failed to sd_listen_fds");
- for (int fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + n; ++fd) {
+ for (int fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + g_sd_listen_fds; ++fd) {
if (::sd_is_socket_unix(fd, SOCK_STREAM, 1, path.c_str(), 0) > 0) {
INFO("service's systemd socket found with fd: " << fd);
return fd;
}
}
- ThrowExc(SocketError, "get systemd socket failed!");
+ ThrowExc(SocketError, "No useable socket were passed by systemd. path: " << path);
}
} // namespace anonymous
-Socket::Socket(int fd) : m_fd(fd)
+Socket::Socket(SockId sockId, int fd) : m_sockId(sockId), m_fd(fd)
{
- if (m_fd < 0)
+ if (this->m_fd < 0)
ThrowExc(SocketError, "Socket fd from constructor is invalid!!");
}
-Socket::Socket(const std::string &path) : m_fd(createSystemdSocket(path))
+Socket::Socket(SockId sockId) : m_sockId(sockId)
{
+ this->m_fd = createSystemdSocket(getSockDesc(this->m_sockId).path);
}
-Socket::Socket(Socket &&other)
+Socket::Socket(Socket &&other) : m_sockId(other.m_sockId), m_fd(other.m_fd)
{
- m_fd = other.m_fd;
other.m_fd = 0;
}
@@ -75,6 +78,7 @@ Socket &Socket::operator=(Socket &&other)
if (this == &other)
return *this;
+ m_sockId = other.m_sockId;
m_fd = other.m_fd;
other.m_fd = 0;
@@ -90,20 +94,23 @@ Socket::~Socket()
::close(m_fd);
}
-Socket Socket::accept() const
+Socket Socket::accept(void) const
{
int fd = ::accept(m_fd, nullptr, nullptr);
if (fd < 0)
- ThrowExc(SocketError, "socket accept failed with errno: " << errno);
+ ThrowExc(SocketError, "socket on fd[" << m_fd << "] accept failed "
+ "with errno: " << errno);
INFO("Accept client success with fd: " << fd);
- return Socket(fd);
+ return Socket(m_sockId, fd);
}
-Socket Socket::connect(const std::string &path)
+Socket Socket::connect(SockId sockId)
{
+ const auto &path = getSockDesc(sockId).path;
+
if (path.size() >= sizeof(sockaddr_un::sun_path))
ThrowExc(InternalError, "socket path size too long!");
@@ -119,14 +126,20 @@ Socket Socket::connect(const std::string &path)
if (::connect(fd, reinterpret_cast<sockaddr *>(&addr),
sizeof(sockaddr_un)) == -1)
- ThrowExc(SocketError, "Socket connect failed with errno: " << errno);
+ ThrowExc(SocketError, "Socket[" << path << "] connect failed "
+ "with errno: " << errno);
INFO("Connect to CSR server success with fd:" << fd);
- return Socket(fd);
+ return Socket(sockId, fd);
+}
+
+SockId Socket::getSockId(void) const noexcept
+{
+ return m_sockId;
}
-int Socket::getFd() const
+int Socket::getFd(void) const noexcept
{
return m_fd;
}
diff --git a/src/framework/common/socket.h b/src/framework/common/socket.h
index 971ed94..bc6f91d 100644
--- a/src/framework/common/socket.h
+++ b/src/framework/common/socket.h
@@ -24,13 +24,17 @@
#include <string>
#include "common/types.h"
+#include "common/socket-descriptor.h"
namespace Csr {
class Socket {
public:
- Socket(int fd = 0);
- Socket(const std::string &path); /* Construct with systemd socket from path */
+ // Socket with accepted / connected
+ Socket(SockId sockId, int fd);
+
+ // Create systemd socket
+ Socket(SockId sockId);
Socket(const Socket &) = delete;
Socket &operator=(const Socket &) = delete;
@@ -41,15 +45,18 @@ public:
virtual ~Socket();
Socket accept(void) const;
- int getFd(void) const;
+
+ SockId getSockId(void) const noexcept;
+ int getFd(void) const noexcept;
RawBuffer read(void) const;
void write(const RawBuffer &data) const;
/* TODO: can it be constructor? */
- static Socket connect(const std::string &path);
+ static Socket connect(SockId);
private:
+ SockId m_sockId;
int m_fd;
};
diff --git a/src/framework/main/csr-main.cpp b/src/framework/main/csr-main.cpp
index 0ae6536..d13cd58 100644
--- a/src/framework/main/csr-main.cpp
+++ b/src/framework/main/csr-main.cpp
@@ -28,7 +28,7 @@ int main(void)
try {
INFO("Start csr-server main!");
- Csr::ServerService service("/tmp/." SERVICE_NAME ".socket");
+ Csr::ServerService service;
INFO("Let's start csr-server service!");
diff --git a/src/framework/service/server-service.cpp b/src/framework/service/server-service.cpp
index 34eb990..03d410e 100644
--- a/src/framework/service/server-service.cpp
+++ b/src/framework/service/server-service.cpp
@@ -34,9 +34,11 @@
namespace Csr {
-ServerService::ServerService(const std::string &address) :
- Service(address), m_workqueue(2, 10)
+ServerService::ServerService() : Service(), m_workqueue(2, 10)
{
+ this->add(SockId::CS);
+ this->add(SockId::WP);
+ this->add(SockId::ADMIN);
}
ServerService::~ServerService()
diff --git a/src/framework/service/server-service.h b/src/framework/service/server-service.h
index a7ad9ec..81ad766 100644
--- a/src/framework/service/server-service.h
+++ b/src/framework/service/server-service.h
@@ -30,7 +30,7 @@ namespace Csr {
class ServerService : public Service {
public:
- ServerService(const std::string &address);
+ ServerService();
virtual ~ServerService();
private:
diff --git a/src/framework/ui/askuser.cpp b/src/framework/ui/askuser.cpp
index ce460af..d14ae09 100644
--- a/src/framework/ui/askuser.cpp
+++ b/src/framework/ui/askuser.cpp
@@ -26,9 +26,9 @@
namespace Csr {
namespace Ui {
-AskUser::AskUser() : m_address("/tmp/." SERVICE_NAME "-popup.socket")
+AskUser::AskUser()
{
- m_dispatcher.reset(new Dispatcher(m_address));
+ m_dispatcher.reset(new Dispatcher(SockId::POPUP));
}
AskUser::~AskUser()
diff --git a/src/framework/ui/popup/main.cpp b/src/framework/ui/popup/main.cpp
index 7f59c3d..6c15bfb 100644
--- a/src/framework/ui/popup/main.cpp
+++ b/src/framework/ui/popup/main.cpp
@@ -62,7 +62,7 @@ int main(int argc, char **argv)
setlocale(LC_ALL, vconf_get_str(VCONFKEY_LANGSET));
- Csr::Ui::PopupService service("/tmp/." SERVICE_NAME "-popup.socket");
+ Csr::Ui::PopupService service;
// timeout when idle for 10 sec. If timeout time is too small and
// popup service wakes up repeatedly too quickly, it can be refused
diff --git a/src/framework/ui/popup/popup-service.cpp b/src/framework/ui/popup/popup-service.cpp
index 95ce9b4..c8c582f 100644
--- a/src/framework/ui/popup/popup-service.cpp
+++ b/src/framework/ui/popup/popup-service.cpp
@@ -53,8 +53,9 @@ bool isCsCommand(const CommandId &cid)
} // namespace nonymous
-PopupService::PopupService(const std::string &address) : Service(address)
+PopupService::PopupService() : Service()
{
+ this->add(SockId::POPUP);
}
PopupService::~PopupService()
diff --git a/src/framework/ui/popup/popup-service.h b/src/framework/ui/popup/popup-service.h
index c487621..d3e569a 100644
--- a/src/framework/ui/popup/popup-service.h
+++ b/src/framework/ui/popup/popup-service.h
@@ -32,7 +32,7 @@ namespace Ui {
class PopupService : public Service {
public:
- PopupService(const std::string &address);
+ PopupService();
virtual ~PopupService();
private:
diff --git a/systemd/CMakeLists.txt b/systemd/CMakeLists.txt
index eecae85..7a50f09 100644
--- a/systemd/CMakeLists.txt
+++ b/systemd/CMakeLists.txt
@@ -1,12 +1,16 @@
CONFIGURE_FILE(${SERVICE_NAME}.service.in ${SERVICE_NAME}.service @ONLY)
-CONFIGURE_FILE(${SERVICE_NAME}.socket.in ${SERVICE_NAME}.socket @ONLY)
+CONFIGURE_FILE(${SERVICE_NAME}-cs.socket.in ${SERVICE_NAME}-cs.socket @ONLY)
+CONFIGURE_FILE(${SERVICE_NAME}-wp.socket.in ${SERVICE_NAME}-wp.socket @ONLY)
+CONFIGURE_FILE(${SERVICE_NAME}-admin.socket.in ${SERVICE_NAME}-admin.socket @ONLY)
CONFIGURE_FILE(${SERVICE_NAME}-popup.service.in ${SERVICE_NAME}-popup.service @ONLY)
CONFIGURE_FILE(${SERVICE_NAME}-popup.socket.in ${SERVICE_NAME}-popup.socket @ONLY)
INSTALL(
FILES
${SERVICE_NAME}.service
- ${SERVICE_NAME}.socket
+ ${SERVICE_NAME}-cs.socket
+ ${SERVICE_NAME}-wp.socket
+ ${SERVICE_NAME}-admin.socket
${SERVICE_NAME}-popup.service
${SERVICE_NAME}-popup.socket
DESTINATION ${SYSTEMD_UNIT_DIR}
diff --git a/systemd/csr.socket.in b/systemd/csr-admin.socket.in
index c2e2187..fcb6b8e 100644
--- a/systemd/csr.socket.in
+++ b/systemd/csr-admin.socket.in
@@ -1,14 +1,14 @@
[Unit]
-Description=Csr framework socket
+Description=Csr admin socket
Wants=@SERVICE_NAME@.service
Before=@SERVICE_NAME@.service
[Socket]
-ListenStream=/tmp/.@SERVICE_NAME@.socket
+ListenStream=/tmp/.@SERVICE_NAME@-admin.socket
Service=@SERVICE_NAME@.service
SocketMode=0777
# smack access control on socket disabled shortly to fast development
-#SmackLabelIPIn=@SERVICE_NAME@::api
+#SmackLabelIPIn=@SERVICE_NAME@-admin::api
SmackLabelIPIn=*
SmackLabelIPOut=@
diff --git a/systemd/csr-cs.socket.in b/systemd/csr-cs.socket.in
new file mode 100644
index 0000000..e3cb1c8
--- /dev/null
+++ b/systemd/csr-cs.socket.in
@@ -0,0 +1,16 @@
+[Unit]
+Description=Csr content screening socket
+Wants=@SERVICE_NAME@.service
+Before=@SERVICE_NAME@.service
+
+[Socket]
+ListenStream=/tmp/.@SERVICE_NAME@-cs.socket
+Service=@SERVICE_NAME@.service
+SocketMode=0777
+# smack access control on socket disabled shortly to fast development
+#SmackLabelIPIn=@SERVICE_NAME@-cs::api
+SmackLabelIPIn=*
+SmackLabelIPOut=@
+
+[Install]
+WantedBy=sockets.target
diff --git a/systemd/csr-wp.socket.in b/systemd/csr-wp.socket.in
new file mode 100644
index 0000000..363d9c3
--- /dev/null
+++ b/systemd/csr-wp.socket.in
@@ -0,0 +1,16 @@
+[Unit]
+Description=Csr web protection socket
+Wants=@SERVICE_NAME@.service
+Before=@SERVICE_NAME@.service
+
+[Socket]
+ListenStream=/tmp/.@SERVICE_NAME@-wp.socket
+Service=@SERVICE_NAME@.service
+SocketMode=0777
+# smack access control on socket disabled shortly to fast development
+#SmackLabelIPIn=@SERVICE_NAME@-wp::api
+SmackLabelIPIn=*
+SmackLabelIPOut=@
+
+[Install]
+WantedBy=sockets.target
diff --git a/systemd/csr.service.in b/systemd/csr.service.in
index 1a8631b..86ba95b 100644
--- a/systemd/csr.service.in
+++ b/systemd/csr.service.in
@@ -1,13 +1,15 @@
[Unit]
Description=Content Screening and Reputation service
-Requires=@SERVICE_NAME@.socket
+Requires=@SERVICE_NAME@-cs.socket @SERVICE_NAME@-wp.socket @SERVICE_NAME@-admin.socket
[Service]
User=@SERVICE_USER@
Group=@SERVICE_GROUP@
SmackProcessLabel=@SERVICE_NAME@
ExecStart=@BIN_DIR@/@SERVICE_NAME@-server
-Sockets=@SERVICE_NAME@.socket
+Sockets=@SERVICE_NAME@-cs.socket
+Sockets=@SERVICE_NAME@-wp.socket
+Sockets=@SERVICE_NAME@-admin.socket
[Install]
WantedBy=multi-user.target