SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
SET(CMAKE_C_FLAGS_RELEASE "-O2")
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_C_FLAGS} -std=c++17")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_C_FLAGS} -std=c++23")
SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
[Socket]
-ListenStream=/run/aul/daemons/%U/.launchpad-process-pool-sock
-ListenStream=/run/aul/daemons/%U/.launchpad-recovery-sock
-DirectoryMode=0777
+ListenStream=@org.tizen.appfw.launchpad-process-pool-%U
[Install]
WantedBy=sockets.target
namespace launchpad {
namespace {
-constexpr const char kHydraLoaderSocketName[] = ".hydra-loader";
+constexpr const char kHydraLoaderSocketName[] = "@org.tizen.appfw.hydra-loader";
const int kSocketMaxBufferSize = 131071;
} // namespace
void HydraLoaderContext::Listen() {
try {
- std::string socket_path = "/run/aul/daemons/" + std::to_string(getuid()) +
- "/" + std::string(kHydraLoaderSocketName) +
+ std::string socket_path = std::string(kHydraLoaderSocketName) + "-" +
+ std::to_string(getuid()) + "-" +
std::to_string(GetType()) + "-" +
std::to_string(GetLoaderId());
- if (fs::exists(socket_path)) fs::remove(socket_path);
hydra_socket_.reset(new ServerSocket());
hydra_socket_->Bind(socket_path);
namespace launchpad {
namespace {
-constexpr const char HYDRA_SIGCHLD_SOCK[] = ".hydra-sigchld-sock";
+constexpr const char HYDRA_SIGCHLD_SOCK[] = "@org.tizen.appfw.hydra-sigchld";
const int MAX_PENDING_CONNECTION = 128;
const int MAX_RECEIVE_BUFFER = 131071;
HydraSigchldEvent::HydraSigchldEvent(IEvent* listener)
: listener_(listener), socket_(new ServerSocket()) {
- std::string endpoint =
- "/run/aul/daemons/" + std::to_string(getuid()) + "/" + HYDRA_SIGCHLD_SOCK;
+ std::string endpoint = std::string(HYDRA_SIGCHLD_SOCK) + "-" +
+ std::to_string(getuid());
socket_->Bind(endpoint);
socket_->Listen(MAX_PENDING_CONNECTION);
socket_->SetReceiveBufferSize(MAX_RECEIVE_BUFFER);
#include <algorithm>
#include <string>
#include <utility>
+#include <format>
#include <app_info.hh>
#include <aul_keys.hh>
constexpr const char kRunAulDaemonsPath[] = "/run/aul/daemons/";
constexpr const char kLaunchpadProcessPoolSock[] =
- ".launchpad-process-pool-sock";
+ "@org.tizen.appfw.launchpad-process-pool";
constexpr const char kInfoDirectoryPath[] = "/usr/share/aul";
const int kReceivedBufferSize = 131071;
const int kMaxPendingConnection = 128;
const uid_t kRegularUidMin = 5000;
int GetLaunchpadFdFromSystemd() {
- const std::string path = kRunAulDaemonsPath + std::to_string(getuid()) + "/" +
- std::string(kLaunchpadProcessPoolSock);
+ auto path = std::format("{}-{}", kLaunchpadProcessPoolSock, getuid());
+ path[0] = '\0';
+
int fds = sd_listen_fds(0);
for (int fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + fds; ++fd) {
- if (sd_is_socket_unix(fd, SOCK_STREAM, 1, path.c_str(), 0) > 0) return fd;
+ if (sd_is_socket_unix(fd, SOCK_STREAM, 1, path.data(), path.length()) > 0)
+ return fd;
}
_W("There is no socket stream");
}
ServerSocket* GetLaunchpadSocket() {
+ int marker;
+ char path[PATH_MAX] = {0,};
+
+ //TODO(Abstract Socket Issue): file-based socket check
int fd = GetLaunchpadFdFromSystemd();
if (fd < 0) fd = GetLaunchpadFdFromEnvironment();
+ if (fd > -1) {
+ snprintf(path, PATH_MAX, "%s%d/%s",
+ kRunAulDaemonsPath, getuid(), kLaunchpadProcessPoolSock);
+ marker = open(path, O_RDWR | O_CREAT,
+ S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
+ close(marker);
+
+ return new ServerSocket(fd);
+ } else {
+ auto* socket = new ServerSocket();
+ const std::string endpoint = std::string(kLaunchpadProcessPoolSock) + "-" +
+ std::to_string(getuid());
+ socket->Bind(endpoint);
+ socket->SetReceiveBufferSize(kReceivedBufferSize);
+ socket->Listen(kMaxPendingConnection);
- if (fd > -1) return new ServerSocket(fd);
+ snprintf(path, PATH_MAX, "%s%d/%s",
+ kRunAulDaemonsPath, getuid(), kLaunchpadProcessPoolSock);
+ marker = open(path, O_RDWR | O_CREAT,
+ S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
+ close(marker);
- auto* socket = new ServerSocket();
- const std::string endpoint = kRunAulDaemonsPath + std::to_string(getuid()) +
- "/" + kLaunchpadProcessPoolSock;
- socket->Bind(endpoint);
- socket->SetReceiveBufferSize(kReceivedBufferSize);
- socket->Listen(kMaxPendingConnection);
- return socket;
+ return socket;
+ }
}
void PrintAppInfo(const AppInfo* app_info) {
namespace launchpad {
namespace {
-constexpr const char kLaunchpadType[] = ".launchpad-type";
+constexpr const char kLaunchpadTypeSocketName[] =
+ "@org.tizen.appfw.launchpad-type";
const int kSocketMaxBufferSize = 131071;
const unsigned int kWinScore = 100;
const float kLoseScoreRate = 0.7f;
void LoaderContext::Listen() {
try {
- std::string socket_path = "/run/aul/daemons/" + std::to_string(getuid()) +
- "/" + std::string(kLaunchpadType) +
+ std::string socket_path = std::string(kLaunchpadTypeSocketName) + "-" +
+ std::to_string(getuid()) + "-" +
std::to_string(GetType()) + "-" +
std::to_string(loader_id_);
- if (fs::exists(socket_path)) fs::remove(socket_path);
+ if (kLaunchpadTypeSocketName[0] != '@' && fs::exists(socket_path))
+ fs::remove(socket_path);
server_socket_.reset(new ServerSocket());
server_socket_->Bind(socket_path);
fcntl(fd_, F_SETFL, flag | O_NONBLOCK);
struct sockaddr_un sockaddr = { 0, };
+ socklen_t len = 0;
sockaddr.sun_family = AF_UNIX;
snprintf(sockaddr.sun_path, sizeof(sockaddr.sun_path), "%s",
endpoint.c_str());
+ if (sockaddr.sun_path[0] == '@') {
+ len = offsetof(struct sockaddr_un, sun_path) + strlen(sockaddr.sun_path);
+ sockaddr.sun_path[0] = '\0';
+ } else {
+ len = sizeof(struct sockaddr_un);
+ }
struct sockaddr* sockaddr_ptr = reinterpret_cast<struct sockaddr*>(&sockaddr);
- socklen_t len = static_cast<socklen_t>(sizeof(sockaddr));
int ret;
int retry = 2;
void ServerSocket::Bind(const std::string& bindpoint) {
struct sockaddr_un sockaddr = { 0, };
+ socklen_t len = 0;
sockaddr.sun_family = AF_UNIX;
snprintf(sockaddr.sun_path, sizeof(sockaddr.sun_path), "%s",
bindpoint.c_str());
- struct sockaddr* sockaddr_ptr = reinterpret_cast<struct sockaddr*>(&sockaddr);
- socklen_t len = static_cast<socklen_t>(sizeof(sockaddr));
+ if (sockaddr.sun_path[0] == '@') {
+ len = offsetof(struct sockaddr_un, sun_path) + strlen(sockaddr.sun_path);
+ sockaddr.sun_path[0] = '\0';
+ } else {
+ len = sizeof(struct sockaddr_un);
+ unlink(bindpoint.c_str());
+ }
- unlink(bindpoint.c_str());
+ struct sockaddr* sockaddr_ptr = reinterpret_cast<struct sockaddr*>(&sockaddr);
int ret = bind(GetFd(), sockaddr_ptr, len);
if (ret < 0) {
ret = -errno;
int Util::SendCmdToAmd(enum AmdCmd cmd, bundle* request, int opt) {
try {
- std::string endpoint = "/run/aul/daemons/.amd-sock";
- if (access(endpoint.c_str(), F_OK) != 0) return -1;
+ constexpr const char PATH_AMD_SOCK[] = "@org.tizen.appfw.amd";
+
+ // TODO(Abstract Socket Issue): file-based socket check
+ if (access("/run/aul/daemons/.amd-sock", F_OK) != 0) return -1;
ClientSocket socket;
- socket.Connect(endpoint);
+ socket.Connect(PATH_AMD_SOCK);
socket.SetReceiveBufferSize(Socket::kSocketMaxBufferSize);
socket.SetReceiveTimeout(5000);
namespace launchpad {
namespace {
-constexpr const char kHydraLoaderSocketName[] = ".hydra-loader";
-constexpr const char kHydraSigchldSocketName[] = ".hydra-sigchld-sock";
+constexpr const char kHydraLoaderSocketName[] = "@org.tizen.appfw.hydra-loader";
+constexpr const char kHydraSigchldSocketName[] =
+ "@org.tizen.appfw.hydra-sigchld";
const int kSocketMaxBufferSize = 131071;
const int kLoaderArgMax = 1024;
SignalManager::GetInst().SetEventListener(this);
try {
- std::string endpoint = "/run/aul/daemons/" + std::to_string(getuid()) +
- "/" + std::string(kHydraLoaderSocketName) + std::to_string(GetType()) +
- "-" + std::to_string(GetLoaderId());
+ std::string endpoint = std::string(kHydraLoaderSocketName) + "-" +
+ std::to_string(getuid()) + "-" +
+ std::to_string(GetType()) + "-" +
+ std::to_string(GetLoaderId());
socket_.reset(new ClientSocket());
socket_->Connect(endpoint);
socket_->SetReceiveBufferSize(kSocketMaxBufferSize);
void LaunchpadHydra::HandleSigchldEvent(pid_t pid, int status) {
try {
- std::string endpoint = "/run/aul/daemons/" + std::to_string(getuid()) +
- "/" + std::string(kHydraSigchldSocketName);
+ std::string endpoint = std::string(kHydraSigchldSocketName) + "-" +
+ std::to_string(getuid());
auto socket = std::make_shared<ClientSocket>();
socket->Connect(endpoint);
socket->SetSendBufferSize(kSocketMaxBufferSize);
namespace {
const uint32_t kMaxRetryingCount = 600;
-constexpr const char kLaunchpadLoaderSocketName[] = ".launchpad-type";
+constexpr const char kLaunchpadTypeSocketName[] =
+ "@org.tizen.appfw.launchpad-type";
constexpr const char kLaunchpadProcessPoolSock[] =
- ".launchpad-process-pool-sock";
+ "@org.tizen.appfw.launchpad-process-pool";
tizen_base::Bundle loader_bundle;
LaunchpadLoader* context = nullptr;
}
int LaunchpadLoader::ConnectToLaunchpad() {
- std::string endpoint = "/run/aul/daemons/" + std::to_string(getuid()) +
- "/" + std::string(kLaunchpadLoaderSocketName) +
- std::to_string(loader_type_) + "-" + std::to_string(loader_id_);
+ std::string endpoint = std::string(kLaunchpadTypeSocketName) + "-" +
+ std::to_string(getuid()) + "-" +
+ std::to_string(loader_type_) + "-" +
+ std::to_string(loader_id_);
ClientSocket client_socket;
client_socket.Connect(endpoint);
client_socket.SetReceiveBufferSize(Socket::kSocketMaxBufferSize);