Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/openlaunchd
Path: blob/master/liblaunch/launch.h
374 views
1
/*
2
* Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
3
*
4
* @APPLE_APACHE_LICENSE_HEADER_START@
5
*
6
* Licensed under the Apache License, Version 2.0 (the "License");
7
* you may not use this file except in compliance with the License.
8
* You may obtain a copy of the License at
9
*
10
* http://www.apache.org/licenses/LICENSE-2.0
11
*
12
* Unless required by applicable law or agreed to in writing, software
13
* distributed under the License is distributed on an "AS IS" BASIS,
14
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
* See the License for the specific language governing permissions and
16
* limitations under the License.
17
*
18
* @APPLE_APACHE_LICENSE_HEADER_END@
19
*/
20
21
#ifndef __LAUNCH_H__
22
#define __LAUNCH_H__
23
24
#ifdef __APPLE__
25
#define HAS_MACH true
26
#else
27
#define HAS_MACH false
28
#endif
29
30
#if HAS_MACH
31
#include <mach/mach.h>
32
#endif
33
#include <sys/cdefs.h>
34
#include <sys/types.h>
35
#include <stddef.h>
36
#include <stdbool.h>
37
38
#pragma GCC visibility push(default)
39
40
__BEGIN_DECLS
41
42
#ifdef __GNUC__
43
#define __ld_normal __attribute__((__nothrow__))
44
#define __ld_setter __attribute__((__nothrow__, __nonnull__))
45
#define __ld_getter __attribute__((__nothrow__, __nonnull__, __pure__, __warn_unused_result__))
46
#define __ld_iterator(x, y) __attribute__((__nonnull__(x, y)))
47
#define __ld_allocator __attribute__((__nothrow__, __malloc__, __nonnull__, __warn_unused_result__))
48
#else
49
#define __ld_normal
50
#define __ld_setter
51
#define __ld_getter
52
#define __ld_iterator(x, y)
53
#define __ld_allocator
54
#endif
55
56
#define LAUNCH_KEY_SUBMITJOB "SubmitJob"
57
#define LAUNCH_KEY_REMOVEJOB "RemoveJob"
58
#define LAUNCH_KEY_STARTJOB "StartJob"
59
#define LAUNCH_KEY_STOPJOB "StopJob"
60
#define LAUNCH_KEY_GETJOB "GetJob"
61
#define LAUNCH_KEY_GETJOBS "GetJobs"
62
#define LAUNCH_KEY_CHECKIN "CheckIn"
63
64
#define LAUNCH_JOBKEY_DEFAULTS "__Defaults"
65
66
#define LAUNCH_JOBKEY_LABEL "Label"
67
#define LAUNCH_JOBKEY_DISABLED "Disabled"
68
#define LAUNCH_JOBKEY_USERNAME "UserName"
69
#define LAUNCH_JOBKEY_GROUPNAME "GroupName"
70
#define LAUNCH_JOBKEY_TIMEOUT "TimeOut"
71
#define LAUNCH_JOBKEY_EXITTIMEOUT "ExitTimeOut"
72
#define LAUNCH_JOBKEY_INITGROUPS "InitGroups"
73
#define LAUNCH_JOBKEY_SOCKETS "Sockets"
74
#define LAUNCH_JOBKEY_MACHSERVICES "MachServices"
75
#define LAUNCH_JOBKEY_MACHSERVICELOOKUPPOLICIES "MachServiceLookupPolicies"
76
#define LAUNCH_JOBKEY_INETDCOMPATIBILITY "inetdCompatibility"
77
#define LAUNCH_JOBKEY_ENABLEGLOBBING "EnableGlobbing"
78
#define LAUNCH_JOBKEY_PROGRAMARGUMENTS "ProgramArguments"
79
#define LAUNCH_JOBKEY_PROGRAM "Program"
80
#define LAUNCH_JOBKEY_ONDEMAND "OnDemand"
81
#define LAUNCH_JOBKEY_KEEPALIVE "KeepAlive"
82
#define LAUNCH_JOBKEY_LIMITLOADTOHOSTS "LimitLoadToHosts"
83
#define LAUNCH_JOBKEY_LIMITLOADFROMHOSTS "LimitLoadFromHosts"
84
#define LAUNCH_JOBKEY_LIMITLOADTOSESSIONTYPE "LimitLoadToSessionType"
85
#define LAUNCH_JOBKEY_LIMITLOADTOHARDWARE "LimitLoadToHardware"
86
#define LAUNCH_JOBKEY_LIMITLOADFROMHARDWARE "LimitLoadFromHardware"
87
#define LAUNCH_JOBKEY_RUNATLOAD "RunAtLoad"
88
#define LAUNCH_JOBKEY_ROOTDIRECTORY "RootDirectory"
89
#define LAUNCH_JOBKEY_WORKINGDIRECTORY "WorkingDirectory"
90
#define LAUNCH_JOBKEY_ENVIRONMENTVARIABLES "EnvironmentVariables"
91
#define LAUNCH_JOBKEY_USERENVIRONMENTVARIABLES "UserEnvironmentVariables"
92
#define LAUNCH_JOBKEY_UMASK "Umask"
93
#define LAUNCH_JOBKEY_NICE "Nice"
94
#define LAUNCH_JOBKEY_HOPEFULLYEXITSFIRST "HopefullyExitsFirst"
95
#define LAUNCH_JOBKEY_HOPEFULLYEXITSLAST "HopefullyExitsLast"
96
#define LAUNCH_JOBKEY_LOWPRIORITYIO "LowPriorityIO"
97
#define LAUNCH_JOBKEY_SESSIONCREATE "SessionCreate"
98
#define LAUNCH_JOBKEY_STARTONMOUNT "StartOnMount"
99
#define LAUNCH_JOBKEY_SOFTRESOURCELIMITS "SoftResourceLimits"
100
#define LAUNCH_JOBKEY_HARDRESOURCELIMITS "HardResourceLimits"
101
#define LAUNCH_JOBKEY_STANDARDINPATH "StandardInPath"
102
#define LAUNCH_JOBKEY_STANDARDOUTPATH "StandardOutPath"
103
#define LAUNCH_JOBKEY_STANDARDERRORPATH "StandardErrorPath"
104
#define LAUNCH_JOBKEY_DEBUG "Debug"
105
#define LAUNCH_JOBKEY_WAITFORDEBUGGER "WaitForDebugger"
106
#define LAUNCH_JOBKEY_QUEUEDIRECTORIES "QueueDirectories"
107
#define LAUNCH_JOBKEY_WATCHPATHS "WatchPaths"
108
#define LAUNCH_JOBKEY_STARTINTERVAL "StartInterval"
109
#define LAUNCH_JOBKEY_STARTCALENDARINTERVAL "StartCalendarInterval"
110
#define LAUNCH_JOBKEY_BONJOURFDS "BonjourFDs"
111
#define LAUNCH_JOBKEY_LASTEXITSTATUS "LastExitStatus"
112
#define LAUNCH_JOBKEY_PID "PID"
113
#define LAUNCH_JOBKEY_THROTTLEINTERVAL "ThrottleInterval"
114
#define LAUNCH_JOBKEY_LAUNCHONLYONCE "LaunchOnlyOnce"
115
#define LAUNCH_JOBKEY_ABANDONPROCESSGROUP "AbandonProcessGroup"
116
#define LAUNCH_JOBKEY_IGNOREPROCESSGROUPATSHUTDOWN "IgnoreProcessGroupAtShutdown"
117
#define LAUNCH_JOBKEY_POLICIES "Policies"
118
#define LAUNCH_JOBKEY_ENABLETRANSACTIONS "EnableTransactions"
119
#define LAUNCH_JOBKEY_CFBUNDLEIDENTIFIER "CFBundleIdentifier"
120
#define LAUNCH_JOBKEY_PROCESSTYPE "ProcessType"
121
#define LAUNCH_KEY_PROCESSTYPE_APP "App"
122
#define LAUNCH_KEY_PROCESSTYPE_STANDARD "Standard"
123
#define LAUNCH_KEY_PROCESSTYPE_BACKGROUND "Background"
124
#define LAUNCH_KEY_PROCESSTYPE_INTERACTIVE "Interactive"
125
#define LAUNCH_KEY_PROCESSTYPE_ADAPTIVE "Adaptive"
126
127
#define LAUNCH_JOBPOLICY_DENYCREATINGOTHERJOBS "DenyCreatingOtherJobs"
128
129
#define LAUNCH_JOBINETDCOMPATIBILITY_WAIT "Wait"
130
131
#define LAUNCH_JOBKEY_MACH_RESETATCLOSE "ResetAtClose"
132
#define LAUNCH_JOBKEY_MACH_HIDEUNTILCHECKIN "HideUntilCheckIn"
133
#define LAUNCH_JOBKEY_MACH_DRAINMESSAGESONCRASH "DrainMessagesOnCrash"
134
#define LAUNCH_JOBKEY_MACH_PINGEVENTUPDATES "PingEventUpdates"
135
136
#define LAUNCH_JOBKEY_KEEPALIVE_SUCCESSFULEXIT "SuccessfulExit"
137
#define LAUNCH_JOBKEY_KEEPALIVE_NETWORKSTATE "NetworkState"
138
#define LAUNCH_JOBKEY_KEEPALIVE_PATHSTATE "PathState"
139
#define LAUNCH_JOBKEY_KEEPALIVE_OTHERJOBACTIVE "OtherJobActive"
140
#define LAUNCH_JOBKEY_KEEPALIVE_OTHERJOBENABLED "OtherJobEnabled"
141
#define LAUNCH_JOBKEY_KEEPALIVE_AFTERINITIALDEMAND "AfterInitialDemand"
142
#define LAUNCH_JOBKEY_KEEPALIVE_CRASHED "Crashed"
143
144
#define LAUNCH_JOBKEY_LAUNCHEVENTS "LaunchEvents"
145
146
#define LAUNCH_JOBKEY_CAL_MINUTE "Minute"
147
#define LAUNCH_JOBKEY_CAL_HOUR "Hour"
148
#define LAUNCH_JOBKEY_CAL_DAY "Day"
149
#define LAUNCH_JOBKEY_CAL_WEEKDAY "Weekday"
150
#define LAUNCH_JOBKEY_CAL_MONTH "Month"
151
152
#define LAUNCH_JOBKEY_RESOURCELIMIT_CORE "Core"
153
#define LAUNCH_JOBKEY_RESOURCELIMIT_CPU "CPU"
154
#define LAUNCH_JOBKEY_RESOURCELIMIT_DATA "Data"
155
#define LAUNCH_JOBKEY_RESOURCELIMIT_FSIZE "FileSize"
156
#define LAUNCH_JOBKEY_RESOURCELIMIT_MEMLOCK "MemoryLock"
157
#define LAUNCH_JOBKEY_RESOURCELIMIT_NOFILE "NumberOfFiles"
158
#define LAUNCH_JOBKEY_RESOURCELIMIT_NPROC "NumberOfProcesses"
159
#define LAUNCH_JOBKEY_RESOURCELIMIT_RSS "ResidentSetSize"
160
#define LAUNCH_JOBKEY_RESOURCELIMIT_STACK "Stack"
161
162
#define LAUNCH_JOBKEY_DISABLED_MACHINETYPE "MachineType"
163
#define LAUNCH_JOBKEY_DISABLED_MODELNAME "ModelName"
164
165
#define LAUNCH_JOBSOCKETKEY_TYPE "SockType"
166
#define LAUNCH_JOBSOCKETKEY_PASSIVE "SockPassive"
167
#define LAUNCH_JOBSOCKETKEY_BONJOUR "Bonjour"
168
#define LAUNCH_JOBSOCKETKEY_SECUREWITHKEY "SecureSocketWithKey"
169
#define LAUNCH_JOBSOCKETKEY_PATHNAME "SockPathName"
170
#define LAUNCH_JOBSOCKETKEY_PATHMODE "SockPathMode"
171
#define LAUNCH_JOBSOCKETKEY_NODENAME "SockNodeName"
172
#define LAUNCH_JOBSOCKETKEY_SERVICENAME "SockServiceName"
173
#define LAUNCH_JOBSOCKETKEY_FAMILY "SockFamily"
174
#define LAUNCH_JOBSOCKETKEY_PROTOCOL "SockProtocol"
175
#define LAUNCH_JOBSOCKETKEY_MULTICASTGROUP "MulticastGroup"
176
177
/* These APIs are NOT suitable for general use. Their use should be constrained
178
* to checking into launchd to obtain socket file descriptors using the
179
* LAUNCH_CHECK_IN message type.
180
*/
181
typedef struct _launch_data *launch_data_t;
182
struct _launch_data {
183
uint64_t type;
184
union {
185
struct {
186
union {
187
launch_data_t *_array;
188
char *string;
189
void *opaque;
190
int64_t __junk;
191
};
192
union {
193
uint64_t _array_cnt;
194
uint64_t string_len;
195
uint64_t opaque_size;
196
};
197
};
198
int64_t fd;
199
uint64_t mp;
200
uint64_t err;
201
int64_t number;
202
uint64_t boolean; /* We'd use 'bool' but this struct needs to be used under Rosetta, and sizeof(bool) is different between PowerPC and Intel */
203
double float_num;
204
};
205
};
206
207
typedef enum {
208
LAUNCH_DATA_DICTIONARY = 1,
209
LAUNCH_DATA_ARRAY,
210
LAUNCH_DATA_FD,
211
LAUNCH_DATA_INTEGER,
212
LAUNCH_DATA_REAL,
213
LAUNCH_DATA_BOOL,
214
LAUNCH_DATA_STRING,
215
LAUNCH_DATA_OPAQUE,
216
LAUNCH_DATA_ERRNO,
217
#if HAS_MACH
218
LAUNCH_DATA_MACHPORT,
219
#endif
220
} launch_data_type_t;
221
222
__ld_allocator
223
launch_data_t
224
launch_data_alloc(launch_data_type_t);
225
226
__ld_allocator
227
launch_data_t
228
launch_data_copy(launch_data_t);
229
230
__ld_getter
231
launch_data_type_t
232
launch_data_get_type(const launch_data_t);
233
234
__ld_setter
235
void
236
launch_data_free(launch_data_t);
237
238
__ld_setter
239
bool
240
launch_data_dict_insert(launch_data_t, const launch_data_t, const char *);
241
242
__ld_getter
243
launch_data_t
244
launch_data_dict_lookup(const launch_data_t, const char *);
245
246
__ld_setter
247
bool
248
launch_data_dict_remove(launch_data_t, const char *);
249
250
__ld_iterator(1, 2)
251
void
252
launch_data_dict_iterate(const launch_data_t,
253
void (*)(const launch_data_t, const char *, void *), void *);
254
255
__ld_getter
256
size_t
257
launch_data_dict_get_count(const launch_data_t);
258
259
__ld_setter
260
bool
261
launch_data_array_set_index(launch_data_t, const launch_data_t, size_t);
262
263
__ld_getter
264
launch_data_t
265
launch_data_array_get_index(const launch_data_t, size_t);
266
267
__ld_getter
268
size_t
269
launch_data_array_get_count(const launch_data_t);
270
271
__ld_allocator
272
launch_data_t
273
launch_data_new_fd(int);
274
275
#if HAS_MACH
276
__ld_allocator
277
launch_data_t
278
launch_data_new_machport(mach_port_t);
279
280
__ld_setter
281
bool
282
launch_data_set_machport(launch_data_t, mach_port_t);
283
284
__ld_getter
285
mach_port_t
286
launch_data_get_machport(const launch_data_t);
287
#endif
288
289
__ld_allocator
290
launch_data_t
291
launch_data_new_integer(long long);
292
293
__ld_allocator
294
launch_data_t
295
launch_data_new_bool(bool);
296
297
__ld_allocator
298
launch_data_t
299
launch_data_new_real(double);
300
301
__ld_allocator
302
launch_data_t
303
launch_data_new_string(const char *);
304
305
__ld_allocator
306
launch_data_t
307
launch_data_new_opaque(const void *, size_t);
308
309
__ld_setter
310
bool
311
launch_data_set_fd(launch_data_t, int);
312
313
__ld_setter
314
bool
315
launch_data_set_integer(launch_data_t, long long);
316
317
__ld_setter
318
bool
319
launch_data_set_bool(launch_data_t, bool);
320
321
__ld_setter
322
bool
323
launch_data_set_real(launch_data_t, double);
324
325
__ld_setter
326
bool
327
launch_data_set_string(launch_data_t, const char *);
328
329
__ld_setter
330
bool
331
launch_data_set_opaque(launch_data_t, const void *, size_t);
332
333
__ld_getter
334
int
335
launch_data_get_fd(const launch_data_t);
336
337
__ld_getter
338
long long
339
launch_data_get_integer(const launch_data_t);
340
341
__ld_getter
342
bool
343
launch_data_get_bool(const launch_data_t);
344
345
__ld_getter
346
double
347
launch_data_get_real(const launch_data_t);
348
349
__ld_getter
350
const char *
351
launch_data_get_string(const launch_data_t);
352
353
__ld_getter
354
void *
355
launch_data_get_opaque(const launch_data_t);
356
357
__ld_getter
358
size_t
359
launch_data_get_opaque_size(const launch_data_t);
360
361
__ld_getter
362
int
363
launch_data_get_errno(const launch_data_t);
364
365
366
/* launch_get_fd()
367
*
368
* Use this to get the FD if you're doing asynchronous I/O with select(),
369
* poll() or kevent().
370
*/
371
__ld_normal
372
int
373
launch_get_fd(void);
374
375
/* launch_msg()
376
*
377
* Use this API to check in. Nothing else.
378
*/
379
__ld_normal
380
launch_data_t
381
launch_msg(const launch_data_t);
382
383
__END_DECLS
384
385
#pragma GCC visibility pop
386
387
#endif /* __LAUNCH_H__ */
388
389