launch_daemon: Actually set the conditions.

This commit is contained in:
Axel Dörfler
2015-07-22 20:42:50 +02:00
parent c2d703ea5d
commit 17ac467a6e
+42 -19
View File
@@ -92,12 +92,14 @@ private:
status_t _ReadFile(const char* context, BEntry& entry); status_t _ReadFile(const char* context, BEntry& entry);
void _AddJobs(Target* target, BMessage& message); void _AddJobs(Target* target, BMessage& message);
void _AddTargets(BMessage& message);
void _AddJob(Target* target, bool service, void _AddJob(Target* target, bool service,
BMessage& message); BMessage& message);
void _InitJobs(); void _InitJobs();
void _LaunchJobs(Target* target); void _LaunchJobs(Target* target);
void _AddLaunchJob(Job* job); void _AddLaunchJob(Job* job);
void _AddTarget(Target* target); void _AddTarget(Target* target);
void _SetCondition(BaseJob* job, BMessage& message);
status_t _StartSession(const char* login, status_t _StartSession(const char* login,
const char* password); const char* password);
@@ -454,7 +456,32 @@ LaunchDaemon::_ReadFile(const char* context, BEntry& entry)
status = parser.ParseFile(path.Path(), message); status = parser.ParseFile(path.Path(), message);
if (status == B_OK) { if (status == B_OK) {
_AddJobs(NULL, message); _AddJobs(NULL, message);
_AddTargets(message);
}
return status;
}
void
LaunchDaemon::_AddJobs(Target* target, BMessage& message)
{
BMessage job;
for (int32 index = 0; message.FindMessage("service", index,
&job) == B_OK; index++) {
_AddJob(target, true, job);
}
for (int32 index = 0; message.FindMessage("job", index, &job) == B_OK;
index++) {
_AddJob(target, false, job);
}
}
void
LaunchDaemon::_AddTargets(BMessage& message)
{
BMessage targetMessage; BMessage targetMessage;
for (int32 index = 0; message.FindMessage("target", index, for (int32 index = 0; message.FindMessage("target", index,
&targetMessage) == B_OK; index++) { &targetMessage) == B_OK; index++) {
@@ -483,29 +510,11 @@ LaunchDaemon::_ReadFile(const char* context, BEntry& entry)
} }
} }
_SetCondition(target, targetMessage);
_AddJobs(target, targetMessage); _AddJobs(target, targetMessage);
} }
} }
return status;
}
void
LaunchDaemon::_AddJobs(Target* target, BMessage& message)
{
BMessage job;
for (int32 index = 0; message.FindMessage("service", index,
&job) == B_OK; index++) {
_AddJob(target, true, job);
}
for (int32 index = 0; message.FindMessage("job", index, &job) == B_OK;
index++) {
_AddJob(target, false, job);
}
}
void void
LaunchDaemon::_AddJob(Target* target, bool service, BMessage& message) LaunchDaemon::_AddJob(Target* target, bool service, BMessage& message)
@@ -528,6 +537,8 @@ LaunchDaemon::_AddJob(Target* target, bool service, BMessage& message)
!message.GetBool("no_safemode", !job->LaunchInSafeMode())); !message.GetBool("no_safemode", !job->LaunchInSafeMode()));
job->SetTarget(target); job->SetTarget(target);
_SetCondition(job, message);
BMessage portMessage; BMessage portMessage;
for (int32 index = 0; for (int32 index = 0;
message.FindMessage("port", index, &portMessage) == B_OK; index++) { message.FindMessage("port", index, &portMessage) == B_OK; index++) {
@@ -611,6 +622,18 @@ LaunchDaemon::_AddTarget(Target* target)
} }
void
LaunchDaemon::_SetCondition(BaseJob* job, BMessage& message)
{
BMessage conditions;
if (message.FindMessage("if", &conditions) == B_OK) {
Condition* condition = Conditions::FromMessage(conditions);
if (condition != NULL)
job->SetCondition(condition);
}
}
status_t status_t
LaunchDaemon::_StartSession(const char* login, const char* password) LaunchDaemon::_StartSession(const char* login, const char* password)
{ {