After compiling a test module that sets a variable equal to "test
successful", I get a "directive is duplicate in (path to conf file)"

#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
//#include <ngx_log.h>
//#include <ngx_conf_file.h>

#define MAX_STRING_LEN 256

// static char *ngx_http_netacuity(ngx_conf_t *cf, void *post, void *data);

// static ngx_conf_post_handler_pt ngx_http_netacuity_p =
ngx_http_netacuity;

static void *ngx_http_netacuity_create_conf(ngx_conf_t *cf);
static ngx_int_t ngx_http_netacuity_add_variables(ngx_conf_t *cf);
static ngx_int_t ngx_http_netacuity_test_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);


/**
Module configuration struct
*/
typedef struct {
        ngx_int_t featureCode;
} ngx_http_netacuity_conf_t;

/**
Initializes memory for module configuration struct
*/
static void *ngx_http_netacuity_create_conf(ngx_conf_t *cf) 
{
        ngx_conf_log_error(NGX_LOG_DEBUG, cf, 0, "HIT FUNCTION --->
ngx_http_netacuity_create_conf");
        ngx_http_netacuity_conf_t *conf;

        conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_netacuity_conf_t));
        if(conf == NULL) {
                return NULL;
        }
        conf->featureCode = NGX_CONF_UNSET_UINT;

        return conf;

}

/**
Module directive array, which holds a subarray for each module directive
*/
static ngx_command_t ngx_http_netacuity_commands[] = {
        {
                ngx_string("testAPI"),
                NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
                ngx_conf_set_num_slot,
                NGX_HTTP_MAIN_CONF_OFFSET,
                offsetof(ngx_http_netacuity_conf_t, featureCode),
                NULL
        },
        ngx_null_command
};

/**
The module context, which has hooks for creating the configuration
*/
static ngx_http_module_t ngx_http_netacuity_module_ctx = {
        ngx_http_netacuity_add_variables,       //preconfiguration      
        NULL,                                                           
//postconfiguration

        ngx_http_netacuity_create_conf,         //create main configuration
        NULL,                                                           //init 
main configuration

        NULL,                                                           
//create server configuration
        NULL,                                                           //merge 
server configuration

        NULL,                                                           
//create location configuration
        NULL                                                            //merge 
location configuration
};

/**
The module which binds the context and commands
*/
ngx_module_t ngx_http_netacuity_module = {
        NGX_MODULE_V1,                                          
        &ngx_http_netacuity_module_ctx,         //module context
        ngx_http_netacuity_commands,            //module directives
        NGX_HTTP_MODULE,                                        //module type
        NULL,                                                           //init 
master
        NULL,                                                           //init 
module
        NULL,                                                           //init 
process
        NULL,                                                           //init 
thread
        NULL,                                                           //exit 
thread
        NULL,                                                           //exit 
process
        NULL,                                                           //exit 
master
        NGX_MODULE_V1_PADDING
};

/**
Holds all the API Variables that the user can call upon
*/
static ngx_http_variable_t ngx_http_netacuity_vars[] = {
        {
                ngx_string("testVar"), NULL, ngx_http_netacuity_test_variable,
MAX_STRING_LEN, 0, 0 
        },

        { ngx_null_string, NULL, NULL, 0, 0, 0 }
};

/**
Called during preconfiguration - adds variables for use
*/
static ngx_int_t ngx_http_netacuity_add_variables(ngx_conf_t *cf) 
{
        ngx_conf_log_error(NGX_LOG_DEBUG, cf, 0, "HIT FUNCTION --->
ngx_http_netacuity_add_variables");
        ngx_http_variable_t *var, *v;

        for(v = ngx_http_netacuity_vars; v->name.len; v++) {
                var = ngx_http_add_variable(cf, &v->name, v->flags);
                if(var == NULL) {
                        return NGX_ERROR;
                }
                var->get_handler = v->get_handler;
                var->data = v->data;
        }

        return NGX_OK;
}

/**
Get handlers for variables
*/
static ngx_int_t ngx_http_netacuity_test_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data) 
{
        ngx_log_error(NGX_LOG_DEBUG, (r->connection)->log, 0, "HIT FUNCTION --->
ngx_http_netacuity_test_variable");
        size_t len;
        char *val;
        ngx_http_netacuity_conf_t *nac;

        nac = ngx_http_get_module_main_conf(r, ngx_http_netacuity_module);

        if(nac->featureCode == 0) {
                goto not_found;
        }

        val = "test successful";

        if(val == NULL) {
                goto not_found;
        }

        len = ngx_strlen(val);
        v->data = ngx_pnalloc(r->pool, len);

        if(v->data == NULL) {
                //ngx_free(val);
                return NGX_ERROR;
        }

        ngx_memcpy(v->data, val, len);

        v->len = len;
        v->valid = 1;
        v->no_cacheable = 0;
        v->not_found = 0;

        //ngx_free(val);
        return NGX_OK;

        not_found:
                v->not_found = 1;
                return NGX_OK;
}


Can someone explain what's going on? I tried googling the error, but found
nothing useful.

This is my conf file :

worker_process 1;

events {
        worker_connections 1024;
}

http {

        include mine.types;
        default_type application/octet-stream;
        
        log_format main ‘$remote_addr’;

        testAPI 7;

        access_log logs/access.log main;
        
        sendfile on;

        keepalive_timeout 65;

        server {

                listen 80;
                server_name localhost;


                location / {

                        root html;
                        index index.html index.htm;

                }

                error_page 500 502 503 504 /50x.html;
                location = /50x.html {

                        root html;

                }

        }
        
}

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?2,262425,262425#msg-262425

_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx

Reply via email to