blob: 13f52b880bd474d6cf6b60c006c5d6c919eb8f5a [file] [log] [blame]
/*
* Copyright (c) 2015 Apple Inc. All rights reserved.
*
* @APPLE_APACHE_LICENSE_HEADER_START@
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @APPLE_APACHE_LICENSE_HEADER_END@
*/
#ifndef __FIREHOSE_SERVER_INTERNAL__
#define __FIREHOSE_SERVER_INTERNAL__
OS_OBJECT_CLASS_DECL(firehose_client, object);
#define FIREHOSE_CLIENT_CLASS OS_OBJECT_VTABLE(firehose_client)
typedef struct firehose_snapshot_s *firehose_snapshot_t;
struct firehose_snapshot_s {
firehose_snapshot_handler_t handler;
dispatch_group_t fs_group;
};
struct firehose_client_s {
union {
_OS_OBJECT_HEADER(void *os_obj_isa, os_obj_ref_cnt, os_obj_xref_cnt);
struct _os_object_s fc_as_os_object;
};
TAILQ_ENTRY(firehose_client_s) fc_entry;
struct firehose_client_s *volatile fc_next[2];
firehose_buffer_t fc_buffer;
uint64_t volatile fc_mem_sent_flushed_pos;
uint64_t volatile fc_mem_flushed_pos;
uint64_t volatile fc_io_sent_flushed_pos;
uint64_t volatile fc_io_flushed_pos;
#define FC_STATE_ENQUEUED(for_io) (0x0001u << (for_io))
#define FC_STATE_MEM_ENQUEUED 0x0001
#define FC_STATE_IO_ENQUEUED 0x0002
#define FC_STATE_CANCELING(for_io) (0x0010u << (for_io))
#define FC_STATE_MEM_CANCELING 0x0010
#define FC_STATE_IO_CANCELING 0x0020
#define FC_STATE_CANCELED(for_io) (0x0100u << (for_io))
#define FC_STATE_MEM_CANCELED 0x0100
#define FC_STATE_IO_CANCELED 0x0200
#define FC_STATE_CANCELED_MASK 0x0300
uintptr_t volatile fc_state;
void *volatile fc_ctxt;
union {
dispatch_mach_t fc_mach_channel;
dispatch_source_t fc_kernel_source;
};
mach_port_t fc_recvp;
mach_port_t fc_sendp;
os_unfair_lock fc_lock;
pid_t fc_pid;
int fc_pidversion;
uid_t fc_euid;
bool fc_use_notifs;
bool fc_memory_corrupted;
bool fc_needs_io_snapshot;
bool fc_needs_mem_snapshot;
bool fc_quarantined;
};
void
_firehose_client_xref_dispose(struct firehose_client_s *fc);
void
_firehose_client_dispose(struct firehose_client_s *fc);
extern unsigned char __libfirehose_serverVersionString[];
extern double __libfirehose_serverVersionNumber;
#endif // __FIREHOSE_SERVER_INTERNAL__