void qd_connection_manager_free(qd_connection_manager_t *cm) { if (!cm) return; qd_config_listener_t *cl = DEQ_HEAD(cm->config_listeners); while (cl) { DEQ_REMOVE_HEAD(cm->config_listeners); qd_server_config_free(&cl->configuration); qd_config_listener_free(cm, cl); cl = DEQ_HEAD(cm->config_listeners); } qd_config_connector_t *cc = DEQ_HEAD(cm->config_connectors); while (cc) { DEQ_REMOVE_HEAD(cm->config_connectors); qd_server_config_free(&cc->configuration); qd_config_connector_free(cm, cc); cc = DEQ_HEAD(cm->config_connectors); } qd_config_ssl_profile_t *sslp = DEQ_HEAD(cm->config_ssl_profiles); while (sslp) { qd_config_ssl_profile_free(cm, sslp); sslp = DEQ_HEAD(cm->config_ssl_profiles); } sys_mutex_free(cm->ssl_profile_lock); }
qd_config_listener_t *qd_dispatch_configure_listener(qd_dispatch_t *qd, qd_entity_t *entity) { qd_error_clear(); qd_connection_manager_t *cm = qd->connection_manager; qd_config_listener_t *cl = NEW(qd_config_listener_t); cl->is_connector = false; cl->state = QD_BIND_NONE; cl->listener = 0; qd_config_ssl_profile_t *ssl_profile = 0; if (load_server_config(qd, &cl->configuration, entity, &ssl_profile) != QD_ERROR_NONE) { qd_log(cm->log_source, QD_LOG_ERROR, "Unable to create config listener: %s", qd_error_message()); qd_config_listener_free(qd->connection_manager, cl); return 0; } cl->ssl_profile = ssl_profile; DEQ_ITEM_INIT(cl); DEQ_INSERT_TAIL(cm->config_listeners, cl); qd_log(cm->log_source, QD_LOG_INFO, "Configured Listener: %s:%s proto=%s, role=%s%s%s", cl->configuration.host, cl->configuration.port, cl->configuration.protocol_family ? cl->configuration.protocol_family : "any", cl->configuration.role, cl->ssl_profile ? ", sslProfile=":"", cl->ssl_profile ? cl->ssl_profile->name:""); return cl; }
void qd_connection_manager_delete_listener(qd_dispatch_t *qd, void *impl) { qd_config_listener_t *cl = (qd_config_listener_t*)impl; if(cl) { qd_server_listener_close(cl->listener); DEQ_REMOVE(qd->connection_manager->config_listeners, cl); qd_config_listener_free(cl); } }