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); }
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