/*
 *  Phusion Passenger - https://www.phusionpassenger.com/
 *  Copyright (c) 2010-2025 Asynchronous B.V.
 *
 *  "Passenger", "Phusion Passenger" and "Union Station" are registered
 *  trademarks of Asynchronous B.V.
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in
 *  all copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 *  THE SOFTWARE.
 */

/*
 * LocationConfig/AutoGeneratedMergeFunction.c is automatically generated from
 * LocationConfig/AutoGeneratedMergeFunction.c.cxxcodebuilder,
 * using definitions from src/ruby_supportlib/phusion_passenger/nginx/config_options.rb.
 * Edits to LocationConfig/AutoGeneratedMergeFunction.c will be lost.
 *
 * To update LocationConfig/AutoGeneratedMergeFunction.c:
 *   rake nginx
 *
 * To force regeneration of LocationConfig/AutoGeneratedMergeFunction.c:
 *   rm -f src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c
 *   rake src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c
 */

/*
 * 0: NGX_CONF_ERROR, 1: OK
 */
static int
passenger_merge_autogenerated_loc_conf(passenger_autogenerated_loc_conf_t *conf, passenger_autogenerated_loc_conf_t *prev, ngx_conf_t *cf) {
    ngx_conf_merge_str_value(conf->ruby,
        prev->ruby,
        "ruby");
    ngx_conf_merge_str_value(conf->python,
        prev->python,
        "python");
    ngx_conf_merge_str_value(conf->nodejs,
        prev->nodejs,
        "node");
    ngx_conf_merge_str_value(conf->meteor_app_settings,
        prev->meteor_app_settings,
        NULL);
    ngx_conf_merge_str_value(conf->environment,
        prev->environment,
        "production");
    ngx_conf_merge_value(conf->friendly_error_pages,
        prev->friendly_error_pages,
        NGX_CONF_UNSET);
    ngx_conf_merge_str_value(conf->custom_error_page,
        prev->custom_error_page,
        NULL);
    ngx_conf_merge_uint_value(conf->min_instances,
        prev->min_instances,
        1);
    ngx_conf_merge_uint_value(conf->start_timeout,
        prev->start_timeout,
        90);
    ngx_conf_merge_uint_value(conf->app_connect_timeout,
        prev->app_connect_timeout,
        30);
    ngx_conf_merge_str_value(conf->user,
        prev->user,
        NULL);
    ngx_conf_merge_str_value(conf->group,
        prev->group,
        NULL);
    ngx_conf_merge_str_value(conf->app_group_name,
        prev->app_group_name,
        NULL);
    if (merge_string_array(cf, &prev->monitor_log_file, &conf->monitor_log_file) != NGX_OK) {
        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
            "cannot merge \"passenger_monitor_log_file\" configurations");
        return 0;
    }
    ngx_conf_merge_str_value(conf->app_root,
        prev->app_root,
        NULL);
    ngx_conf_merge_str_value(conf->app_rights,
        prev->app_rights,
        NULL);
    ngx_conf_merge_value(conf->debugger,
        prev->debugger,
        0);
    ngx_conf_merge_value(conf->max_preloader_idle_time,
        prev->max_preloader_idle_time,
        300);
    if (merge_string_keyval_table(cf, &prev->env_vars, &conf->env_vars) != NGX_OK) {
        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
            "cannot merge \"passenger_env_var\" configurations");
        return 0;
    }
    ngx_conf_merge_str_value(conf->spawn_method,
        prev->spawn_method,
        NULL);
    ngx_conf_merge_str_value(conf->direct_instance_request_address,
        prev->direct_instance_request_address,
        "127.0.0.1");
    ngx_conf_merge_value(conf->load_shell_envvars,
        prev->load_shell_envvars,
        1);
    ngx_conf_merge_value(conf->preload_bundler,
        prev->preload_bundler,
        0);
    ngx_conf_merge_uint_value(conf->max_request_queue_size,
        prev->max_request_queue_size,
        100);
    ngx_conf_merge_str_value(conf->app_type,
        prev->app_type,
        NULL);
    ngx_conf_merge_str_value(conf->startup_file,
        prev->startup_file,
        NULL);
    ngx_conf_merge_str_value(conf->app_start_command,
        prev->app_start_command,
        NULL);
    ngx_conf_merge_str_value(conf->restart_dir,
        prev->restart_dir,
        "tmp");
    ngx_conf_merge_value(conf->abort_websockets_on_process_shutdown,
        prev->abort_websockets_on_process_shutdown,
        1);
    ngx_conf_merge_value(conf->force_max_concurrent_requests_per_process,
        prev->force_max_concurrent_requests_per_process,
        -1);
    ngx_conf_merge_value(conf->enabled,
        prev->enabled,
        0);
    ngx_conf_merge_uint_value(conf->max_requests,
        prev->max_requests,
        0);
    if (merge_string_array(cf, &prev->base_uris, &conf->base_uris) != NGX_OK) {
        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
            "cannot merge \"passenger_base_uri\" configurations");
        return 0;
    }
    ngx_conf_merge_str_value(conf->document_root,
        prev->document_root,
        NULL);
    ngx_conf_merge_uint_value(conf->headers_hash_max_size,
        prev->headers_hash_max_size,
        512);
    ngx_conf_merge_uint_value(conf->headers_hash_bucket_size,
        prev->headers_hash_bucket_size,
        64);
    ngx_conf_merge_value(conf->request_queue_overflow_status_code,
        prev->request_queue_overflow_status_code,
        503);
    ngx_conf_merge_value(conf->spawn_exception_status_code,
        prev->spawn_exception_status_code,
        500);
    ngx_conf_merge_value(conf->buffer_upload,
        prev->buffer_upload,
        0);
    ngx_conf_merge_value(conf->sticky_sessions,
        prev->sticky_sessions,
        0);
    ngx_conf_merge_str_value(conf->sticky_sessions_cookie_name,
        prev->sticky_sessions_cookie_name,
        "_passenger_route");
    ngx_conf_merge_str_value(conf->sticky_sessions_cookie_attributes,
        prev->sticky_sessions_cookie_attributes,
        "SameSite=Lax; Secure;");
    ngx_conf_merge_str_value(conf->vary_turbocache_by_cookie,
        prev->vary_turbocache_by_cookie,
        NULL);
    ngx_conf_merge_str_value(conf->app_log_file,
        prev->app_log_file,
        NULL);

    return 1;
}

