// ================================================================================================ // Audio Backend - 插件宿主系统统一头文件 // ================================================================================================ // 描述: 插件沙盒和隔离系统的统一包含头文件 // 版本: 1.0.0 // ================================================================================================ // // 功能特性: // - 插件接口定义:IPlugin接口和插件工厂 // - 插件元数据管理:插件信息、参数、预设管理 // - 插件宿主管理器:完整的插件生命周期管理 // - 跨平台沙盒隔离:Windows Job Objects、Linux Namespaces/cgroups、macOS Sandbox // - 安全通信代理:消息过滤、权限检查、加密通信 // - 资源配额管理:CPU、内存、文件、网络限制 // - 故障检测和恢复:崩溃检测、自动重启、降级模式 // // 使用示例: // // 1. 创建插件宿主管理器: // PluginHostConfig config; // config.enable_sandbox_isolation = true; // auto host_manager = std::make_shared(config); // host_manager->initialize(); // // 2. 加载插件: // SandboxConfig sandbox_config; // sandbox_config.limits.max_memory_bytes = 512 * 1024 * 1024; // 512MB // sandbox_config.limits.max_cpu_percent = 25.0; // 25% CPU // // auto result = host_manager->load_plugin( // "/path/to/plugin.dll", // "plugin_instance_1", // sandbox_config, // true // auto_activate // ); // // 3. 处理音频: // ProcessingResult result = host_manager->process_plugin_audio( // "plugin_instance_1", // input_buffer, // output_buffer, // midi_in, // midi_out, // context // ); // // 4. 卸载插件: // host_manager->unload_plugin("plugin_instance_1", true); // // ================================================================================================ #pragma once // 版本信息 #define AUDIO_BACKEND_PLUGIN_HOST_VERSION_MAJOR 1 #define AUDIO_BACKEND_PLUGIN_HOST_VERSION_MINOR 0 #define AUDIO_BACKEND_PLUGIN_HOST_VERSION_PATCH 0 // ================================================================================================ // 核心类型和枚举 // ================================================================================================ #include "plugin_types.h" // ================================================================================================ // 插件元数据管理 // ================================================================================================ #include "plugin_metadata.h" // ================================================================================================ // 插件接口定义 // ================================================================================================ #include "plugin_interface.h" // ================================================================================================ // 沙盒接口和实现 // ================================================================================================ #include "sandbox_interface.h" // 平台特定沙盒实现(根据编译平台自动包含) #ifdef _WIN32 #include "windows/windows_sandbox.h" #elif defined(__linux__) #include "linux/linux_sandbox.h" #elif defined(__APPLE__) #include "macos/macos_sandbox.h" #endif // ================================================================================================ // 安全通信代理 // ================================================================================================ #include "secure_communication_proxy.h" // ================================================================================================ // 插件宿主管理器 // ================================================================================================ #include "plugin_host_manager.h" // ================================================================================================ // 命名空间别名 // ================================================================================================ namespace audio_backend { namespace plugin { // 导出插件宿主命名空间 using namespace plugin_host; // ================================================================================================ // 便捷的工厂函数 // ================================================================================================ // 创建默认配置的插件宿主管理器 inline std::shared_ptr create_plugin_host_manager() { PluginHostConfig config; config.enable_sandbox_isolation = true; config.default_sandbox_config = SandboxConfig::default_config(); auto manager = std::make_shared(config); manager->initialize(); return manager; } // 创建严格安全模式的插件宿主管理器 inline std::shared_ptr create_strict_plugin_host_manager() { PluginHostConfig config; config.enable_sandbox_isolation = true; config.default_sandbox_config = SandboxConfig::strict(); config.allow_non_sandboxed_plugins = false; auto manager = std::make_shared(config); manager->initialize(); return manager; } // 创建宽松模式的插件宿主管理器(用于调试) inline std::shared_ptr create_relaxed_plugin_host_manager() { PluginHostConfig config; config.enable_sandbox_isolation = false; config.allow_non_sandboxed_plugins = true; auto manager = std::make_shared(config); manager->initialize(); return manager; } // 创建自定义配置的插件宿主管理器 inline std::shared_ptr create_custom_plugin_host_manager( const PluginHostConfig& custom_config) { auto manager = std::make_shared(custom_config); manager->initialize(); return manager; } // ================================================================================================ // 便捷的沙盒配置函数 // ================================================================================================ // 创建用于音频效果器的沙盒配置 inline SandboxConfig create_audio_effect_sandbox_config() { SandboxConfig config; config.enabled = true; config.type = SandboxType::Process; // 音频效果器的资源限制 config.limits.max_memory_bytes = 256 * 1024 * 1024; // 256MB config.limits.max_cpu_percent = 20.0; // 20% CPU config.limits.max_threads = 4; // 4个线程 config.limits.max_processing_time_ms = 10; // 10ms处理时间 // 安全设置 config.security.allow_network_access = false; config.security.allow_file_system_access = true; config.security.enable_address_randomization = true; config.security.enable_data_execution_prevention = true; return config; } // 创建用于乐器的沙盒配置 inline SandboxConfig create_instrument_sandbox_config() { SandboxConfig config; config.enabled = true; config.type = SandboxType::Process; // 乐器的资源限制(通常需要更多资源) config.limits.max_memory_bytes = 512 * 1024 * 1024; // 512MB config.limits.max_cpu_percent = 30.0; // 30% CPU config.limits.max_threads = 8; // 8个线程 config.limits.max_processing_time_ms = 20; // 20ms处理时间 // 安全设置 config.security.allow_network_access = false; config.security.allow_file_system_access = true; return config; } // 创建用于分析器的沙盒配置 inline SandboxConfig create_analyzer_sandbox_config() { SandboxConfig config; config.enabled = true; config.type = SandboxType::Process; // 分析器的资源限制 config.limits.max_memory_bytes = 128 * 1024 * 1024; // 128MB config.limits.max_cpu_percent = 15.0; // 15% CPU config.limits.max_threads = 2; // 2个线程 config.limits.max_processing_time_ms = 5; // 5ms处理时间 // 安全设置 config.security.allow_network_access = false; config.security.allow_file_system_access = false; // 分析器通常不需要文件访问 return config; } // ================================================================================================ // 版本信息函数 // ================================================================================================ // 获取插件宿主系统版本字符串 inline std::string get_plugin_host_version() { return std::to_string(AUDIO_BACKEND_PLUGIN_HOST_VERSION_MAJOR) + "." + std::to_string(AUDIO_BACKEND_PLUGIN_HOST_VERSION_MINOR) + "." + std::to_string(AUDIO_BACKEND_PLUGIN_HOST_VERSION_PATCH); } // 获取支持的功能特性列表 inline std::vector get_supported_features() { std::vector features = { "多进程插件隔离", "跨平台沙盒支持", "资源配额管理", "安全通信代理", "插件崩溃恢复", "实时音频处理", "MIDI事件处理", "参数自动化", "预设管理", "状态保存/恢复" }; #ifdef _WIN32 features.push_back("Windows Job Objects"); #endif #ifdef __linux__ features.push_back("Linux Namespaces"); features.push_back("Linux cgroups"); features.push_back("Linux seccomp"); #endif #ifdef __APPLE__ features.push_back("macOS Sandbox"); features.push_back("macOS XPC"); #endif return features; } // 获取当前平台支持的沙盒类型 inline std::vector get_supported_sandbox_types() { return SandboxFactory::get_supported_sandbox_types(); } // 检查特定沙盒类型是否受支持 inline bool is_sandbox_type_supported(SandboxType type) { return SandboxFactory::is_sandbox_type_supported(type); } // 获取推荐的沙盒类型 inline SandboxType get_recommended_sandbox_type() { return SandboxFactory::get_recommended_sandbox_type(); } // ================================================================================================ // 调试和诊断工具 // ================================================================================================ // 打印插件宿主系统信息 inline void print_plugin_host_info() { common::log_info("========================================"); common::log_info("Audio Backend 插件宿主系统"); common::log_info("========================================"); common::log_info("版本: {}", get_plugin_host_version()); common::log_info("平台: {}", #ifdef _WIN32 "Windows" #elif defined(__linux__) "Linux" #elif defined(__APPLE__) "macOS" #else "Unknown" #endif ); common::log_info("\n支持的功能特性:"); for (const auto& feature : get_supported_features()) { common::log_info(" - {}", feature); } common::log_info("\n支持的沙盒类型:"); for (const auto& type : get_supported_sandbox_types()) { common::log_info(" - {}", get_sandbox_type_name(type)); } common::log_info("\n推荐的沙盒类型: {}", get_sandbox_type_name(get_recommended_sandbox_type())); common::log_info("========================================"); } } // namespace plugin } // namespace audio_backend // ================================================================================================ // 使用示例宏(可选) // ================================================================================================ // 快速创建插件宿主管理器的宏 #define AUDIO_CREATE_PLUGIN_HOST() \ audio_backend::plugin::create_plugin_host_manager() // 快速创建严格模式插件宿主管理器的宏 #define AUDIO_CREATE_STRICT_PLUGIN_HOST() \ audio_backend::plugin::create_strict_plugin_host_manager() // 快速创建调试模式插件宿主管理器的宏 #define AUDIO_CREATE_DEBUG_PLUGIN_HOST() \ audio_backend::plugin::create_relaxed_plugin_host_manager() // ================================================================================================ // 编译时检查 // ================================================================================================ // 检查是否启用沙盒支持 #if !defined(_WIN32) && !defined(__linux__) && !defined(__APPLE__) #warning "当前平台可能不支持完整的沙盒功能" #endif // 检查C++标准 #if __cplusplus < 202002L #error "插件宿主系统需要C++20或更高版本" #endif // ================================================================================================ // 文档说明 // ================================================================================================ /* * ================================================================================================ * 插件宿主系统架构说明 * ================================================================================================ * * 1. 核心组件: * - PluginHostManager: 插件生命周期管理的中心控制器 * - ISandbox: 跨平台沙盒接口,提供进程隔离 * - SecureCommunicationProxy: 安全的进程间通信代理 * - IPlugin: 插件接口定义 * * 2. 沙盒隔离: * - Windows: 使用Job Objects限制资源,使用低完整性级别进程 * - Linux: 使用Namespaces、cgroups、seccomp实现隔离 * - macOS: 使用Sandbox API和XPC服务实现隔离 * * 3. 资源管理: * - CPU使用率限制 * - 内存使用限制 * - 文件描述符限制 * - 网络访问控制 * * 4. 安全机制: * - 进程级隔离 * - 消息过滤和验证 * - 权限检查 * - 访问控制列表 * - 审计日志 * * 5. 故障恢复: * - 崩溃检测 * - 自动重启 * - 降级模式 * - 状态保存和恢复 * * 6. 性能监控: * - CPU使用率监控 * - 内存使用监控 * - 处理时间统计 * - 性能警告 * * ================================================================================================ */