: dynamic_module_(std::move(dynamic_module)), main_thread_dispatcher_(main_thread_dispatcher),
if (in_module_config_ != nullptr && on_bootstrap_extension_cluster_add_or_update_ != nullptr) {
void DynamicModuleBootstrapExtensionConfig::onClusterRemoval(const std::string& cluster_name) {
void DynamicModuleBootstrapExtensionConfig::onListenerAddOrUpdate(absl::string_view listener_name,
if (in_module_config_ != nullptr && on_bootstrap_extension_listener_add_or_update_ != nullptr) {
void DynamicModuleBootstrapExtensionConfig::onListenerRemoval(const std::string& listener_name) {
DynamicModuleBootstrapExtensionConfig::HttpCalloutCallback& callback = *http_callout_callback;
headers_vector.size(), reinterpret_cast<envoy_dynamic_module_type_envoy_buffer*>(body.data()),
Event::Dispatcher& main_thread_dispatcher, Server::Configuration::ServerFactoryContext& context,
auto on_extension_destroy = dynamic_module->getFunctionPointer<OnBootstrapExtensionDestroyType>(
auto on_drain_started = dynamic_module->getFunctionPointer<OnBootstrapExtensionDrainStartedType>(
auto on_timer_fired = dynamic_module->getFunctionPointer<OnBootstrapExtensionTimerFiredType>(
auto on_admin_request = dynamic_module->getFunctionPointer<OnBootstrapExtensionAdminRequestType>(
// Always register an init target so that Envoy blocks traffic until the module signals readiness.
config->init_target_ = std::make_unique<Init::TargetImpl>("dynamic_modules_bootstrap", []() {});
config->on_bootstrap_extension_worker_thread_initialized_ = on_worker_thread_initialized.value();