void qd_buffer_add_fanout(qd_buffer_t *buf) { sys_atomic_inc(&buf->bfanout); }
static qd_error_t load_server_config(qd_dispatch_t *qd, qd_server_config_t *config, qd_entity_t* entity, qd_config_ssl_profile_t **ssl_profile) { qd_error_clear(); bool authenticatePeer = qd_entity_opt_bool(entity, "authenticatePeer", false); CHECK(); bool verifyHostName = qd_entity_opt_bool(entity, "verifyHostName", true); CHECK(); char *stripAnnotations = qd_entity_opt_string(entity, "stripAnnotations", 0); CHECK(); bool requireEncryption = qd_entity_opt_bool(entity, "requireEncryption", false); CHECK(); bool requireSsl = qd_entity_opt_bool(entity, "requireSsl", false); CHECK(); bool depRequirePeerAuth = qd_entity_opt_bool(entity, "requirePeerAuth", false); CHECK(); bool depAllowUnsecured = qd_entity_opt_bool(entity, "allowUnsecured", !requireSsl); CHECK(); memset(config, 0, sizeof(*config)); config->port = qd_entity_get_string(entity, "port"); CHECK(); config->name = qd_entity_opt_string(entity, "name", 0); CHECK(); config->role = qd_entity_get_string(entity, "role"); CHECK(); config->inter_router_cost = qd_entity_opt_long(entity, "cost", 1); CHECK(); config->protocol_family = qd_entity_opt_string(entity, "protocolFamily", 0); CHECK(); config->max_frame_size = qd_entity_get_long(entity, "maxFrameSize"); CHECK(); config->max_sessions = qd_entity_get_long(entity, "maxSessions"); CHECK(); uint64_t ssn_frames = qd_entity_get_long(entity, "maxSessionFrames"); CHECK(); config->idle_timeout_seconds = qd_entity_get_long(entity, "idleTimeoutSeconds"); CHECK(); config->sasl_username = qd_entity_opt_string(entity, "saslUsername", 0); CHECK(); config->sasl_password = qd_entity_opt_string(entity, "saslPassword", 0); CHECK(); config->sasl_mechanisms = qd_entity_opt_string(entity, "saslMechanisms", 0); CHECK(); config->ssl_profile = qd_entity_opt_string(entity, "sslProfile", 0); CHECK(); config->link_capacity = qd_entity_opt_long(entity, "linkCapacity", 0); CHECK(); set_config_host(config, entity); // // Handle the defaults for various settings // if (config->link_capacity == 0) config->link_capacity = 250; if (config->max_sessions == 0 || config->max_sessions > 32768) // Proton disallows > 32768 config->max_sessions = 32768; if (config->max_frame_size < QD_AMQP_MIN_MAX_FRAME_SIZE) // Silently promote the minimum max-frame-size // Proton will do this but the number is needed for the // incoming capacity calculation. config->max_frame_size = QD_AMQP_MIN_MAX_FRAME_SIZE; // // Given session frame count and max frame size compute session incoming_capacity // Limit total capacity to 2^31-1. // uint64_t mfs = (uint64_t)config->max_frame_size; uint64_t trial_ic = ssn_frames * mfs; uint64_t limit = (1ll << 31) - 1; if (trial_ic < limit) { // Silently promote incoming capacity of zero to one config->incoming_capacity = (trial_ic < QD_AMQP_MIN_MAX_FRAME_SIZE ? QD_AMQP_MIN_MAX_FRAME_SIZE : trial_ic); } else { config->incoming_capacity = limit; uint64_t computed_ssn_frames = limit / mfs; qd_log(qd->connection_manager->log_source, QD_LOG_WARNING, "Server configuation for I/O adapter entity name:'%s', host:'%s', port:'%s', " "requested maxSessionFrames truncated from %llu to %llu", config->name, config->host, config->port, ssn_frames, computed_ssn_frames); } // // For now we are hardwiring this attribute to true. If there's an outcry from the // user community, we can revisit this later. // config->allowInsecureAuthentication = true; config->verify_host_name = verifyHostName; load_strip_annotations(config, stripAnnotations); config->requireAuthentication = authenticatePeer || depRequirePeerAuth; config->requireEncryption = requireEncryption || !depAllowUnsecured; if (config->ssl_profile) { config->ssl_required = requireSsl || !depAllowUnsecured; config->ssl_require_peer_authentication = config->sasl_mechanisms && strstr(config->sasl_mechanisms, "EXTERNAL") != 0; *ssl_profile = qd_find_ssl_profile(qd->connection_manager, config->ssl_profile); if (*ssl_profile) { config->ssl_certificate_file = (*ssl_profile)->ssl_certificate_file; config->ssl_private_key_file = (*ssl_profile)->ssl_private_key_file; config->ssl_password = (*ssl_profile)->ssl_password; config->ssl_trusted_certificate_db = (*ssl_profile)->ssl_trusted_certificate_db; config->ssl_trusted_certificates = (*ssl_profile)->ssl_trusted_certificates; config->ssl_uid_format = (*ssl_profile)->ssl_uid_format; config->ssl_display_name_file = (*ssl_profile)->ssl_display_name_file; } sys_atomic_inc(&(*ssl_profile)->ref_count); } free(stripAnnotations); return QD_ERROR_NONE; error: qd_server_config_free(config); return qd_error_code(); }