launch.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  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. #ifndef __LAUNCH_H__
  21. #define __LAUNCH_H__
  22. #include <mach/mach.h>
  23. #include <sys/cdefs.h>
  24. #include <stddef.h>
  25. #include <stdbool.h>
  26. #pragma GCC visibility push(default)
  27. __BEGIN_DECLS
  28. #ifdef __GNUC__
  29. #define __ld_normal __attribute__((__nothrow__))
  30. #define __ld_setter __attribute__((__nothrow__, __nonnull__))
  31. #define __ld_getter __attribute__((__nothrow__, __nonnull__, __pure__, __warn_unused_result__))
  32. #define __ld_iterator(x, y) __attribute__((__nonnull__(x, y)))
  33. #define __ld_allocator __attribute__((__nothrow__, __malloc__, __nonnull__, __warn_unused_result__))
  34. #else
  35. #define __ld_normal
  36. #define __ld_setter
  37. #define __ld_getter
  38. #define __ld_iterator(x, y)
  39. #define __ld_allocator
  40. #endif
  41. #define LAUNCH_KEY_SUBMITJOB "SubmitJob"
  42. #define LAUNCH_KEY_REMOVEJOB "RemoveJob"
  43. #define LAUNCH_KEY_STARTJOB "StartJob"
  44. #define LAUNCH_KEY_STOPJOB "StopJob"
  45. #define LAUNCH_KEY_GETJOB "GetJob"
  46. #define LAUNCH_KEY_GETJOBS "GetJobs"
  47. #define LAUNCH_KEY_CHECKIN "CheckIn"
  48. #define LAUNCH_JOBKEY_DEFAULTS "__Defaults"
  49. #define LAUNCH_JOBKEY_LABEL "Label"
  50. #define LAUNCH_JOBKEY_DISABLED "Disabled"
  51. #define LAUNCH_JOBKEY_USERNAME "UserName"
  52. #define LAUNCH_JOBKEY_GROUPNAME "GroupName"
  53. #define LAUNCH_JOBKEY_TIMEOUT "TimeOut"
  54. #define LAUNCH_JOBKEY_EXITTIMEOUT "ExitTimeOut"
  55. #define LAUNCH_JOBKEY_INITGROUPS "InitGroups"
  56. #define LAUNCH_JOBKEY_SOCKETS "Sockets"
  57. #define LAUNCH_JOBKEY_MACHSERVICES "MachServices"
  58. #define LAUNCH_JOBKEY_MACHSERVICELOOKUPPOLICIES "MachServiceLookupPolicies"
  59. #define LAUNCH_JOBKEY_INETDCOMPATIBILITY "inetdCompatibility"
  60. #define LAUNCH_JOBKEY_ENABLEGLOBBING "EnableGlobbing"
  61. #define LAUNCH_JOBKEY_PROGRAMARGUMENTS "ProgramArguments"
  62. #define LAUNCH_JOBKEY_PROGRAM "Program"
  63. #define LAUNCH_JOBKEY_ONDEMAND "OnDemand"
  64. #define LAUNCH_JOBKEY_KEEPALIVE "KeepAlive"
  65. #define LAUNCH_JOBKEY_LIMITLOADTOHOSTS "LimitLoadToHosts"
  66. #define LAUNCH_JOBKEY_LIMITLOADFROMHOSTS "LimitLoadFromHosts"
  67. #define LAUNCH_JOBKEY_LIMITLOADTOSESSIONTYPE "LimitLoadToSessionType"
  68. #define LAUNCH_JOBKEY_LIMITLOADTOHARDWARE "LimitLoadToHardware"
  69. #define LAUNCH_JOBKEY_LIMITLOADFROMHARDWARE "LimitLoadFromHardware"
  70. #define LAUNCH_JOBKEY_RUNATLOAD "RunAtLoad"
  71. #define LAUNCH_JOBKEY_ROOTDIRECTORY "RootDirectory"
  72. #define LAUNCH_JOBKEY_WORKINGDIRECTORY "WorkingDirectory"
  73. #define LAUNCH_JOBKEY_ENVIRONMENTVARIABLES "EnvironmentVariables"
  74. #define LAUNCH_JOBKEY_USERENVIRONMENTVARIABLES "UserEnvironmentVariables"
  75. #define LAUNCH_JOBKEY_UMASK "Umask"
  76. #define LAUNCH_JOBKEY_NICE "Nice"
  77. #define LAUNCH_JOBKEY_HOPEFULLYEXITSFIRST "HopefullyExitsFirst"
  78. #define LAUNCH_JOBKEY_HOPEFULLYEXITSLAST "HopefullyExitsLast"
  79. #define LAUNCH_JOBKEY_LOWPRIORITYIO "LowPriorityIO"
  80. #define LAUNCH_JOBKEY_SESSIONCREATE "SessionCreate"
  81. #define LAUNCH_JOBKEY_STARTONMOUNT "StartOnMount"
  82. #define LAUNCH_JOBKEY_SOFTRESOURCELIMITS "SoftResourceLimits"
  83. #define LAUNCH_JOBKEY_HARDRESOURCELIMITS "HardResourceLimits"
  84. #define LAUNCH_JOBKEY_STANDARDINPATH "StandardInPath"
  85. #define LAUNCH_JOBKEY_STANDARDOUTPATH "StandardOutPath"
  86. #define LAUNCH_JOBKEY_STANDARDERRORPATH "StandardErrorPath"
  87. #define LAUNCH_JOBKEY_DEBUG "Debug"
  88. #define LAUNCH_JOBKEY_WAITFORDEBUGGER "WaitForDebugger"
  89. #define LAUNCH_JOBKEY_QUEUEDIRECTORIES "QueueDirectories"
  90. #define LAUNCH_JOBKEY_WATCHPATHS "WatchPaths"
  91. #define LAUNCH_JOBKEY_STARTINTERVAL "StartInterval"
  92. #define LAUNCH_JOBKEY_STARTCALENDARINTERVAL "StartCalendarInterval"
  93. #define LAUNCH_JOBKEY_BONJOURFDS "BonjourFDs"
  94. #define LAUNCH_JOBKEY_LASTEXITSTATUS "LastExitStatus"
  95. #define LAUNCH_JOBKEY_PID "PID"
  96. #define LAUNCH_JOBKEY_THROTTLEINTERVAL "ThrottleInterval"
  97. #define LAUNCH_JOBKEY_LAUNCHONLYONCE "LaunchOnlyOnce"
  98. #define LAUNCH_JOBKEY_ABANDONPROCESSGROUP "AbandonProcessGroup"
  99. #define LAUNCH_JOBKEY_IGNOREPROCESSGROUPATSHUTDOWN "IgnoreProcessGroupAtShutdown"
  100. #define LAUNCH_JOBKEY_POLICIES "Policies"
  101. #define LAUNCH_JOBKEY_ENABLETRANSACTIONS "EnableTransactions"
  102. #define LAUNCH_JOBKEY_CFBUNDLEIDENTIFIER "CFBundleIdentifier"
  103. #define LAUNCH_JOBKEY_PROCESSTYPE "ProcessType"
  104. #define LAUNCH_KEY_PROCESSTYPE_APP "App"
  105. #define LAUNCH_KEY_PROCESSTYPE_STANDARD "Standard"
  106. #define LAUNCH_KEY_PROCESSTYPE_BACKGROUND "Background"
  107. #define LAUNCH_KEY_PROCESSTYPE_INTERACTIVE "Interactive"
  108. #define LAUNCH_KEY_PROCESSTYPE_ADAPTIVE "Adaptive"
  109. #define LAUNCH_JOBPOLICY_DENYCREATINGOTHERJOBS "DenyCreatingOtherJobs"
  110. #define LAUNCH_JOBINETDCOMPATIBILITY_WAIT "Wait"
  111. #define LAUNCH_JOBKEY_MACH_RESETATCLOSE "ResetAtClose"
  112. #define LAUNCH_JOBKEY_MACH_HIDEUNTILCHECKIN "HideUntilCheckIn"
  113. #define LAUNCH_JOBKEY_MACH_DRAINMESSAGESONCRASH "DrainMessagesOnCrash"
  114. #define LAUNCH_JOBKEY_MACH_PINGEVENTUPDATES "PingEventUpdates"
  115. #define LAUNCH_JOBKEY_KEEPALIVE_SUCCESSFULEXIT "SuccessfulExit"
  116. #define LAUNCH_JOBKEY_KEEPALIVE_NETWORKSTATE "NetworkState"
  117. #define LAUNCH_JOBKEY_KEEPALIVE_PATHSTATE "PathState"
  118. #define LAUNCH_JOBKEY_KEEPALIVE_OTHERJOBACTIVE "OtherJobActive"
  119. #define LAUNCH_JOBKEY_KEEPALIVE_OTHERJOBENABLED "OtherJobEnabled"
  120. #define LAUNCH_JOBKEY_KEEPALIVE_AFTERINITIALDEMAND "AfterInitialDemand"
  121. #define LAUNCH_JOBKEY_KEEPALIVE_CRASHED "Crashed"
  122. #define LAUNCH_JOBKEY_LAUNCHEVENTS "LaunchEvents"
  123. #define LAUNCH_JOBKEY_CAL_MINUTE "Minute"
  124. #define LAUNCH_JOBKEY_CAL_HOUR "Hour"
  125. #define LAUNCH_JOBKEY_CAL_DAY "Day"
  126. #define LAUNCH_JOBKEY_CAL_WEEKDAY "Weekday"
  127. #define LAUNCH_JOBKEY_CAL_MONTH "Month"
  128. #define LAUNCH_JOBKEY_RESOURCELIMIT_CORE "Core"
  129. #define LAUNCH_JOBKEY_RESOURCELIMIT_CPU "CPU"
  130. #define LAUNCH_JOBKEY_RESOURCELIMIT_DATA "Data"
  131. #define LAUNCH_JOBKEY_RESOURCELIMIT_FSIZE "FileSize"
  132. #define LAUNCH_JOBKEY_RESOURCELIMIT_MEMLOCK "MemoryLock"
  133. #define LAUNCH_JOBKEY_RESOURCELIMIT_NOFILE "NumberOfFiles"
  134. #define LAUNCH_JOBKEY_RESOURCELIMIT_NPROC "NumberOfProcesses"
  135. #define LAUNCH_JOBKEY_RESOURCELIMIT_RSS "ResidentSetSize"
  136. #define LAUNCH_JOBKEY_RESOURCELIMIT_STACK "Stack"
  137. #define LAUNCH_JOBKEY_DISABLED_MACHINETYPE "MachineType"
  138. #define LAUNCH_JOBKEY_DISABLED_MODELNAME "ModelName"
  139. #define LAUNCH_JOBSOCKETKEY_TYPE "SockType"
  140. #define LAUNCH_JOBSOCKETKEY_PASSIVE "SockPassive"
  141. #define LAUNCH_JOBSOCKETKEY_BONJOUR "Bonjour"
  142. #define LAUNCH_JOBSOCKETKEY_SECUREWITHKEY "SecureSocketWithKey"
  143. #define LAUNCH_JOBSOCKETKEY_PATHNAME "SockPathName"
  144. #define LAUNCH_JOBSOCKETKEY_PATHMODE "SockPathMode"
  145. #define LAUNCH_JOBSOCKETKEY_NODENAME "SockNodeName"
  146. #define LAUNCH_JOBSOCKETKEY_SERVICENAME "SockServiceName"
  147. #define LAUNCH_JOBSOCKETKEY_FAMILY "SockFamily"
  148. #define LAUNCH_JOBSOCKETKEY_PROTOCOL "SockProtocol"
  149. #define LAUNCH_JOBSOCKETKEY_MULTICASTGROUP "MulticastGroup"
  150. /* These APIs are NOT suitable for general use. Their use should be constrained
  151. * to checking into launchd to obtain socket file descriptors using the
  152. * LAUNCH_CHECK_IN message type.
  153. */
  154. typedef struct _launch_data *launch_data_t;
  155. typedef enum {
  156. LAUNCH_DATA_DICTIONARY = 1,
  157. LAUNCH_DATA_ARRAY,
  158. LAUNCH_DATA_FD,
  159. LAUNCH_DATA_INTEGER,
  160. LAUNCH_DATA_REAL,
  161. LAUNCH_DATA_BOOL,
  162. LAUNCH_DATA_STRING,
  163. LAUNCH_DATA_OPAQUE,
  164. LAUNCH_DATA_ERRNO,
  165. LAUNCH_DATA_MACHPORT,
  166. } launch_data_type_t;
  167. __ld_allocator
  168. launch_data_t
  169. launch_data_alloc(launch_data_type_t);
  170. __ld_allocator
  171. launch_data_t
  172. launch_data_copy(launch_data_t);
  173. __ld_getter
  174. launch_data_type_t
  175. launch_data_get_type(const launch_data_t);
  176. __ld_setter
  177. void
  178. launch_data_free(launch_data_t);
  179. __ld_setter
  180. bool
  181. launch_data_dict_insert(launch_data_t, const launch_data_t, const char *);
  182. __ld_getter
  183. launch_data_t
  184. launch_data_dict_lookup(const launch_data_t, const char *);
  185. __ld_setter
  186. bool
  187. launch_data_dict_remove(launch_data_t, const char *);
  188. __ld_iterator(1, 2)
  189. void
  190. launch_data_dict_iterate(const launch_data_t,
  191. void (*)(const launch_data_t, const char *, void *), void *);
  192. __ld_getter
  193. size_t
  194. launch_data_dict_get_count(const launch_data_t);
  195. __ld_setter
  196. bool
  197. launch_data_array_set_index(launch_data_t, const launch_data_t, size_t);
  198. __ld_getter
  199. launch_data_t
  200. launch_data_array_get_index(const launch_data_t, size_t);
  201. __ld_getter
  202. size_t
  203. launch_data_array_get_count(const launch_data_t);
  204. __ld_allocator
  205. launch_data_t
  206. launch_data_new_fd(int);
  207. __ld_allocator
  208. launch_data_t
  209. launch_data_new_machport(mach_port_t);
  210. __ld_allocator
  211. launch_data_t
  212. launch_data_new_integer(long long);
  213. __ld_allocator
  214. launch_data_t
  215. launch_data_new_bool(bool);
  216. __ld_allocator
  217. launch_data_t
  218. launch_data_new_real(double);
  219. __ld_allocator
  220. launch_data_t
  221. launch_data_new_string(const char *);
  222. __ld_allocator
  223. launch_data_t
  224. launch_data_new_opaque(const void *, size_t);
  225. __ld_setter
  226. bool
  227. launch_data_set_fd(launch_data_t, int);
  228. __ld_setter
  229. bool
  230. launch_data_set_machport(launch_data_t, mach_port_t);
  231. __ld_setter
  232. bool
  233. launch_data_set_integer(launch_data_t, long long);
  234. __ld_setter
  235. bool
  236. launch_data_set_bool(launch_data_t, bool);
  237. __ld_setter
  238. bool
  239. launch_data_set_real(launch_data_t, double);
  240. __ld_setter
  241. bool
  242. launch_data_set_string(launch_data_t, const char *);
  243. __ld_setter
  244. bool
  245. launch_data_set_opaque(launch_data_t, const void *, size_t);
  246. __ld_getter
  247. int
  248. launch_data_get_fd(const launch_data_t);
  249. __ld_getter
  250. mach_port_t
  251. launch_data_get_machport(const launch_data_t);
  252. __ld_getter
  253. long long
  254. launch_data_get_integer(const launch_data_t);
  255. __ld_getter
  256. bool
  257. launch_data_get_bool(const launch_data_t);
  258. __ld_getter
  259. double
  260. launch_data_get_real(const launch_data_t);
  261. __ld_getter
  262. const char *
  263. launch_data_get_string(const launch_data_t);
  264. __ld_getter
  265. void *
  266. launch_data_get_opaque(const launch_data_t);
  267. __ld_getter
  268. size_t
  269. launch_data_get_opaque_size(const launch_data_t);
  270. __ld_getter
  271. int
  272. launch_data_get_errno(const launch_data_t);
  273. /* launch_get_fd()
  274. *
  275. * Use this to get the FD if you're doing asynchronous I/O with select(),
  276. * poll() or kevent().
  277. */
  278. __ld_normal
  279. int
  280. launch_get_fd(void);
  281. /* launch_msg()
  282. *
  283. * Use this API to check in. Nothing else.
  284. */
  285. __ld_normal
  286. launch_data_t
  287. launch_msg(const launch_data_t);
  288. __END_DECLS
  289. #pragma GCC visibility pop
  290. #endif /* __LAUNCH_H__ */