launch_daemon: Actually set the conditions.
This commit is contained in:
@@ -92,12 +92,14 @@ private:
|
||||
status_t _ReadFile(const char* context, BEntry& entry);
|
||||
|
||||
void _AddJobs(Target* target, BMessage& message);
|
||||
void _AddTargets(BMessage& message);
|
||||
void _AddJob(Target* target, bool service,
|
||||
BMessage& message);
|
||||
void _InitJobs();
|
||||
void _LaunchJobs(Target* target);
|
||||
void _AddLaunchJob(Job* job);
|
||||
void _AddTarget(Target* target);
|
||||
void _SetCondition(BaseJob* job, BMessage& message);
|
||||
|
||||
status_t _StartSession(const char* login,
|
||||
const char* password);
|
||||
@@ -454,7 +456,32 @@ LaunchDaemon::_ReadFile(const char* context, BEntry& entry)
|
||||
status = parser.ParseFile(path.Path(), message);
|
||||
if (status == B_OK) {
|
||||
_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;
|
||||
for (int32 index = 0; message.FindMessage("target", index,
|
||||
&targetMessage) == B_OK; index++) {
|
||||
@@ -483,27 +510,9 @@ LaunchDaemon::_ReadFile(const char* context, BEntry& entry)
|
||||
}
|
||||
}
|
||||
|
||||
_SetCondition(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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -528,6 +537,8 @@ LaunchDaemon::_AddJob(Target* target, bool service, BMessage& message)
|
||||
!message.GetBool("no_safemode", !job->LaunchInSafeMode()));
|
||||
job->SetTarget(target);
|
||||
|
||||
_SetCondition(job, message);
|
||||
|
||||
BMessage portMessage;
|
||||
for (int32 index = 0;
|
||||
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
|
||||
LaunchDaemon::_StartSession(const char* login, const char* password)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user