#ifndef _NOTIFY_DAEMON_H_
#define _NOTIFY_DAEMON_H_
#define DISPATCH_MACH_SPI 1
#include <libnotify.h>
#include <mach/mach.h>
#include <launch.h>
#include <dispatch/dispatch.h>
#include <dispatch/private.h>
#define STATUS_REQUEST_SHORT 0
#define STATUS_REQUEST_LONG 1
struct global_s
{
mach_port_t server_port;
launch_data_t launch_dict;
notify_state_t *notify_state;
dispatch_workloop_t workloop;
dispatch_mach_t mach_channel;
dispatch_source_t sig_usr1_src;
dispatch_source_t sig_usr2_src;
dispatch_source_t sig_winch_src;
uint32_t nslots;
uint32_t slot_id;
uint32_t *shared_memory_base;
uint32_t *shared_memory_refcount;
uint32_t *last_shm_base;
uint32_t log_cutoff;
uint32_t log_default;
char *log_path;
};
extern struct global_s global;
struct call_statistics_s
{
uint64_t post;
uint64_t post_no_op;
uint64_t post_by_id;
uint64_t post_by_name;
uint64_t post_by_name_and_fetch_id;
uint64_t reg;
uint64_t reg_plain;
uint64_t reg_check;
uint64_t reg_signal;
uint64_t reg_file;
uint64_t reg_port;
uint64_t cancel;
uint64_t suspend;
uint64_t resume;
uint64_t suspend_pid;
uint64_t resume_pid;
uint64_t check;
uint64_t get_state;
uint64_t get_state_by_client;
uint64_t get_state_by_id;
uint64_t get_state_by_client_and_fetch_id;
uint64_t set_state;
uint64_t set_state_by_client;
uint64_t set_state_by_id;
uint64_t set_state_by_client_and_fetch_id;
uint64_t set_owner;
uint64_t set_access;
uint64_t monitor_file;
uint64_t service_timer;
uint64_t service_path;
uint64_t cleanup;
uint64_t regenerate;
uint64_t checkin;
};
extern struct call_statistics_s call_statistics;
extern void log_message(int priority, const char *str, ...);
extern uint32_t daemon_post(const char *name, uint32_t u, uint32_t g);
extern uint32_t daemon_post_nid(uint64_t nid, uint32_t u, uint32_t g);
extern void daemon_post_client(uint64_t cid);
extern void daemon_set_state(const char *name, uint64_t val);
extern void dump_status(uint32_t level, int fd);
extern bool has_root_entitlement(pid_t pid);
#endif