spicetools/avs/core.h

767 lines
30 KiB
C
Raw Normal View History

2024-08-28 15:10:34 +00:00
#pragma once
#include <cstdint>
#include <cstddef>
#include <string>
#include <windows.h>
namespace avs {
namespace core {
/*
* enums
*/
enum node_type {
NODE_TYPE_node = 1,
NODE_TYPE_s8 = 2,
NODE_TYPE_u8 = 3,
NODE_TYPE_s16 = 4,
NODE_TYPE_u16 = 5,
NODE_TYPE_s32 = 6,
NODE_TYPE_u32 = 7,
NODE_TYPE_s64 = 8,
NODE_TYPE_u64 = 9,
NODE_TYPE_bin = 10,
NODE_TYPE_str = 11,
NODE_TYPE_ip4 = 12,
NODE_TYPE_time = 13,
NODE_TYPE_float = 14,
NODE_TYPE_double = 15,
NODE_TYPE_2s8 = 16,
NODE_TYPE_2u8 = 17,
NODE_TYPE_2s16 = 18,
NODE_TYPE_2u16 = 19,
NODE_TYPE_2s32 = 20,
NODE_TYPE_2u32 = 21,
NODE_TYPE_2s64 = 22,
NODE_TYPE_2u64 = 23,
NODE_TYPE_2f = 24,
NODE_TYPE_2d = 25,
NODE_TYPE_3s8 = 26,
NODE_TYPE_3u8 = 27,
NODE_TYPE_3s16 = 28,
NODE_TYPE_3u16 = 29,
NODE_TYPE_3s32 = 30,
NODE_TYPE_3u32 = 31,
NODE_TYPE_3s64 = 32,
NODE_TYPE_3u64 = 33,
NODE_TYPE_3f = 34,
NODE_TYPE_3d = 35,
NODE_TYPE_4s8 = 36,
NODE_TYPE_4u8 = 37,
NODE_TYPE_4s16 = 38,
NODE_TYPE_4u16 = 39,
NODE_TYPE_4s32 = 40,
NODE_TYPE_4u32 = 41,
NODE_TYPE_4s64 = 42,
NODE_TYPE_4u64 = 43,
NODE_TYPE_4f = 44,
NODE_TYPE_4d = 45,
NODE_TYPE_attr = 46,
NODE_TYPE_attr_and_node = 47,
NODE_TYPE_vs8 = 48,
NODE_TYPE_vu8 = 49,
NODE_TYPE_vs16 = 50,
NODE_TYPE_vu16 = 51,
NODE_TYPE_bool = 52,
NODE_TYPE_2b = 53,
NODE_TYPE_3b = 54,
NODE_TYPE_4b = 55,
NODE_TYPE_vb = 56,
};
enum psmap_type {
PSMAP_TYPE_s8 = 2,
PSMAP_TYPE_u8 = 3,
PSMAP_TYPE_s16 = 4,
PSMAP_TYPE_u16 = 5,
PSMAP_TYPE_s32 = 6,
PSMAP_TYPE_u32 = 7,
PSMAP_TYPE_s64 = 8,
PSMAP_TYPE_u64 = 9,
PSMAP_TYPE_str = 10,
PSMAP_TYPE_str2 = 11,
PSMAP_TYPE_attr = 45,
PSMAP_TYPE_bool = 50,
};
enum property_node_traversal_option {
TRAVERSE_PARENT = 0,
TRAVERSE_FIRST_CHILD = 1,
TRAVERSE_FIRST_ATTR = 2,
TRAVERSE_FIRST_SIBLING = 3,
TRAVERSE_NEXT_SIBLING = 4,
TRAVERSE_PREVIOUS_SIBLING = 5,
TRAVERSE_LAST_SIBLING = 6,
TRAVERSE_NEXT_SEARCH_RESULT = 7,
TRAVERSE_PREV_SEARCH_RESULT = 8,
};
enum property_flag {
PROP_XML = 0x000,
PROP_READ = 0x001,
PROP_WRITE = 0x002,
PROP_CREATE = 0x004,
PROP_BINARY = 0x008,
PROP_APPEND = 0x010,
PROP_DEBUG_VERBOSE = 0x400,
PROP_JSON = 0x800,
PROP_BIN_PLAIN_NODE_NAMES = 0x1000,
};
enum cstream_type {
CSTREAM_AVSLZ_DECOMPRESS = 0,
CSTREAM_AVSLZ_COMPRESS = 1,
};
/*
* structs
*/
struct node_stat {
int nodes;
int data;
int unk1, unk2, unk3;
};
typedef node_stat *node_stat_ptr;
struct property_info {
uint8_t dummy[560];
uint32_t error_code;
uint32_t has_error;
uint32_t unk;
int8_t buffer_offset;
};
typedef property_info *property_ptr;
struct node_info {
uint8_t dummy[47];
node_type type;
};
typedef node_info *node_ptr;
struct psmap_data {
uint8_t type;
uint8_t flags;
uint16_t offset;
uint32_t size;
const char *path;
void *xdefault;
};
typedef psmap_data *psmap_data_ptr;
struct avs_stat {
uint64_t st_atime;
uint64_t st_mtime;
uint64_t st_ctime;
uint32_t unk1;
uint32_t filesize;
struct stat padding;
};
struct cstream_data {
unsigned char *out_buf;
unsigned char *in_buf;
uint32_t out_size;
uint32_t in_size;
};
struct avs_iovec {
void *iov_base;
size_t iov_len;
};
/*
* net
*/
constexpr int AVS_NET_PROTOCOL_MAGIC = 0x1b55fa1;
constexpr int AVS_NET_POLL_POLLIN = 0x0001;
constexpr int AVS_NET_PROTOCOL_SSL_TLS_V1_1 = 2;
constexpr int T_NET_PROTO_ID_DEFAULT = 0;
enum avs_net_sock_opts {
AVS_SO_SNDTIMEO = 2,
AVS_SO_RCVTIMEO = 3,
AVS_SO_NONBLOCK = 9,
AVS_SO_SSL_PROTOCOL = 10,
AVS_SO_SSL_VERIFY_CN = 13,
};
typedef uint32_t avs_net_size_t;
typedef uint16_t avs_net_port_t;
typedef int avs_net_pollfds_size_t;
typedef uint64_t avs_net_timeout_t;
struct avs_net_poll_fd_opaque;
struct avs_net_proto_desc_work;
struct avs_net_sock_desc_work;
struct avs_net_poll_fd {
int socket;
uint16_t events;
uint16_t r_events;
int error;
};
struct avs_net_protocol_ops {
int (*protocol_initialize)(struct avs_net_proto_desc_work *work);
int (*protocol_finalize)(struct avs_net_proto_desc_work *work);
int (*allocate_socket)(struct avs_net_sock_desc_work *work);
void (*free_socket)(struct avs_net_sock_desc_work *work);
int (*initialize_socket)(struct avs_net_sock_desc_work *work);
void (*finalize_socket)(struct avs_net_sock_desc_work *work);
int (*setsockopt)(
struct avs_net_sock_desc_work *work,
unsigned int option_name,
const void *option_value,
avs_net_size_t option_len);
int (*getsockopt)(
struct avs_net_sock_desc_work *work,
unsigned int option_name,
void *option_value,
avs_net_size_t *option_len);
int (*bind)(
struct avs_net_sock_desc_work *work,
uint32_t address,
avs_net_port_t port);
int (*connect)(
struct avs_net_sock_desc_work *work,
uint32_t address,
avs_net_port_t port);
int (*listen)(struct avs_net_sock_desc_work *work, int backlog);
int (*accept)(
struct avs_net_sock_desc_work *work,
void *new_sock,
uint32_t *address,
avs_net_port_t *port);
int (*close)(struct avs_net_sock_desc_work *work);
int (*shutdown)(struct avs_net_sock_desc_work *work, int how);
int (*sendtov)(
struct avs_net_sock_desc_work *work,
const struct avs_iovec *iovec,
int iov_count,
uint32_t address,
avs_net_port_t port);
int (*recvfromv)(
struct avs_net_sock_desc_work *work,
struct avs_iovec *iovec,
int iov_count,
uint32_t *address,
avs_net_port_t *port);
int (*pollfds_add)(
struct avs_net_sock_desc_work *work,
struct avs_net_poll_fd_opaque *fds,
avs_net_pollfds_size_t fds_size,
struct avs_net_poll_fd *events);
int (*pollfds_get)(
struct avs_net_sock_desc_work *work,
struct avs_net_poll_fd *events,
struct avs_net_poll_fd_opaque *fds);
int (*sockpeer)(
struct avs_net_sock_desc_work *work,
bool peer_name,
uint32_t *address,
avs_net_port_t *port);
};
struct avs_net_protocol {
struct avs_net_protocol_ops *ops;
uint32_t magic;
uint32_t protocol_id;
uint32_t proto_work_size;
uint32_t sock_work_size;
};
struct avs_net_protocol_legacy {
struct avs_net_protocol_ops *ops;
uint32_t protocol_id;
uint32_t mystery;
uint32_t sz_work;
};
/*
* error
*/
typedef int32_t avs_error_t;
constexpr avs_error_t AVS_ERROR_MASK = 0x80000000;
constexpr avs_error_t AVS_ERROR_FACILITY_MASK = 0x7fff;
enum avs_error_class {
AVS_ERROR_CLASS_NET = 8,
};
enum avs_error_subclass {
AVS_ERROR_SUBCLASS_SC_INVAL = 0x00000016,
AVS_ERROR_SUBCLASS_SC_BADMSG = 0x0000004a,
AVS_ERROR_SUBCLASS_NET_TIMEOUT = 0x00001000,
};
inline avs_error_t avs_error_make(avs_error_class error_class, avs_error_subclass error_subclass) {
return static_cast<avs_error_t>(
AVS_ERROR_MASK |
((error_class & AVS_ERROR_FACILITY_MASK) << 16) |
(error_subclass & AVS_ERROR_FACILITY_MASK));
}
/*
* misc
*/
typedef int (*avs_reader_t)(uint32_t, void *, size_t);
typedef uint32_t avs_file_t;
// import mapping
struct avs_core_import {
// required functions
const char *version;
const char *property_search;
const char *boot;
const char *shutdown;
const char *property_desc_to_buffer;
const char *property_destroy;
const char *property_read_query_memsize;
const char *property_create;
const char *property_insert_read;
const char *property_node_create;
const char *property_node_remove;
const char *property_node_refer;
const char *std_setenv;
// optional functions
const char *avs_fs_open = "?";
const char *avs_fs_copy = "?";
const char *avs_fs_close = "?";
const char *avs_fs_dump_mountpoint = "?";
const char *avs_fs_mount = "?";
const char *avs_fs_fstat = "?";
const char *avs_fs_lstat = "?";
const char *avs_fs_lseek = "?";
const char *avs_fs_read = "?";
const char *avs_fs_opendir = "?";
const char *avs_fs_readdir = "?";
const char *avs_fs_closedir = "?";
const char *cstream_create = "?";
const char *cstream_operate = "?";
const char *cstream_finish = "?";
const char *cstream_destroy = "?";
const char *property_node_read = "?";
const char *property_node_write = "?";
const char *property_file_write = "?";
const char *property_node_traversal = "?";
const char *property_psmap_export = "?";
const char *property_psmap_import = "?";
const char *property_node_name = "?";
const char *property_node_get_desc = "?";
const char *property_get_error = "?";
const char *property_node_clone = "?";
const char *property_query_size = "?";
const char *property_node_query_stat = "?";
const char *property_node_datasize = "?";
const char *property_mem_write = "?";
const char *property_part_write = "?";
const char *property_node_absolute_path = "?";
const char *property_node_has = "?";
const char *property_node_is_array = "?";
const char *property_node_type = "?";
const char *property_get_attribute_bool = "?";
const char *property_node_get_attribute_bool = "?";
const char *property_node_get_attribute_u32 = "?";
const char *property_node_get_attribute_s32 = "?";
const char *property_node_rename = "?";
const char *property_query_freesize = "?";
const char *property_clear_error = "?";
const char *property_lookup_encode = "?";
const char *property_unlock_flag = "?";
const char *property_lock_flag = "?";
const char *property_set_flag = "?";
const char *property_part_write_meta = "?";
const char *property_part_write_meta2 = "?";
const char *property_read_data = "?";
const char *property_read_meta = "?";
const char *property_get_attribute_u32 = "?";
const char *property_get_attribute_s32 = "?";
const char *property_get_fingerprint = "?";
const char *property_node_refdata = "?";
const char *property_insert_read_with_filename = "?";
const char *property_mem_read = "?";
const char *property_read_query_memsize_long = "?";
const char *property_clear = "?";
const char *avs_net_add_protocol = "?";
const char *avs_net_del_protocol = "?";
const char *avs_net_addrinfobyaddr = "?";
const char *avs_net_socket = "?";
const char *avs_net_setsockopt = "?";
const char *avs_net_getsockopt = "?";
const char *avs_net_connect = "?";
const char *avs_net_send = "?";
const char *avs_net_recv = "?";
const char *avs_net_poll = "?";
const char *avs_net_pollfds_add = "?";
const char *avs_net_pollfds_get = "?";
const char *avs_net_bind = "?";
const char *avs_net_close = "?";
const char *avs_net_shutdown = "?";
const char *avs_net_get_peername = "?";
const char *avs_net_get_sockname = "?";
};
extern avs_core_import IMPORT_NAMES;
// settings
enum Version {
AVSLEGACY,
AVS21360,
AVS21430,
AVS21580,
AVS21610,
AVS21630,
AVS21651,
AVS21671,
AVS21681,
AVS21700,
AVS21730,
AVS_VERSION_COUNT
};
extern Version VERSION;
extern std::string VERSION_STR;
extern size_t HEAP_SIZE;
extern bool DEFAULT_HEAP_SIZE_SET;
extern std::string LOG_PATH;
extern std::string CFG_PATH;
extern std::string LOG_LEVEL_CUSTOM;
// handle
extern HINSTANCE DLL_INSTANCE;
extern std::string DLL_NAME;
// helpers
property_ptr config_read(const std::string &filename, size_t extra_space = 0, bool allow_fail = false);
property_ptr config_read_string(const char* input);
node_ptr property_search_safe(property_ptr prop, node_ptr node, const char *name);
void property_search_remove_safe(property_ptr prop, node_ptr node, const char *name);
bool file_exists(const char* filename);
void config_destroy(property_ptr prop);
std::string error_str(int32_t error);
// functions
void set_default_heap_size(const std::string &dll_name);
void create_log();
bool load_dll();
void boot();
void copy_defaults();
void shutdown();
/*
* library functions
*/
typedef int (*AVS215_BOOT_T)(void *, void *, size_t, void *, size_t, void *, HANDLE);
typedef int (*AVS216_BOOT_T)(void *, void *, size_t, void *, void *, HANDLE);
extern AVS215_BOOT_T avs215_boot;
extern AVS216_BOOT_T avs216_boot;
typedef void (*AVS_SHUTDOWN_T)(void);
extern AVS_SHUTDOWN_T avs_shutdown;
typedef void *(*PROPERTY_DESC_TO_BUFFER_T)(property_ptr prop);
extern PROPERTY_DESC_TO_BUFFER_T property_desc_to_buffer;
typedef node_ptr (*PROPERTY_SEARCH_T)(property_ptr prop, node_ptr node, const char *path);
extern PROPERTY_SEARCH_T property_search;
typedef avs_error_t (*PROPERTY_DESTROY_T)(property_ptr prop);
extern PROPERTY_DESTROY_T property_destroy;
typedef int (*PROPERTY_READ_QUERY_MEMSIZE_T)(avs_reader_t reader, avs_file_t file, DWORD *, DWORD *);
extern PROPERTY_READ_QUERY_MEMSIZE_T property_read_query_memsize;
typedef property_ptr (*PROPERTY_CREATE_T)(int flags, void *buffer, uint32_t buffer_size);
extern PROPERTY_CREATE_T property_create;
typedef avs_error_t (*PROPERTY_INSERT_READ_T)(property_ptr prop, node_ptr node, avs_reader_t reader,
avs_file_t file);
extern PROPERTY_INSERT_READ_T property_insert_read;
typedef node_ptr (*PROPERTY_NODE_CREATE_T)(property_ptr prop, node_ptr node, node_type type, const char *path,
...);
extern PROPERTY_NODE_CREATE_T property_node_create;
typedef avs_error_t (*PROPERTY_NODE_REMOVE_T)(node_ptr node);
extern PROPERTY_NODE_REMOVE_T property_node_remove;
typedef int (*PROPERTY_NODE_REFER_T)(property_ptr prop, node_ptr node, const char *path, node_type type,
void *data, uint32_t data_size);
extern PROPERTY_NODE_REFER_T property_node_refer;
typedef int (*STD_SETENV_T)(const char *key, const char *value);
extern STD_SETENV_T avs_std_setenv;
/*
* optional functions
*/
typedef avs_file_t (*AVS_FS_OPEN_T)(const char *name, uint16_t mode, int flags);
extern AVS_FS_OPEN_T avs_fs_open;
typedef void (*AVS_FS_CLOSE_T)(avs_file_t file);
extern AVS_FS_CLOSE_T avs_fs_close;
typedef int (*AVS_FS_DUMP_MOUNTPOINT_T)(void);
extern AVS_FS_DUMP_MOUNTPOINT_T avs_fs_dump_mountpoint;
typedef int (*AVS_FS_MOUNT_T)(const char *mountpoint, const char *fsroot, const char *fstype, void *data);
extern AVS_FS_MOUNT_T avs_fs_mount;
typedef int (*AVS_FS_COPY_T)(const char *sname, const char *dname);
extern AVS_FS_COPY_T avs_fs_copy;
typedef int (*AVS_FS_FSTAT_T)(avs_file_t file, struct avs_stat *stat);
extern AVS_FS_FSTAT_T avs_fs_fstat;
typedef int (*AVS_FS_LSTAT_T)(const char *path, struct avs_stat *stat);
extern AVS_FS_LSTAT_T avs_fs_lstat;
typedef int (*AVS_FS_LSEEK_T)(avs_file_t file, long offset, int origin);
extern AVS_FS_LSEEK_T avs_fs_lseek;
typedef size_t (*AVS_FS_READ_T)(avs_file_t file, uint8_t *data, uint32_t data_size);
extern AVS_FS_READ_T avs_fs_read;
typedef avs_file_t (*AVS_FS_OPENDIR_T)(const char *path);
extern AVS_FS_OPENDIR_T avs_fs_opendir;
typedef const char* (*AVS_FS_READDIR_T)(avs_file_t dir);
extern AVS_FS_READDIR_T avs_fs_readdir;
typedef void (*AVS_FS_CLOSEDIR_T)(avs_file_t dir);
extern AVS_FS_CLOSEDIR_T avs_fs_closedir;
typedef struct cstream_data *(*CSTREAM_CREATE_T)(cstream_type type);
extern CSTREAM_CREATE_T cstream_create;
typedef bool (*CSTREAM_OPERATE_T)(struct cstream_data *data);
extern CSTREAM_OPERATE_T cstream_operate;
typedef bool (*CSTREAM_FINISH_T)(struct cstream_data *data);
extern CSTREAM_FINISH_T cstream_finish;
typedef bool (*CSTREAM_DESTROY_T)(struct cstream_data *data);
extern CSTREAM_DESTROY_T cstream_destroy;
typedef int (*PROPERTY_NODE_READ_T)(node_ptr node, node_type type, void *data, uint32_t data_size);
extern PROPERTY_NODE_READ_T property_node_read;
typedef uint32_t (*PROPERTY_NODE_WRITE_T)(node_ptr node, node_type type, void *data);
extern PROPERTY_NODE_WRITE_T property_node_write;
typedef int (*PROPERTY_FILE_WRITE_T)(property_ptr prop, const char *path);
extern PROPERTY_FILE_WRITE_T property_file_write;
typedef node_ptr (*PROPERTY_NODE_TRAVERSAL_T)(node_ptr node, enum property_node_traversal_option direction);
extern PROPERTY_NODE_TRAVERSAL_T property_node_traversal;
typedef bool (*PROPERTY_PSMAP_EXPORT_T)(property_ptr prop, node_ptr node, uint8_t *data, psmap_data_ptr psmap);
extern PROPERTY_PSMAP_EXPORT_T property_psmap_export;
typedef bool (*PROPERTY_PSMAP_IMPORT_T)(property_ptr prop, node_ptr node, uint8_t *data, psmap_data_ptr psmap);
extern PROPERTY_PSMAP_IMPORT_T property_psmap_import;
typedef avs_error_t (*PROPERTY_NODE_NAME_T)(node_ptr node, char *buffer, uint32_t buffer_size);
extern PROPERTY_NODE_NAME_T property_node_name;
typedef void *(*PROPERTY_NODE_GET_DESC_T)(node_ptr node);
extern PROPERTY_NODE_GET_DESC_T property_node_get_desc;
typedef uint32_t (*PROPERTY_GET_ERROR_T)(property_ptr prop);
extern PROPERTY_GET_ERROR_T property_get_error;
typedef bool (*PROPERTY_NODE_CLONE_T)(property_ptr dst_prop, node_ptr dst_node, node_ptr src_node, bool deep);
extern PROPERTY_NODE_CLONE_T property_node_clone;
typedef avs_error_t (*PROPERTY_QUERY_SIZE_T)(property_ptr prop);
extern PROPERTY_QUERY_SIZE_T property_query_size;
typedef avs_error_t (*PROPERTY_NODE_QUERY_STAT_T)(property_ptr prop, node_ptr node, node_stat_ptr stat);
extern PROPERTY_NODE_QUERY_STAT_T property_node_query_stat;
typedef int32_t (*PROPERTY_NODE_DATASIZE_T)(node_ptr node);
extern PROPERTY_NODE_DATASIZE_T property_node_datasize;
typedef int32_t (*PROPERTY_MEM_WRITE_T)(property_ptr prop, uint8_t *data, uint32_t data_size);
extern PROPERTY_MEM_WRITE_T property_mem_write;
typedef int32_t (*PROPERTY_PART_WRITE_T)(property_ptr prop, node_ptr node, uint8_t *data, uint32_t data_size);
extern PROPERTY_PART_WRITE_T property_part_write;
typedef avs_error_t (*PROPERTY_NODE_ABSOLUTE_PATH_T)(node_ptr node, char *buffer, uint32_t buffer_size,
bool attr);
extern PROPERTY_NODE_ABSOLUTE_PATH_T property_node_absolute_path;
typedef int32_t (*PROPERTY_NODE_HAS_T)(property_ptr prop, node_ptr node, int ukn);
extern PROPERTY_NODE_HAS_T property_node_has;
typedef bool (*PROPERTY_NODE_IS_ARRAY_T)(node_ptr node);
extern PROPERTY_NODE_IS_ARRAY_T property_node_is_array;
typedef node_type (*PROPERTY_NODE_TYPE_T)(node_ptr node);
extern PROPERTY_NODE_TYPE_T property_node_type;
typedef avs_error_t (*PROPERTY_GET_ATTRIBUTE_BOOL_T)(property_ptr prop, node_ptr node,
const char *path, bool *value);
extern PROPERTY_GET_ATTRIBUTE_BOOL_T property_get_attribute_bool;
typedef avs_error_t (*PROPERTY_NODE_GET_ATTRIBUTE_BOOL_T)(node_ptr node, bool *value);
extern PROPERTY_NODE_GET_ATTRIBUTE_BOOL_T property_node_get_attribute_bool;
typedef avs_error_t (*PROPERTY_NODE_GET_ATTRIBUTE_U32_T)(node_ptr node, uint32_t *value);
extern PROPERTY_NODE_GET_ATTRIBUTE_U32_T property_node_get_attribute_u32;
typedef avs_error_t (*PROPERTY_NODE_GET_ATTRIBUTE_S32_T)(node_ptr node, int32_t *value);
extern PROPERTY_NODE_GET_ATTRIBUTE_S32_T property_node_get_attribute_s32;
typedef avs_error_t (*PROPERTY_NODE_RENAME_T)(node_ptr node, const char *name);
extern PROPERTY_NODE_RENAME_T property_node_rename;
typedef avs_error_t (*PROPERTY_QUERY_FREESIZE_T)(property_ptr prop, uint32_t freesize);
extern PROPERTY_QUERY_FREESIZE_T property_query_freesize;
typedef property_ptr (*PROPERTY_CLEAR_ERROR_T)(property_ptr prop);
extern PROPERTY_CLEAR_ERROR_T property_clear_error;
typedef uint32_t (*PROPERTY_LOOKUP_ENCODE_T)(property_ptr prop);
extern PROPERTY_LOOKUP_ENCODE_T property_lookup_encode;
typedef avs_error_t (*PROPERTY_UNLOCK_FLAG_T)(property_ptr prop, uint32_t flags);
extern PROPERTY_UNLOCK_FLAG_T property_unlock_flag;
typedef avs_error_t (*PROPERTY_LOCK_FLAG_T)(property_ptr prop, uint32_t flags);
extern PROPERTY_LOCK_FLAG_T property_lock_flag;
typedef uint32_t (*PROPERTY_SET_FLAG_T)(property_ptr prop, uint32_t set_flags, uint32_t clear_flags);
extern PROPERTY_SET_FLAG_T property_set_flag;
typedef int32_t (*PROPERTY_PART_WRITE_META_T)(property_ptr prop, node_ptr node, uint8_t buffer,
uint32_t buffer_size, int ukn1, int ukn2);
extern PROPERTY_PART_WRITE_META_T property_part_write_meta;
typedef int32_t (*PROPERTY_PART_WRITE_META2_T)(property_ptr prop, node_ptr node, uint8_t buffer,
uint32_t buffer_size);
extern PROPERTY_PART_WRITE_META2_T property_part_write_meta2;
typedef int32_t (*PROPERTY_READ_DATA_T)(property_ptr prop, node_ptr node, avs_reader_t read_func,
uint32_t context);
extern PROPERTY_READ_DATA_T property_read_data;
typedef int32_t (*PROPERTY_READ_META_T)(property_ptr prop, node_ptr node, avs_reader_t read_func,
uint32_t context);
extern PROPERTY_READ_META_T property_read_meta;
typedef avs_error_t (*PROPERTY_GET_ATTRIBUTE_U32_T)(property_ptr prop, node_ptr node, const char *path,
uint32_t *value);
extern PROPERTY_GET_ATTRIBUTE_U32_T property_get_attribute_u32;
typedef avs_error_t (*PROPERTY_GET_ATTRIBUTE_S32_T)(property_ptr prop, node_ptr node, const char *path,
int32_t *value);
extern PROPERTY_GET_ATTRIBUTE_S32_T property_get_attribute_s32;
typedef avs_error_t (*PROPERTY_GET_FINGERPRINT_T)(property_ptr prop, node_ptr node,
uint8_t *data, uint32_t data_size);
extern PROPERTY_GET_FINGERPRINT_T property_get_fingerprint;
typedef uint8_t *(*PROPERTY_NODE_REFDATA_T)(node_ptr node);
extern PROPERTY_NODE_REFDATA_T property_node_refdata;
// TODO probably invalid signature
typedef int32_t *(*PROPERTY_INSERT_READ_WITH_FILENAME_T)(property_ptr prop, node_ptr node, uint8_t *buffer,
uint32_t buffer_size);
extern PROPERTY_INSERT_READ_WITH_FILENAME_T property_insert_read_with_filename;
// TODO probably invalid signature
typedef int32_t *(*PROPERTY_MEM_READ_T)(property_ptr prop, node_ptr node, int flags, uint8_t *buffer,
uint32_t buffer_size);
extern PROPERTY_MEM_READ_T property_mem_read;
typedef int (*PROPERTY_READ_QUERY_MEMSIZE_LONG_T)(avs_reader_t reader, avs_file_t file,
DWORD *, DWORD *, DWORD *);
extern PROPERTY_READ_QUERY_MEMSIZE_LONG_T property_read_query_memsize_long;
typedef property_ptr (*PROPERTY_CLEAR_T)(property_ptr prop);
extern PROPERTY_CLEAR_T property_clear;
typedef avs_error_t (*AVS_NET_ADDRINFOBYADDR_T)(uint32_t addr, char* hostname, int hostname_size, int);
extern AVS_NET_ADDRINFOBYADDR_T avs_net_addrinfobyaddr;
typedef avs_error_t (*AVS_NET_ADD_PROTOCOL_T)(struct avs_net_protocol *protocol);
extern AVS_NET_ADD_PROTOCOL_T avs_net_add_protocol;
typedef avs_error_t (*AVS_NET_ADD_PROTOCOL_LEGACY_T)(struct avs_net_protocol_legacy *protocol);
extern AVS_NET_ADD_PROTOCOL_LEGACY_T avs_net_add_protocol_legacy;
typedef avs_error_t (*AVS_NET_DEL_PROTOCOL_T)(int protocol_id);
extern AVS_NET_DEL_PROTOCOL_T avs_net_del_protocol;
typedef int64_t (*AVS_NET_SOCKET_T)(int protocol_id);
extern AVS_NET_SOCKET_T avs_net_socket;
typedef avs_error_t (*AVS_NET_SETSOCKOPT_T)(
int socket,
int option_name,
const void *option_value,
avs_net_size_t option_len);
extern AVS_NET_SETSOCKOPT_T avs_net_setsockopt;
typedef avs_error_t (*AVS_NET_GETSOCKOPT_T)(
int socket,
unsigned int option_name,
void *option_value,
avs_net_size_t *option_len);
extern AVS_NET_GETSOCKOPT_T avs_net_getsockopt;
typedef avs_error_t (*AVS_NET_CONNECT_T)(int socket, uint32_t address, avs_net_port_t port);
extern AVS_NET_CONNECT_T avs_net_connect;
typedef avs_error_t (*AVS_NET_SEND_T)(int socket, uint8_t *buf, uint32_t buf_size);
extern AVS_NET_SEND_T avs_net_send;
typedef avs_error_t (*AVS_NET_RECV_T)(int socket, uint8_t *buf, uint32_t buf_size);
extern AVS_NET_RECV_T avs_net_recv;
typedef avs_error_t (*AVS_NET_POLL_T)(
struct avs_net_poll_fd *fds,
uint32_t num_fds,
int timeout);
extern AVS_NET_POLL_T avs_net_poll;
typedef avs_error_t (*AVS_NET_POLLFDS_ADD_T)(
int socket,
struct avs_net_poll_fd_opaque *fds,
avs_net_pollfds_size_t fds_size,
struct avs_net_poll_fd *events);
extern AVS_NET_POLLFDS_ADD_T avs_net_pollfds_add;
typedef avs_error_t (*AVS_NET_POLLFDS_GET_T)(
int socket,
struct avs_net_poll_fd *events,
struct avs_net_poll_fd_opaque *fds);
extern AVS_NET_POLLFDS_GET_T avs_net_pollfds_get;
typedef avs_error_t (*AVS_NET_BIND_T)(int socket, uint32_t address, avs_net_port_t port);
extern AVS_NET_BIND_T avs_net_bind;
typedef avs_error_t (*AVS_NET_CLOSE_T)(int socket);
extern AVS_NET_CLOSE_T avs_net_close;
typedef avs_error_t (*AVS_NET_SHUTDOWN_T)(int fd, int how);
extern AVS_NET_SHUTDOWN_T avs_net_shutdown;
typedef avs_error_t (*AVS_NET_GET_PEERNAME_T)(int fd, uint32_t *address, avs_net_port_t *port);
extern AVS_NET_GET_PEERNAME_T avs_net_get_peername;
typedef avs_error_t (*AVS_NET_GET_SOCKNAME_T)(int fd, uint32_t *address, avs_net_port_t *port);
extern AVS_NET_GET_SOCKNAME_T avs_net_get_sockname;
}
}