Ejemplo n.º 1
0
void load_conf_from_string(char *config)
{
    char *err = NULL;
    int linenum = 0, tlines, i;
    sds *lines;

    lines = sdssplitlen(config, strlen(config), "\n", 1, &tlines);

    for(i = 0; i < tlines; i++)
    {
        sds *argv;
        int argc;

        linenum = i+1;

        log_debug(">> %0.3d %s", linenum,  lines[i]);

        lines[i] = sdstrim(lines[i], " \t\r\n");

        // skip comments and blank lines
        if(lines[i][0] == '#' || lines[i][0] == '\0')
            continue;

        argv = sdssplitargs(lines[i], &argc);
        if(argv == NULL)
        {
            err = "Unbalanced quotes in configuration line";
            goto loaderr;
        }

        if(argc == 0)
        {
            sdsfreesplitres(argv, argc);
            continue;
        }

        sdstolower(argv[0]);

        if(!strcasecmp(argv[0], "name") && argc == 2)
        {
            server.name = sdsdup(argv[1]);
        }else if(!strcasecmp(argv[0], "bind") && argc >= 2)
        {
            server.bind_addr_count = argc-1;

            if((argc-1) > ZR_MAX_BIND_ADDR)
            {
                err = "Too many bind address specified.";
                goto loaderr;
            }
            int j;

            for(j = 0; j < server.bind_addr_count; j++)
            {
                server.bind_arr[j].addr_str = sdsnew(argv[j+1]);
                server.bind_arr[j].addr.sin_family = AF_INET;
                server.bind_arr[j].addr.sin_addr.s_addr = inet_addr(argv[j+1]);
                if(server.bind_arr[j].addr.sin_addr.s_addr == INADDR_NONE)
                {
                    err = sdscatprintf(sdsempty(), "Wrong binding ip address: %s", argv[j+1]);
                    goto loaderr;
                }
            }
        }else if(!strcasecmp(argv[0], "port") && argc == 2)
        {
            server.port = atoi(argv[1]);

            if (server.port < 0 || server.port > 65535)
            {
                err = "Invalid port"; goto loaderr;
            }

        }else if(!strcasecmp(argv[0], "req-log-uds") && argc == 2)
        {
            server.req_log_uds = sdsnew(argv[1]);

        }else if(!strcasecmp(argv[0], "client-max") && argc == 2)
        {
            server.client_max = atoi(argv[1]);
            if(server.client_max < 0)
            {
                err = "Invalid server-connection-max value.";
                goto loaderr;
            }
        } else if (!strcasecmp(argv[0],"tcp-backlog") && argc == 2)
        {
            server.tcp_backlog = atoi(argv[1]);
            if (server.tcp_backlog < 0)
            {
                err = "Invalid backlog value";
                goto loaderr;
            }
/*
        } else if (!strcasecmp(argv[0],"rr-counter-buffer") && argc == 2)
        {
            server.tcp_backlog = atoi(argv[1]);
            if (server.tcp_backlog < 0)
            {
                err = "Invalid rr-counter-buffer value";
                goto loaderr;
            }
*/
        }else if(!strcasecmp(argv[0], "log-level") && argc == 2)
        {
            server.log_level = log_get_level_str(argv[1]);
        }else if(!strcasecmp(argv[0], "log-file") && argc == 2)
        {
            server.log_file = sdsdup(argv[1]);
            if(!strcasecmp(argv[1], "stdout"))
            {
                log_set_out(stdout);
            }else if(!strcasecmp(argv[1], "stderr"))
            {
                log_set_out(stderr);
            }else
            {
                FILE *fd;
                fd = fopen(argv[1], "a");
                if(fd == NULL)
                {
                    err = sdscatprintf(sdsempty(), "Can't open the log file: %s", strerror(errno));
                    goto loaderr;
                }
                
                log_set_out(fd);
            }
        }else if(!strcasecmp(argv[0], "zookeeper-health-uri") && argc == 2)
        {
            struct z_conn_info *zcinfo = z_parse_conn_string(argv[1]);
            if(zcinfo == NULL)
            {
                err = "Invalid zookeeper-health-url(Zookeeper URI) value.\n"
//                      "Zookeeper URI must be as below.\n"
//                      " - zoo://[USER[:PASS]@]HOST_STRING/NODE/PATH\n"
//                      "   ex) zoo://192.168.1.2:2181/test/node\n"
//                      "   ex) zoo://[email protected]:2181,192.168.1.3:2181/test/node\n"
//                      "   ex) zoo://foo:[email protected]:2181,192.168.1.3:2181/test/node\n"
                      "";
                goto loaderr;
            }

            server.z_health_conn = zcinfo;
        }else if(!strcasecmp(argv[0], "zookeeper-timeout") && argc == 2)
        {
            server.zoo_timeout = atoi(argv[1]);
            if(server.zoo_timeout < 0)
            {
                err = "Invalid zookeeper-timeout value";
                goto loaderr;
            }

        }else if(!strcasecmp(argv[0], "service") && argc == 3)
        {
            if(strlen(argv[1]) > ZR_MAX_SVC_NAME)
            {
                err = sdscatprintf(sdsempty(), "Service name is too long, first argument(service name) must be less then %d.", ZR_MAX_SVC_NAME);
                goto loaderr;
            }

            struct z_conn_info *cinfo = z_parse_conn_string(argv[2]);
            if(!cinfo)
            {
                err = "Invalid zookeeper-health-url(Zookeeper URI) value.\n"
//                      "Zookeeper URI must be as below.\n"
//                      " - zoo://[USER[:PASS]@]HOST_STRING/NODE/PATH\n"
//                      "   ex) zoo://192.168.1.2:2181/test/node\n"
//                      "   ex) zoo://[email protected]:2181,192.168.1.3:2181/test/node\n"
//                      "   ex) zoo://foo:[email protected]:2181,192.168.1.3:2181/test/node\n"
                      "";
                goto loaderr;
            }

            int j;
            for(j = 0; j < server.svc_count; j++)
            {
                struct svc *tsvc = server.svc_arr[j];
                if(!sdscmp(argv[1], tsvc->name))
                {
                    err = sdscatprintf(sdsempty(), "\"%s\" service name already exists.", argv[1]);
                    goto loaderr;
                }
            }

            struct svc *svc = svc_alloc(argv[1], strlen(argv[1]), server.svc_count);
            svc->z_conn = cinfo;
            server.svc_arr[server.svc_count] = svc;
            server.svc_count++;
        }else
        {
            err = "Bad config directive or wrong number of arguments";
            goto loaderr;
        }

        sdsfreesplitres(argv,argc);
    }

    sdsfreesplitres(lines,tlines);
    return;

loaderr:
    log_eerr("CONFIG FILE ERROR.");
    log_eerr("Reading configureation file, at line %d", linenum);
    log_eerr(">> '%s'", lines[i]);
    log_eerr("%s", err);
    exit(1);
}
Ejemplo n.º 2
0
void parse_vm_arguments1(JavaVMInitArgs *vm_args, size_t *p_string_pool_size,
                         jboolean *p_is_class_data_shared, apr_pool_t* pool)
{
    LogFormat logger_header = LOG_EMPTY;
    *p_string_pool_size = DEFAULT_STRING_TABLE_SIZE;

    // initialize logging system as soon as possible
    log_init(pool);

    for (int i = 0; i < vm_args->nOptions; i++) {
        const char* option = vm_args->options[i].optionString;
        if (begins_with(option, STRING_POOL_SIZE_OPTION)) {
            const char* arg = option + strlen(STRING_POOL_SIZE_OPTION);
            *p_string_pool_size = parse_size(arg);
            if (0 == *p_string_pool_size) {
                LECHO(34, "Negative or invalid string pool size. A default value is used, "
                    << DEFAULT_STRING_TABLE_SIZE << " bytes.");
                *p_string_pool_size = DEFAULT_STRING_TABLE_SIZE;
            }
            TRACE("string_pool_size = " << *p_string_pool_size);
        } else if (!strcmp(option, CLASS_DATA_SHARING_OFF_OPTION)) {
            *p_is_class_data_shared = JNI_FALSE;
        } else if (!strcmp(option, CLASS_DATA_SHARING_ON_OPTION)) {
            *p_is_class_data_shared = JNI_TRUE;
        } else if (!strcmp(option, PORTLIB_OPTION)) {
            log_set_portlib((HyPortLibrary*) vm_args->options[i].extraInfo);
        } else if (!strcmp(option, "vfprintf")) {
            log_set_vfprintf(vm_args->options[i].extraInfo);
        } else if (!strcmp(option, "exit")) {
            log_set_exit(vm_args->options[i].extraInfo);
        } else if (!strcmp(option, "abort")) {
            log_set_abort(vm_args->options[i].extraInfo);
        } else if (!strcmp(option, "-Xfileline")) {
            logger_header |= LOG_FILELINE;
        } else if (!strcmp(option, "-Xthread")) {
            logger_header |= LOG_THREAD_ID;
        } else if (!strcmp(option, "-Xcategory")) {
            logger_header |= LOG_CATEGORY;
        } else if (!strcmp(option, "-Xtimestamp")) {
            logger_header |= LOG_TIMESTAMP;
        } else if (!strcmp(option, "-Xfunction")) {
            logger_header |= LOG_FUNCTION;
        } else if (!strcmp(option, "-Xwarn")) {
            logger_header |= LOG_WARN;
        /*
         * -verbose[:class|:gc|:jni] set specification log filters.
         */
        } else if (!strcmp(option, "-verbose")) {
            log_enable_info_category(LOG_CLASS_INFO, 0);
            log_enable_info_category(LOG_GC_INFO, 0);
            log_enable_info_category(LOG_JNI_INFO, 0);
        }  else if (!strcmp(option, "-verbose:class")) {
            log_enable_info_category(LOG_CLASS_INFO, 0);
        }  else if (!strcmp(option, "-verbose:gc")) {
            log_enable_info_category(LOG_GC_INFO, 0);
        }  else if (!strcmp(option, "-verbose:jni")) {
            log_enable_info_category(LOG_JNI_INFO, 0);
        } else if (begins_with(option, "-Xverboselog:")) {
            const char* file_name = option + strlen("-Xverboselog:");
            FILE *f = fopen(file_name, "w");
            if (NULL != f) {
                log_set_out(f);
            } else {
                WARN(("Cannot open: %s", file_name));
            }
        } else if (begins_with(option, "-Xverbose:")) {
            log_enable_info_category(option + strlen("-Xverbose:"), 1);
        } else if (begins_with(option, "-Xnoverbose:")) {
            log_disable_info_category(option + strlen("-Xnoverbose:"), 1);
#ifdef _DEBUG
        } else if (begins_with(option, "-Xtrace:")) {
            log_enable_trace_category(option + strlen("-Xtrace:"), 1);
        } else if (begins_with(option, "-Xnotrace:")) {
            log_disable_trace_category(option + strlen("-Xnotrace:"), 1);
#endif //_DEBUG
        }
    }
    log_set_header_format(logger_header);
} // parse_vm_arguments1