launch_daemon: Moved settings parsing into its own file.

This commit is contained in:
Axel Dörfler
2015-07-22 20:42:27 +02:00
parent c4b6278c02
commit 68a3c0f919
4 changed files with 87 additions and 37 deletions
+1
View File
@@ -9,6 +9,7 @@ Server launch_daemon
:
LaunchDaemon.cpp
Job.cpp
SettingsParser.cpp
Target.cpp
Worker.cpp
+3 -37
View File
@@ -23,7 +23,6 @@
#include <Server.h>
#include <AppMisc.h>
#include <DriverSettingsMessageAdapter.h>
#include <LaunchDaemonDefs.h>
#include <LaunchRosterPrivate.h>
#include <RosterPrivate.h>
@@ -35,6 +34,7 @@
#include "InitSharedMemoryDirectoryJob.h"
#include "InitTemporaryDirectoryJob.h"
#include "Job.h"
#include "SettingsParser.h"
#include "Target.h"
#include "Worker.h"
@@ -47,38 +47,6 @@ using BSupportKit::BPrivate::JobQueue;
static const char* kLaunchDirectory = "launch";
const static settings_template kPortTemplate[] = {
{B_STRING_TYPE, "name", NULL, true},
{B_INT32_TYPE, "capacity", NULL},
};
const static settings_template kJobTemplate[] = {
{B_STRING_TYPE, "name", NULL, true},
{B_BOOL_TYPE, "disabled", NULL},
{B_STRING_TYPE, "launch", NULL},
{B_STRING_TYPE, "requires", NULL},
{B_BOOL_TYPE, "legacy", NULL},
{B_MESSAGE_TYPE, "port", kPortTemplate},
{B_BOOL_TYPE, "no_safemode", NULL},
{0, NULL, NULL}
};
const static settings_template kTargetTemplate[] = {
{B_STRING_TYPE, "name", NULL, true},
{B_BOOL_TYPE, "reset", NULL},
{B_MESSAGE_TYPE, "job", kJobTemplate},
{B_MESSAGE_TYPE, "service", kJobTemplate},
{0, NULL, NULL}
};
const static settings_template kSettingsTemplate[] = {
{B_MESSAGE_TYPE, "target", kTargetTemplate},
{B_MESSAGE_TYPE, "job", kJobTemplate},
{B_MESSAGE_TYPE, "service", kJobTemplate},
{0, NULL, NULL}
};
class Session {
public:
Session(uid_t user, const BMessenger& target);
@@ -462,16 +430,14 @@ LaunchDaemon::_ReadDirectory(const char* context, BEntry& directoryEntry)
status_t
LaunchDaemon::_ReadFile(const char* context, BEntry& entry)
{
DriverSettingsMessageAdapter adapter;
BPath path;
status_t status = path.SetTo(&entry);
if (status != B_OK)
return status;
SettingsParser parser;
BMessage message;
status = adapter.ConvertFromDriverSettings(path.Path(), kSettingsTemplate,
message);
status = parser.ParseFile(path.Path(), message);
if (status == B_OK) {
_AddJobs(NULL, message);
+63
View File
@@ -0,0 +1,63 @@
/*
* Copyright 2015, Axel Dörfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License.
*/
#include "SettingsParser.h"
#include <DriverSettingsMessageAdapter.h>
const static settings_template kPortTemplate[] = {
{B_STRING_TYPE, "name", NULL, true},
{B_INT32_TYPE, "capacity", NULL},
};
const static settings_template kJobTemplate[] = {
{B_STRING_TYPE, "name", NULL, true},
{B_BOOL_TYPE, "disabled", NULL},
{B_STRING_TYPE, "launch", NULL},
{B_STRING_TYPE, "requires", NULL},
{B_BOOL_TYPE, "legacy", NULL},
{B_MESSAGE_TYPE, "port", kPortTemplate},
{B_BOOL_TYPE, "no_safemode", NULL},
{0, NULL, NULL}
};
const static settings_template kConditionTemplate[] = {
{B_STRING_TYPE, NULL, NULL, true},
{B_MESSAGE_TYPE, "not", kConditionTemplate},
{B_MESSAGE_TYPE, "and", kConditionTemplate},
{B_MESSAGE_TYPE, "or", kConditionTemplate},
{0, NULL, NULL}
};
const static settings_template kTargetTemplate[] = {
{B_STRING_TYPE, "name", NULL, true},
{B_BOOL_TYPE, "reset", NULL},
{B_MESSAGE_TYPE, "if", kConditionTemplate},
{B_MESSAGE_TYPE, "job", kJobTemplate},
{B_MESSAGE_TYPE, "service", kJobTemplate},
{0, NULL, NULL}
};
const static settings_template kSettingsTemplate[] = {
{B_MESSAGE_TYPE, "target", kTargetTemplate},
{B_MESSAGE_TYPE, "job", kJobTemplate},
{B_MESSAGE_TYPE, "service", kJobTemplate},
{0, NULL, NULL}
};
SettingsParser::SettingsParser()
{
}
status_t
SettingsParser::ParseFile(const char* path, BMessage& settings)
{
DriverSettingsMessageAdapter adapter;
return adapter.ConvertFromDriverSettings(path, kSettingsTemplate, settings);
}
+20
View File
@@ -0,0 +1,20 @@
/*
* Copyright 2015, Axel Dörfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License.
*/
#ifndef SETTINGS_PARSER_H
#define SETTINGS_PARSER_H
#include <Message.h>
class SettingsParser {
public:
SettingsParser();
status_t ParseFile(const char* path, BMessage& settings);
};
#endif // SETTINGS_PARSER_H