📄 jk_util.c
字号:
int rv; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(RETRIES_OF_WORKER); rv = jk_map_get_int(m, buf, def); if (rv < 1) rv = 1; return rv;}int jk_get_worker_recovery_opts(jk_map_t *m, const char *wname, int def){ char buf[1024]; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(RECOVERY_OPTS_OF_WORKER); return jk_map_get_int(m, buf, def);}const char *jk_get_worker_secret_key(jk_map_t *m, const char *wname){ char buf[1024]; if (!m || !wname) { return NULL; } MAKE_WORKER_PARAM(SECRET_KEY_OF_WORKER); return jk_map_get_string(m, buf, NULL);}int jk_get_worker_list(jk_map_t *m, char ***list, unsigned *num_of_wokers){ if (m && list && num_of_wokers) { char **ar = jk_map_get_string_list(m, WORKER_LIST_PROPERTY_NAME, num_of_wokers, DEFAULT_WORKER); if (ar) { *list = ar; return JK_TRUE; } *list = NULL; *num_of_wokers = 0; } return JK_FALSE;}int jk_get_is_worker_disabled(jk_map_t *m, const char *wname){ int rc = JK_TRUE; char buf[1024]; if (m && wname) { int value; MAKE_WORKER_PARAM(IS_WORKER_DISABLED); value = jk_map_get_bool(m, buf, 0); if (!value) rc = JK_FALSE; } return rc;}int jk_get_is_worker_stopped(jk_map_t *m, const char *wname){ int rc = JK_TRUE; char buf[1024]; if (m && wname) { int value; MAKE_WORKER_PARAM(IS_WORKER_STOPPED); value = jk_map_get_bool(m, buf, 0); if (!value) rc = JK_FALSE; } return rc;}void jk_set_log_format(const char *logformat){ jk_log_fmt = (logformat) ? logformat : JK_TIME_FORMAT;}int jk_get_lb_factor(jk_map_t *m, const char *wname){ char buf[1024]; if (!m || !wname) { return DEFAULT_LB_FACTOR; } MAKE_WORKER_PARAM(LOAD_FACTOR_OF_WORKER); return jk_map_get_int(m, buf, DEFAULT_LB_FACTOR);}int jk_get_is_sticky_session(jk_map_t *m, const char *wname){ int rc = JK_TRUE; char buf[1024]; if (m && wname) { int value; MAKE_WORKER_PARAM(STICKY_SESSION); value = jk_map_get_bool(m, buf, 1); if (!value) rc = JK_FALSE; } return rc;}int jk_get_is_sticky_session_force(jk_map_t *m, const char *wname){ int rc = JK_FALSE; char buf[1024]; if (m && wname) { int value; MAKE_WORKER_PARAM(STICKY_SESSION_FORCE); value = jk_map_get_bool(m, buf, 0); if (value) rc = JK_TRUE; } return rc;}int jk_get_lb_method(jk_map_t *m, const char *wname){ char buf[1024]; const char *v; if (!m || !wname) { return DEFAULT_LB_FACTOR; } MAKE_WORKER_PARAM(METHOD_OF_WORKER); v = jk_map_get_string(m, buf, NULL); if (!v) return JK_LB_BYREQUESTS; else if (*v == 't' || *v == 'T' || *v == '1') return JK_LB_BYTRAFFIC; else if (*v == 'r' || *v == 'R' || *v == '0') return JK_LB_BYREQUESTS; else return JK_LB_BYREQUESTS;}int jk_get_lb_lock(jk_map_t *m, const char *wname){ char buf[1024]; const char *v; if (!m || !wname) { return JK_LB_LOCK_DEFAULT; } MAKE_WORKER_PARAM(LOCK_OF_WORKER); v = jk_map_get_string(m, buf, NULL); if (!v) return JK_LB_LOCK_DEFAULT; else if (*v == 'o' || *v == 'O' || *v == '0') return JK_LB_LOCK_DEFAULT; else if (*v == 'p' || *v == 'P' || *v == '1') return JK_LB_LOCK_PESSIMISTIC; else return JK_LB_LOCK_DEFAULT;}int jk_get_lb_worker_list(jk_map_t *m, const char *wname, char ***list, unsigned int *num_of_wokers){ char buf[1024]; if (m && list && num_of_wokers && wname) { char **ar = NULL; MAKE_WORKER_PARAM(BALANCE_WORKERS); ar = jk_map_get_string_list(m, buf, num_of_wokers, NULL); if (ar) { *list = ar; return JK_TRUE; } /* Try old balanced_workers directive */ MAKE_WORKER_PARAM(BALANCED_WORKERS); ar = jk_map_get_string_list(m, buf, num_of_wokers, NULL); if (ar) { *list = ar; return JK_TRUE; } *list = NULL; *num_of_wokers = 0; } return JK_FALSE;}int jk_get_worker_mount_list(jk_map_t *m, const char *wname, char ***list, unsigned int *num_of_maps){ char buf[1024]; if (m && list && num_of_maps && wname) { char **ar = NULL; MAKE_WORKER_PARAM(MOUNT_OF_WORKER); ar = jk_map_get_string_list(m, buf, num_of_maps, NULL); if (ar) { *list = ar; return JK_TRUE; } *list = NULL; *num_of_maps = 0; } return JK_FALSE;}int jk_get_worker_maintain_time(jk_map_t *m){ return jk_map_get_int(m, WORKER_MAINTAIN_PROPERTY_NAME, DEFAULT_MAINTAIN_TIME);}int jk_get_worker_mx(jk_map_t *m, const char *wname, unsigned *mx){ char buf[1024]; if (m && mx && wname) { int i; MAKE_WORKER_PARAM(MX_OF_WORKER); i = jk_map_get_int(m, buf, -1); if (-1 != i) { *mx = (unsigned)i; return JK_TRUE; } } return JK_FALSE;}int jk_get_worker_ms(jk_map_t *m, const char *wname, unsigned *ms){ char buf[1024]; if (m && ms && wname) { int i; MAKE_WORKER_PARAM(MS_OF_WORKER); i = jk_map_get_int(m, buf, -1); if (-1 != i) { *ms = (unsigned)i; return JK_TRUE; } } return JK_FALSE;}int jk_get_worker_classpath(jk_map_t *m, const char *wname, const char **cp){ char buf[1024]; if (m && cp && wname) { MAKE_WORKER_PARAM(CP_OF_WORKER); *cp = jk_map_get_string(m, buf, NULL); if (*cp) { return JK_TRUE; } } return JK_FALSE;}int jk_get_worker_bridge_type(jk_map_t *m, const char *wname, unsigned *bt){ char buf[1024]; const char *type; if (m && bt && wname) { MAKE_WORKER_PARAM(BRIDGE_OF_WORKER); type = jk_map_get_string(m, buf, NULL); if (type) { if (!strcasecmp(type, TOMCAT32_BRIDGE_NAME)) *bt = TC32_BRIDGE_TYPE; else if (!strcasecmp(type, TOMCAT33_BRIDGE_NAME)) *bt = TC33_BRIDGE_TYPE; else if (!strcasecmp(type, TOMCAT40_BRIDGE_NAME)) *bt = TC40_BRIDGE_TYPE; else if (!strcasecmp(type, TOMCAT41_BRIDGE_NAME)) *bt = TC41_BRIDGE_TYPE; else if (!strcasecmp(type, TOMCAT50_BRIDGE_NAME)) *bt = TC50_BRIDGE_TYPE; return JK_TRUE; } } return JK_FALSE;}int jk_get_worker_jvm_path(jk_map_t *m, const char *wname, const char **vm_path){ char buf[1024]; if (m && vm_path && wname) { MAKE_WORKER_PARAM(JVM_OF_WORKER); *vm_path = jk_map_get_string(m, buf, NULL); if (*vm_path) { return JK_TRUE; } } return JK_FALSE;}/* [V] This is unused. currently. */int jk_get_worker_callback_dll(jk_map_t *m, const char *wname, const char **cb_path){ char buf[1024]; if (m && cb_path && wname) { MAKE_WORKER_PARAM(NATIVE_LIB_OF_WORKER); *cb_path = jk_map_get_string(m, buf, NULL); if (*cb_path) { return JK_TRUE; } } return JK_FALSE;}int jk_get_worker_cmd_line(jk_map_t *m, const char *wname, const char **cmd_line){ char buf[1024]; if (m && cmd_line && wname) { MAKE_WORKER_PARAM(CMD_LINE_OF_WORKER); *cmd_line = jk_map_get_string(m, buf, NULL); if (*cmd_line) { return JK_TRUE; } } return JK_FALSE;}int jk_file_exists(const char *f){ if (f) { struct stat st;#ifdef AS400 if ((0 == stat(f, &st)) && (st.st_mode & _S_IFREG)) {#else if ((0 == stat(f, &st)) && (st.st_mode & S_IFREG)) {#endif return JK_TRUE; } } return JK_FALSE;}static int jk_is_some_property(const char *prp_name, const char *suffix){ if (prp_name && suffix) { size_t prp_name_len = strlen(prp_name); size_t suffix_len = strlen(suffix); if (prp_name_len >= suffix_len) { const char *prp_suffix = prp_name + prp_name_len - suffix_len; if (0 == strcmp(suffix, prp_suffix)) { return JK_TRUE; } } } return JK_FALSE;}int jk_is_path_poperty(const char *prp_name){ return jk_is_some_property(prp_name, "path");}int jk_is_cmd_line_poperty(const char *prp_name){ return jk_is_some_property(prp_name, CMD_LINE_OF_WORKER);}static const char *unique_properties[] = { HOST_OF_WORKER, PORT_OF_WORKER, TYPE_OF_WORKER, CACHE_OF_WORKER, CACHE_OF_WORKER_DEPRECATED, CACHE_TIMEOUT_OF_WORKER, RECOVERY_OPTS_OF_WORKER, CONNECT_TIMEOUT_OF_WORKER, PREPOST_TIMEOUT_OF_WORKER, REPLY_TIMEOUT_OF_WORKER, SOCKET_TIMEOUT_OF_WORKER, SOCKET_BUFFER_OF_WORKER, SOCKET_KEEPALIVE_OF_WORKER, RECYCLE_TIMEOUT_OF_WORKER, LOAD_FACTOR_OF_WORKER, STICKY_SESSION, STICKY_SESSION_FORCE, DOMAIN_OF_WORKER, REDIRECT_OF_WORKER, MOUNT_OF_WORKER, METHOD_OF_WORKER, IS_WORKER_DISABLED, IS_WORKER_STOPPED, WORKER_RECOVER_TIME, SECRET_OF_WORKER, RETRIES_OF_WORKER, NULL};int jk_is_unique_property(const char *prp_name){ const char **props = &unique_properties[0]; while (*props) { if (jk_is_some_property(prp_name, *props)) return JK_TRUE; props++; } return JK_FALSE;}int jk_get_worker_stdout(jk_map_t *m, const char *wname, const char **stdout_name){ char buf[1024]; if (m && stdout_name && wname) { MAKE_WORKER_PARAM(STDOUT_OF_WORKER); *stdout_name = jk_map_get_string(m, buf, NULL); if (*stdout_name) { return JK_TRUE; } } return JK_FALSE;}int jk_get_worker_stderr(jk_map_t *m, const char *wname, const char **stderr_name){ char buf[1024]; if (m && stderr_name && wname) { MAKE_WORKER_PARAM(STDERR_OF_WORKER); *stderr_name = jk_map_get_string(m, buf, NULL); if (*stderr_name) { return JK_TRUE; } } return JK_FALSE;}int jk_get_worker_sysprops(jk_map_t *m, const char *wname, const char **sysprops){ char buf[1024]; if (m && sysprops && wname) { MAKE_WORKER_PARAM(SYSPROPS_OF_WORKER); *sysprops = jk_map_get_string(m, buf, NULL); if (*sysprops) { return JK_TRUE; } } return JK_FALSE;}int jk_get_worker_libpath(jk_map_t *m, const char *wname, const char **libpath){ char buf[1024]; if (m && libpath && wname) { MAKE_WORKER_PARAM(LIBPATH_OF_WORKER); *libpath = jk_map_get_string(m, buf, NULL); if (*libpath) { return JK_TRUE; } } return JK_FALSE;}char **jk_parse_sysprops(jk_pool_t *p, const char *sysprops){ char **rc = NULL;#if defined(AS400) || defined(_REENTRANT) char *lasts;#endif if (p && sysprops) { char *prps = jk_pool_strdup(p, sysprops); if (prps && strlen(prps)) { unsigned num_of_prps; for (num_of_prps = 1; *sysprops; sysprops++) { if ('*' == *sysprops) { num_of_prps++; } } rc = jk_pool_alloc(p, (num_of_prps + 1) * sizeof(char *)); if (rc) { unsigned i = 0;#if defined(AS400) || defined(_REENTRANT) char *tmp = strtok_r(prps, "*", &lasts);#else char *tmp = strtok(prps, "*");#endif while (tmp && i < num_of_prps) { rc[i] = tmp;#if defined(AS400) || defined(_REENTRANT) tmp = strtok_r(NULL, "*", &lasts);#else tmp = strtok(NULL, "*");#endif i++; } rc[i] = NULL; } } } return rc;}void jk_append_libpath(jk_pool_t *p, const char *libpath){ char *env = NULL; char *current = getenv(PATH_ENV_VARIABLE); if (current) { env = jk_pool_alloc(p, strlen(PATH_ENV_VARIABLE) + strlen(current) + strlen(libpath) + 5); if (env) { sprintf(env, "%s=%s%c%s", PATH_ENV_VARIABLE, libpath, PATH_SEPERATOR, current); } } else { env = jk_pool_alloc(p, strlen(PATH_ENV_VARIABLE) + strlen(libpath) + 5); if (env) { sprintf(env, "%s=%s", PATH_ENV_VARIABLE, libpath); } } if (env) { putenv(env); }}void jk_init_ws_service(jk_ws_service_t *s){ s->ws_private = NULL; s->pool = NULL; s->method = NULL; s->protocol = NULL; s->req_uri = NULL; s->remote_addr = NULL; s->remote_host = NULL; s->remote_user = NULL; s->auth_type = NULL; s->query_string = NULL; s->server_name = NULL; s->server_port = 80; s->server_software = NULL; s->content_length = 0; s->is_chunked = 0; s->no_more_chunks = 0; s->content_read = 0; s->is_ssl = JK_FALSE; s->ssl_cert = NULL; s->ssl_cert_len = 0; s->ssl_cipher = NULL; s->ssl_session = NULL; s->headers_names = NULL; s->headers_values = NULL; s->num_headers = 0; s->attributes_names = NULL; s->attributes_values = NULL; s->num_attributes = 0; s->jvm_route = NULL; s->retries = JK_RETRIES;}#ifdef _MT_CODE_PTHREADint jk_gettid(){ pthread_t t = pthread_self();#ifdef AS400 /* OS400 use 64 bits ThreadId, get only low 32 bits for now */ pthread_id_np_t tid; pthread_getunique_np(&t, &tid); return ((int)(tid.intId.lo & 0xFFFFFFFF));#else int tid = (int)(t & 0xFFFF); return tid;#endif /* AS400 */}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -