summaryrefslogtreecommitdiffstats
path: root/rubbos/app/tomcat-connectors-1.2.32-src/native/common
diff options
context:
space:
mode:
Diffstat (limited to 'rubbos/app/tomcat-connectors-1.2.32-src/native/common')
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.indent.pro18
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp12_worker.obin72992 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp13.obin11264 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp13_worker.obin35280 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp14.obin74416 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp14_worker.obin70736 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp_common.obin291472 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_connect.obin84960 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_context.obin19080 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_jni_worker.obin16128 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_lb_worker.obin172368 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_map.obin83792 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_md5.obin20208 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_msg_buff.obin23520 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_pool.obin13048 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_shm.obin60272 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_sockbuf.obin13680 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_status.obin828736 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_uri_worker_map.obin126944 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_url.obin9312 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_util.obin244016 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_worker.obin55776 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/Makefile49
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/Makefile.in49
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/ap_snprintf.c1178
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/ap_snprintf.h150
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/config.h110
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/config.h.in109
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk.rc74
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.c682
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.h45
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.obin71160 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.c50
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.h126
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.obin11104 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.c94
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.h50
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.obin35184 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.c695
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.h307
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.obin73016 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.c404
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.h52
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.obin69632 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.c3383
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.h467
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.obin283648 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.c1190
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.h78
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.obin83736 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.c296
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.h138
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.obin19176 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_global.h405
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.c1267
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.h45
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.obin15984 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.c1823
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.h222
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.obin170152 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_logger.h139
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.c889
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.h95
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.obin90080 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.c475
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.h84
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.obin20768 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.c382
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.h154
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.obin24304 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_mt.h150
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_nwmain.c103
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.c165
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.h126
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.obin12968 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_service.h546
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.c812
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.h258
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.obin59384 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.c195
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.h45
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.obin13624 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.c5200
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.h44
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.obin806096 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_types.h69
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_types.h.in69
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.c1191
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.h208
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.obin124368 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.c124
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.h44
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.obin9200 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.c2253
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.h269
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.obin243024 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_version.h96
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.c351
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.h55
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.lo12
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.obin54176 -> 0 bytes
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker_list.h98
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/list.mk27
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/list.mk.in27
-rw-r--r--rubbos/app/tomcat-connectors-1.2.32-src/native/common/stamp-h11
125 files changed, 0 insertions, 28552 deletions
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.indent.pro b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.indent.pro
deleted file mode 100644
index 87ca4192..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.indent.pro
+++ /dev/null
@@ -1,18 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1 -nut -ncs
--Tjk_env_t
--Tjk_worker_t
--Tjk_worker_env_t
--Tjk_endpoint_t
--Tjk_channel_t
--Tjk_sockbuf_t
--Tjk_msg_t
--Tjk_msg_buf_t
--Tjk_map_t
--Tjk_uri_worker_map_t
--Tjk_pool_t
--Tjk_pool_atom_t
--Tjk_logger_t
--Tjk_ws_service_t
--Tjk_context_item_t
--Tjk_context_t
--Tjk_login_service_t
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp12_worker.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp12_worker.o
deleted file mode 100644
index 43f069c5..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp12_worker.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp13.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp13.o
deleted file mode 100644
index 65a3b17c..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp13.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp13_worker.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp13_worker.o
deleted file mode 100644
index 6964abbf..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp13_worker.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp14.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp14.o
deleted file mode 100644
index 052f3ef2..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp14.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp14_worker.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp14_worker.o
deleted file mode 100644
index 87fafdbf..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp14_worker.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp_common.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp_common.o
deleted file mode 100644
index a20eca35..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_ajp_common.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_connect.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_connect.o
deleted file mode 100644
index 007bd0d3..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_connect.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_context.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_context.o
deleted file mode 100644
index 48f29a7d..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_context.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_jni_worker.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_jni_worker.o
deleted file mode 100644
index 01dc3d23..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_jni_worker.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_lb_worker.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_lb_worker.o
deleted file mode 100644
index ed0cc246..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_lb_worker.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_map.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_map.o
deleted file mode 100644
index 4ccd1aac..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_map.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_md5.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_md5.o
deleted file mode 100644
index b9780541..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_md5.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_msg_buff.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_msg_buff.o
deleted file mode 100644
index 7b0c05b4..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_msg_buff.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_pool.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_pool.o
deleted file mode 100644
index 52c12aa9..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_pool.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_shm.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_shm.o
deleted file mode 100644
index 96025d9f..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_shm.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_sockbuf.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_sockbuf.o
deleted file mode 100644
index 248f7d0c..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_sockbuf.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_status.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_status.o
deleted file mode 100644
index 763f6b40..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_status.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_uri_worker_map.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_uri_worker_map.o
deleted file mode 100644
index 3d1c5b53..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_uri_worker_map.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_url.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_url.o
deleted file mode 100644
index c0d52ee0..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_url.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_util.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_util.o
deleted file mode 100644
index 0bfdc8b4..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_util.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_worker.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_worker.o
deleted file mode 100644
index e6530d0d..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/.libs/jk_worker.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/Makefile b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/Makefile
deleted file mode 100644
index 880168d8..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/Makefile
+++ /dev/null
@@ -1,49 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-#### XXXX DO we need this Makefile ????
-srcdir = .
-top_srcdir = ..
-
-prefix = /usr/local
-exec_prefix = ${prefix}
-APXSLDFLAGS=
-APXSCFLAGS= -g -O2 -pthread -DHAVE_APR -I/bottlenecks/rubbos/app/httpd-2.0.64/srclib/apr/include -I/bottlenecks/rubbos/app/httpd-2.0.64/srclib/apr-util/include -DHAVE_CONFIG_H -DHAVE_JNI
-APXSCPPFLAGS=-D_REENTRANT -D_GNU_SOURCE
-
-top_builddir = ..
-
-LIBTOOL = /bin/bash /bottlenecks/rubbos/app/apache2/build/libtool --silent
-CC = gcc
-
-OEXT=.lo
-include list.mk
-
-JAVA_INCL=-I /bottlenecks/rubbos/app/jdk1.6.0_27/include -I /bottlenecks/rubbos/app/jdk1.6.0_27/include/linux
-CFLAGS=-I/bottlenecks/rubbos/app/apache2/include -DHAVE_CONFIG_H -DHAVE_JNI ${APXSCFLAGS} ${APXSCPPFLAGS} ${JAVA_INCL}
-
-include ../scripts/build/rules.mk
-
-JK=./
-
-all: ${APACHE_OBJECTS}
-
-install:
-
-clean:
- rm -f *.o *.lo *.a *.la *.so *.so.* *.slo
- rm -rf .libs
-
-maintainer-clean: clean
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/Makefile.in b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/Makefile.in
deleted file mode 100644
index 4304ae5f..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/Makefile.in
+++ /dev/null
@@ -1,49 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-#### XXXX DO we need this Makefile ????
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-APXSLDFLAGS=@APXSLDFLAGS@
-APXSCFLAGS=@APXSCFLAGS@
-APXSCPPFLAGS=@APXSCPPFLAGS@
-
-top_builddir = ..
-
-LIBTOOL = @LIBTOOL@
-CC = @CC@
-
-OEXT=.lo
-include list.mk
-
-JAVA_INCL=-I @JAVA_HOME@/include -I @JAVA_HOME@/include/@OS@
-CFLAGS=@apache_include@ @CFLAGS@ ${APXSCFLAGS} ${APXSCPPFLAGS} ${JAVA_INCL}
-
-include @top_srcdir@/scripts/build/rules.mk
-
-JK=./
-
-all: ${APACHE_OBJECTS}
-
-install:
-
-clean:
- rm -f *.o *.lo *.a *.la *.so *.so.* *.slo
- rm -rf .libs
-
-maintainer-clean: clean
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/ap_snprintf.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/ap_snprintf.c
deleted file mode 100644
index 18b539de..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/ap_snprintf.c
+++ /dev/null
@@ -1,1178 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * This code is based on, and used with the permission of, the
- * SIO stdio-replacement strx_* functions by Panos Tsirigotis
- * <panos@alumni.cs.colorado.edu> for xinetd.
- */
-#define BUILD_STANDALONE
-
-#ifndef BUILD_STANDALONE
-#include "httpd.h"
-#else
-#include "ap_snprintf.h"
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-#ifndef NETWARE
-#include <sys/types.h>
-#endif
-#include <stdarg.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-#ifdef WIN32
-#include <float.h>
-#endif
-
-typedef enum {
- NO = 0, YES = 1
-} boolean_e;
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef AP_LONGEST_LONG
-#define AP_LONGEST_LONG long
-#endif
-#define NUL '\0'
-#define WIDE_INT long
-#define WIDEST_INT AP_LONGEST_LONG
-
-typedef WIDE_INT wide_int;
-typedef unsigned WIDE_INT u_wide_int;
-typedef WIDEST_INT widest_int;
-#ifdef __TANDEM
-/* Although Tandem supports "long long" there is no unsigned variant. */
-typedef unsigned long u_widest_int;
-#else
-typedef unsigned WIDEST_INT u_widest_int;
-#endif
-typedef int bool_int;
-
-#define S_NULL "(null)"
-#define S_NULL_LEN 6
-
-#define FLOAT_DIGITS 6
-#define EXPONENT_LENGTH 10
-
-/*
- * NUM_BUF_SIZE is the size of the buffer used for arithmetic conversions
- *
- * XXX: this is a magic number; do not decrease it
- */
-#define NUM_BUF_SIZE 512
-
-/*
- * cvt - IEEE floating point formatting routines.
- * Derived from UNIX V7, Copyright(C) Caldera International Inc.
- */
-
-/*
- * ap_ecvt converts to decimal
- * the number of digits is specified by ndigit
- * decpt is set to the position of the decimal point
- * sign is set to 0 for positive, 1 for negative
- */
-
-#define NDIG 80
-
-/* buf must have at least NDIG bytes */
-static char *ap_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag, char *buf)
-{
- register int r2;
- double fi, fj;
- register char *p, *p1;
-
- if (ndigits >= NDIG - 1)
- ndigits = NDIG - 2;
- r2 = 0;
- *sign = 0;
- p = &buf[0];
- if (arg < 0) {
- *sign = 1;
- arg = -arg;
- }
- arg = modf(arg, &fi);
- p1 = &buf[NDIG];
- /*
- * Do integer part
- */
- if (fi != 0) {
- p1 = &buf[NDIG];
- while (p1 > &buf[0] && fi != 0) {
- fj = modf(fi / 10, &fi);
- *--p1 = (int) ((fj + .03) * 10) + '0';
- r2++;
- }
- while (p1 < &buf[NDIG])
- *p++ = *p1++;
- }
- else if (arg > 0) {
- while ((fj = arg * 10) < 1) {
- arg = fj;
- r2--;
- }
- }
- p1 = &buf[ndigits];
- if (eflag == 0)
- p1 += r2;
- *decpt = r2;
- if (p1 < &buf[0]) {
- buf[0] = '\0';
- return (buf);
- }
- while (p <= p1 && p < &buf[NDIG]) {
- arg *= 10;
- arg = modf(arg, &fj);
- *p++ = (int) fj + '0';
- }
- if (p1 >= &buf[NDIG]) {
- buf[NDIG - 1] = '\0';
- return (buf);
- }
- p = p1;
- *p1 += 5;
- while (*p1 > '9') {
- *p1 = '0';
- if (p1 > buf)
- ++ * --p1;
- else {
- *p1 = '1';
- (*decpt)++;
- if (eflag == 0) {
- if (p > buf)
- *p = '0';
- p++;
- }
- }
- }
- *p = '\0';
- return (buf);
-}
-
-static char *ap_ecvt(double arg, int ndigits, int *decpt, int *sign, char *buf)
-{
- return (ap_cvt(arg, ndigits, decpt, sign, 1, buf));
-}
-
-static char *ap_fcvt(double arg, int ndigits, int *decpt, int *sign, char *buf)
-{
- return (ap_cvt(arg, ndigits, decpt, sign, 0, buf));
-}
-
-/*
- * ap_gcvt - Floating output conversion to
- * minimal length string
- */
-
-static char *ap_gcvt(double number, int ndigit, char *buf, boolean_e altform)
-{
- int sign, decpt;
- register char *p1, *p2;
- register int i;
- char buf1[NDIG];
-
- p1 = ap_ecvt(number, ndigit, &decpt, &sign, buf1);
- p2 = buf;
- if (sign)
- *p2++ = '-';
- for (i = ndigit - 1; i > 0 && p1[i] == '0'; i--)
- ndigit--;
- if ((decpt >= 0 && decpt - ndigit > 4)
- || (decpt < 0 && decpt < -3)) { /* use E-style */
- decpt--;
- *p2++ = *p1++;
- *p2++ = '.';
- for (i = 1; i < ndigit; i++)
- *p2++ = *p1++;
- *p2++ = 'e';
- if (decpt < 0) {
- decpt = -decpt;
- *p2++ = '-';
- }
- else
- *p2++ = '+';
- if (decpt / 100 > 0)
- *p2++ = decpt / 100 + '0';
- if (decpt / 10 > 0)
- *p2++ = (decpt % 100) / 10 + '0';
- *p2++ = decpt % 10 + '0';
- }
- else {
- if (decpt <= 0) {
- if (*p1 != '0')
- *p2++ = '.';
- while (decpt < 0) {
- decpt++;
- *p2++ = '0';
- }
- }
- for (i = 1; i <= ndigit; i++) {
- *p2++ = *p1++;
- if (i == decpt)
- *p2++ = '.';
- }
- if (ndigit < decpt) {
- while (ndigit++ < decpt)
- *p2++ = '0';
- *p2++ = '.';
- }
- }
- if (p2[-1] == '.' && !altform)
- p2--;
- *p2 = '\0';
- return (buf);
-}
-
-/*
- * The INS_CHAR macro inserts a character in the buffer and writes
- * the buffer back to disk if necessary
- * It uses the char pointers sp and bep:
- * sp points to the next available character in the buffer
- * bep points to the end-of-buffer+1
- * While using this macro, note that the nextb pointer is NOT updated.
- *
- * NOTE: Evaluation of the c argument should not have any side-effects
- */
-#define INS_CHAR(c, sp, bep, cc) \
- { \
- if (sp >= bep) { \
- vbuff->curpos = sp; \
- if (flush_func(vbuff)) \
- return -1; \
- sp = vbuff->curpos; \
- bep = vbuff->endpos; \
- } \
- *sp++ = (c); \
- cc++; \
- }
-
-#define NUM( c ) ( c - '0' )
-
-#define STR_TO_DEC( str, num ) \
- num = NUM( *str++ ) ; \
- while ( ap_isdigit( *str ) ) \
- { \
- num *= 10 ; \
- num += NUM( *str++ ) ; \
- }
-
-/*
- * This macro does zero padding so that the precision
- * requirement is satisfied. The padding is done by
- * adding '0's to the left of the string that is going
- * to be printed. We don't allow precision to be large
- * enough that we continue past the start of s.
- *
- * NOTE: this makes use of the magic info that s is
- * always based on num_buf with a size of NUM_BUF_SIZE.
- */
-#define FIX_PRECISION( adjust, precision, s, s_len ) \
- if ( adjust ) { \
- int p = precision < NUM_BUF_SIZE - 1 ? precision : NUM_BUF_SIZE - 1; \
- while ( s_len < p ) \
- { \
- *--s = '0' ; \
- s_len++ ; \
- } \
- }
-
-/*
- * Macro that does padding. The padding is done by printing
- * the character ch.
- */
-#define PAD( width, len, ch ) do \
- { \
- INS_CHAR( ch, sp, bep, cc ) ; \
- width-- ; \
- } \
- while ( width > len )
-
-/*
- * Prefix the character ch to the string str
- * Increase length
- * Set the has_prefix flag
- */
-#define PREFIX( str, length, ch ) *--str = ch ; length++ ; has_prefix = YES
-
-
-/*
- * Convert num to its decimal format.
- * Return value:
- * - a pointer to a string containing the number (no sign)
- * - len contains the length of the string
- * - is_negative is set to TRUE or FALSE depending on the sign
- * of the number (always set to FALSE if is_unsigned is TRUE)
- *
- * The caller provides a buffer for the string: that is the buf_end argument
- * which is a pointer to the END of the buffer + 1 (i.e. if the buffer
- * is declared as buf[ 100 ], buf_end should be &buf[ 100 ])
- *
- * Note: we have 2 versions. One is used when we need to use quads
- * (conv_10_quad), the other when we don't (conv_10). We're assuming the
- * latter is faster.
- */
-static char *conv_10(register wide_int num, register bool_int is_unsigned,
- register bool_int *is_negative, char *buf_end,
- register int *len)
-{
- register char *p = buf_end;
- register u_wide_int magnitude;
-
- if (is_unsigned) {
- magnitude = (u_wide_int) num;
- *is_negative = FALSE;
- }
- else {
- *is_negative = (num < 0);
-
- /*
- * On a 2's complement machine, negating the most negative integer
- * results in a number that cannot be represented as a signed integer.
- * Here is what we do to obtain the number's magnitude:
- * a. add 1 to the number
- * b. negate it (becomes positive)
- * c. convert it to unsigned
- * d. add 1
- */
- if (*is_negative) {
- wide_int t = num + 1;
-
- magnitude = ((u_wide_int) -t) + 1;
- }
- else
- magnitude = (u_wide_int) num;
- }
-
- /*
- * We use a do-while loop so that we write at least 1 digit
- */
- do {
- register u_wide_int new_magnitude = magnitude / 10;
-
- *--p = (char) (magnitude - new_magnitude * 10 + '0');
- magnitude = new_magnitude;
- }
- while (magnitude);
-
- *len = buf_end - p;
- return (p);
-}
-
-static char *conv_10_quad(widest_int num, register bool_int is_unsigned,
- register bool_int *is_negative, char *buf_end,
- register int *len)
-{
- register char *p = buf_end;
- u_widest_int magnitude;
-
- /*
- * We see if we can use the faster non-quad version by checking the
- * number against the largest long value it can be. If <=, we
- * punt to the quicker version.
- */
- if ((num <= ULONG_MAX && is_unsigned) || (num <= LONG_MAX && !is_unsigned))
- return(conv_10( (wide_int)num, is_unsigned, is_negative,
- buf_end, len));
-
- if (is_unsigned) {
- magnitude = (u_widest_int) num;
- *is_negative = FALSE;
- }
- else {
- *is_negative = (num < 0);
-
- /*
- * On a 2's complement machine, negating the most negative integer
- * results in a number that cannot be represented as a signed integer.
- * Here is what we do to obtain the number's magnitude:
- * a. add 1 to the number
- * b. negate it (becomes positive)
- * c. convert it to unsigned
- * d. add 1
- */
- if (*is_negative) {
- widest_int t = num + 1;
-
- magnitude = ((u_widest_int) -t) + 1;
- }
- else
- magnitude = (u_widest_int) num;
- }
-
- /*
- * We use a do-while loop so that we write at least 1 digit
- */
- do {
- u_widest_int new_magnitude = magnitude / 10;
-
- *--p = (char) (magnitude - new_magnitude * 10 + '0');
- magnitude = new_magnitude;
- }
- while (magnitude);
-
- *len = buf_end - p;
- return (p);
-}
-
-
-
-#ifndef BUILD_STANDALONE
-static char *conv_in_addr(struct in_addr *ia, char *buf_end, int *len)
-{
- unsigned addr = ntohl(ia->s_addr);
- char *p = buf_end;
- bool_int is_negative;
- int sub_len;
-
- p = conv_10((addr & 0x000000FF) , TRUE, &is_negative, p, &sub_len);
- *--p = '.';
- p = conv_10((addr & 0x0000FF00) >> 8, TRUE, &is_negative, p, &sub_len);
- *--p = '.';
- p = conv_10((addr & 0x00FF0000) >> 16, TRUE, &is_negative, p, &sub_len);
- *--p = '.';
- p = conv_10((addr & 0xFF000000) >> 24, TRUE, &is_negative, p, &sub_len);
-
- *len = buf_end - p;
- return (p);
-}
-
-
-
-static char *conv_sockaddr_in(struct sockaddr_in *si, char *buf_end, int *len)
-{
- char *p = buf_end;
- bool_int is_negative;
- int sub_len;
-
- p = conv_10(ntohs(si->sin_port), TRUE, &is_negative, p, &sub_len);
- *--p = ':';
- p = conv_in_addr(&si->sin_addr, p, &sub_len);
-
- *len = buf_end - p;
- return (p);
-}
-#endif
-
-
-/*
- * Convert a floating point number to a string formats 'f', 'e' or 'E'.
- * The result is placed in buf, and len denotes the length of the string
- * The sign is returned in the is_negative argument (and is not placed
- * in buf).
- */
-static char *conv_fp(register char format, register double num,
- boolean_e add_dp, int precision, bool_int *is_negative,
- char *buf, int *len)
-{
- register char *s = buf;
- register char *p;
- int decimal_point;
- char buf1[NDIG];
-
- if (format == 'f')
- p = ap_fcvt(num, precision, &decimal_point, is_negative, buf1);
- else /* either e or E format */
- p = ap_ecvt(num, precision + 1, &decimal_point, is_negative, buf1);
-
- /*
- * Check for Infinity and NaN
- */
- if (ap_isalpha(*p)) {
- *len = strlen(strcpy(buf, p));
- *is_negative = FALSE;
- return (buf);
- }
-
- if (format == 'f') {
- if (decimal_point <= 0) {
- *s++ = '0';
- if (precision > 0) {
- *s++ = '.';
- while (decimal_point++ < 0)
- *s++ = '0';
- }
- else if (add_dp)
- *s++ = '.';
- }
- else {
- while (decimal_point-- > 0)
- *s++ = *p++;
- if (precision > 0 || add_dp)
- *s++ = '.';
- }
- }
- else {
- *s++ = *p++;
- if (precision > 0 || add_dp)
- *s++ = '.';
- }
-
- /*
- * copy the rest of p, the NUL is NOT copied
- */
- while (*p)
- *s++ = *p++;
-
- if (format != 'f') {
- char temp[EXPONENT_LENGTH]; /* for exponent conversion */
- int t_len;
- bool_int exponent_is_negative;
-
- *s++ = format; /* either e or E */
- decimal_point--;
- if (decimal_point != 0) {
- p = conv_10((wide_int) decimal_point, FALSE, &exponent_is_negative,
- &temp[EXPONENT_LENGTH], &t_len);
- *s++ = exponent_is_negative ? '-' : '+';
-
- /*
- * Make sure the exponent has at least 2 digits
- */
- if (t_len == 1)
- *s++ = '0';
- while (t_len--)
- *s++ = *p++;
- }
- else {
- *s++ = '+';
- *s++ = '0';
- *s++ = '0';
- }
- }
-
- *len = s - buf;
- return (buf);
-}
-
-
-/*
- * Convert num to a base X number where X is a power of 2. nbits determines X.
- * For example, if nbits is 3, we do base 8 conversion
- * Return value:
- * a pointer to a string containing the number
- *
- * The caller provides a buffer for the string: that is the buf_end argument
- * which is a pointer to the END of the buffer + 1 (i.e. if the buffer
- * is declared as buf[ 100 ], buf_end should be &buf[ 100 ])
- *
- * As with conv_10, we have a faster version which is used when
- * the number isn't quad size.
- */
-static char *conv_p2(register u_wide_int num, register int nbits,
- char format, char *buf_end, register int *len)
-{
- register int mask = (1 << nbits) - 1;
- register char *p = buf_end;
- static const char low_digits[] = "0123456789abcdef";
- static const char upper_digits[] = "0123456789ABCDEF";
- register const char *digits = (format == 'X') ? upper_digits : low_digits;
-
- do {
- *--p = digits[num & mask];
- num >>= nbits;
- }
- while (num);
-
- *len = buf_end - p;
- return (p);
-}
-
-static char *conv_p2_quad(u_widest_int num, register int nbits,
- char format, char *buf_end, register int *len)
-{
- register int mask = (1 << nbits) - 1;
- register char *p = buf_end;
- static const char low_digits[] = "0123456789abcdef";
- static const char upper_digits[] = "0123456789ABCDEF";
- register const char *digits = (format == 'X') ? upper_digits : low_digits;
-
- if (num <= ULONG_MAX)
- return(conv_p2( (u_wide_int)num, nbits, format, buf_end, len));
-
- do {
- *--p = digits[num & mask];
- num >>= nbits;
- }
- while (num);
-
- *len = buf_end - p;
- return (p);
-}
-
-
-/*
- * Do format conversion placing the output in buffer
- */
-API_EXPORT(int) ap_vformatter(int (*flush_func)(ap_vformatter_buff *),
- ap_vformatter_buff *vbuff, const char *fmt, va_list ap)
-{
- register char *sp;
- register char *bep;
- register int cc = 0;
- register int i;
-
- register char *s = NULL;
- char *q;
- int s_len;
-
- register int min_width = 0;
- int precision = 0;
- enum {
- LEFT, RIGHT
- } adjust;
- char pad_char;
- char prefix_char;
-
- double fp_num;
- widest_int i_quad = (widest_int) 0;
- u_widest_int ui_quad;
- wide_int i_num = (wide_int) 0;
- u_wide_int ui_num;
-
- char num_buf[NUM_BUF_SIZE];
- char char_buf[2]; /* for printing %% and %<unknown> */
-
- enum var_type_enum {
- IS_QUAD, IS_LONG, IS_SHORT, IS_INT
- };
- enum var_type_enum var_type = IS_INT;
-
- /*
- * Flag variables
- */
- boolean_e alternate_form;
- boolean_e print_sign;
- boolean_e print_blank;
- boolean_e adjust_precision;
- boolean_e adjust_width;
- bool_int is_negative;
-
- sp = vbuff->curpos;
- bep = vbuff->endpos;
-
- while (*fmt) {
- if (*fmt != '%') {
- INS_CHAR(*fmt, sp, bep, cc);
- }
- else {
- /*
- * Default variable settings
- */
- adjust = RIGHT;
- alternate_form = print_sign = print_blank = NO;
- pad_char = ' ';
- prefix_char = NUL;
-
- fmt++;
-
- /*
- * Try to avoid checking for flags, width or precision
- */
- if (!ap_islower(*fmt)) {
- /*
- * Recognize flags: -, #, BLANK, +
- */
- for (;; fmt++) {
- if (*fmt == '-')
- adjust = LEFT;
- else if (*fmt == '+')
- print_sign = YES;
- else if (*fmt == '#')
- alternate_form = YES;
- else if (*fmt == ' ')
- print_blank = YES;
- else if (*fmt == '0')
- pad_char = '0';
- else
- break;
- }
-
- /*
- * Check if a width was specified
- */
- if (ap_isdigit(*fmt)) {
- STR_TO_DEC(fmt, min_width);
- adjust_width = YES;
- }
- else if (*fmt == '*') {
- min_width = va_arg(ap, int);
- fmt++;
- adjust_width = YES;
- if (min_width < 0) {
- adjust = LEFT;
- min_width = -min_width;
- }
- }
- else
- adjust_width = NO;
-
- /*
- * Check if a precision was specified
- */
- if (*fmt == '.') {
- adjust_precision = YES;
- fmt++;
- if (ap_isdigit(*fmt)) {
- STR_TO_DEC(fmt, precision);
- }
- else if (*fmt == '*') {
- precision = va_arg(ap, int);
- fmt++;
- if (precision < 0)
- precision = 0;
- }
- else
- precision = 0;
- }
- else
- adjust_precision = NO;
- }
- else
- adjust_precision = adjust_width = NO;
-
- /*
- * Modifier check
- */
- if (*fmt == 'q') {
- var_type = IS_QUAD;
- fmt++;
- }
- else if (*fmt == 'l') {
- var_type = IS_LONG;
- fmt++;
- }
- else if (*fmt == 'h') {
- var_type = IS_SHORT;
- fmt++;
- }
- else {
- var_type = IS_INT;
- }
-
- /*
- * Argument extraction and printing.
- * First we determine the argument type.
- * Then, we convert the argument to a string.
- * On exit from the switch, s points to the string that
- * must be printed, s_len has the length of the string
- * The precision requirements, if any, are reflected in s_len.
- *
- * NOTE: pad_char may be set to '0' because of the 0 flag.
- * It is reset to ' ' by non-numeric formats
- */
- switch (*fmt) {
- case 'u':
- if (var_type == IS_QUAD) {
- i_quad = va_arg(ap, u_widest_int);
- s = conv_10_quad(i_quad, 1, &is_negative,
- &num_buf[NUM_BUF_SIZE], &s_len);
- }
- else {
- if (var_type == IS_LONG)
- i_num = (wide_int) va_arg(ap, u_wide_int);
- else if (var_type == IS_SHORT)
- i_num = (wide_int) (unsigned short) va_arg(ap, unsigned int);
- else
- i_num = (wide_int) va_arg(ap, unsigned int);
- s = conv_10(i_num, 1, &is_negative,
- &num_buf[NUM_BUF_SIZE], &s_len);
- }
- FIX_PRECISION(adjust_precision, precision, s, s_len);
- break;
-
- case 'd':
- case 'i':
- if (var_type == IS_QUAD) {
- i_quad = va_arg(ap, widest_int);
- s = conv_10_quad(i_quad, 0, &is_negative,
- &num_buf[NUM_BUF_SIZE], &s_len);
- }
- else {
- if (var_type == IS_LONG)
- i_num = (wide_int) va_arg(ap, wide_int);
- else if (var_type == IS_SHORT)
- i_num = (wide_int) (short) va_arg(ap, int);
- else
- i_num = (wide_int) va_arg(ap, int);
- s = conv_10(i_num, 0, &is_negative,
- &num_buf[NUM_BUF_SIZE], &s_len);
- }
- FIX_PRECISION(adjust_precision, precision, s, s_len);
-
- if (is_negative)
- prefix_char = '-';
- else if (print_sign)
- prefix_char = '+';
- else if (print_blank)
- prefix_char = ' ';
- break;
-
-
- case 'o':
- if (var_type == IS_QUAD) {
- ui_quad = va_arg(ap, u_widest_int);
- s = conv_p2_quad(ui_quad, 3, *fmt,
- &num_buf[NUM_BUF_SIZE], &s_len);
- }
- else {
- if (var_type == IS_LONG)
- ui_num = (u_wide_int) va_arg(ap, u_wide_int);
- else if (var_type == IS_SHORT)
- ui_num = (u_wide_int) (unsigned short) va_arg(ap, unsigned int);
- else
- ui_num = (u_wide_int) va_arg(ap, unsigned int);
- s = conv_p2(ui_num, 3, *fmt,
- &num_buf[NUM_BUF_SIZE], &s_len);
- }
- FIX_PRECISION(adjust_precision, precision, s, s_len);
- if (alternate_form && *s != '0') {
- *--s = '0';
- s_len++;
- }
- break;
-
-
- case 'x':
- case 'X':
- if (var_type == IS_QUAD) {
- ui_quad = va_arg(ap, u_widest_int);
- s = conv_p2_quad(ui_quad, 4, *fmt,
- &num_buf[NUM_BUF_SIZE], &s_len);
- }
- else {
- if (var_type == IS_LONG)
- ui_num = (u_wide_int) va_arg(ap, u_wide_int);
- else if (var_type == IS_SHORT)
- ui_num = (u_wide_int) (unsigned short) va_arg(ap, unsigned int);
- else
- ui_num = (u_wide_int) va_arg(ap, unsigned int);
- s = conv_p2(ui_num, 4, *fmt,
- &num_buf[NUM_BUF_SIZE], &s_len);
- }
- FIX_PRECISION(adjust_precision, precision, s, s_len);
- if (alternate_form && i_num != 0) {
- *--s = *fmt; /* 'x' or 'X' */
- *--s = '0';
- s_len += 2;
- }
- break;
-
-
- case 's':
- s = va_arg(ap, char *);
- if (s != NULL) {
- s_len = strlen(s);
- if (adjust_precision && precision < s_len)
- s_len = precision;
- }
- else {
- s = S_NULL;
- s_len = S_NULL_LEN;
- }
- pad_char = ' ';
- break;
-
-
- case 'f':
- case 'e':
- case 'E':
- fp_num = va_arg(ap, double);
- /*
- * * We use &num_buf[ 1 ], so that we have room for the sign
- */
-#ifdef HAVE_ISNAN
- if (isnan(fp_num)) {
- s = "nan";
- s_len = 3;
- }
- else
-#endif
-#ifdef HAVE_ISINF
- if (isinf(fp_num)) {
- s = "inf";
- s_len = 3;
- }
- else
-#endif
- {
- s = conv_fp(*fmt, fp_num, alternate_form,
- (adjust_precision == NO) ? FLOAT_DIGITS : precision,
- &is_negative, &num_buf[1], &s_len);
- if (is_negative)
- prefix_char = '-';
- else if (print_sign)
- prefix_char = '+';
- else if (print_blank)
- prefix_char = ' ';
- }
- break;
-
-
- case 'g':
- case 'G':
- if (adjust_precision == NO)
- precision = FLOAT_DIGITS;
- else if (precision == 0)
- precision = 1;
- /*
- * * We use &num_buf[ 1 ], so that we have room for the sign
- */
- s = ap_gcvt(va_arg(ap, double), precision, &num_buf[1],
- alternate_form);
- if (*s == '-')
- prefix_char = *s++;
- else if (print_sign)
- prefix_char = '+';
- else if (print_blank)
- prefix_char = ' ';
-
- s_len = strlen(s);
-
- if (alternate_form && (q = strchr(s, '.')) == NULL) {
- s[s_len++] = '.';
- s[s_len] = '\0'; /* delimit for following strchr() */
- }
- if (*fmt == 'G' && (q = strchr(s, 'e')) != NULL)
- *q = 'E';
- break;
-
-
- case 'c':
- char_buf[0] = (char) (va_arg(ap, int));
- s = &char_buf[0];
- s_len = 1;
- pad_char = ' ';
- break;
-
-
- case '%':
- char_buf[0] = '%';
- s = &char_buf[0];
- s_len = 1;
- pad_char = ' ';
- break;
-
-
- case 'n':
- if (var_type == IS_QUAD)
- *(va_arg(ap, widest_int *)) = cc;
- else if (var_type == IS_LONG)
- *(va_arg(ap, long *)) = cc;
- else if (var_type == IS_SHORT)
- *(va_arg(ap, short *)) = cc;
- else
- *(va_arg(ap, int *)) = cc;
- break;
-
- /*
- * This is where we extend the printf format, with a second
- * type specifier
- */
- case 'p':
- switch(*++fmt) {
- /*
- * If the pointer size is equal to or smaller than the size
- * of the largest unsigned int, we convert the pointer to a
- * hex number, otherwise we print "%p" to indicate that we
- * don't handle "%p".
- */
- case 'p':
-#ifdef AP_VOID_P_IS_QUAD
- if (sizeof(void *) <= sizeof(u_widest_int)) {
- ui_quad = (u_widest_int) va_arg(ap, void *);
- s = conv_p2_quad(ui_quad, 4, 'x',
- &num_buf[NUM_BUF_SIZE], &s_len);
- }
-#else
- if (sizeof(void *) <= sizeof(u_wide_int)) {
- ui_num = (u_wide_int) va_arg(ap, void *);
- s = conv_p2(ui_num, 4, 'x',
- &num_buf[NUM_BUF_SIZE], &s_len);
- }
-#endif
- else {
- s = "%p";
- s_len = 2;
- prefix_char = NUL;
- }
- pad_char = ' ';
- break;
-
-#ifndef BUILD_STANDALONE
- /* print a struct sockaddr_in as a.b.c.d:port */
- case 'I':
- {
- struct sockaddr_in *si;
-
- si = va_arg(ap, struct sockaddr_in *);
- if (si != NULL) {
- s = conv_sockaddr_in(si, &num_buf[NUM_BUF_SIZE], &s_len);
- if (adjust_precision && precision < s_len)
- s_len = precision;
- }
- else {
- s = S_NULL;
- s_len = S_NULL_LEN;
- }
- pad_char = ' ';
- }
- break;
-
- /* print a struct in_addr as a.b.c.d */
- case 'A':
- {
- struct in_addr *ia;
-
- ia = va_arg(ap, struct in_addr *);
- if (ia != NULL) {
- s = conv_in_addr(ia, &num_buf[NUM_BUF_SIZE], &s_len);
- if (adjust_precision && precision < s_len)
- s_len = precision;
- }
- else {
- s = S_NULL;
- s_len = S_NULL_LEN;
- }
- pad_char = ' ';
- }
- break;
-#endif
-
- case NUL:
- /* if %p ends the string, oh well ignore it */
- continue;
-
- default:
- s = "bogus %p";
- s_len = 8;
- prefix_char = NUL;
- break;
- }
- break;
-
- case NUL:
- /*
- * The last character of the format string was %.
- * We ignore it.
- */
- continue;
-
-
- /*
- * The default case is for unrecognized %'s.
- * We print %<char> to help the user identify what
- * option is not understood.
- * This is also useful in case the user wants to pass
- * the output of format_converter to another function
- * that understands some other %<char> (like syslog).
- * Note that we can't point s inside fmt because the
- * unknown <char> could be preceded by width etc.
- */
- default:
- char_buf[0] = '%';
- char_buf[1] = *fmt;
- s = char_buf;
- s_len = 2;
- pad_char = ' ';
- break;
- }
-
- if (prefix_char != NUL && s != S_NULL && s != char_buf) {
- *--s = prefix_char;
- s_len++;
- }
-
- if (adjust_width && adjust == RIGHT && min_width > s_len) {
- if (pad_char == '0' && prefix_char != NUL) {
- INS_CHAR(*s, sp, bep, cc);
- s++;
- s_len--;
- min_width--;
- }
- PAD(min_width, s_len, pad_char);
- }
-
- /*
- * Print the string s.
- */
- for (i = s_len; i != 0; i--) {
- INS_CHAR(*s, sp, bep, cc);
- s++;
- }
-
- if (adjust_width && adjust == LEFT && min_width > s_len)
- PAD(min_width, s_len, pad_char);
- }
- fmt++;
- }
- vbuff->curpos = sp;
-
- return cc;
-}
-
-
-static int snprintf_flush(ap_vformatter_buff *vbuff)
-{
- /* if the buffer fills we have to abort immediately, there is no way
- * to "flush" an ap_snprintf... there's nowhere to flush it to.
- */
- return -1;
-}
-
-
-API_EXPORT_NONSTD(int) ap_snprintf(char *buf, size_t len, const char *format,...)
-{
- int cc;
- va_list ap;
- ap_vformatter_buff vbuff;
-
- if (len == 0)
- return 0;
-
- /* save one byte for nul terminator */
- vbuff.curpos = buf;
- vbuff.endpos = buf + len - 1;
- va_start(ap, format);
- cc = ap_vformatter(snprintf_flush, &vbuff, format, ap);
- va_end(ap);
- *vbuff.curpos = '\0';
- return (cc == -1) ? len : cc;
-}
-
-
-API_EXPORT(int) ap_vsnprintf(char *buf, size_t len, const char *format,
- va_list ap)
-{
- int cc;
- ap_vformatter_buff vbuff;
-
- if (len == 0)
- return 0;
-
- /* save one byte for nul terminator */
- vbuff.curpos = buf;
- vbuff.endpos = buf + len - 1;
- cc = ap_vformatter(snprintf_flush, &vbuff, format, ap);
- *vbuff.curpos = '\0';
- return (cc == -1) ? len : cc;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/ap_snprintf.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/ap_snprintf.h
deleted file mode 100644
index 73b3c6e5..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/ap_snprintf.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * The ap_vsnprintf/ap_snprintf functions are based on, and used with the
- * permission of, the SIO stdio-replacement strx_* functions by Panos
- * Tsirigotis <panos@alumni.cs.colorado.edu> for xinetd.
- */
-
-#ifndef APACHE_AP_SNPRINTF_H
-#define APACHE_AP_SNPRINTF_H
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <limits.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* stuff marked API_EXPORT is part of the API, and intended for use
- * by modules
- */
-#ifndef API_EXPORT
-#define API_EXPORT(type) type
-#endif
-
-/* Stuff marked API_EXPORT_NONSTD is part of the API, and intended for
- * use by modules. The difference between API_EXPORT and
- * API_EXPORT_NONSTD is that the latter is required for any functions
- * which use varargs or are used via indirect function call. This
- * is to accomodate the two calling conventions in windows dlls.
- */
-#ifndef API_EXPORT_NONSTD
-#define API_EXPORT_NONSTD(type) type
-#endif
-
-#if !defined(__GNUC__) || __GNUC__ < 2 || \
- (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ||\
- defined(NEXT)
-#define __attribute__(__x)
-#endif
-
-/* These macros allow correct support of 8-bit characters on systems which
- * support 8-bit characters. Pretty dumb how the cast is required, but
- * that's legacy libc for ya. These new macros do not support EOF like
- * the standard macros do. Tough.
- */
-#define ap_isalpha(c) (isalpha(((unsigned char)(c))))
-#define ap_isdigit(c) (isdigit(((unsigned char)(c))))
-#define ap_islower(c) (islower(((unsigned char)(c))))
-
-
-/* ap_vformatter() is a generic printf-style formatting routine
- * with some extensions. The extensions are:
- *
- * %pA takes a struct in_addr *, and prints it as a.b.c.d
- * %pI takes a struct sockaddr_in * and prints it as a.b.c.d:port
- * %pp takes a void * and outputs it in hex
- *
- * The %p hacks are to force gcc's printf warning code to skip
- * over a pointer argument without complaining. This does
- * mean that the ANSI-style %p (output a void * in hex format) won't
- * work as expected at all, but that seems to be a fair trade-off
- * for the increased robustness of having printf-warnings work.
- *
- * Additionally, ap_vformatter allows for arbitrary output methods
- * using the ap_vformatter_buff and flush_func.
- *
- * The ap_vformatter_buff has two elements curpos and endpos.
- * curpos is where ap_vformatter will write the next byte of output.
- * It proceeds writing output to curpos, and updating curpos, until
- * either the end of output is reached, or curpos == endpos (i.e. the
- * buffer is full).
- *
- * If the end of output is reached, ap_vformatter returns the
- * number of bytes written.
- *
- * When the buffer is full, the flush_func is called. The flush_func
- * can return -1 to indicate that no further output should be attempted,
- * and ap_vformatter will return immediately with -1. Otherwise
- * the flush_func should flush the buffer in whatever manner is
- * appropriate, re-initialize curpos and endpos, and return 0.
- *
- * Note that flush_func is only invoked as a result of attempting to
- * write another byte at curpos when curpos >= endpos. So for
- * example, it's possible when the output exactly matches the buffer
- * space available that curpos == endpos will be true when
- * ap_vformatter returns.
- *
- * ap_vformatter does not call out to any other code, it is entirely
- * self-contained. This allows the callers to do things which are
- * otherwise "unsafe". For example, ap_psprintf uses the "scratch"
- * space at the unallocated end of a block, and doesn't actually
- * complete the allocation until ap_vformatter returns. ap_psprintf
- * would be completely broken if ap_vformatter were to call anything
- * that used a pool. Similarly http_bprintf() uses the "scratch"
- * space at the end of its output buffer, and doesn't actually note
- * that the space is in use until it either has to flush the buffer
- * or until ap_vformatter returns.
- */
-
-typedef struct {
- char *curpos;
- char *endpos;
-} ap_vformatter_buff;
-
-API_EXPORT(int) ap_vformatter(int (*flush_func)(ap_vformatter_buff *),
- ap_vformatter_buff *, const char *fmt, va_list ap);
-
-/* These are snprintf implementations based on ap_vformatter().
- *
- * Note that various standards and implementations disagree on the return
- * value of snprintf, and side-effects due to %n in the formatting string.
- * ap_snprintf behaves as follows:
- *
- * Process the format string until the entire string is exhausted, or
- * the buffer fills. If the buffer fills then stop processing immediately
- * (so no further %n arguments are processed), and return the buffer
- * length. In all cases the buffer is NUL terminated. The return value
- * is the number of characters placed in the buffer, excluding the
- * terminating NUL. All this implies that, at most, (len-1) characters
- * will be copied over; if the return value is >= len, then truncation
- * occured.
- *
- * In no event does ap_snprintf return a negative number.
- */
-API_EXPORT_NONSTD(int) ap_snprintf(char *buf, size_t len, const char *format,...)
- __attribute__((format(printf,3,4)));
-API_EXPORT(int) ap_vsnprintf(char *buf, size_t len, const char *format,
- va_list ap);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !APACHE_AP_SNPRINTF_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/config.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/config.h
deleted file mode 100644
index e92dec8d..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/config.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* common/config.h. Generated by configure. */
-/* common/config.h.in. Generated from configure.in by autoheader. */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define HAVE_DLFCN_H 1
-
-/* Have flock() */
-#define HAVE_FLOCK 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Have poll() */
-#define HAVE_POLL 1
-
-/* Define to 1 if you have the <poll.h> header file. */
-#define HAVE_POLL_H 1
-
-/* Have snprintf() */
-#define HAVE_SNPRINTF 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the <sys/filio.h> header file. */
-/* #undef HAVE_SYS_FILIO_H */
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Have vsnprintf() */
-#define HAVE_VSNPRINTF 1
-
-/* Name of package */
-#define PACKAGE "mod_jk"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME ""
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING ""
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION ""
-
-/* The size of a `char', as computed by sizeof. */
-#define SIZEOF_CHAR 1
-
-/* The size of a `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* The size of a `long', as computed by sizeof. */
-#define SIZEOF_LONG 8
-
-/* The size of a `longlong', as computed by sizeof. */
-#define SIZEOF_LONGLONG 0
-
-/* The size of a `long double', as computed by sizeof. */
-#define SIZEOF_LONG_DOUBLE 16
-
-/* The size of a `long long', as computed by sizeof. */
-#define SIZEOF_LONG_LONG 8
-
-/* The size of pid_t */
-#define SIZEOF_PID_T 4
-
-/* The size of pthread_t */
-#define SIZEOF_PTHREAD_T 8
-
-/* The size of a `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define to use SOCK_CLOEXEC with socket() */
-#define USE_SOCK_CLOEXEC 1
-
-/* Define to use SO_RCVTIMEO with setsockopt() */
-#define USE_SO_RCVTIMEO 1
-
-/* Define to use SO_SNDTIMEO with setsockopt() */
-#define USE_SO_SNDTIMEO 1
-
-/* Version number of package */
-#define VERSION "1.2.32"
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/config.h.in b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/config.h.in
deleted file mode 100644
index 7426f4f6..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/config.h.in
+++ /dev/null
@@ -1,109 +0,0 @@
-/* common/config.h.in. Generated from configure.in by autoheader. */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Have flock() */
-#undef HAVE_FLOCK
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Have poll() */
-#undef HAVE_POLL
-
-/* Define to 1 if you have the <poll.h> header file. */
-#undef HAVE_POLL_H
-
-/* Have snprintf() */
-#undef HAVE_SNPRINTF
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the <sys/filio.h> header file. */
-#undef HAVE_SYS_FILIO_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Have vsnprintf() */
-#undef HAVE_VSNPRINTF
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* The size of a `char', as computed by sizeof. */
-#undef SIZEOF_CHAR
-
-/* The size of a `int', as computed by sizeof. */
-#undef SIZEOF_INT
-
-/* The size of a `long', as computed by sizeof. */
-#undef SIZEOF_LONG
-
-/* The size of a `longlong', as computed by sizeof. */
-#undef SIZEOF_LONGLONG
-
-/* The size of a `long double', as computed by sizeof. */
-#undef SIZEOF_LONG_DOUBLE
-
-/* The size of a `long long', as computed by sizeof. */
-#undef SIZEOF_LONG_LONG
-
-/* The size of pid_t */
-#undef SIZEOF_PID_T
-
-/* The size of pthread_t */
-#undef SIZEOF_PTHREAD_T
-
-/* The size of a `short', as computed by sizeof. */
-#undef SIZEOF_SHORT
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to use SOCK_CLOEXEC with socket() */
-#undef USE_SOCK_CLOEXEC
-
-/* Define to use SO_RCVTIMEO with setsockopt() */
-#undef USE_SO_RCVTIMEO
-
-/* Define to use SO_SNDTIMEO with setsockopt() */
-#undef USE_SO_SNDTIMEO
-
-/* Version number of package */
-#undef VERSION
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk.rc b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk.rc
deleted file mode 100644
index e0eae360..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk.rc
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <windows.h>
-#include "jk_version.h"
-
-#define ASF_COPYRIGHT "Licensed to the Apache Software Foundation " \
- "(ASF) under one or more contributor license " \
- "agreements. See the NOTICE file distributed " \
- "with this work for additional information " \
- "regarding copyright ownership."
-
-#define ASF_LICENSE "The ASF licenses this file to You under the " \
- "Apache License, Version 2.0 (the ""License""); " \
- "you may not use this file except in compliance " \
- "with the License. You may obtain a copy of " \
- "the License at\r\n\r\n" \
- "http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n" \
- "Unless required by applicable law or agreed to in " \
- "writing, software distributed under the License is " \
- "distributed on an ""AS IS"" BASIS, WITHOUT " \
- "WARRANTIES OR CONDITIONS OF ANY KIND, either " \
- "express or implied. See the License for the " \
- "specific language governing permissions and " \
- "limitations under the License."
-
-
-1 VERSIONINFO
- FILEVERSION JK_VERSIONCSV
- PRODUCTVERSION JK_VERSIONCSV
- FILEFLAGSMASK 0x3fL
-#if defined(_DEBUG)
- FILEFLAGS 0x01L
-#else
- FILEFLAGS 0x00L
-#endif
- FILEOS 0x40004L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "Comments", ASF_LICENSE "\0"
- VALUE "CompanyName", "Apache Software Foundation\0"
- VALUE "FileDescription", "Apache Tomcat Connector\0"
- VALUE "FileVersion", JK_VERSTRING "\0"
- VALUE "InternalName", PACKAGE "\0"
- VALUE "LegalCopyright", ASF_COPYRIGHT "\0"
- VALUE "OriginalFilename", PACKAGE "." JK_DLL_SUFFIX "\0"
- VALUE "ProductName", "Apache Tomcat " PACKAGE " Connector\0"
- VALUE "ProductVersion", JK_VERSTRING "\0"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.c
deleted file mode 100644
index c10ef0b4..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.c
+++ /dev/null
@@ -1,682 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: ajpv1.2 worker, used to call local or remote jserv hosts *
- * This worker is deprecated *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Based on: jserv_ajpv12.c from Jserv *
- * Version: $Revision: 747878 $ *
- ***************************************************************************/
-
-#include "jk_ajp12_worker.h"
-#include "jk_pool.h"
-#include "jk_connect.h"
-#include "jk_util.h"
-#include "jk_sockbuf.h"
-#if defined(AS400) && !defined(AS400_UTF8)
-#include "util_ebcdic.h"
-#include <string.h>
-#endif
-
-#define AJP_DEF_HOST ("localhost")
-#define AJP_DEF_PORT (8007)
-#define READ_BUF_SIZE (8*1024)
-#define DEF_RETRY_ATTEMPTS (1)
-
-struct ajp12_worker
-{
- struct sockaddr_in worker_inet_addr;
- unsigned connect_retry_attempts;
- char *name;
- jk_worker_t worker;
-};
-
-typedef struct ajp12_worker ajp12_worker_t;
-
-struct ajp12_endpoint
-{
- ajp12_worker_t *worker;
-
- jk_sock_t sd;
- jk_sockbuf_t sb;
-
- jk_endpoint_t endpoint;
-};
-typedef struct ajp12_endpoint ajp12_endpoint_t;
-
-static int ajpv12_mark(ajp12_endpoint_t * p, unsigned char type);
-
-#if defined(AS400) && !defined(AS400_UTF8)
-static int ajpv12_sendasciistring(ajp12_endpoint_t * p, char *buffer);
-#endif
-
-#if defined(AS400) && !defined(AS400_UTF8)
-static int ajpv12_sendstring(ajp12_endpoint_t * p, char *buffer);
-#else
-static int ajpv12_sendstring(ajp12_endpoint_t * p, const char *buffer);
-#endif
-
-static int ajpv12_sendint(ajp12_endpoint_t * p, int d);
-
-static int ajpv12_sendnbytes(ajp12_endpoint_t * p,
- const void *buffer, int bufferlen);
-
-static int ajpv12_flush(ajp12_endpoint_t * p);
-
-static int ajpv12_handle_response(ajp12_endpoint_t * p,
- jk_ws_service_t *s, jk_logger_t *l);
-
-static int ajpv12_handle_request(ajp12_endpoint_t * p,
- jk_ws_service_t *s, jk_logger_t *l);
-
-/*
- * Return values of service() method for ajp12 worker:
- * return value is_error reason
- * JK_FALSE JK_HTTP_SERVER_ERROR Invalid parameters (null values)
- * Error during connect to the backend
- * ajpv12_handle_request() returns false:
- * Any error during reading a request body from the client or
- * sending the request to the backend
- * JK_FALSE JK_HTTP_OK ajpv12_handle_response() returns false:
- * Any error during reading parts of response from backend or
- * sending to client
- * JK_TRUE JK_HTTP_OK All other cases
- */
-static int JK_METHOD service(jk_endpoint_t *e,
- jk_ws_service_t *s,
- jk_logger_t *l, int *is_error)
-{
- ajp12_endpoint_t *p;
- unsigned int attempt;
- int rc = -1;
- /*
- * AJP12 protocol is not recoverable.
- */
-
- JK_TRACE_ENTER(l);
-
- if (!e || !e->endpoint_private || !s || !is_error) {
- JK_LOG_NULL_PARAMS(l);
- if (is_error)
- *is_error = JK_HTTP_SERVER_ERROR;
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- p = e->endpoint_private;
-
- /* Set returned error to OK */
- *is_error = JK_HTTP_OK;
-
- for (attempt = 0; attempt < p->worker->connect_retry_attempts;
- attempt++) {
- p->sd =
- jk_open_socket(&p->worker->worker_inet_addr,
- JK_FALSE, 0, 0, 0, l);
-
- jk_log(l, JK_LOG_DEBUG, "In jk_endpoint_t::service, sd = %d",
- p->sd);
- if (IS_VALID_SOCKET(p->sd)) {
- break;
- }
- }
- if (IS_VALID_SOCKET(p->sd)) {
-
- jk_sb_open(&p->sb, p->sd);
- if (ajpv12_handle_request(p, s, l)) {
- jk_log(l, JK_LOG_DEBUG,
- "In jk_endpoint_t::service, sent request");
- rc = ajpv12_handle_response(p, s, l);
- JK_TRACE_EXIT(l);
- return rc;
- }
- }
- jk_log(l, JK_LOG_ERROR, "In jk_endpoint_t::service, Error sd = %d",
- p->sd);
- *is_error = JK_HTTP_SERVER_ERROR;
-
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-static int JK_METHOD done(jk_endpoint_t **e, jk_logger_t *l)
-{
- jk_log(l, JK_LOG_DEBUG, "Into jk_endpoint_t::done");
- if (e && *e && (*e)->endpoint_private) {
- ajp12_endpoint_t *p = (*e)->endpoint_private;
- if (IS_VALID_SOCKET(p->sd)) {
- jk_shutdown_socket(p->sd, l);
- }
- free(p);
- *e = NULL;
- return JK_TRUE;
- }
-
- jk_log(l, JK_LOG_ERROR, "In jk_endpoint_t::done, NULL parameters");
- return JK_FALSE;
-}
-
-static int JK_METHOD validate(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l)
-{
- jk_log(l, JK_LOG_DEBUG, "Into jk_worker_t::validate");
-
- if (pThis && pThis->worker_private) {
- ajp12_worker_t *p = pThis->worker_private;
- int port = jk_get_worker_port(props,
- p->name,
- AJP_DEF_PORT);
-
- const char *host = jk_get_worker_host(props,
- p->name,
- AJP_DEF_HOST);
-
- jk_log(l, JK_LOG_DEBUG,
- "In jk_worker_t::validate for worker %s contact is %s:%d",
- p->name, host, port);
-
- if (host) {
- if (jk_resolve(host, port, &p->worker_inet_addr, we->pool, l)) {
- return JK_TRUE;
- }
- jk_log(l, JK_LOG_ERROR,
- "In jk_worker_t::validate, resolve failed");
- }
- jk_log(l, JK_LOG_ERROR, "In jk_worker_t::validate, Error %s %d",
- host, port);
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "In jk_worker_t::validate, NULL parameters");
- }
-
- return JK_FALSE;
-}
-
-static int JK_METHOD init(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *log)
-{
- /* Nothing to do for now */
- return JK_TRUE;
-}
-
-static int JK_METHOD get_endpoint(jk_worker_t *pThis,
- jk_endpoint_t **pend, jk_logger_t *l)
-{
- jk_log(l, JK_LOG_DEBUG, "Into jk_worker_t::get_endpoint");
-
- if (pThis && pThis->worker_private && pend) {
- ajp12_endpoint_t *p =
- (ajp12_endpoint_t *) malloc(sizeof(ajp12_endpoint_t));
- if (p) {
- p->sd = JK_INVALID_SOCKET;
- p->worker = pThis->worker_private;
- p->endpoint.endpoint_private = p;
- p->endpoint.service = service;
- p->endpoint.done = done;
- *pend = &p->endpoint;
- return JK_TRUE;
- }
- jk_log(l, JK_LOG_ERROR,
- "In jk_worker_t::get_endpoint, malloc failed");
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "In jk_worker_t::get_endpoint, NULL parameters");
- }
-
- return JK_FALSE;
-}
-
-static int JK_METHOD destroy(jk_worker_t **pThis, jk_logger_t *l)
-{
- jk_log(l, JK_LOG_DEBUG, "Into jk_worker_t::destroy");
- if (pThis && *pThis && (*pThis)->worker_private) {
- ajp12_worker_t *private_data = (*pThis)->worker_private;
- free(private_data->name);
- free(private_data);
-
- return JK_TRUE;
- }
-
- jk_log(l, JK_LOG_ERROR, "In jk_worker_t::destroy, NULL parameters");
- return JK_FALSE;
-}
-
-int JK_METHOD ajp12_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l)
-{
- jk_log(l, JK_LOG_DEBUG, "Into ajp12_worker_factory");
- if (NULL != name && NULL != w) {
- ajp12_worker_t *private_data =
- (ajp12_worker_t *) malloc(sizeof(ajp12_worker_t));
-
- if (private_data) {
- private_data->name = strdup(name);
-
- if (private_data->name) {
- private_data->connect_retry_attempts = DEF_RETRY_ATTEMPTS;
- private_data->worker.worker_private = private_data;
-
- private_data->worker.validate = validate;
- private_data->worker.init = init;
- private_data->worker.get_endpoint = get_endpoint;
- private_data->worker.destroy = destroy;
- private_data->worker.maintain = NULL;
-
- *w = &private_data->worker;
- return JK_AJP12_WORKER_TYPE;
- }
-
- free(private_data);
- }
- jk_log(l, JK_LOG_ERROR, "In ajp12_worker_factory, malloc failed");
- }
- else {
- jk_log(l, JK_LOG_ERROR, "In ajp12_worker_factory, NULL parameters");
- }
-
- return 0;
-}
-
-static int ajpv12_sendnbytes(ajp12_endpoint_t * p,
- const void *buffer, int bufferlen)
-{
- unsigned char bytes[2];
- static const unsigned char null_b[2] =
- { (unsigned char)0xff, (unsigned char)0xff };
-
- if (buffer) {
- bytes[0] = (unsigned char)((bufferlen >> 8) & 0xff);
- bytes[1] = (unsigned char)(bufferlen & 0xff);
-
- if (jk_sb_write(&p->sb, bytes, 2)) {
- return jk_sb_write(&p->sb, buffer, bufferlen);
- }
- else {
- return JK_FALSE;
- }
- }
- else {
- return jk_sb_write(&p->sb, null_b, 2);
- }
-}
-
-#if defined(AS400) && !defined(AS400_UTF8)
-static int ajpv12_sendasciistring(ajp12_endpoint_t * p, const char *buffer)
-{
- int bufferlen;
-
- if (buffer && (bufferlen = strlen(buffer))) {
- return ajpv12_sendnbytes(p, buffer, bufferlen);
- }
- else {
- return ajpv12_sendnbytes(p, NULL, 0);
- }
-}
-#endif
-
-static int ajpv12_sendstring(ajp12_endpoint_t * p, const char *buffer)
-{
- int bufferlen;
-
- if (buffer && (bufferlen = (int)strlen(buffer))) {
-#if (defined(AS400) && !defined(AS400_UTF8)) || defined(_OSD_POSIX)
- char buf[2048];
- if (bufferlen < 2048) {
- memcpy(buf, buffer, bufferlen);
- jk_xlate_to_ascii(buf, bufferlen);
- return ajpv12_sendnbytes(p, buf, bufferlen);
- }
- else
- return -1;
-#else
- return ajpv12_sendnbytes(p, buffer, bufferlen);
-#endif
- }
- else {
- return ajpv12_sendnbytes(p, NULL, 0);
- }
-}
-
-static int ajpv12_mark(ajp12_endpoint_t * p, unsigned char type)
-{
- if (jk_sb_write(&p->sb, &type, 1)) {
- return JK_TRUE;
- }
- else {
- return JK_FALSE;
- }
-}
-
-static int ajpv12_sendint(ajp12_endpoint_t * p, int d)
-{
- char buf[20];
- sprintf(buf, "%d", d);
- return ajpv12_sendstring(p, buf);
-}
-
-static int ajpv12_flush(ajp12_endpoint_t * p)
-{
- return jk_sb_flush(&p->sb);
-}
-
-static int ajpv12_handle_request(ajp12_endpoint_t * p,
- jk_ws_service_t *s, jk_logger_t *l)
-{
- int ret;
-
- jk_log(l, JK_LOG_DEBUG, "Into ajpv12_handle_request");
- /*
- * Start the ajp 12 service sequence
- */
- jk_log(l, JK_LOG_DEBUG,
- "ajpv12_handle_request, sending the ajp12 start sequence");
-
- ret = (ajpv12_mark(p, 1) && ajpv12_sendstring(p, s->method) && ajpv12_sendstring(p, 0) && /* zone */
- ajpv12_sendstring(p, 0) && /* servlet */
- ajpv12_sendstring(p, s->server_name) && ajpv12_sendstring(p, 0) && /* doc root */
- ajpv12_sendstring(p, 0) && /* path info */
- ajpv12_sendstring(p, 0) && /* path translated */
-#if defined(AS400) && !defined(AS400_UTF8)
- ajpv12_sendasciistring(p, s->query_string) &&
-#else
- ajpv12_sendstring(p, s->query_string) &&
-#endif
- ajpv12_sendstring(p, s->remote_addr) &&
- ajpv12_sendstring(p, s->remote_host) &&
- ajpv12_sendstring(p, s->remote_user) &&
- ajpv12_sendstring(p, s->auth_type) &&
- ajpv12_sendint(p, s->server_port) &&
-#if defined(AS400) && !defined(AS400_UTF8)
- ajpv12_sendasciistring(p, s->method) &&
-#else
- ajpv12_sendstring(p, s->method) &&
-#endif
- ajpv12_sendstring(p, s->req_uri) && ajpv12_sendstring(p, 0) && /* */
- ajpv12_sendstring(p, 0) && /* SCRIPT_NAME */
-#if defined(AS400) && !defined(AS400_UTF8)
- ajpv12_sendasciistring(p, s->server_name) &&
-#else
- ajpv12_sendstring(p, s->server_name) &&
-#endif
- ajpv12_sendint(p, s->server_port) && ajpv12_sendstring(p, s->protocol) && ajpv12_sendstring(p, 0) && /* SERVER_SIGNATURE */
- ajpv12_sendstring(p, s->server_software) && ajpv12_sendstring(p, s->route) && /* JSERV_ROUTE */
- ajpv12_sendstring(p, "") && /* JSERV ajpv12 compatibility */
- ajpv12_sendstring(p, "")); /* JSERV ajpv12 compatibility */
-
- if (!ret) {
- jk_log(l, JK_LOG_ERROR,
- "In ajpv12_handle_request, failed to send the ajp12 start sequence");
- return JK_FALSE;
- }
-
- if (s->num_attributes > 0) {
- unsigned i;
- jk_log(l, JK_LOG_DEBUG,
- "ajpv12_handle_request, sending the environment variables");
-
- for (i = 0; i < s->num_attributes; i++) {
- ret = (ajpv12_mark(p, 5) &&
- ajpv12_sendstring(p, s->attributes_names[i]) &&
- ajpv12_sendstring(p, s->attributes_values[i]));
- if (!ret) {
- jk_log(l, JK_LOG_ERROR,
- "In ajpv12_handle_request, failed to send environment");
- return JK_FALSE;
- }
- }
- }
-
- jk_log(l, JK_LOG_DEBUG, "ajpv12_handle_request, sending the headers");
-
- /* Send the request headers */
- if (s->num_headers) {
- unsigned i;
- for (i = 0; i < s->num_headers; ++i) {
- ret = (ajpv12_mark(p, 3) &&
- ajpv12_sendstring(p, s->headers_names[i]) &&
- ajpv12_sendstring(p, s->headers_values[i]));
-
- if (!ret) {
- jk_log(l, JK_LOG_ERROR,
- "In ajpv12_handle_request, failed to send headers");
- return JK_FALSE;
- }
- }
- }
-
- jk_log(l, JK_LOG_DEBUG,
- "ajpv12_handle_request, sending the terminating mark");
-
- ret = (ajpv12_mark(p, 4) && ajpv12_flush(p));
- if (!ret) {
- jk_log(l, JK_LOG_ERROR,
- "In ajpv12_handle_request, failed to send the terminating mark");
- return JK_FALSE;
- }
-
- if (s->content_length) {
- char buf[READ_BUF_SIZE];
- jk_uint64_t so_far = 0;
-
- jk_log(l, JK_LOG_DEBUG,
- "ajpv12_handle_request, sending the request body");
-
- while (so_far < s->content_length) {
- unsigned this_time = 0;
- unsigned to_read;
- if (s->content_length > so_far + READ_BUF_SIZE) {
- to_read = READ_BUF_SIZE;
- }
- else {
- to_read = (unsigned int)(s->content_length - so_far);
- }
-
- if (!s->read(s, buf, to_read, &this_time)) {
- jk_log(l, JK_LOG_ERROR,
- "In ajpv12_handle_request, failed to read from the web server");
- return JK_FALSE;
- }
- jk_log(l, JK_LOG_DEBUG, "ajpv12_handle_request, read %d bytes",
- this_time);
- if (this_time > 0) {
- so_far += this_time;
- if ((int)this_time != send(p->sd, buf, this_time, 0)) {
- jk_log(l, JK_LOG_ERROR,
- "In ajpv12_handle_request, failed to write to the container");
- return JK_FALSE;
- }
- jk_log(l, JK_LOG_DEBUG,
- "ajpv12_handle_request, sent %d bytes", this_time);
- }
- else if (this_time == 0) {
- jk_log(l, JK_LOG_ERROR,
- "In ajpv12_handle_request, Error: short read. content length is %" JK_UINT64_T_FMT ", read %" JK_UINT64_T_FMT,
- s->content_length, so_far);
- return JK_FALSE;
- }
- }
- }
-
- jk_log(l, JK_LOG_DEBUG, "ajpv12_handle_request done");
- return JK_TRUE;
-}
-
-static int ajpv12_handle_response(ajp12_endpoint_t * p,
- jk_ws_service_t *s, jk_logger_t *l)
-{
- int status = 200;
- char *reason = NULL;
- char **names = NULL;
- char **values = NULL;
- int headers_capacity = 0;
- int headers_len = 0;
- int write_to_ws;
-
- jk_log(l, JK_LOG_DEBUG, "Into ajpv12_handle_response");
- /*
- * Read headers ...
- */
- while (1) {
- char *line = NULL;
- char *name = NULL;
- char *value = NULL;
-#ifdef _MT_CODE_PTHREAD
- char *lasts;
-#endif
-
- if (!jk_sb_gets(&p->sb, &line)) {
- jk_log(l, JK_LOG_ERROR,
- "ajpv12_handle_response, error reading header line");
- return JK_FALSE;
- }
-#if (defined(AS400) && !defined(AS400_UTF8)) || defined(_OSD_POSIX)
- jk_xlate_from_ascii(line, strlen(line));
-#endif
-
- jk_log(l, JK_LOG_DEBUG, "ajpv12_handle_response, read %s", line);
- if (0 == strlen(line)) {
- jk_log(l, JK_LOG_DEBUG,
- "ajpv12_handle_response, headers are done");
- break; /* Empty line -> end of headers */
- }
-
- name = line;
- while (isspace((int)(*name)) && *name) {
- name++; /* Skip leading white chars */
- }
- if (!*name) { /* Empty header name */
- jk_log(l, JK_LOG_ERROR,
- "ajpv12_handle_response, empty header name");
- return JK_FALSE;
- }
- if (!(value = strchr(name, ':'))) {
- jk_log(l, JK_LOG_ERROR,
- "ajpv12_handle_response, no value supplied");
- return JK_FALSE; /* No value !!! */
- }
- *value = '\0';
- value++;
- while (isspace((int)(*value)) && *value) {
- value++; /* Skip leading white chars */
- }
- if (!*value) { /* Empty header value */
- jk_log(l, JK_LOG_ERROR,
- "ajpv12_handle_response, empty header value");
- return JK_FALSE;
- }
-
- jk_log(l, JK_LOG_DEBUG, "ajpv12_handle_response, read %s=%s", name,
- value);
- if (0 == strcmp("Status", name)) {
-#ifdef _MT_CODE_PTHREAD
- char *numeric = strtok_r(value, " \t", &lasts);
-#else
- char *numeric = strtok(value, " \t");
-#endif
-
- status = atoi(numeric);
- if (status < 100 || status > 999) {
- jk_log(l, JK_LOG_ERROR,
- "ajpv12_handle_response, invalid status code");
- return JK_FALSE;
- }
-#ifdef _MT_CODE_PTHREAD
- reason = jk_pool_strdup(s->pool, strtok_r(NULL, " \t", &lasts));
-#else
- reason = jk_pool_strdup(s->pool, strtok(NULL, " \t"));
-#endif
- }
- else {
- if (headers_capacity == headers_len) {
- jk_log(l, JK_LOG_DEBUG,
- "ajpv12_handle_response, allocating header arrays");
- names =
- (char **)jk_pool_realloc(s->pool,
- sizeof(char *) *
- (headers_capacity + 5), names,
- sizeof(char *) *
- headers_capacity);
- values =
- (char **)jk_pool_realloc(s->pool,
- sizeof(char *) *
- (headers_capacity + 5), values,
- sizeof(char *) *
- headers_capacity);
- if (!values || !names) {
- jk_log(l, JK_LOG_ERROR,
- "ajpv12_handle_response, malloc error");
- return JK_FALSE;
- }
- headers_capacity = headers_capacity + 5;
- }
- names[headers_len] = jk_pool_strdup(s->pool, name);
- values[headers_len] = jk_pool_strdup(s->pool, value);
- headers_len++;
- }
- }
-
- jk_log(l, JK_LOG_DEBUG, "ajpv12_handle_response, starting response");
- if (!s->start_response(s,
- status,
- reason,
- (const char *const *)names,
- (const char *const *)values, headers_len)) {
- jk_log(l, JK_LOG_ERROR,
- "ajpv12_handle_response, error starting response");
- return JK_FALSE;
- }
-
- jk_log(l, JK_LOG_DEBUG,
- "ajpv12_handle_response, reading response body");
- /*
- * Read response body
- */
- write_to_ws = JK_TRUE;
- while (1) {
- unsigned to_read = READ_BUF_SIZE;
- unsigned acc = 0;
- char *buf = NULL;
-
- if (!jk_sb_read(&p->sb, &buf, to_read, &acc)) {
- jk_log(l, JK_LOG_ERROR,
- "ajpv12_handle_response, error reading from ");
- return JK_FALSE;
- }
-
- if (!acc) {
- jk_log(l, JK_LOG_DEBUG,
- "ajpv12_handle_response, response body is done");
- break;
- }
-
- if (write_to_ws) {
- if (!s->write(s, buf, acc)) {
- jk_log(l, JK_LOG_ERROR,
- "ajpv12_handle_response, error writing back to server");
- write_to_ws = JK_FALSE;
- }
- }
- }
-
- jk_log(l, JK_LOG_DEBUG, "ajpv12_handle_response done");
- return JK_TRUE;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.h
deleted file mode 100644
index e4e5eaca..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: ajpv1.2 worker header file *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-#ifndef JK_AJP12_WORKER_H
-#define JK_AJP12_WORKER_H
-
-#include "jk_logger.h"
-#include "jk_service.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define JK_AJP12_WORKER_NAME ("ajp12")
-#define JK_AJP12_WORKER_TYPE (1)
-
-int JK_METHOD ajp12_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* JK_AJP12_WORKER_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.lo
deleted file mode 100644
index 9c11bcb9..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_ajp12_worker.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_ajp12_worker.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_ajp12_worker.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.o
deleted file mode 100644
index 3ab1134b..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp12_worker.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.c
deleted file mode 100644
index 4c16a023..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Experimental bi-directionl protocol handler. *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-
-#include "jk_global.h"
-#include "jk_util.h"
-#include "jk_ajp_common.h"
-#include "jk_ajp13.h"
-
-int ajp13_marshal_shutdown_into_msgb(jk_msg_buf_t *msg,
- jk_pool_t *p, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
- /* To be on the safe side */
- jk_b_reset(msg);
-
- /*
- * Just a single byte with s/d command.
- */
- if (jk_b_append_byte(msg, JK_AJP13_SHUTDOWN)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending shutdown message");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.h
deleted file mode 100644
index d2a9ab2e..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Experimental bi-directionl protocol handler. *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 751213 $ *
- ***************************************************************************/
-#ifndef JK_AJP13_H
-#define JK_AJP13_H
-
-#include "jk_ajp_common.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define AJP13_PROTO 13
-#define AJP13_WS_HEADER 0x1234
-#define AJP13_SW_HEADER 0x4142 /* 'AB' */
-
-#define AJP13_DEF_HOST ("localhost")
-#define AJP13_DEF_PORT (8009)
-#define AJP13_READ_BUF_SIZE (8*1024)
-#define AJP13_DEF_CACHE_SZ (1)
-#define JK_INTERNAL_ERROR (-2)
-#define JK_FATAL_ERROR (-3)
-#define JK_CLIENT_ERROR (-4)
-#define JK_SERVER_ERROR (-5)
-#define JK_CLIENT_RD_ERROR (-6)
-#define JK_CLIENT_WR_ERROR (-7)
-#define JK_STATUS_ERROR (-8)
-#define JK_STATUS_FATAL_ERROR (-9)
-#define JK_REPLY_TIMEOUT (-10)
-#define JK_AJP_PROTOCOL_ERROR (-11)
-
-#define AJP13_MAX_SEND_BODY_SZ (DEF_BUFFER_SZ - 6)
-#define AJP13_DEF_TIMEOUT (0) /* Idle timout for pooled connections */
-
-/*
- * Message does not have a response (for example, JK_AJP13_END_RESPONSE)
- */
-#define JK_AJP13_ERROR -1
-/*
- * Message does not have a response (for example, JK_AJP13_END_RESPONSE)
- */
-#define JK_AJP13_NO_RESPONSE 0
-/*
- * Message have a response.
- */
-#define JK_AJP13_HAS_RESPONSE 1
-
-/*
- * Forward a request from the web server to the servlet container.
- */
-#define JK_AJP13_FORWARD_REQUEST (unsigned char)2
-
-/*
- * Write a body chunk from the servlet container to the web server
- */
-#define JK_AJP13_SEND_BODY_CHUNK (unsigned char)3
-
-/*
- * Send response headers from the servlet container to the web server.
- */
-#define JK_AJP13_SEND_HEADERS (unsigned char)4
-
-/*
- * Marks the end of response.
- */
-#define JK_AJP13_END_RESPONSE (unsigned char)5
-
-/*
- * Marks the end of response.
- */
-#define JK_AJP13_GET_BODY_CHUNK (unsigned char)6
-
-/*
- * Asks the container to shutdown
- */
-#define JK_AJP13_SHUTDOWN (unsigned char)7
-
-/*
- * Told container to take control (secure login phase)
- */
-#define AJP13_PING_REQUEST (unsigned char)8
-
-/*
- * Check if the container is alive
- */
-#define AJP13_CPING_REQUEST (unsigned char)10
-
-/*
- * Reply from the container to alive request
- */
-#define AJP13_CPONG_REPLY (unsigned char)9
-
-
-
-/*
- * Functions
- */
-
-int ajp13_marshal_shutdown_into_msgb(jk_msg_buf_t *msg,
- jk_pool_t *p, jk_logger_t *l);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* JK_AJP13_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.lo
deleted file mode 100644
index 33d31154..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_ajp13.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_ajp13.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_ajp13.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.o
deleted file mode 100644
index 872b5f5f..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.c
deleted file mode 100644
index 13e140ff..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Bi-directional protocol. *
- * Author: Costin <costin@costin.dnt.ro> *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 611589 $ *
- ***************************************************************************/
-
-#include "jk_ajp13_worker.h"
-
-
-/* -------------------- Method -------------------- */
-static int JK_METHOD validate(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l)
-{
- int rc;
- JK_TRACE_ENTER(l);
- rc = ajp_validate(pThis, props, we, l, AJP13_PROTO);
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-
-static int JK_METHOD init(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l)
-{
- int rc;
- JK_TRACE_ENTER(l);
-
- rc = ajp_init(pThis, props, we, l, AJP13_PROTO);
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-
-static int JK_METHOD destroy(jk_worker_t **pThis, jk_logger_t *l)
-{
- int rc;
- JK_TRACE_ENTER(l);
- rc = ajp_destroy(pThis, l, AJP13_PROTO);
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-
-static int JK_METHOD get_endpoint(jk_worker_t *pThis,
- jk_endpoint_t **pend, jk_logger_t *l)
-{
- int rc;
- JK_TRACE_ENTER(l);
- rc = ajp_get_endpoint(pThis, pend, l, AJP13_PROTO);
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-int JK_METHOD ajp13_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l)
-{
- ajp_worker_t *aw;
-
- JK_TRACE_ENTER(l);
- if (ajp_worker_factory(w, name, l) == JK_FALSE)
- return 0;
-
- aw = (*w)->worker_private;
- aw->proto = AJP13_PROTO;
-
- aw->worker.validate = validate;
- aw->worker.init = init;
- aw->worker.get_endpoint = get_endpoint;
- aw->worker.destroy = destroy;
-
- JK_TRACE_EXIT(l);
- return JK_AJP13_WORKER_TYPE;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.h
deleted file mode 100644
index b3098d6f..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: ajpv1.3 worker header file *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-#ifndef JK_AJP13_WORKER_H
-#define JK_AJP13_WORKER_H
-
-#include "jk_pool.h"
-#include "jk_connect.h"
-#include "jk_util.h"
-#include "jk_msg_buff.h"
-#include "jk_ajp_common.h"
-#include "jk_ajp13.h"
-#include "jk_logger.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define JK_AJP13_WORKER_NAME ("ajp13")
-#define JK_AJP13_WORKER_TYPE (2)
-
-int JK_METHOD ajp13_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* JK_AJP13_WORKER_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.lo
deleted file mode 100644
index 415f71ae..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_ajp13_worker.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_ajp13_worker.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_ajp13_worker.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.o
deleted file mode 100644
index b8f3d642..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp13_worker.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.c
deleted file mode 100644
index 161356ab..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.c
+++ /dev/null
@@ -1,695 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Next generation bi-directional protocol handler. *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-
-#include "jk_global.h"
-#include "jk_util.h"
-#include "jk_map.h"
-#include "jk_ajp_common.h"
-#include "jk_ajp14.h"
-#include "jk_md5.h"
-
-/*
- * Compute the MD5 with ENTROPY / SECRET KEY
- */
-
-void ajp14_compute_md5(jk_login_service_t *s, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
- jk_md5((const unsigned char *)s->entropy,
- (const unsigned char *)s->secret_key, s->computed_key);
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG, "(%s/%s) -> (%s)",
- s->entropy, s->secret_key, s->computed_key);
- JK_TRACE_EXIT(l);
-}
-
-
-/*
- * Build the Login Init Command
- *
- * +-------------------------+---------------------------+---------------------------+
- * | LOGIN INIT CMD (1 byte) | NEGOCIATION DATA (32bits) | WEB SERVER INFO (CString) |
- * +-------------------------+---------------------------+---------------------------+
- *
- */
-
-int ajp14_marshal_login_init_into_msgb(jk_msg_buf_t *msg,
- jk_login_service_t *s, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
- /* To be on the safe side */
- jk_b_reset(msg);
-
- /*
- * LOGIN
- */
- if (jk_b_append_byte(msg, AJP14_LOGINIT_CMD)) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- /*
- * NEGOCIATION FLAGS
- */
- if (jk_b_append_long(msg, s->negociation)) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- /*
- * WEB-SERVER NAME
- */
- if (jk_b_append_string(msg, s->web_server_name)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the web_server_name string");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-
-/*
- * Decode the Login Seed Command
- *
- * +-------------------------+---------------------------+
- * | LOGIN SEED CMD (1 byte) | MD5 of entropy (32 chars) |
- * +-------------------------+---------------------------+
- *
- */
-
-int ajp14_unmarshal_login_seed(jk_msg_buf_t *msg,
- jk_login_service_t *s, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (jk_b_get_bytes
- (msg, (unsigned char *)s->entropy, AJP14_ENTROPY_SEED_LEN) < 0) {
- jk_log(l, JK_LOG_ERROR,
- "can't get seed");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- s->entropy[AJP14_ENTROPY_SEED_LEN] = 0; /* Just to have a CString */
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-/*
- * Build the Login Computed Command
- *
- * +-------------------------+---------------------------------------+
- * | LOGIN COMP CMD (1 byte) | MD5 of RANDOM + SECRET KEY (32 chars) |
- * +-------------------------+---------------------------------------+
- *
- */
-
-int ajp14_marshal_login_comp_into_msgb(jk_msg_buf_t *msg,
- jk_login_service_t *s, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- /* To be on the safe side */
- jk_b_reset(msg);
-
- /*
- * LOGIN
- */
- if (jk_b_append_byte(msg, AJP14_LOGCOMP_CMD)) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- /*
- * COMPUTED-SEED
- */
- if (jk_b_append_bytes
- (msg, (const unsigned char *)s->computed_key,
- AJP14_COMPUTED_KEY_LEN)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the COMPUTED MD5 bytes");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-
-/*
- * Decode the LogOk Command
- *
- * +--------------------+------------------------+-------------------------------+
- * | LOGOK CMD (1 byte) | NEGOCIED DATA (32bits) | SERVLET ENGINE INFO (CString) |
- * +--------------------+------------------------+-------------------------------+
- *
- */
-
-int ajp14_unmarshal_log_ok(jk_msg_buf_t *msg,
- jk_login_service_t *s, jk_logger_t *l)
-{
- unsigned long nego;
- char *sname;
-
- JK_TRACE_ENTER(l);
-
- nego = jk_b_get_long(msg);
-
- if (nego == 0xFFFFFFFF) {
- jk_log(l, JK_LOG_ERROR,
- "can't get negociated data");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- sname = (char *)jk_b_get_string(msg);
-
- if (!sname) {
- jk_log(l, JK_LOG_ERROR,
- "can't get servlet engine name");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (s->servlet_engine_name) /* take care of removing previously allocated data */
- free(s->servlet_engine_name);
-
- s->servlet_engine_name = strdup(sname);
-
- if (!s->servlet_engine_name) {
- jk_log(l, JK_LOG_ERROR,
- "can't malloc servlet engine name");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-
-/*
- * Decode the Log Nok Command
- *
- * +---------------------+-----------------------+
- * | LOGNOK CMD (1 byte) | FAILURE CODE (32bits) |
- * +---------------------+-----------------------+
- *
- */
-
-int ajp14_unmarshal_log_nok(jk_msg_buf_t *msg, jk_logger_t *l)
-{
- unsigned long status;
-
- JK_TRACE_ENTER(l);
-
- status = jk_b_get_long(msg);
-
- if (status == 0xFFFFFFFF) {
- jk_log(l, JK_LOG_ERROR,
- "can't get failure code");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- jk_log(l, JK_LOG_INFO, "Can't Log with servlet engine - code %08lx",
- status);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-
-/*
- * Build the Shutdown Cmd
- *
- * +-----------------------+---------------------------------------+
- * | SHUTDOWN CMD (1 byte) | MD5 of RANDOM + SECRET KEY (32 chars) |
- * +-----------------------+---------------------------------------+
- *
- */
-
-int ajp14_marshal_shutdown_into_msgb(jk_msg_buf_t *msg,
- jk_login_service_t *s, jk_logger_t *l)
-{
-
- JK_TRACE_ENTER(l);
-
- /* To be on the safe side */
- jk_b_reset(msg);
-
- /*
- * SHUTDOWN CMD
- */
- if (jk_b_append_byte(msg, AJP14_SHUTDOWN_CMD)) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- /*
- * COMPUTED-SEED
- */
- if (jk_b_append_bytes
- (msg, (const unsigned char *)s->computed_key,
- AJP14_COMPUTED_KEY_LEN)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the COMPUTED MD5 bytes");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-/*
- * Decode the Shutdown Nok Command
- *
- * +----------------------+-----------------------+
- * | SHUTNOK CMD (1 byte) | FAILURE CODE (32bits) |
- * +----------------------+-----------------------+
- *
- */
-int ajp14_unmarshal_shutdown_nok(jk_msg_buf_t *msg, jk_logger_t *l)
-{
- unsigned long status;
-
- JK_TRACE_ENTER(l);
- status = jk_b_get_long(msg);
-
- if (status == 0xFFFFFFFF) {
- jk_log(l, JK_LOG_ERROR,
- "can't get failure code");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- jk_log(l, JK_LOG_INFO, "Can't shutdown servlet engine - code %08lx",
- status);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-/*
- * Build the Unknown Packet
- *
- * +-----------------------------+---------------------------------+------------------------------+
- * | UNKNOWN PACKET CMD (1 byte) | UNHANDLED MESSAGE SIZE (16bits) | UNHANDLED MESSAGE (bytes...) |
- * +-----------------------------+---------------------------------+------------------------------+
- *
- */
-
-int ajp14_marshal_unknown_packet_into_msgb(jk_msg_buf_t *msg,
- jk_msg_buf_t *unk, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- /* To be on the safe side */
- jk_b_reset(msg);
-
- /*
- * UNKNOWN PACKET CMD
- */
- if (jk_b_append_byte(msg, AJP14_UNKNOW_PACKET_CMD)) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- /*
- * UNHANDLED MESSAGE SIZE
- */
- if (jk_b_append_int(msg, (unsigned short)unk->len)) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- /*
- * UNHANDLED MESSAGE (Question : Did we have to send all the message or only part of)
- * ( ie: only 1k max )
- */
- if (jk_b_append_bytes(msg, unk->buf, unk->len)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the UNHANDLED MESSAGE");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-/*
- * Build the Context Query Cmd (autoconf)
- *
- * +--------------------------+---------------------------------+
- * | CONTEXT QRY CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) |
- * +--------------------------+---------------------------------+
- *
- */
-
-int ajp14_marshal_context_query_into_msgb(jk_msg_buf_t *msg,
- char *virtual, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- /* To be on the safe side */
- jk_b_reset(msg);
-
- /*
- * CONTEXT QUERY CMD
- */
- if (jk_b_append_byte(msg, AJP14_CONTEXT_QRY_CMD)) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- /*
- * VIRTUAL HOST CSTRING
- */
- if (jk_b_append_string(msg, virtual)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the virtual host string");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-
-/*
- * Decode the Context Info Cmd (Autoconf)
- *
- * The Autoconf feature of AJP14, let us know which URL/URI could
- * be handled by the servlet-engine
- *
- * +---------------------------+---------------------------------+----------------------------+-------------------------------+-----------+
- * | CONTEXT INFO CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) | CONTEXT NAME (CString (*)) | URL1 [\n] URL2 [\n] URL3 [\n] | NEXT CTX. |
- * +---------------------------+---------------------------------+----------------------------+-------------------------------+-----------+
- */
-
-int ajp14_unmarshal_context_info(jk_msg_buf_t *msg,
- jk_context_t *c, jk_logger_t *l)
-{
- char *vname;
- char *cname;
- char *uri;
-
- vname = (char *)jk_b_get_string(msg);
-
- JK_TRACE_ENTER(l);
- jk_log(l, JK_LOG_DEBUG,
- "get virtual %s for virtual %s",
- vname, c->virt);
-
- if (!vname) {
- jk_log(l, JK_LOG_ERROR,
- "can't get virtual hostname");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- /* Check if we get the correct virtual host */
- if (c->virt != NULL && vname != NULL && strcmp(c->virt, vname)) {
- /* set the virtual name, better to add to a virtual list ? */
-
- if (context_set_virtual(c, vname) == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "can't malloc virtual hostname");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
-
- for (;;) {
-
- cname = (char *)jk_b_get_string(msg);
-
- if (!cname) {
- jk_log(l, JK_LOG_ERROR,
- "can't get context");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- jk_log(l, JK_LOG_DEBUG,
- "get context %s for virtual %s",
- cname, vname);
-
- /* grab all contexts up to empty one which indicate end of contexts */
- if (!strlen(cname))
- break;
-
- /* create new context base (if needed) */
-
- if (context_add_base(c, cname) == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "can't add/set context %s",
- cname);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- for (;;) {
-
- uri = (char *)jk_b_get_string(msg);
-
- if (!uri) {
- jk_log(l, JK_LOG_ERROR,
- "can't get URI");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (!strlen(uri)) {
- jk_log(l, JK_LOG_DEBUG, "No more URI for context %s", cname);
- break;
- }
-
- jk_log(l, JK_LOG_INFO,
- "Got URI (%s) for virtualhost %s and context %s", uri,
- vname, cname);
-
- if (context_add_uri(c, cname, uri) == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "can't add/set uri (%s) for context %s",
- uri, cname);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-
-/*
- * Build the Context State Query Cmd
- *
- * We send the list of contexts where we want to know state, empty string end context list*
- * If cname is set, only ask about THIS context
- *
- * +----------------------------+----------------------------------+----------------------------+----+
- * | CONTEXT STATE CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) | CONTEXT NAME (CString (*)) | .. |
- * +----------------------------+----------------------------------+----------------------------+----+
- *
- */
-
-int ajp14_marshal_context_state_into_msgb(jk_msg_buf_t *msg,
- jk_context_t *c,
- char *cname, jk_logger_t *l)
-{
- jk_context_item_t *ci;
- int i;
-
- JK_TRACE_ENTER(l);
-
- /* To be on the safe side */
- jk_b_reset(msg);
-
- /*
- * CONTEXT STATE CMD
- */
- if (jk_b_append_byte(msg, AJP14_CONTEXT_STATE_CMD)) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- /*
- * VIRTUAL HOST CSTRING
- */
- if (jk_b_append_string(msg, c->virt)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the virtual host string");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (cname) {
-
- ci = context_find_base(c, cname);
-
- if (!ci) {
- jk_log(l, JK_LOG_ERROR,
- "unknown context %s",
- cname);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- /*
- * CONTEXT CSTRING
- */
-
- if (jk_b_append_string(msg, cname)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the context string %s",
- cname);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- else { /* Grab all contexts name */
-
- for (i = 0; i < c->size; i++) {
-
- /*
- * CONTEXT CSTRING
- */
- if (jk_b_append_string(msg, c->contexts[i]->cbase)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the context string %s",
- c->contexts[i]->cbase);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- }
-
- /* End of context list, an empty string */
-
- if (jk_b_append_string(msg, "")) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending end of contexts");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-
-/*
- * Decode the Context State Reply Cmd
- *
- * We get update of contexts list, empty string end context list*
- *
- * +----------------------------------+---------------------------------+----------------------------+------------------+----+
- * | CONTEXT STATE REPLY CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) | CONTEXT NAME (CString (*)) | UP/DOWN (1 byte) | .. |
- * +----------------------------------+---------------------------------+----------------------------+------------------+----+
- *
- */
-
-int ajp14_unmarshal_context_state_reply(jk_msg_buf_t *msg,
- jk_context_t *c, jk_logger_t *l)
-{
- char *vname;
- char *cname;
- jk_context_item_t *ci;
-
- JK_TRACE_ENTER(l);
- /* get virtual name */
- vname = (char *)jk_b_get_string(msg);
-
- if (!vname) {
- jk_log(l, JK_LOG_ERROR,
- "can't get virtual hostname");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- /* Check if we speak about the correct virtual */
- if (strcmp(c->virt, vname)) {
- jk_log(l, JK_LOG_ERROR,
- "incorrect virtual %s instead of %s",
- vname, c->virt);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- for (;;) {
-
- /* get context name */
- cname = (char *)jk_b_get_string(msg);
-
- if (!cname) {
- jk_log(l, JK_LOG_ERROR,
- "can't get context");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (!strlen(cname))
- break;
-
- ci = context_find_base(c, cname);
-
- if (!ci) {
- jk_log(l, JK_LOG_ERROR,
- "unknow context %s for virtual %s",
- cname, vname);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- ci->status = jk_b_get_int(msg);
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "updated context %s to state %d",
- cname, ci->status);
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-/*
- * Decode the Context Update Cmd
- *
- * +-----------------------------+---------------------------------+----------------------------+------------------+
- * | CONTEXT UPDATE CMD (1 byte) | VIRTUAL HOST NAME (CString (*)) | CONTEXT NAME (CString (*)) | UP/DOWN (1 byte) |
- * +-----------------------------+---------------------------------+----------------------------+------------------+
- *
- */
-
-int ajp14_unmarshal_context_update_cmd(jk_msg_buf_t *msg,
- jk_context_t *c, jk_logger_t *l)
-{
- int rc;
- JK_TRACE_ENTER(l);
- rc = ajp14_unmarshal_context_state_reply(msg, c, l);
- JK_TRACE_EXIT(l);
- return rc;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.h
deleted file mode 100644
index 58a5a4de..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.h
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Next generation bi-directional protocol handler. *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-#ifndef JK_AJP14_H
-#define JK_AJP14_H
-
-#include "jk_ajp_common.h"
-#include "jk_context.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define AJP14_PROTO 14
-
-#define AJP14_WS_HEADER 0x1235
-#define AJP14_SW_HEADER 0x1235 /* AJP14 use now the same header in both directions */
-
-#define AJP14_DEF_HOST ("localhost")
-#define AJP14_DEF_PORT (8011)
-#define AJP14_READ_BUF_SIZE (8*1024)
-#define AJP14_DEF_RETRY_ATTEMPTS (1)
-#define AJP14_DEF_CACHE_SZ (1)
-#define AJP14_MAX_SEND_BODY_SZ (DEF_BUFFER_SZ - 6)
-#define AJP14_HEADER_LEN (4)
-#define AJP14_HEADER_SZ_LEN (2)
-
-/*
- * Initial Login Phase (web server -> servlet engine)
- */
-#define AJP14_LOGINIT_CMD (unsigned char)0x10
-
-/*
- * Second Login Phase (servlet engine -> web server), md5 seed is received
- */
-#define AJP14_LOGSEED_CMD (unsigned char)0x11
-
-/*
- * Third Login Phase (web server -> servlet engine), md5 of seed + secret is sent
- */
-#define AJP14_LOGCOMP_CMD (unsigned char)0x12
-
-/*
- * Login Accepted (servlet engine -> web server)
- */
-#define AJP14_LOGOK_CMD (unsigned char)0x13
-
-/*
- * Login Rejected (servlet engine -> web server), will be logged
- */
-#define AJP14_LOGNOK_CMD (unsigned char)0x14
-
-/*
- * Context Query (web server -> servlet engine), which URI are handled by servlet engine ?
- */
-#define AJP14_CONTEXT_QRY_CMD (unsigned char)0x15
-
-/*
- * Context Info (servlet engine -> web server), URI handled response
- */
-#define AJP14_CONTEXT_INFO_CMD (unsigned char)0x16
-
-/*
- * Context Update (servlet engine -> web server), status of context changed
- */
-#define AJP14_CONTEXT_UPDATE_CMD (unsigned char)0x17
-
-/*
- * Servlet Engine Status (web server -> servlet engine), what's the status of the servlet engine ?
- */
-#define AJP14_STATUS_CMD (unsigned char)0x18
-
-/*
- * Secure Shutdown command (web server -> servlet engine), please servlet stop yourself.
- */
-#define AJP14_SHUTDOWN_CMD (unsigned char)0x19
-
-/*
- * Secure Shutdown command Accepted (servlet engine -> web server)
- */
-#define AJP14_SHUTOK_CMD (unsigned char)0x1A
-
-/*
- * Secure Shutdown Rejected (servlet engine -> web server)
- */
-#define AJP14_SHUTNOK_CMD (unsigned char)0x1B
-
-/*
- * Context Status (web server -> servlet engine), what's the status of the context ?
- */
-#define AJP14_CONTEXT_STATE_CMD (unsigned char)0x1C
-
-/*
- * Context Status Reply (servlet engine -> web server), status of context
- */
-#define AJP14_CONTEXT_STATE_REP_CMD (unsigned char)0x1D
-
-/*
- * Unknown Packet Reply (web server <-> servlet engine), when a packet couldn't be decoded
- */
-#define AJP14_UNKNOW_PACKET_CMD (unsigned char)0x1E
-
-
-/*
- * Negociation flags
- */
-
-/*
- * web-server want context info after login
- */
-#define AJP14_CONTEXT_INFO_NEG 0x80000000
-
-/*
- * web-server want context updates
- */
-#define AJP14_CONTEXT_UPDATE_NEG 0x40000000
-
-/*
- * web-server want compressed stream
- */
-#define AJP14_GZIP_STREAM_NEG 0x20000000
-
-/*
- * web-server want crypted DES56 stream with secret key
- */
-#define AJP14_DES56_STREAM_NEG 0x10000000
-
-/*
- * Extended info on server SSL vars
- */
-#define AJP14_SSL_VSERVER_NEG 0x08000000
-
-/*
- *Extended info on client SSL vars
- */
-#define AJP14_SSL_VCLIENT_NEG 0x04000000
-
-/*
- * Extended info on crypto SSL vars
- */
-#define AJP14_SSL_VCRYPTO_NEG 0x02000000
-
-/*
- * Extended info on misc SSL vars
- */
-#define AJP14_SSL_VMISC_NEG 0x01000000
-
-/*
- * mask of protocol supported
- */
-#define AJP14_PROTO_SUPPORT_AJPXX_NEG 0x00FF0000
-
-/*
- * communication could use AJP14
- */
-#define AJP14_PROTO_SUPPORT_AJP14_NEG 0x00010000
-
-/*
- * communication could use AJP15
- */
-#define AJP14_PROTO_SUPPORT_AJP15_NEG 0x00020000
-
-/*
- * communication could use AJP16
- */
-#define AJP14_PROTO_SUPPORT_AJP16_NEG 0x00040000
-
-/*
- * Some failure codes
- */
-#define AJP14_BAD_KEY_ERR 0xFFFFFFFF
-#define AJP14_ENGINE_DOWN_ERR 0xFFFFFFFE
-#define AJP14_RETRY_LATER_ERR 0xFFFFFFFD
-#define AJP14_SHUT_AUTHOR_FAILED_ERR 0xFFFFFFFC
-
-/*
- * Some status codes
- */
-#define AJP14_CONTEXT_DOWN 0x01
-#define AJP14_CONTEXT_UP 0x02
-#define AJP14_CONTEXT_OK 0x03
-
-/*
- * Misc defines
- */
-#define AJP14_ENTROPY_SEED_LEN 32 /* we're using MD5 => 32 chars */
-#define AJP14_COMPUTED_KEY_LEN 32 /* we're using MD5 also */
-
-/*
- * The login structure
- */
-typedef struct jk_login_service jk_login_service_t;
-
-struct jk_login_service
-{
-
- /*
- * Pointer to web-server name
- */
- const char *web_server_name;
-
- /*
- * Pointer to servlet-engine name
- */
- char *servlet_engine_name;
-
- /*
- * Pointer to secret key
- */
- const char *secret_key;
-
- /*
- * Received entropy seed
- */
- char entropy[AJP14_ENTROPY_SEED_LEN + 1];
-
- /*
- * Computed key
- */
- char computed_key[AJP14_COMPUTED_KEY_LEN + 1];
-
- /*
- * What we want to negociate
- */
- unsigned long negociation;
-
- /*
- * What we received from servlet engine
- */
- unsigned long negociated;
-};
-
-/*
- * functions defined here
- */
-
-void ajp14_compute_md5(jk_login_service_t *s, jk_logger_t *l);
-
-int ajp14_marshal_login_init_into_msgb(jk_msg_buf_t *msg,
- jk_login_service_t *s,
- jk_logger_t *l);
-
-int ajp14_unmarshal_login_seed(jk_msg_buf_t *msg,
- jk_login_service_t *s, jk_logger_t *l);
-
-int ajp14_marshal_login_comp_into_msgb(jk_msg_buf_t *msg,
- jk_login_service_t *s,
- jk_logger_t *l);
-
-int ajp14_unmarshal_log_ok(jk_msg_buf_t *msg,
- jk_login_service_t *s, jk_logger_t *l);
-
-int ajp14_unmarshal_log_nok(jk_msg_buf_t *msg, jk_logger_t *l);
-
-int ajp14_marshal_shutdown_into_msgb(jk_msg_buf_t *msg,
- jk_login_service_t *s,
- jk_logger_t *l);
-
-int ajp14_unmarshal_shutdown_nok(jk_msg_buf_t *msg, jk_logger_t *l);
-
-int ajp14_marshal_unknown_packet_into_msgb(jk_msg_buf_t *msg,
- jk_msg_buf_t *unk,
- jk_logger_t *l);
-
-int ajp14_marshal_context_query_into_msgb(jk_msg_buf_t *msg,
- char *virtual, jk_logger_t *l);
-
-int ajp14_unmarshal_context_info(jk_msg_buf_t *msg,
- jk_context_t *context, jk_logger_t *l);
-
-int ajp14_marshal_context_state_into_msgb(jk_msg_buf_t *msg,
- jk_context_t *context,
- char *cname, jk_logger_t *l);
-
-int ajp14_unmarshal_context_state_reply(jk_msg_buf_t *msg,
- jk_context_t *context,
- jk_logger_t *l);
-
-int ajp14_unmarshal_context_update_cmd(jk_msg_buf_t *msg,
- jk_context_t *context,
- jk_logger_t *l);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* JK_AJP14_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.lo
deleted file mode 100644
index 3613a169..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_ajp14.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_ajp14.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_ajp14.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.o
deleted file mode 100644
index f3f783c5..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.c
deleted file mode 100644
index 639fb11c..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.c
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: AJP14 next generation Bi-directional protocol. *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 611589 $ *
- ***************************************************************************/
-
-#include "jk_context.h"
-#include "jk_ajp14_worker.h"
-
-
-/*
- * AJP14 Autoconf Phase
- *
- * CONTEXT QUERY / REPLY
- */
-
-#define MAX_URI_SIZE 512
-
-static int handle_discovery(ajp_endpoint_t * ae,
- jk_worker_env_t *we,
- jk_msg_buf_t *msg, jk_logger_t *l)
-{
- int cmd;
- int i, j;
-#if 0
- /* Not used for now */
- jk_login_service_t *jl = ae->worker->login;
-#endif
- jk_context_item_t *ci;
- jk_context_t *c;
- char *buf;
-
-#ifndef TESTME
- JK_TRACE_ENTER(l);
-
- ajp14_marshal_context_query_into_msgb(msg, we->virtual, l);
-
- jk_log(l, JK_LOG_DEBUG, "send query");
-
- if (ajp_connection_tcp_send_message(ae, msg, l) != JK_TRUE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jk_log(l, JK_LOG_DEBUG, "wait context reply");
-
- jk_b_reset(msg);
-
- if (ajp_connection_tcp_get_message(ae, msg, l) != JK_TRUE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if ((cmd = jk_b_get_byte(msg)) != AJP14_CONTEXT_INFO_CMD) {
- jk_log(l, JK_LOG_ERROR,
- "awaited command %d, received %d",
- AJP14_CONTEXT_INFO_CMD, cmd);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (context_alloc(&c, we->virtual) != JK_TRUE) {
- jk_log(l, JK_LOG_ERROR,
- "can't allocate context room");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (ajp14_unmarshal_context_info(msg, c, l) != JK_TRUE) {
- jk_log(l, JK_LOG_ERROR,
- "can't get context reply");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- jk_log(l, JK_LOG_DEBUG, "received context");
-
- buf = malloc(MAX_URI_SIZE); /* Really a very long URI */
-
- if (!buf) {
- jk_log(l, JK_LOG_ERROR, "can't malloc buf");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- for (i = 0; i < c->size; i++) {
- ci = c->contexts[i];
- for (j = 0; j < ci->size; j++) {
-
-#ifndef USE_SPRINTF
- snprintf(buf, MAX_URI_SIZE - 1, "/%s/%s", ci->cbase, ci->uris[j]);
-#else
- sprintf(buf, "/%s/%s", ci->cbase, ci->uris[j]);
-#endif
-
- jk_log(l, JK_LOG_INFO,
- "worker %s will handle uri %s in context %s [%s]",
- ae->worker->name, ci->uris[j], ci->cbase, buf);
-
- uri_worker_map_add(we->uri_to_worker, buf, ae->worker->name, SOURCE_TYPE_DISCOVER, l);
- }
- }
-
- free(buf);
- context_free(&c);
-
-#else
-
- uri_worker_map_add(we->uri_to_worker, "/examples/servlet/*",
- ae->worker->name, SOURCE_TYPE_DISCOVER, l);
- uri_worker_map_add(we->uri_to_worker, "/examples/*.jsp", ae->worker->name,
- SOURCE_TYPE_DISCOVER, l);
- uri_worker_map_add(we->uri_to_worker, "/examples/*.gif", ae->worker->name,
- SOURCE_TYPE_DISCOVER, l);
-
-#endif
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-/*
- * AJP14 Logon Phase
- *
- * INIT + REPLY / NEGO + REPLY
- */
-
-static int handle_logon(ajp_endpoint_t * ae,
- jk_msg_buf_t *msg, jk_logger_t *l)
-{
- int cmd;
-
- jk_login_service_t *jl = ae->worker->login;
- JK_TRACE_ENTER(l);
-
- ajp14_marshal_login_init_into_msgb(msg, jl, l);
-
- jk_log(l, JK_LOG_DEBUG, "send init");
-
- if (ajp_connection_tcp_send_message(ae, msg, l) != JK_TRUE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jk_log(l, JK_LOG_DEBUG, "wait init reply");
-
- jk_b_reset(msg);
-
- if (ajp_connection_tcp_get_message(ae, msg, l) != JK_TRUE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if ((cmd = jk_b_get_byte(msg)) != AJP14_LOGSEED_CMD) {
- jk_log(l, JK_LOG_ERROR,
- "awaited command %d, received %d",
- AJP14_LOGSEED_CMD, cmd);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (ajp14_unmarshal_login_seed(msg, jl, l) != JK_TRUE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jk_log(l, JK_LOG_DEBUG, "received entropy %s",
- jl->entropy);
-
- ajp14_compute_md5(jl, l);
-
- if (ajp14_marshal_login_comp_into_msgb(msg, jl, l) != JK_TRUE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if (ajp_connection_tcp_send_message(ae, msg, l) != JK_TRUE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jk_b_reset(msg);
-
- if (ajp_connection_tcp_get_message(ae, msg, l) != JK_TRUE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- switch (jk_b_get_byte(msg)) {
-
- case AJP14_LOGOK_CMD:
- if (ajp14_unmarshal_log_ok(msg, jl, l) == JK_TRUE) {
- jk_log(l, JK_LOG_DEBUG,
- "Successfully connected to servlet-engine %s",
- jl->servlet_engine_name);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- break;
-
- case AJP14_LOGNOK_CMD:
- ajp14_unmarshal_log_nok(msg, l);
- break;
- }
-
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-static int logon(ajp_endpoint_t * ae, jk_logger_t *l)
-{
- jk_pool_t *p = &ae->pool;
- jk_msg_buf_t *msg;
- int rc;
-
- JK_TRACE_ENTER(l);
-
- msg = jk_b_new(p);
- jk_b_set_buffer_size(msg, DEF_BUFFER_SZ);
-
- if ((rc = handle_logon(ae, msg, l)) == JK_FALSE)
- ajp_close_endpoint(ae, l);
-
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-static int discovery(ajp_endpoint_t * ae, jk_worker_env_t *we, jk_logger_t *l)
-{
- jk_pool_t *p = &ae->pool;
- jk_msg_buf_t *msg;
- int rc;
-
- JK_TRACE_ENTER(l);
-
- msg = jk_b_new(p);
- jk_b_set_buffer_size(msg, DEF_BUFFER_SZ);
-
- if ((rc = handle_discovery(ae, we, msg, l)) == JK_FALSE)
- ajp_close_endpoint(ae, l);
-
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-/* -------------------- Method -------------------- */
-static int JK_METHOD validate(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l)
-{
- ajp_worker_t *aw;
- const char *secret_key;
-
- JK_TRACE_ENTER(l);
- if (ajp_validate(pThis, props, we, l, AJP14_PROTO) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- aw = pThis->worker_private;
-
- secret_key = jk_get_worker_secret_key(props, aw->name);
-
- if ((!secret_key) || (!strlen(secret_key))) {
- jk_log(l, JK_LOG_ERROR,
- "validate error, empty or missing secretkey");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- /* jk_log(l, JK_LOG_DEBUG, "Into ajp14:validate - secret_key=%s", secret_key); */
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static int JK_METHOD get_endpoint(jk_worker_t *pThis,
- jk_endpoint_t **pend, jk_logger_t *l)
-{
- int rc;
- JK_TRACE_ENTER(l);
- rc = ajp_get_endpoint(pThis, pend, l, AJP14_PROTO);
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-static int JK_METHOD init(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l)
-{
- ajp_worker_t *aw;
- ajp_endpoint_t *ae;
- jk_endpoint_t *je;
- int rc;
-
- JK_TRACE_EXIT(l);
-
- if (ajp_init(pThis, props, we, l, AJP14_PROTO) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- aw = pThis->worker_private;
-
- /* Set Secret Key (used at logon time) */
- aw->login->secret_key = jk_get_worker_secret_key(props, aw->name);
-
- if (aw->login->secret_key == NULL) {
- jk_log(l, JK_LOG_ERROR, "can't malloc secret_key");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- /* Set WebServerName (used at logon time) */
- aw->login->web_server_name = strdup(we->server_name);
-
- if (aw->login->web_server_name == NULL) {
- jk_log(l, JK_LOG_ERROR, "can't malloc web_server_name");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (get_endpoint(pThis, &je, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- ae = je->endpoint_private;
-
- if (ajp_connect_to_endpoint(ae, l) == JK_TRUE) {
-
- /* connection stage passed - try to get context info
- * this is the long awaited autoconf feature :)
- */
- rc = discovery(ae, we, l);
- ajp_close_endpoint(ae, l);
- JK_TRACE_EXIT(l);
- return rc;
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-
-static int JK_METHOD destroy(jk_worker_t **pThis, jk_logger_t *l)
-{
- int rc;
- ajp_worker_t *aw = (*pThis)->worker_private;
-
- JK_TRACE_ENTER(l);
-
- if (aw->login) {
- free(aw->login);
- aw->login = NULL;
- }
-
- rc = ajp_destroy(pThis, l, AJP14_PROTO);
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-int JK_METHOD ajp14_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l)
-{
- ajp_worker_t *aw;
-
- JK_TRACE_ENTER(l);
- if (ajp_worker_factory(w, name, l) == JK_FALSE)
- return 0;
-
- aw = (*w)->worker_private;
- aw->proto = AJP14_PROTO;
-
- aw->login = (jk_login_service_t *)malloc(sizeof(jk_login_service_t));
-
- if (aw->login == NULL) {
- jk_log(l, JK_LOG_ERROR,
- "malloc failed for login area");
- JK_TRACE_EXIT(l);
- return 0;
- }
-
- memset(aw->login, 0, sizeof(jk_login_service_t));
-
- aw->login->negociation =
- (AJP14_CONTEXT_INFO_NEG | AJP14_PROTO_SUPPORT_AJP14_NEG);
- aw->login->web_server_name = NULL; /* must be set in init */
-
- aw->worker.validate = validate;
- aw->worker.init = init;
- aw->worker.get_endpoint = get_endpoint;
- aw->worker.destroy = destroy;
-
- aw->logon = logon; /* LogOn Handler for AJP14 */
-
- JK_TRACE_EXIT(l);
- return JK_AJP14_WORKER_TYPE;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.h
deleted file mode 100644
index 3d5c7973..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: ajpv14 worker header file *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-#ifndef JK_AJP14_WORKER_H
-#define JK_AJP14_WORKER_H
-
-#include "jk_pool.h"
-#include "jk_connect.h"
-#include "jk_util.h"
-#include "jk_msg_buff.h"
-#include "jk_ajp13.h"
-#include "jk_ajp14.h"
-#include "jk_logger.h"
-#include "jk_service.h"
-#include "jk_ajp13_worker.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define JK_AJP14_WORKER_NAME ("ajp14")
-#define JK_AJP14_WORKER_TYPE (3)
-
-int JK_METHOD ajp14_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* JK_AJP14_WORKER_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.lo
deleted file mode 100644
index cfd049e1..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_ajp14_worker.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_ajp14_worker.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_ajp14_worker.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.o
deleted file mode 100644
index 604ad3b1..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp14_worker.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.c
deleted file mode 100644
index 7b083264..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.c
+++ /dev/null
@@ -1,3383 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: common stuff for bi-directional protocols ajp13/ajp14. *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 1137200 $ *
- ***************************************************************************/
-
-
-#include "jk_global.h"
-#include "jk_util.h"
-#include "jk_ajp13.h"
-#include "jk_ajp14.h"
-#include "jk_ajp_common.h"
-#include "jk_connect.h"
-#if defined(AS400) && !defined(AS400_UTF8)
-#include "util_ebcdic.h"
-#endif
-#if defined(NETWARE) && defined(__NOVELL_LIBC__)
-#include "novsock2.h"
-#endif
-
-const char *response_trans_headers[] = {
- "Content-Type",
- "Content-Language",
- "Content-Length",
- "Date",
- "Last-Modified",
- "Location",
- "Set-Cookie",
- "Set-Cookie2",
- "Servlet-Engine",
- "Status",
- "WWW-Authenticate"
-};
-
-static const char *long_res_header_for_sc(int sc)
-{
- const char *rc = NULL;
- sc = sc & 0X00FF;
- if (sc <= SC_RES_HEADERS_NUM && sc > 0) {
- rc = response_trans_headers[sc - 1];
- }
-
- return rc;
-}
-
-static const char *ajp_state_type[] = {
- JK_AJP_STATE_TEXT_IDLE,
- JK_AJP_STATE_TEXT_OK,
- JK_AJP_STATE_TEXT_ERROR,
- JK_AJP_STATE_TEXT_PROBE,
- "unknown",
- NULL
-};
-
-#define UNKNOWN_METHOD (-1)
-
-static int sc_for_req_method(const char *method, size_t len)
-{
- /* Note: the following code was generated by the "shilka" tool from
- the "cocom" parsing/compilation toolkit. It is an optimized lookup
- based on analysis of the input keywords. Postprocessing was done
- on the shilka output, but the basic structure and analysis is
- from there. Should new HTTP methods be added, then manual insertion
- into this code is fine, or simply re-running the shilka tool on
- the appropriate input. */
-
- /* Note: it is also quite reasonable to just use our method_registry,
- but I'm assuming (probably incorrectly) we want more speed here
- (based on the optimizations the previous code was doing). */
-
- switch (len)
- {
- case 3:
- switch (method[0])
- {
- case 'A':
- return (method[1] == 'C'
- && method[2] == 'L'
- ? SC_M_ACL : UNKNOWN_METHOD);
- case 'P':
- return (method[1] == 'U'
- && method[2] == 'T'
- ? SC_M_PUT : UNKNOWN_METHOD);
- case 'G':
- return (method[1] == 'E'
- && method[2] == 'T'
- ? SC_M_GET : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
-
- case 4:
- switch (method[0])
- {
- case 'H':
- return (method[1] == 'E'
- && method[2] == 'A'
- && method[3] == 'D'
- ? SC_M_HEAD : UNKNOWN_METHOD);
- case 'P':
- return (method[1] == 'O'
- && method[2] == 'S'
- && method[3] == 'T'
- ? SC_M_POST : UNKNOWN_METHOD);
- case 'M':
- return (method[1] == 'O'
- && method[2] == 'V'
- && method[3] == 'E'
- ? SC_M_MOVE : UNKNOWN_METHOD);
- case 'L':
- return (method[1] == 'O'
- && method[2] == 'C'
- && method[3] == 'K'
- ? SC_M_LOCK : UNKNOWN_METHOD);
- case 'C':
- return (method[1] == 'O'
- && method[2] == 'P'
- && method[3] == 'Y'
- ? SC_M_COPY : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
-
- case 5:
- switch (method[2])
- {
- case 'R':
- return (memcmp(method, "MERGE", 5) == 0
- ? SC_M_MERGE : UNKNOWN_METHOD);
- case 'C':
- return (memcmp(method, "MKCOL", 5) == 0
- ? SC_M_MKCOL : UNKNOWN_METHOD);
- case 'B':
- return (memcmp(method, "LABEL", 5) == 0
- ? SC_M_LABEL : UNKNOWN_METHOD);
- case 'A':
- return (memcmp(method, "TRACE", 5) == 0
- ? SC_M_TRACE : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
-
- case 6:
- switch (method[0])
- {
- case 'U':
- switch (method[5])
- {
- case 'K':
- return (memcmp(method, "UNLOCK", 6) == 0
- ? SC_M_UNLOCK : UNKNOWN_METHOD);
- case 'E':
- return (memcmp(method, "UPDATE", 6) == 0
- ? SC_M_UPDATE : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
- case 'R':
- return (memcmp(method, "REPORT", 6) == 0
- ? SC_M_REPORT : UNKNOWN_METHOD);
- case 'S':
- return (memcmp(method, "SEARCH", 6) == 0
- ? SC_M_SEARCH : UNKNOWN_METHOD);
- case 'D':
- return (memcmp(method, "DELETE", 6) == 0
- ? SC_M_DELETE : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
-
- case 7:
- switch (method[1])
- {
- case 'P':
- return (memcmp(method, "OPTIONS", 7) == 0
- ? SC_M_OPTIONS : UNKNOWN_METHOD);
- case 'H':
- return (memcmp(method, "CHECKIN", 7) == 0
- ? SC_M_CHECKIN : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
-
- case 8:
- switch (method[0])
- {
- case 'P':
- return (memcmp(method, "PROPFIND", 8) == 0
- ? SC_M_PROPFIND : UNKNOWN_METHOD);
- case 'C':
- return (memcmp(method, "CHECKOUT", 8) == 0
- ? SC_M_CHECKOUT : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
-
- case 9:
- return (memcmp(method, "PROPPATCH", 9) == 0
- ? SC_M_PROPPATCH : UNKNOWN_METHOD);
-
- case 10:
- switch (method[0])
- {
- case 'U':
- return (memcmp(method, "UNCHECKOUT", 10) == 0
- ? SC_M_UNCHECKOUT : UNKNOWN_METHOD);
- case 'M':
- return (memcmp(method, "MKACTIVITY", 10) == 0
- ? SC_M_MKACTIVITY : UNKNOWN_METHOD);
- default:
- return UNKNOWN_METHOD;
- }
-
- case 11:
- return (memcmp(method, "MKWORKSPACE", 11) == 0
- ? SC_M_MKWORKSPACE : UNKNOWN_METHOD);
-
- case 15:
- return (memcmp(method, "VERSION-CONTROL", 15) == 0
- ? SC_M_VERSION_CONTROL : UNKNOWN_METHOD);
-
- case 16:
- return (memcmp(method, "BASELINE-CONTROL", 16) == 0
- ? SC_M_BASELINE_CONTROL : UNKNOWN_METHOD);
-
- default:
- return UNKNOWN_METHOD;
- }
-
- /* NOTREACHED */
-}
-
-static int sc_for_req_header(const char *header_name)
-{
- char header[16];
- size_t len = strlen(header_name);
- const char *p = header_name;
- int i = 0;
-
- /* ACCEPT-LANGUAGE is the longest header
- * that is of interest.
- */
- if (len < 4 || len > 15)
- return UNKNOWN_METHOD;
-
- while (*p) {
- header[i++] = toupper((unsigned char)*p);
- p++;
- }
-
- header[i] = '\0';
- p = &header[1];
-
-/* Always do memcmp including the final \0-termination character.
- */
- switch (header[0]) {
- case 'A':
- if (memcmp(p, "CCEPT", 6) == 0) {
- if (!header[6])
- return SC_ACCEPT;
- else if (header[6] == '-') {
- p += 6;
- if (memcmp(p, "CHARSET", 8) == 0)
- return SC_ACCEPT_CHARSET;
- else if (memcmp(p, "ENCODING", 9) == 0)
- return SC_ACCEPT_ENCODING;
- else if (memcmp(p, "LANGUAGE", 9) == 0)
- return SC_ACCEPT_LANGUAGE;
- else
- return UNKNOWN_METHOD;
- }
- else
- return UNKNOWN_METHOD;
- }
- else if (memcmp(p, "UTHORIZATION", 13) == 0)
- return SC_AUTHORIZATION;
- else
- return UNKNOWN_METHOD;
- break;
- case 'C':
- if(memcmp(p, "OOKIE2", 7) == 0)
- return SC_COOKIE2;
- else if (memcmp(p, "OOKIE", 6) == 0)
- return SC_COOKIE;
- else if(memcmp(p, "ONNECTION", 10) == 0)
- return SC_CONNECTION;
- else if(memcmp(p, "ONTENT-TYPE", 12) == 0)
- return SC_CONTENT_TYPE;
- else if(memcmp(p, "ONTENT-LENGTH", 14) == 0)
- return SC_CONTENT_LENGTH;
- else
- return UNKNOWN_METHOD;
- break;
- case 'H':
- if(memcmp(p, "OST", 4) == 0)
- return SC_HOST;
- else
- return UNKNOWN_METHOD;
- break;
- case 'P':
- if(memcmp(p, "RAGMA", 6) == 0)
- return SC_PRAGMA;
- else
- return UNKNOWN_METHOD;
- break;
- case 'R':
- if(memcmp(p, "EFERER", 7) == 0)
- return SC_REFERER;
- else
- return UNKNOWN_METHOD;
- break;
- case 'U':
- if(memcmp(p, "SER-AGENT", 10) == 0)
- return SC_USER_AGENT;
- else
- return UNKNOWN_METHOD;
- break;
- default:
- return UNKNOWN_METHOD;
- }
- /* NOTREACHED */
-}
-
-/* Return the string representation of the worker state */
-const char *jk_ajp_get_state(ajp_worker_t *aw, jk_logger_t *l)
-{
- return ajp_state_type[aw->s->state];
-}
-
-/* Return the int representation of the worker state */
-int jk_ajp_get_state_code(const char *v)
-{
- if (!v)
- return JK_AJP_STATE_DEF;
- else if (*v == 'i' || *v == 'I' || *v == 'n' || *v == 'N' || *v == '0')
- return JK_AJP_STATE_IDLE;
- else if (*v == 'o' || *v == 'O' || *v == '1')
- return JK_AJP_STATE_OK;
- else if (*v == 'e' || *v == 'E' || *v == '4')
- return JK_AJP_STATE_ERROR;
- else if (*v == 'p' || *v == 'P' || *v == '6')
- return JK_AJP_STATE_PROBE;
- else
- return JK_AJP_STATE_DEF;
-}
-
-int jk_ajp_get_cping_mode(const char *m, int def)
-{
- int mv = def;
- if (!m)
- return mv;
- while (*m != '\0') {
- if (*m == 'C' || *m == 'c')
- mv |= AJP_CPING_CONNECT;
- else if (*m == 'P' || *m == 'p')
- mv |= AJP_CPING_PREPOST;
- else if (*m == 'I' || *m == 'i')
- mv |= AJP_CPING_INTERVAL;
- else if (*m == 'A' || *m == 'a') {
- mv = AJP_CPING_CONNECT | AJP_CPING_PREPOST | AJP_CPING_INTERVAL;
- break;
- }
- m++;
- }
- return mv;
-}
-
-/*
- * Message structure
- *
- *
-AJPV13_REQUEST/AJPV14_REQUEST=
- request_prefix (1) (byte)
- method (byte)
- protocol (string)
- req_uri (string)
- remote_addr (string)
- remote_host (string)
- server_name (string)
- server_port (short)
- is_ssl (boolean)
- num_headers (short)
- num_headers*(req_header_name header_value)
-
- ?context (byte)(string)
- ?servlet_path (byte)(string)
- ?remote_user (byte)(string)
- ?auth_type (byte)(string)
- ?query_string (byte)(string)
- ?route (byte)(string)
- ?ssl_cert (byte)(string)
- ?ssl_cipher (byte)(string)
- ?ssl_session (byte)(string)
- ?ssl_key_size (byte)(int) via JkOptions +ForwardKeySize
- request_terminator (byte)
- ?body content_length*(var binary)
-
- */
-
-static int ajp_marshal_into_msgb(jk_msg_buf_t *msg,
- jk_ws_service_t *s,
- jk_logger_t *l, ajp_endpoint_t * ae)
-{
- int method;
- unsigned int i;
-
- JK_TRACE_ENTER(l);
-
- if ((method = sc_for_req_method(s->method,
- strlen(s->method))) == UNKNOWN_METHOD)
- method = SC_M_JK_STORED;
-
- if (jk_b_append_byte(msg, JK_AJP13_FORWARD_REQUEST) ||
- jk_b_append_byte(msg, (unsigned char)method) ||
- jk_b_append_string(msg, s->protocol) ||
- jk_b_append_string(msg, s->req_uri) ||
- jk_b_append_string(msg, s->remote_addr) ||
- jk_b_append_string(msg, s->remote_host) ||
- jk_b_append_string(msg, s->server_name) ||
- jk_b_append_int(msg, (unsigned short)s->server_port) ||
- jk_b_append_byte(msg, (unsigned char)(s->is_ssl)) ||
- jk_b_append_int(msg, (unsigned short)(s->num_headers))) {
-
- jk_log(l, JK_LOG_ERROR,
- "failed appending the message begining");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- for (i = 0; i < s->num_headers; i++) {
- int sc;
-
- if ((sc = sc_for_req_header(s->headers_names[i])) != UNKNOWN_METHOD) {
- if (jk_b_append_int(msg, (unsigned short)sc)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the header name");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- else {
- if (jk_b_append_string(msg, s->headers_names[i])) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the header name");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
-
- if (jk_b_append_string(msg, s->headers_values[i])) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the header value");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
-
- if (s->secret) {
- if (jk_b_append_byte(msg, SC_A_SECRET) ||
- jk_b_append_string(msg, s->secret)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending secret");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
-
- if (s->remote_user) {
- if (jk_b_append_byte(msg, SC_A_REMOTE_USER) ||
- jk_b_append_string(msg, s->remote_user)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the remote user");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- if (s->auth_type) {
- if (jk_b_append_byte(msg, SC_A_AUTH_TYPE) ||
- jk_b_append_string(msg, s->auth_type)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the auth type");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- if (s->query_string) {
- if (jk_b_append_byte(msg, SC_A_QUERY_STRING) ||
-#if defined(AS400) && !defined(AS400_UTF8)
- jk_b_append_asciistring(msg, s->query_string)) {
-#else
- jk_b_append_string(msg, s->query_string)) {
-#endif
- jk_log(l, JK_LOG_ERROR,
- "failed appending the query string");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- if (s->route) {
- if (jk_b_append_byte(msg, SC_A_ROUTE) ||
- jk_b_append_string(msg, s->route)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the route");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- if (s->ssl_cert_len) {
- if (jk_b_append_byte(msg, SC_A_SSL_CERT) ||
- jk_b_append_string(msg, s->ssl_cert)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the SSL certificates");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
-
- if (s->ssl_cipher) {
- if (jk_b_append_byte(msg, SC_A_SSL_CIPHER) ||
- jk_b_append_string(msg, s->ssl_cipher)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the SSL ciphers");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- if (s->ssl_session) {
- if (jk_b_append_byte(msg, SC_A_SSL_SESSION) ||
- jk_b_append_string(msg, s->ssl_session)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the SSL session");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
-
- /*
- * ssl_key_size is required by Servlet 2.3 API
- * added support only in ajp14 mode
- * JFC removed: ae->proto == AJP14_PROTO
- */
- if (s->ssl_key_size != -1) {
- if (jk_b_append_byte(msg, SC_A_SSL_KEY_SIZE) ||
- jk_b_append_int(msg, (unsigned short)s->ssl_key_size)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the SSL key size");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
-
- /* If the method was unrecognized, encode it as an attribute */
- if (method == SC_M_JK_STORED) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG, "unknown method %s", s->method);
- if (jk_b_append_byte(msg, SC_A_STORED_METHOD) ||
- jk_b_append_string(msg, s->method)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the request method");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
-
- /* Forward the remote port information, which was forgotten
- * from the builtin data of the AJP 13 protocol.
- * Since the servlet spec allows to retrieve it via getRemotePort(),
- * we provide the port to the Tomcat connector as a request
- * attribute. Modern Tomcat versions know how to retrieve
- * the remote port from this attribute.
- */
- {
- if (jk_b_append_byte(msg, SC_A_REQ_ATTRIBUTE) ||
- jk_b_append_string(msg, SC_A_REQ_REMOTE_PORT) ||
- jk_b_append_string(msg, s->remote_port)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the remote port %s",
- s->remote_port);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
-
- /* Forward activation information from the load balancer.
- * It can be used by the backend to deny access by requests,
- * which come with a session id but for an invalid session.
- * Such requests get forwarded to backends even if they
- * are disabled" in the load balancer, because the balancer
- * does not know, which sessions are valid.
- * If the backend can check, that is was "disabled" it can
- * delete the session cookie and respond with a self-referential
- * redirect. The new request will then be balanced to some
- * other node that is not disabled.
- */
- {
- if (jk_b_append_byte(msg, SC_A_REQ_ATTRIBUTE) ||
- jk_b_append_string(msg, SC_A_JK_LB_ACTIVATION) ||
- jk_b_append_string(msg, s->activation)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the activation state %s",
- s->activation);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
-
- if (s->num_attributes > 0) {
- for (i = 0; i < s->num_attributes; i++) {
- if (jk_b_append_byte(msg, SC_A_REQ_ATTRIBUTE) ||
- jk_b_append_string(msg, s->attributes_names[i]) ||
- jk_b_append_string(msg, s->attributes_values[i])) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending attribute %s=%s",
- s->attributes_names[i], s->attributes_values[i]);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- }
-
- if (jk_b_append_byte(msg, SC_A_ARE_DONE)) {
- jk_log(l, JK_LOG_ERROR,
- "failed appending the message end");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG, "ajp marshaling done");
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-/*
-AJPV13_RESPONSE/AJPV14_RESPONSE:=
- response_prefix (2)
- status (short)
- status_msg (short)
- num_headers (short)
- num_headers*(res_header_name header_value)
- *body_chunk
- terminator boolean <! -- recycle connection or not -->
-
-req_header_name :=
- sc_req_header_name | (string)
-
-res_header_name :=
- sc_res_header_name | (string)
-
-header_value :=
- (string)
-
-body_chunk :=
- length (short)
- body length*(var binary)
-
- */
-
-
-static int ajp_unmarshal_response(jk_msg_buf_t *msg,
- jk_res_data_t * d,
- ajp_endpoint_t * ae, jk_logger_t *l)
-{
- jk_pool_t *p = &ae->pool;
-
- JK_TRACE_ENTER(l);
-
- d->status = jk_b_get_int(msg);
- if (!d->status) {
- jk_log(l, JK_LOG_ERROR,
- "NULL status");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- d->msg = (char *)jk_b_get_string(msg);
- if (d->msg) {
-#if (defined(AS400) && !defined(AS400_UTF8)) || defined(_OSD_POSIX)
- jk_xlate_from_ascii(d->msg, strlen(d->msg));
-#endif
- }
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "status = %d", d->status);
-
- d->num_headers = jk_b_get_int(msg);
- d->header_names = d->header_values = NULL;
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Number of headers is = %d",
- d->num_headers);
-
- if (d->num_headers) {
- d->header_names = jk_pool_alloc(p, sizeof(char *) * d->num_headers);
- d->header_values = jk_pool_alloc(p, sizeof(char *) * d->num_headers);
-
- if (d->header_names && d->header_values) {
- unsigned int i;
- for (i = 0; i < d->num_headers; i++) {
- unsigned short name = jk_b_pget_int(msg, msg->pos);
-
- if ((name & 0XFF00) == 0XA000) {
- jk_b_get_int(msg);
- name = name & 0X00FF;
- if (name <= SC_RES_HEADERS_NUM) {
- d->header_names[i] =
- (char *)long_res_header_for_sc(name);
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "No such sc (%d)", name);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- else {
- d->header_names[i] = (char *)jk_b_get_string(msg);
- if (!d->header_names[i]) {
- jk_log(l, JK_LOG_ERROR,
- "NULL header name");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-#if (defined(AS400) && !defined(AS400_UTF8)) || defined(_OSD_POSIX)
- jk_xlate_from_ascii(d->header_names[i],
- strlen(d->header_names[i]));
-#endif
-
- }
-
- d->header_values[i] = (char *)jk_b_get_string(msg);
- if (!d->header_values[i]) {
- jk_log(l, JK_LOG_ERROR,
- "NULL header value");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
-#if (defined(AS400) && !defined(AS400_UTF8)) || defined(_OSD_POSIX)
- jk_xlate_from_ascii(d->header_values[i],
- strlen(d->header_values[i]));
-#endif
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Header[%d] [%s] = [%s]",
- i, d->header_names[i], d->header_values[i]);
- }
- }
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-/*
- * Abort endpoint use
- */
-static void ajp_abort_endpoint(ajp_endpoint_t * ae, int shutdown, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
- if (shutdown == JK_TRUE && IS_VALID_SOCKET(ae->sd)) {
- if (ae->hard_close) {
- /* Force unclean connection close to communicate client write errors
- * back to Tomcat by aborting AJP response writes.
- */
- jk_close_socket(ae->sd, l);
- }
- else {
- jk_shutdown_socket(ae->sd, l);
- }
- }
- ae->worker->s->connected--;
- ae->sd = JK_INVALID_SOCKET;
- ae->last_op = JK_AJP13_END_RESPONSE;
- JK_TRACE_EXIT(l);
-}
-
-/*
- * Reset the endpoint (clean buf and close socket)
- */
-static void ajp_reset_endpoint(ajp_endpoint_t * ae, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "(%s) resetting endpoint with socket %d%s",
- ae->worker->name, ae->sd, ae->reuse? "" : " (socket shutdown)");
- if (!ae->reuse) {
- ajp_abort_endpoint(ae, JK_TRUE, l);
- }
- jk_reset_pool(&(ae->pool));
- JK_TRACE_EXIT(l);
-}
-
-/*
- * Close the endpoint (close pool and close socket)
- */
-void ajp_close_endpoint(ajp_endpoint_t * ae, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "(%s) closing endpoint with socket %d%s",
- ae->worker->name, ae->sd, ae->reuse ? "" : " (socket shutdown)");
- if (IS_VALID_SOCKET(ae->sd)) {
- jk_shutdown_socket(ae->sd, l);
- }
- ae->sd = JK_INVALID_SOCKET;
- jk_close_pool(&(ae->pool));
- free(ae);
- JK_TRACE_EXIT(l);
-}
-
-
-/** Steal a connection from an idle cache endpoint
- * @param ae endpoint that needs a new connection
- * @param l logger
- * @return JK_FALSE: failure
- * JK_TRUE: success
- * @remark Always closes old socket endpoint
- */
-static int ajp_next_connection(ajp_endpoint_t *ae, jk_logger_t *l)
-{
- int rc;
- int ret = JK_FALSE;
- ajp_worker_t *aw = ae->worker;
-
- JK_TRACE_ENTER(l);
-
- /* Close previous socket */
- if (IS_VALID_SOCKET(ae->sd))
- jk_shutdown_socket(ae->sd, l);
- /* Mark existing endpoint socket as closed */
- ae->sd = JK_INVALID_SOCKET;
- JK_ENTER_CS(&aw->cs, rc);
- if (rc) {
- unsigned int i;
- for (i = 0; i < aw->ep_cache_sz; i++) {
- /* Find cache slot with usable socket */
- if (aw->ep_cache[i] && IS_VALID_SOCKET(aw->ep_cache[i]->sd)) {
- ae->sd = aw->ep_cache[i]->sd;
- aw->ep_cache[i]->sd = JK_INVALID_SOCKET;
- break;
- }
- }
- JK_LEAVE_CS(&aw->cs, rc);
- if (IS_VALID_SOCKET(ae->sd)) {
- ret = JK_TRUE;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "(%s) Will try pooled connection socket %d from slot %d",
- ae->worker->name, ae->sd, i);
- }
- }
- JK_TRACE_EXIT(l);
- return ret;
-}
-
-/** Handle the cping/cpong query
- * @param ae endpoint
- * @param timeout wait timeout in milliseconds
- * @param l logger
- * @return JK_FALSE: failure
- * JK_TRUE: success
- * @remark Always closes socket in case of
- * a socket error
- */
-static int ajp_handle_cping_cpong(ajp_endpoint_t * ae, int timeout, jk_logger_t *l)
-{
- int i;
- int cmd;
- jk_msg_buf_t *msg;
-
- JK_TRACE_ENTER(l);
-
- ae->last_errno = 0;
- msg = jk_b_new(&ae->pool);
- if (!msg) {
- jk_log(l, JK_LOG_ERROR,
- "Failed allocating AJP message");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if (jk_b_set_buffer_size(msg, 16)) {
- jk_log(l, JK_LOG_ERROR,
- "Failed allocating AJP message buffer");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jk_b_reset(msg);
- jk_b_append_byte(msg, AJP13_CPING_REQUEST);
-
- /* Send CPing query */
- if (ajp_connection_tcp_send_message(ae, msg, l) != JK_TRUE) {
- jk_log(l, JK_LOG_INFO,
- "can't send cping query");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- for (i = 0; i < 2; i++) {
- /* wait for Pong reply for timeout milliseconds
- */
- if (jk_is_input_event(ae->sd, timeout, l) == JK_FALSE) {
- ae->last_errno = errno;
- jk_log(l, JK_LOG_INFO, "timeout in reply cpong");
- /* We can't trust this connection any more. */
- ajp_abort_endpoint(ae, JK_TRUE, l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- /* Read and check for Pong reply
- */
- if (ajp_connection_tcp_get_message(ae, msg, l) != JK_TRUE) {
- jk_log(l, JK_LOG_INFO,
- "awaited reply cpong, not received");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if ((cmd = jk_b_get_byte(msg)) != AJP13_CPONG_REPLY) {
- /* If the respose was not CPONG it means that
- * the previous response was not consumed by the
- * client but the AJP messages was already in
- * the network buffer.
- * silently drop this single extra packet instead
- * recycling the connection
- */
- if (i || ae->last_op == JK_AJP13_END_RESPONSE ||
- cmd < JK_AJP13_SEND_BODY_CHUNK ||
- cmd > AJP13_CPONG_REPLY) {
- jk_log(l, JK_LOG_WARNING,
- "awaited reply cpong, received %d instead. "
- "Closing connection",
- cmd);
- /* We can't trust this connection any more. */
- ajp_abort_endpoint(ae, JK_TRUE, l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- else {
- jk_log(l, JK_LOG_INFO,
- "awaited reply cpong, received %d instead. "
- "Retrying next packet",
- cmd);
-
- }
- }
- else {
- ae->last_op = AJP13_CPONG_REPLY;
- /* We have received Pong reply */
- break;
- }
- }
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-/** Connect an endpoint to a backend
- * @param ae endpoint
- * @param l logger
- * @return JK_FALSE: failure
- * JK_TRUE: success
- * @remark Always closes socket in case of
- * a socket error
- * @remark Cares about ae->last_errno
- */
-int ajp_connect_to_endpoint(ajp_endpoint_t * ae, jk_logger_t *l)
-{
- char buf[32];
- int rc = JK_TRUE;
-
- JK_TRACE_ENTER(l);
-
- ae->last_errno = 0;
- ae->sd = jk_open_socket(&ae->worker->worker_inet_addr,
- ae->worker->keepalive,
- ae->worker->socket_timeout,
- ae->worker->socket_connect_timeout,
- ae->worker->socket_buf, l);
-
- if (!IS_VALID_SOCKET(ae->sd)) {
- ae->last_errno = errno;
- jk_log(l, JK_LOG_INFO,
- "Failed opening socket to (%s) (errno=%d)",
- jk_dump_hinfo(&ae->worker->worker_inet_addr, buf), ae->last_errno);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- ae->worker->s->connected++;
- /* set last_access only if needed */
- if (ae->worker->cache_timeout > 0)
- ae->last_access = time(NULL);
- /* Check if we must execute a logon after the physical connect */
- /* XXX: Not sure, if we really should do logon before cping/cpong */
- /* XXX: and if no cping/cpong is allowed before or after logon. */
- if (ae->worker->logon != NULL) {
- rc = ae->worker->logon(ae, l);
- if (rc == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "(%s) ajp14 worker logon to the backend server failed",
- ae->worker->name);
- /* Close the socket if unable to logon */
- ajp_abort_endpoint(ae, JK_TRUE, l);
- }
- }
- /* XXX: Should we send a cping also after logon to validate the connection? */
- else if (ae->worker->connect_timeout > 0) {
- rc = ajp_handle_cping_cpong(ae, ae->worker->connect_timeout, l);
- if (rc == JK_FALSE)
- jk_log(l, JK_LOG_ERROR,
- "(%s) cping/cpong after connecting to the backend server failed (errno=%d)",
- ae->worker->name, ae->last_errno);
- }
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-/* Syncing config values from shm */
-void jk_ajp_pull(ajp_worker_t * aw, int locked, jk_logger_t *l)
-{
- int address_change = JK_FALSE;
- int port = 0;
- char host[JK_SHM_STR_SIZ+1];
- struct sockaddr_in inet_addr;
- JK_TRACE_ENTER(l);
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "syncing mem for ajp worker '%s' from shm (%u -> %u) [%u->%u]",
- aw->name, aw->sequence, aw->s->h.sequence, aw->addr_sequence, aw->s->addr_sequence);
- if (locked == JK_FALSE)
- jk_shm_lock();
-
- aw->cache_timeout = aw->s->cache_timeout;
- aw->connect_timeout = aw->s->connect_timeout;
- aw->ping_timeout = aw->s->ping_timeout;
- aw->reply_timeout = aw->s->reply_timeout;
- aw->prepost_timeout = aw->s->prepost_timeout;
- aw->recovery_opts = aw->s->recovery_opts;
- aw->retries = aw->s->retries;
- aw->retry_interval = aw->s->retry_interval;
- aw->max_packet_size = aw->s->max_packet_size;
- aw->sequence = aw->s->h.sequence;
- if (aw->addr_sequence != aw->s->addr_sequence) {
- address_change = JK_TRUE;
- aw->addr_sequence = aw->s->addr_sequence;
- strncpy(host, aw->s->host, JK_SHM_STR_SIZ);
- port = aw->s->port;
- }
- if (locked == JK_FALSE)
- jk_shm_unlock();
-
- if (address_change == JK_TRUE) {
- if (!jk_resolve(host, port, &inet_addr,
- aw->worker.we->pool, l)) {
- jk_log(l, JK_LOG_ERROR,
- "Failed resolving address '%s:%d' for worker '%s'.",
- host, port, aw->name);
- }
- else {
- int rc;
- JK_ENTER_CS(&aw->cs, rc);
- if (rc) {
- unsigned int i;
- for (i = 0; i < aw->ep_cache_sz; i++) {
- /* Close all connections in the cache */
- if (aw->ep_cache[i] && IS_VALID_SOCKET(aw->ep_cache[i]->sd)) {
- int sd = aw->ep_cache[i]->sd;
- aw->ep_cache[i]->sd = JK_INVALID_SOCKET;
- aw->ep_cache[i]->addr_sequence = aw->addr_sequence;
- jk_shutdown_socket(sd, l);
- aw->s->connected--;
- }
- }
- }
- aw->port = port;
- strncpy(aw->host, host, JK_SHM_STR_SIZ);
- memcpy(&(aw->worker_inet_addr), &inet_addr, sizeof(inet_addr));
- if (rc) {
- JK_LEAVE_CS(&aw->cs, rc);
- } else {
- jk_log(l, JK_LOG_ERROR,
- "locking thread (errno=%d)", errno);
- }
- }
- }
-
- JK_TRACE_EXIT(l);
-}
-
-/* Syncing config values to shm */
-void jk_ajp_push(ajp_worker_t * aw, int locked, jk_logger_t *l)
-{
- int address_change = JK_FALSE;
-
- JK_TRACE_ENTER(l);
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "syncing shm for ajp worker '%s' from mem (%u -> %u) [%u->%u]",
- aw->name, aw->s->h.sequence, aw->sequence, aw->s->addr_sequence, aw->addr_sequence);
- if (locked == JK_FALSE)
- jk_shm_lock();
-
- aw->s->cache_timeout = aw->cache_timeout;
- aw->s->connect_timeout = aw->connect_timeout;
- aw->s->ping_timeout = aw->ping_timeout;
- aw->s->reply_timeout = aw->reply_timeout;
- aw->s->prepost_timeout = aw->prepost_timeout;
- aw->s->recovery_opts = aw->recovery_opts;
- aw->s->retries = aw->retries;
- aw->s->retry_interval = aw->retry_interval;
- aw->s->max_packet_size = aw->max_packet_size;
- aw->s->h.sequence = aw->sequence;
- if (aw->s->addr_sequence != aw->addr_sequence) {
- address_change = JK_TRUE;
- strncpy(aw->s->host, aw->host, JK_SHM_STR_SIZ);
- aw->s->port = aw->port;
- aw->s->addr_sequence = aw->addr_sequence;
- }
- if (locked == JK_FALSE)
- jk_shm_unlock();
-
- if (address_change == JK_TRUE) {
- int rc;
- JK_ENTER_CS(&aw->cs, rc);
- if (rc) {
- unsigned int i;
- for (i = 0; i < aw->ep_cache_sz; i++) {
- /* Close all connections in the cache */
- if (aw->ep_cache[i] && IS_VALID_SOCKET(aw->ep_cache[i]->sd)) {
- int sd = aw->ep_cache[i]->sd;
- aw->ep_cache[i]->sd = JK_INVALID_SOCKET;
- aw->ep_cache[i]->addr_sequence = aw->addr_sequence;
- jk_shutdown_socket(sd, l);
- aw->s->connected--;
- }
- }
- JK_LEAVE_CS(&aw->cs, rc);
- } else {
- jk_log(l, JK_LOG_ERROR,
- "locking thread (errno=%d)", errno);
- }
- }
- JK_TRACE_EXIT(l);
-}
-
-/** Send a message to an endpoint, using corresponding PROTO HEADER
- * @param ae endpoint
- * @param msg message to send
- * @param l logger
- * @return JK_FATAL_ERROR: endpoint contains unknown protocol
- * JK_FALSE: other failure
- * JK_TRUE: success
- * @remark Always closes socket in case of
- * a socket error, or JK_FATAL_ERROR
- * @remark Cares about ae->last_errno
- */
-int ajp_connection_tcp_send_message(ajp_endpoint_t * ae,
- jk_msg_buf_t *msg, jk_logger_t *l)
-{
- int rc;
-
- JK_TRACE_ENTER(l);
-
- ae->last_errno = 0;
- if (ae->proto == AJP13_PROTO) {
- jk_b_end(msg, AJP13_WS_HEADER);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_dump_buff(l, JK_LOG_DEBUG, "sending to ajp13", msg);
- }
- else if (ae->proto == AJP14_PROTO) {
- jk_b_end(msg, AJP14_WS_HEADER);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_dump_buff(l, JK_LOG_DEBUG, "sending to ajp14", msg);
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "(%s) unknown protocol %d, supported are AJP13/AJP14",
- ae->worker->name, ae->proto);
- /* We've got a protocol error. */
- /* We can't trust this connection any more, */
- /* because we might have send already parts of the request. */
- ajp_abort_endpoint(ae, JK_TRUE, l);
- JK_TRACE_EXIT(l);
- return JK_FATAL_ERROR;
- }
-
- /* This is the only place in this function where we use the socket. */
- /* If sendfull gets an error, it implicitely closes the socket. */
- /* So any socket error inside ajp_connection_tcp_send_message */
- /* results in a socket close and invalidated endpoint connection. */
- if ((rc = jk_tcp_socket_sendfull(ae->sd, msg->buf,
- msg->len, l)) > 0) {
- ae->endpoint.wr += (jk_uint64_t)rc;
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- ae->last_errno = errno;
- jk_log(l, JK_LOG_INFO,
- "sendfull for socket %d returned %d (errno=%d)",
- ae->sd, rc, ae->last_errno);
- ajp_abort_endpoint(ae, JK_FALSE, l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-/** Receive a message from an endpoint, checking PROTO HEADER
- * @param ae endpoint
- * @param msg message to send
- * @param l logger
- * @return JK_TRUE: success
- * JK_FALSE: could not read the AJP packet header
- * JK_AJP_PROTOCOL_ERROR: failure after reading
- * the AJP packet header
- * @remark Always closes socket in case of
- * a socket error
- * @remark Cares about ae->last_errno
- */
-int ajp_connection_tcp_get_message(ajp_endpoint_t * ae,
- jk_msg_buf_t *msg, jk_logger_t *l)
-{
- unsigned char head[AJP_HEADER_LEN];
- int rc;
- int msglen;
- unsigned int header;
- char buf[32];
-
- JK_TRACE_ENTER(l);
-
- ae->last_errno = 0;
- /* If recvfull gets an error, it implicitely closes the socket. */
- /* We will invalidate the endpoint connection. */
- rc = jk_tcp_socket_recvfull(ae->sd, head, AJP_HEADER_LEN, l);
-
- /* If the return code is not negative */
- /* then we always get back the correct number of bytes. */
- if (rc < 0) {
- if (rc == JK_SOCKET_EOF) {
- ae->last_errno = EPIPE;
- jk_log(l, JK_LOG_INFO,
- "(%s) can't receive the response header message from tomcat, "
- "tomcat (%s) has forced a connection close for socket %d",
- ae->worker->name, jk_dump_hinfo(&ae->worker->worker_inet_addr, buf),
- ae->sd);
- }
- else {
- ae->last_errno = -rc;
- jk_log(l, JK_LOG_INFO,
- "(%s) can't receive the response header message from tomcat, "
- "network problems or tomcat (%s) is down (errno=%d)",
- ae->worker->name, jk_dump_hinfo(&ae->worker->worker_inet_addr, buf),
- ae->last_errno);
- }
- ajp_abort_endpoint(ae, JK_FALSE, l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- ae->endpoint.rd += (jk_uint64_t)rc;
- header = ((unsigned int)head[0] << 8) | head[1];
-
- if (ae->proto == AJP13_PROTO) {
- if (header != AJP13_SW_HEADER) {
-
- if (header == AJP14_SW_HEADER) {
- jk_log(l, JK_LOG_ERROR,
- "received AJP14 reply on an AJP13 connection from %s",
- jk_dump_hinfo(&ae->worker->worker_inet_addr, buf));
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "wrong message format 0x%04x from %s",
- header, jk_dump_hinfo(&ae->worker->worker_inet_addr,
- buf));
- }
- /* We've got a protocol error. */
- /* We can't trust this connection any more. */
- ajp_abort_endpoint(ae, JK_TRUE, l);
- JK_TRACE_EXIT(l);
- return JK_AJP_PROTOCOL_ERROR;
- }
- }
- else if (ae->proto == AJP14_PROTO) {
- if (header != AJP14_SW_HEADER) {
-
- if (header == AJP13_SW_HEADER) {
- jk_log(l, JK_LOG_ERROR,
- "received AJP13 reply on an AJP14 connection from %s",
- jk_dump_hinfo(&ae->worker->worker_inet_addr, buf));
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "wrong message format 0x%04x from %s",
- header, jk_dump_hinfo(&ae->worker->worker_inet_addr,
- buf));
- }
- /* We've got a protocol error. */
- /* We can't trust this connection any more. */
- ajp_abort_endpoint(ae, JK_TRUE, l);
- JK_TRACE_EXIT(l);
- return JK_AJP_PROTOCOL_ERROR;
- }
- }
-
- msglen = ((head[2] & 0xff) << 8);
- msglen += (head[3] & 0xFF);
-
- if (msglen > msg->maxlen) {
- jk_log(l, JK_LOG_ERROR,
- "wrong message size %d %d from %s",
- msglen, msg->maxlen,
- jk_dump_hinfo(&ae->worker->worker_inet_addr, buf));
- /* We've got a protocol error. */
- /* We can't trust this connection any more. */
- ajp_abort_endpoint(ae, JK_TRUE, l);
- JK_TRACE_EXIT(l);
- return JK_AJP_PROTOCOL_ERROR;
- }
-
- msg->len = msglen;
- msg->pos = 0;
-
- /* If recvfull gets an error, it implicitely closes the socket. */
- /* We will invalidate the endpoint connection. */
- rc = jk_tcp_socket_recvfull(ae->sd, msg->buf, msglen, l);
- /* If the return code is not negative */
- /* then we always get back the correct number of bytes. */
- if (rc < 0) {
- if (rc == JK_SOCKET_EOF) {
- ae->last_errno = EPIPE;
- jk_log(l, JK_LOG_ERROR,
- "(%s) can't receive the response body message from tomcat, "
- "tomcat (%s) has forced a connection close for socket %d",
- ae->worker->name, jk_dump_hinfo(&ae->worker->worker_inet_addr, buf),
- ae->sd);
- }
- else {
- ae->last_errno = -rc;
- jk_log(l, JK_LOG_ERROR,
- "(%s) can't receive the response body message from tomcat, "
- "network problems or tomcat (%s) is down (errno=%d)",
- ae->worker->name, jk_dump_hinfo(&ae->worker->worker_inet_addr, buf),
- ae->last_errno);
- }
- ajp_abort_endpoint(ae, JK_FALSE, l);
- JK_TRACE_EXIT(l);
- /* Although we have a connection, this is effectively a protocol error.
- * We received the AJP header packet, but not the packet payload
- */
- return JK_AJP_PROTOCOL_ERROR;
- }
- ae->endpoint.rd += (jk_uint64_t)rc;
-
- if (JK_IS_DEBUG_LEVEL(l)) {
- if (ae->proto == AJP13_PROTO)
- jk_dump_buff(l, JK_LOG_DEBUG, "received from ajp13", msg);
- else if (ae->proto == AJP14_PROTO)
- jk_dump_buff(l, JK_LOG_DEBUG, "received from ajp14", msg);
- }
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-/*
- * Read all the data from the socket.
- *
- * Socket API doesn't guaranty that all the data will be kept in a
- * single read, so we must loop until all awaited data is received
- */
-
-static int ajp_read_fully_from_server(jk_ws_service_t *s, jk_logger_t *l,
- unsigned char *buf, unsigned int len)
-{
- unsigned int rdlen = 0;
- unsigned int padded_len = len;
-
- JK_TRACE_ENTER(l);
-
- if (s->is_chunked && s->no_more_chunks) {
- JK_TRACE_EXIT(l);
- return 0;
- }
- if (s->is_chunked) {
- /* Corner case: buf must be large enough to hold next
- * chunk size (if we're on or near a chunk border).
- * Pad the length to a reasonable value, otherwise the
- * read fails and the remaining chunks are tossed.
- */
- padded_len = (len < CHUNK_BUFFER_PAD) ? len : len - CHUNK_BUFFER_PAD;
- }
-
- while (rdlen < padded_len) {
- unsigned int this_time = 0;
- if (!s->read(s, buf + rdlen, len - rdlen, &this_time)) {
- /* Remote Client read failed. */
- JK_TRACE_EXIT(l);
- return JK_CLIENT_RD_ERROR;
- }
-
- if (0 == this_time) {
- if (s->is_chunked) {
- s->no_more_chunks = 1; /* read no more */
- }
- break;
- }
- rdlen += this_time;
- }
-
- JK_TRACE_EXIT(l);
- return (int)rdlen;
-}
-
-
-/*
- * Read data from AJP13/AJP14 protocol
- * Returns -1 on error, else number of bytes read
- */
-
-static int ajp_read_into_msg_buff(ajp_endpoint_t * ae,
- jk_ws_service_t *r,
- jk_msg_buf_t *msg, int len, jk_logger_t *l)
-{
- unsigned char *read_buf = msg->buf;
-
- JK_TRACE_ENTER(l);
-
- jk_b_reset(msg);
-
- read_buf += AJP_HEADER_LEN; /* leave some space for the buffer headers */
- read_buf += AJP_HEADER_SZ_LEN; /* leave some space for the read length */
-
- /* Pick the max size since we don't know the content_length */
- if (r->is_chunked && len == 0) {
- len = AJP13_MAX_SEND_BODY_SZ;
- }
-
- if ((len = ajp_read_fully_from_server(r, l, read_buf, len)) < 0) {
- jk_log(l, JK_LOG_INFO,
- "(%s) receiving data from client failed. "
- "Connection aborted or network problems",
- ae->worker->name);
- JK_TRACE_EXIT(l);
- return JK_CLIENT_RD_ERROR;
- }
-
- if (!r->is_chunked) {
- ae->left_bytes_to_send -= len;
- }
-
- if (len > 0) {
- /* Recipient recognizes empty packet as end of stream, not
- an empty body packet */
- if (0 != jk_b_append_int(msg, (unsigned short)len)) {
- jk_log(l, JK_LOG_INFO,
- "Failed appending message length");
- JK_TRACE_EXIT(l);
- return JK_CLIENT_RD_ERROR;
- }
- }
-
- msg->len += len;
-
- JK_TRACE_EXIT(l);
- return len;
-}
-
-
-/*
- * send request to Tomcat via Ajp13
- * - first try to find reuseable socket
- * - if no such available, try to connect
- * - send request, but send must be seen as asynchronous,
- * since send() call will return noerror about 95% of time
- * Hopefully we'll get more information on next read.
- *
- * nb: op->request is the original request msg buffer
- * op->reply is the reply msg buffer which could be scratched
- *
- * Return values of ajp_send_request() function:
- * return value op->recoverable reason
- * JK_FATAL_ERROR JK_FALSE ajp_connection_tcp_send_message() returns JK_FATAL_ERROR
- * Endpoint belongs to unknown protocol.
- * JK_FATAL_ERROR JK_TRUE ajp_connection_tcp_send_message() returns JK_FALSE
- * Sending request or request body in jk_tcp_socket_sendfull() returns with error.
- * JK_FATAL_ERROR JK_TRUE Could not connect to backend
- * JK_CLIENT_RD_ERROR JK_FALSE Error during reading parts of POST body from client
- * JK_TRUE JK_TRUE All other cases (OK)
- */
-static int ajp_send_request(jk_endpoint_t *e,
- jk_ws_service_t *s,
- jk_logger_t *l,
- ajp_endpoint_t * ae, ajp_operation_t * op)
-{
- int err_conn = 0;
- int err_cping = 0;
- int err_send = 0;
- int rc;
- int postlen;
-
- JK_TRACE_ENTER(l);
-
- ae->last_errno = 0;
- /* Up to now, we can recover */
- op->recoverable = JK_TRUE;
-
- /* Check if the previous request really ended
- */
- if (ae->last_op != JK_AJP13_END_RESPONSE &&
- ae->last_op != AJP13_CPONG_REPLY) {
- jk_log(l, JK_LOG_INFO,
- "(%s) did not receive END_RESPONSE, "
- "closing socket %d",
- ae->worker->name, ae->sd);
- ajp_abort_endpoint(ae, JK_TRUE, l);
- }
- /*
- * First try to check open connections...
- */
- while (IS_VALID_SOCKET(ae->sd)) {
- int err = JK_FALSE;
- if (jk_is_socket_connected(ae->sd, l) == JK_FALSE) {
- ae->last_errno = errno;
- jk_log(l, JK_LOG_DEBUG,
- "(%s) failed sending request, "
- "socket %d is not connected any more (errno=%d)",
- ae->worker->name, ae->sd, ae->last_errno);
- ajp_abort_endpoint(ae, JK_FALSE, l);
- err = JK_TRUE;
- err_conn++;
- }
- if (ae->worker->prepost_timeout > 0 && !err) {
- /* handle cping/cpong if prepost_timeout is set
- * If the socket is disconnected no need to handle
- * the cping/cpong
- */
- if (ajp_handle_cping_cpong(ae,
- ae->worker->prepost_timeout, l) == JK_FALSE) {
- jk_log(l, JK_LOG_INFO,
- "(%s) failed sending request, "
- "socket %d prepost cping/cpong failure (errno=%d)",
- ae->worker->name, ae->sd, ae->last_errno);
- /* XXX: Is there any reason to try other
- * connections to the node if one of them fails
- * the cping/cpong heartbeat?
- * Tomcat can be either too busy or simply dead, so
- * there is a chance that all other connections would
- * fail as well.
- */
- err = JK_TRUE;
- err_cping++;
- }
- }
-
- /* We've got a connected socket and the optional
- * cping/cpong worked, so let's send the request now.
- */
- if (err == JK_FALSE) {
- rc = ajp_connection_tcp_send_message(ae, op->request, l);
- /* If this worked, we can break out of the loop
- * and proceed with the request.
- */
- if (rc == JK_TRUE) {
- ae->last_op = JK_AJP13_FORWARD_REQUEST;
- break;
- }
- /* Error during sending the request.
- */
- err_send++;
- if (rc == JK_FATAL_ERROR)
- op->recoverable = JK_FALSE;
- jk_log(l, JK_LOG_INFO,
- "(%s) failed sending request (%srecoverable) "
- "(errno=%d)",
- ae->worker->name,
- op->recoverable ? "" : "un",
- ae->last_errno);
- JK_TRACE_EXIT(l);
- return JK_FATAL_ERROR;
- }
- /* If we got an error or can't send data, then try to steal another pooled
- * connection and try again. If we are not successful, break out of this
- * loop and try to open a new connection after the loop.
- */
- if (ajp_next_connection(ae, l) == JK_FALSE)
- break;
- }
-
- /*
- * If we failed to reuse a connection, try to reconnect.
- */
- if (!IS_VALID_SOCKET(ae->sd)) {
- /* Could not steal any connection from an endpoint - backend is disconnected */
- if (err_conn + err_cping + err_send > 0)
- jk_log(l, JK_LOG_INFO,
- "(%s) all endpoints are disconnected, "
- "detected by connect check (%d), cping (%d), send (%d)",
- ae->worker->name, err_conn, err_cping, err_send);
- else if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "(%s) all endpoints are disconnected.",
- ae->worker->name);
- /* Connect to the backend.
- */
- if (ajp_connect_to_endpoint(ae, l) != JK_TRUE) {
- jk_log(l, JK_LOG_ERROR,
- "(%s) connecting to backend failed. Tomcat is probably not started "
- "or is listening on the wrong port (errno=%d)",
- ae->worker->name, ae->last_errno);
- JK_TRACE_EXIT(l);
- return JK_FATAL_ERROR;
- }
- if (ae->worker->connect_timeout <= 0 &&
- ae->worker->prepost_timeout > 0) {
- /* handle cping/cpong if prepost_timeout is set
- * and we didn't already do a connect cping/cpong.
- */
- if (ajp_handle_cping_cpong(ae,
- ae->worker->prepost_timeout, l) == JK_FALSE) {
- jk_log(l, JK_LOG_INFO,
- "(%s) failed sending request, "
- "socket %d prepost cping/cpong failure (errno=%d)",
- ae->worker->name, ae->sd, ae->last_errno);
- JK_TRACE_EXIT(l);
- return JK_FATAL_ERROR;
- }
- }
-
- /* We've got a connected socket and the optional
- * cping/cpong worked, so let's send the request now.
- */
- rc = ajp_connection_tcp_send_message(ae, op->request, l);
- /* Error during sending the request.
- */
- if (rc != JK_TRUE) {
- if (rc == JK_FATAL_ERROR)
- op->recoverable = JK_FALSE;
- jk_log(l, JK_LOG_ERROR,
- "(%s) failed sending request on a fresh connection (%srecoverable), "
- "socket %d (errno=%d)",
- ae->worker->name, op->recoverable ? "" : "un",
- ae->sd, ae->last_errno);
- JK_TRACE_EXIT(l);
- return JK_FATAL_ERROR;
- }
- ae->last_op = JK_AJP13_FORWARD_REQUEST;
- }
- else if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "(%s) Statistics about invalid connections: "
- "connect check (%d), cping (%d), send (%d)",
- ae->worker->name, err_conn, err_cping, err_send);
-
- /*
- * From now on an error means that we have an internal server error
- * or Tomcat crashed.
- */
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "(%s) request body to send %" JK_UINT64_T_FMT " - request body to resend %d",
- ae->worker->name, ae->left_bytes_to_send,
- op->reply->len - AJP_HEADER_LEN);
-
- /*
- * POST recovery job is done here and will work when data to
- * POST are less than 8k, since it's the maximum size of op-post buffer.
- * We send here the first part of data which was sent previously to the
- * remote Tomcat
- */
-
- /* Did we have something to resend (ie the op-post has been feeded previously */
-
- postlen = op->post->len;
- if (postlen > AJP_HEADER_LEN) {
- rc = ajp_connection_tcp_send_message(ae, op->post, l);
- /* Error during sending the request body.
- */
- if (rc != JK_TRUE) {
- if (rc == JK_FATAL_ERROR)
- op->recoverable = JK_FALSE;
- jk_log(l, JK_LOG_ERROR,
- "(%s) failed sending request body of size %d (%srecoverable), "
- "socket %d (errno=%d)",
- ae->worker->name, postlen, op->recoverable ? "" : "un",
- ae->sd, ae->last_errno);
- JK_TRACE_EXIT(l);
- return JK_FATAL_ERROR;
- }
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG, "Resent the request body (%d)",
- postlen);
- }
- }
- else if (s->reco_status == RECO_FILLED) {
- /* Recovery in LB MODE */
- postlen = s->reco_buf->len;
-
- if (postlen > AJP_HEADER_LEN) {
- rc = ajp_connection_tcp_send_message(ae, s->reco_buf, l);
- /* Error during sending the request body.
- */
- if (rc != JK_TRUE) {
- if (rc == JK_FATAL_ERROR)
- op->recoverable = JK_FALSE;
- jk_log(l, JK_LOG_ERROR,
- "(%s) failed sending request body of size %d (lb mode) (%srecoverable), "
- "socket %d (errno=%d)",
- ae->worker->name, postlen, op->recoverable ? "" : "un",
- ae->sd, ae->last_errno);
- JK_TRACE_EXIT(l);
- return JK_FATAL_ERROR;
- }
- }
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Resent the request body (lb mode) (%d)", postlen);
- }
- }
- else {
- /* We never sent any POST data and we check if we have to send at
- * least one block of data (max 8k). These data will be kept in reply
- * for resend if the remote Tomcat is down, a fact we will learn only
- * doing a read (not yet)
- */
- /* || s->is_chunked - this can't be done here. The original protocol
- sends the first chunk of post data ( based on Content-Length ),
- and that's what the java side expects.
- Sending this data for chunked would break other ajp13 servers.
-
- Note that chunking will continue to work - using the normal read.
- */
-
- if (ae->left_bytes_to_send > 0) {
- int len = AJP13_MAX_SEND_BODY_SZ;
- if (ae->left_bytes_to_send < (jk_uint64_t)AJP13_MAX_SEND_BODY_SZ) {
- len = (int)ae->left_bytes_to_send;
- }
- if ((len = ajp_read_into_msg_buff(ae, s, op->post, len, l)) <= 0) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "(%s) browser stop sending data, no need to recover",
- ae->worker->name);
- op->recoverable = JK_FALSE;
- /* Send an empty POST message since per AJP protocol
- * spec whenever we have content length the message
- * packet must be followed with initial POST packet.
- * Size zero will be handled as error in container.
- */
- jk_b_reset(op->post);
- jk_b_append_int(op->post, 0);
- ajp_connection_tcp_send_message(ae, op->post, l);
- JK_TRACE_EXIT(l);
- return JK_CLIENT_RD_ERROR;
- }
-
- /* If a RECOVERY buffer is available in LB mode, fill it */
- if (s->reco_status == RECO_INITED) {
- jk_b_copy(op->post, s->reco_buf);
- s->reco_status = RECO_FILLED;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "(%s) sending %d bytes of request body",
- ae->worker->name, len);
-
- s->content_read = (jk_uint64_t)len;
- rc = ajp_connection_tcp_send_message(ae, op->post, l);
- /* Error during sending the request body.
- */
- if (rc != JK_TRUE) {
- if (rc == JK_FATAL_ERROR)
- op->recoverable = JK_FALSE;
- jk_log(l, JK_LOG_ERROR,
- "(%s) failed sending request body of size %d (%srecoverable), "
- "socket %d (errno=%d)",
- ae->worker->name, len, op->recoverable ? "" : "un",
- ae->sd, ae->last_errno);
- JK_TRACE_EXIT(l);
- return JK_FATAL_ERROR;
- }
- }
- }
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-
-/*
- * What to do with incoming data (dispatcher)
- */
-
-static int ajp_process_callback(jk_msg_buf_t *msg,
- jk_msg_buf_t *pmsg,
- ajp_endpoint_t * ae,
- jk_ws_service_t *r, jk_logger_t *l)
-{
- int code = (int)jk_b_get_byte(msg);
-
- JK_TRACE_ENTER(l);
-
- switch (code) {
- case JK_AJP13_SEND_HEADERS:
- {
- int rc;
- jk_res_data_t res;
- if (ae->last_op == JK_AJP13_SEND_HEADERS) {
- /* Do not send anything to the client.
- * Backend already send us the headers.
- */
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "Already received AJP13_SEND HEADERS");
- }
- JK_TRACE_EXIT(l);
- return JK_AJP13_ERROR;
- }
- if (!ajp_unmarshal_response(msg, &res, ae, l)) {
- jk_log(l, JK_LOG_ERROR,
- "ajp_unmarshal_response failed");
- JK_TRACE_EXIT(l);
- return JK_AJP13_ERROR;
- }
- r->http_response_status = res.status;
- if (r->extension.fail_on_status_size > 0)
- rc = is_http_status_fail(r->extension.fail_on_status_size,
- r->extension.fail_on_status, res.status);
- else
- rc = is_http_status_fail(ae->worker->http_status_fail_num,
- ae->worker->http_status_fail, res.status);
- if (rc > 0) {
- JK_TRACE_EXIT(l);
- return JK_STATUS_FATAL_ERROR;
- }
- else if (rc < 0) {
- JK_TRACE_EXIT(l);
- return JK_STATUS_ERROR;
- }
-
- if (r->extension.use_server_error_pages &&
- r->http_response_status >= r->extension.use_server_error_pages)
- r->response_blocked = JK_TRUE;
-
- /*
- * Call even if response is blocked, since it also handles
- * forwarding some headers for special http status codes
- * even if the server uses an own error page.
- * Example: The WWW-Authenticate header in case of
- * HTTP_UNAUTHORIZED (401).
- */
- r->start_response(r, res.status, res.msg,
- (const char *const *)res.header_names,
- (const char *const *)res.header_values,
- res.num_headers);
-
- if (!r->response_blocked) {
- if (r->flush && r->flush_header)
- r->flush(r);
- }
- }
- return JK_AJP13_SEND_HEADERS;
-
- case JK_AJP13_SEND_BODY_CHUNK:
- if (ae->last_op == JK_AJP13_FORWARD_REQUEST) {
- /* AJP13_SEND_BODY_CHUNK with length 0 is
- * explicit flush packet message.
- * Ignore those if they are left over from previous responses.
- * Reportedly some versions of JBoss suffer from that problem.
- */
- if (jk_b_get_int(msg) == 0) {
- jk_log(l, JK_LOG_DEBUG,
- "Ignoring flush message received while sending the request");
- return ae->last_op;
- }
- /* We have just send a request but received something
- * that probably originates from buffered response.
- */
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "Unexpected AJP13_SEND_BODY_CHUNK");
- }
- JK_TRACE_EXIT(l);
- return JK_AJP13_ERROR;
- }
- if (!r->response_blocked) {
- unsigned int len = (unsigned int)jk_b_get_int(msg);
- /*
- * Do a sanity check on len to prevent write reading beyond buffer
- * boundaries and thus revealing possible sensitive memory
- * contents to the client.
- * len cannot be larger than msg->len - 3 because the ajp message
- * contains the magic byte for JK_AJP13_SEND_BODY_CHUNK (1 byte)
- * and the length of the chunk (2 bytes). The remaining part of
- * the message is the chunk.
- */
- if (len > (unsigned int)(msg->len - 3)) {
- jk_log(l, JK_LOG_ERROR,
- "Chunk length too large. Length of AJP message is %i,"
- " chunk length is %i.", msg->len, len);
- JK_TRACE_EXIT(l);
- return JK_INTERNAL_ERROR;
- }
- if (len == 0) {
- /* AJP13_SEND_BODY_CHUNK with length 0 is
- * explicit flush packet message.
- */
- if (r->response_started) {
- if (r->flush) {
- r->flush(r);
- }
- }
- else {
- jk_log(l, JK_LOG_DEBUG,
- "Ignoring flush message received before headers");
- }
- }
- else {
- if (!r->write(r, msg->buf + msg->pos, len)) {
- jk_log(l, JK_LOG_INFO,
- "Writing to client aborted or client network problems");
- JK_TRACE_EXIT(l);
- return JK_CLIENT_WR_ERROR;
- }
- if (r->flush && r->flush_packets)
- r->flush(r);
- }
- }
- break;
-
- case JK_AJP13_GET_BODY_CHUNK:
- {
- int len = (int)jk_b_get_int(msg);
-
- if (len < 0) {
- len = 0;
- }
- if (len > AJP13_MAX_SEND_BODY_SZ) {
- len = AJP13_MAX_SEND_BODY_SZ;
- }
- if ((jk_uint64_t)len > ae->left_bytes_to_send) {
- len = (int)ae->left_bytes_to_send;
- }
-
- /* the right place to add file storage for upload */
- if ((len = ajp_read_into_msg_buff(ae, r, pmsg, len, l)) >= 0) {
- r->content_read += (jk_uint64_t)len;
- JK_TRACE_EXIT(l);
- return JK_AJP13_HAS_RESPONSE;
- }
-
- jk_log(l, JK_LOG_INFO,
- "Reading from client aborted or client network problems");
-
- JK_TRACE_EXIT(l);
- return JK_CLIENT_RD_ERROR;
- }
- break;
-
- case JK_AJP13_END_RESPONSE:
- ae->reuse = (int)jk_b_get_byte(msg);
- if (!ae->reuse) {
- /*
- * AJP13 protocol reuse flag set to false.
- * Tomcat will close its side of the connection.
- */
- jk_log(l, JK_LOG_WARNING, "AJP13 protocol: Reuse is set to false");
- }
- else if (r->disable_reuse) {
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG, "AJP13 protocol: Reuse is disabled");
- }
- ae->reuse = JK_FALSE;
- }
- else {
- /* Reuse in all cases */
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG, "AJP13 protocol: Reuse is OK");
- }
- ae->reuse = JK_TRUE;
- }
- if (!r->response_blocked) {
- if (r->done) {
- /* Done with response */
- r->done(r);
- }
- else if (r->flush && !r->flush_packets) {
- /* Flush after the last write */
- r->flush(r);
- }
- }
- JK_TRACE_EXIT(l);
- return JK_AJP13_END_RESPONSE;
- break;
-
- default:
- jk_log(l, JK_LOG_ERROR,
- "Unknown AJP protocol code: %02X", code);
- JK_TRACE_EXIT(l);
- return JK_AJP13_ERROR;
- }
-
- JK_TRACE_EXIT(l);
- return JK_AJP13_NO_RESPONSE;
-}
-
-/*
- * get replies from Tomcat via Ajp13/Ajp14
- * ajp13/ajp14 is async but handling read/send this way prevent nice recovery
- * In fact if tomcat link is broken during upload (browser -> apache -> tomcat)
- * we'll loose data and we'll have to abort the whole request.
- *
- * Return values of ajp_get_reply() function:
- * return value op->recoverable reason
- * JK_REPLY_TIMEOUT ?recovery_options Reply timeout while waiting for response packet
- * JK_FALSE ?recovery_options Error during ajp_connection_tcp_get_message()
- * Could not read the AJP packet header
- * JK_AJP_PROTOCOL_ERROR: ?recovery_options Error during ajp_connection_tcp_get_message()
- * Failure after reading the AJP packet header
- * JK_STATUS_ERROR mostly JK_TRUE ajp_process_callback() returns JK_STATUS_ERROR
- * Recoverable, if callback didn't return with a JK_HAS_RESPONSE before.
- * JK_HAS_RESPONSE: parts of the post buffer are consumed.
- * JK_STATUS_FATAL_ERROR mostly JK_TRUE ajp_process_callback() returns JK_STATUS_FATAL_ERROR
- * Recoverable, if callback didn't return with a JK_HAS_RESPONSE before.
- * JK_HAS_RESPONSE: parts of the post buffer are consumed.
- * JK_FATAL_ERROR ? ajp_process_callback() returns JK_AJP13_ERROR
- * JK_AJP13_ERROR: protocol error, or JK_INTERNAL_ERROR: chunk size to large
- * JK_CLIENT_RD_ERROR ? ajp_process_callback() returns JK_CLIENT_RD_ERROR
- * JK_CLIENT_RD_ERROR: could not read post from client.
- * JK_CLIENT_WR_ERROR ? ajp_process_callback() returns JK_CLIENT_WR_ERROR
- * JK_CLIENT_WR_ERROR: could not write back result to client
- * JK_TRUE ? ajp_process_callback() returns JK_AJP13_END_RESPONSE
- * JK_FALSE ? Other unhandled cases (unknown return codes)
- */
-static int ajp_get_reply(jk_endpoint_t *e,
- jk_ws_service_t *s,
- jk_logger_t *l,
- ajp_endpoint_t * p, ajp_operation_t * op)
-{
- /* Don't get header from tomcat yet */
- int headeratclient = JK_FALSE;
-
- JK_TRACE_ENTER(l);
-
- p->last_errno = 0;
- /* Start read all reply message */
- while (1) {
- int rc = 0;
- /* Allow to overwrite reply_timeout on a per URL basis via service struct */
- int reply_timeout = s->extension.reply_timeout;
- if (reply_timeout < 0)
- reply_timeout = p->worker->reply_timeout;
- /* If we set a reply timeout, check if something is available */
- if (reply_timeout > 0) {
- if (jk_is_input_event(p->sd, reply_timeout, l) ==
- JK_FALSE) {
- p->last_errno = errno;
- jk_log(l, JK_LOG_ERROR,
- "(%s) Timeout with waiting reply from tomcat. "
- "Tomcat is down, stopped or network problems (errno=%d)",
- p->worker->name, p->last_errno);
- /* We can't trust this connection any more. */
- ajp_abort_endpoint(p, JK_TRUE, l);
- if (headeratclient == JK_FALSE) {
- if (p->worker->recovery_opts & RECOVER_ABORT_IF_TCGETREQUEST)
- op->recoverable = JK_FALSE;
- /*
- * We revert back to recoverable, if recovery_opts allow it for GET or HEAD
- */
- if (op->recoverable == JK_FALSE) {
- if (p->worker->recovery_opts & RECOVER_ALWAYS_HTTP_HEAD) {
- if (!strcmp(s->method, "HEAD"))
- op->recoverable = JK_TRUE;
- }
- else if (p->worker->recovery_opts & RECOVER_ALWAYS_HTTP_GET) {
- if (!strcmp(s->method, "GET"))
- op->recoverable = JK_TRUE;
- }
- }
- }
- else {
- if (p->worker->recovery_opts & RECOVER_ABORT_IF_TCSENDHEADER)
- op->recoverable = JK_FALSE;
- }
-
- JK_TRACE_EXIT(l);
- return JK_REPLY_TIMEOUT;
- }
- }
-
- if ((rc = ajp_connection_tcp_get_message(p, op->reply, l)) != JK_TRUE) {
- if (headeratclient == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "(%s) Tomcat is down or refused connection. "
- "No response has been sent to the client (yet)",
- p->worker->name);
- /*
- * communication with tomcat has been interrupted BEFORE
- * headers have been sent to the client.
- */
-
- /*
- * We mark it unrecoverable if recovery_opts set to RECOVER_ABORT_IF_TCGETREQUEST
- */
- if (p->worker->recovery_opts & RECOVER_ABORT_IF_TCGETREQUEST)
- op->recoverable = JK_FALSE;
- /*
- * We revert back to recoverable, if recovery_opts allow it for GET or HEAD
- */
- if (op->recoverable == JK_FALSE) {
- if (p->worker->recovery_opts & RECOVER_ALWAYS_HTTP_HEAD) {
- if (!strcmp(s->method, "HEAD"))
- op->recoverable = JK_TRUE;
- }
- else if (p->worker->recovery_opts & RECOVER_ALWAYS_HTTP_GET) {
- if (!strcmp(s->method, "GET"))
- op->recoverable = JK_TRUE;
- }
- }
-
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "(%s) Tomcat is down or network problems. "
- "Part of the response has already been sent to the client",
- p->worker->name);
-
- /* communication with tomcat has been interrupted AFTER
- * headers have been sent to the client.
- * headers (and maybe parts of the body) have already been
- * sent, therefore the response is "complete" in a sense
- * that nobody should append any data, especially no 500 error
- * page of the webserver!
- */
-
- /*
- * We mark it unrecoverable if recovery_opts set to RECOVER_ABORT_IF_TCSENDHEADER
- */
- if (p->worker->recovery_opts & RECOVER_ABORT_IF_TCSENDHEADER)
- op->recoverable = JK_FALSE;
-
- }
-
- JK_TRACE_EXIT(l);
- return rc;
- }
-
- rc = ajp_process_callback(op->reply, op->post, p, s, l);
- p->last_op = rc;
- /* no more data to be sent, fine we have finish here */
- if (JK_AJP13_END_RESPONSE == rc) {
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else if (JK_AJP13_SEND_HEADERS == rc) {
- if (headeratclient == JK_FALSE)
- headeratclient = JK_TRUE;
- else {
- /* Backend send headers twice?
- * This is protocol violation
- */
- jk_log(l, JK_LOG_ERROR,
- "(%s) Tomcat already send headers",
- p->worker->name);
- op->recoverable = JK_FALSE;
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- else if (JK_STATUS_ERROR == rc || JK_STATUS_FATAL_ERROR == rc) {
- jk_log(l, JK_LOG_INFO,
- "(%s) request failed%s, "
- "because of response status %d, ",
- p->worker->name,
- rc == JK_STATUS_FATAL_ERROR ? "" : " (soft)",
- s->http_response_status);
- JK_TRACE_EXIT(l);
- return rc;
- }
- else if (JK_AJP13_HAS_RESPONSE == rc) {
- /*
- * in upload-mode there is no second chance since
- * we may have already sent part of the uploaded data
- * to Tomcat.
- * In this case if Tomcat connection is broken we must
- * abort request and indicate error.
- * A possible work-around could be to store the uploaded
- * data to file and replay for it
- */
- op->recoverable = JK_FALSE;
- rc = ajp_connection_tcp_send_message(p, op->post, l);
- if (rc < 0) {
- jk_log(l, JK_LOG_ERROR,
- "(%s) Tomcat is down or network problems",
- p->worker->name);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- else if (JK_AJP13_ERROR == rc) {
- /*
- * Tomcat has send invalid AJP message.
- * Loadbalancer if present will decide if
- * failover is possible.
- */
- JK_TRACE_EXIT(l);
- return JK_FATAL_ERROR;
- }
- else if (JK_CLIENT_RD_ERROR == rc) {
- /*
- * Client has stop sending to us, so get out.
- * We assume this isn't our fault, so just a normal exit.
- */
- JK_TRACE_EXIT(l);
- return JK_CLIENT_RD_ERROR;
- }
- else if (JK_CLIENT_WR_ERROR == rc) {
- /*
- * Client has stop receiving to us, so get out.
- * We assume this isn't our fault, so just a normal exit.
- */
- JK_TRACE_EXIT(l);
- return JK_CLIENT_WR_ERROR;
- }
- else if (JK_INTERNAL_ERROR == rc) {
- /*
- * Internal error, like memory allocation or invalid packet lengths.
- */
- JK_TRACE_EXIT(l);
- return JK_FATAL_ERROR;
- }
- else if (JK_AJP13_NO_RESPONSE == rc) {
- /*
- * This is fine, loop again, more data to send.
- */
- continue;
- }
- else if (rc < 0) {
- op->recoverable = JK_FALSE;
- jk_log(l, JK_LOG_ERROR,
- "(%s) Callback returns with unknown value %d",
- p->worker->name, rc);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- /* XXX: Not reached? */
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-static void ajp_update_stats(jk_endpoint_t *e, ajp_worker_t *aw, int rc, jk_logger_t *l)
-{
- aw->s->readed += e->rd;
- aw->s->transferred += e->wr;
- if (aw->s->busy)
- aw->s->busy--;
- if (rc == JK_TRUE) {
- aw->s->state = JK_AJP_STATE_OK;
- }
- else if (rc == JK_CLIENT_ERROR) {
- aw->s->state = JK_AJP_STATE_OK;
- aw->s->client_errors++;
- }
- else {
- aw->s->state = JK_AJP_STATE_ERROR;
- aw->s->errors++;
- aw->s->error_time = time(NULL);
- }
-}
-
-/*
- * service is now splitted in ajp_send_request and ajp_get_reply
- * much more easier to do errors recovery
- *
- * We serve here the request, using AJP13/AJP14 (e->proto)
- *
- * Return values of service() method for ajp13/ajp14 worker:
- * return value is_error e->recoverable reason
- * JK_FALSE JK_HTTP_SERVER_ERROR TRUE Invalid Parameters (null values)
- * JK_SERVER_ERROR JK_HTTP_SERVER_ERROR TRUE Error during initializing empty request, response or post body objects
- * JK_CLIENT_ERROR JK_HTTP_REQUEST_TOO_LARGE JK_TRUE Request doesn't fit into buffer (error during ajp_marshal_into_msgb())
- * JK_CLIENT_ERROR JK_HTTP_BAD_REQUEST JK_FALSE Error during reading parts of POST body from client
- * JK_FATAL_ERROR JK_HTTP_SERVER_ERROR JK_FALSE If ajp_send_request() returns JK_FATAL_ERROR and !op->recoverable.
- * JK_FATAL_ERROR JK_HTTP_SERVER_ERROR JK_FALSE If ajp_send_request() returns JK_TRUE but !op->recoverable.
- * This should never happen.
- * JK_CLIENT_ERROR JK_HTTP_BAD_REQUEST ? ajp_get_reply() returns JK_CLIENT_RD_ERROR
- * JK_CLIENT_ERROR JK_HTTP_OK ? ajp_get_reply() returns JK_CLIENT_WR_ERROR
- * JK_FATAL_ERROR JK_HTTP_SERVER_ERROR JK_TRUE ajp_get_reply() returns JK_FATAL_ERROR
- * JK_FATAL_ERROR: protocol error or internal error
- * JK_FATAL_ERROR JK_HTTP_SERVER_ERROR JK_FALSE ajp_get_reply() returns JK_FATAL_ERROR
- * JK_FATAL_ERROR: protocol error or internal error
- * JK_STATUS_ERROR JK_HTTP_SERVER_BUSY JK_TRUE ajp_get_reply() returns JK_STATUS_ERROR
- * Only if op->recoverable and no more ajp13/ajp14 direct retries
- * JK_STATUS_ERROR JK_HTTP_SERVER_BUSY JK_FALSE ajp_get_reply() returns JK_STATUS_ERROR
- * Only if !op->recoverable
- * JK_STATUS_FATAL_ERROR JK_HTTP_SERVER_BUSY JK_TRUE ajp_get_reply() returns JK_STATUS_ERROR
- * Only if op->recoverable and no more ajp13/ajp14 direct retries
- * JK_STATUS_FATAL_ERROR JK_HTTP_SERVER_BUSY JK_FALSE ajp_get_reply() returns JK_STATUS_FATAL_ERROR
- * Only if !op->recoverable
- * JK_REPLY_TIMEOUT JK_HTTP_GATEWAY_TIME_OUT JK_TRUE ajp_get_reply() returns JK_REPLY_TIMEOUT
- * JK_AJP_PROTOCOL_ERROR JK_HTTP_GATEWAY_TIME_OUT ? ajp_get_reply() returns JK_AJP_PROTOCOL_ERROR
- * ??? JK_FATAL_ERROR JK_HTTP_GATEWAY_TIME_OUT JK_FALSE ajp_get_reply() returns something else
- * Only if !op->recoverable
- * ??? JK_FALSE JK_HTTP_SERVER_BUSY JK_TRUE ajp_get_reply() returns JK_FALSE
- * Only if op->recoverable and no more ajp13/ajp14 direct retries
- * JK_TRUE JK_HTTP_OK ? OK
- */
-static int JK_METHOD ajp_service(jk_endpoint_t *e,
- jk_ws_service_t *s,
- jk_logger_t *l, int *is_error)
-{
- int i;
- int err = JK_TRUE;
- ajp_operation_t oper;
- ajp_operation_t *op = &oper;
- ajp_endpoint_t *p;
- ajp_worker_t *aw;
- int log_error;
- int rc = JK_UNSET;
- char *msg = "";
- int retry_interval;
-
- JK_TRACE_ENTER(l);
-
- if (!e || !e->endpoint_private || !s || !is_error) {
- JK_LOG_NULL_PARAMS(l);
- if (is_error)
- *is_error = JK_HTTP_SERVER_ERROR;
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- p = e->endpoint_private;
- aw = p->worker;
-
- if (aw->sequence != aw->s->h.sequence)
- jk_ajp_pull(aw, JK_FALSE, l);
-
- aw->s->used++;
-
- /* Set returned error to SERVER ERROR */
- *is_error = JK_HTTP_SERVER_ERROR;
-
- op->request = jk_b_new(&(p->pool));
- if (!op->request) {
- jk_log(l, JK_LOG_ERROR,
- "Failed allocating AJP message");
- JK_TRACE_EXIT(l);
- return JK_SERVER_ERROR;
- }
- if (jk_b_set_buffer_size(op->request, aw->max_packet_size)) {
- jk_log(l, JK_LOG_ERROR,
- "Failed allocating AJP message buffer");
- JK_TRACE_EXIT(l);
- return JK_SERVER_ERROR;
- }
- jk_b_reset(op->request);
-
- op->reply = jk_b_new(&(p->pool));
- if (!op->reply) {
- jk_log(l, JK_LOG_ERROR,
- "Failed allocating AJP message");
- JK_TRACE_EXIT(l);
- return JK_SERVER_ERROR;
- }
- if (jk_b_set_buffer_size(op->reply, aw->max_packet_size)) {
- jk_log(l, JK_LOG_ERROR,
- "Failed allocating AJP message buffer");
- JK_TRACE_EXIT(l);
- return JK_SERVER_ERROR;
- }
-
- op->post = jk_b_new(&(p->pool));
- if (!op->post) {
- jk_log(l, JK_LOG_ERROR,
- "Failed allocating AJP message");
- JK_TRACE_EXIT(l);
- return JK_SERVER_ERROR;
- }
- if (jk_b_set_buffer_size(op->post, aw->max_packet_size)) {
- jk_log(l, JK_LOG_ERROR,
- "Failed allocating AJP message buffer");
- JK_TRACE_EXIT(l);
- return JK_SERVER_ERROR;
- }
- jk_b_reset(op->post);
-
- /* Set returned error to OK */
- *is_error = JK_HTTP_OK;
-
- op->recoverable = JK_TRUE;
- op->uploadfd = -1; /* not yet used, later ;) */
-
- p->left_bytes_to_send = s->content_length;
- p->reuse = JK_FALSE;
- p->hard_close = JK_FALSE;
-
- s->secret = aw->secret;
-
- /*
- * We get here initial request (in op->request)
- */
- if (!ajp_marshal_into_msgb(op->request, s, l, p)) {
- *is_error = JK_HTTP_REQUEST_TOO_LARGE;
- jk_log(l, JK_LOG_INFO,
- "Creating AJP message failed, "
- "without recovery");
- aw->s->client_errors++;
- JK_TRACE_EXIT(l);
- return JK_CLIENT_ERROR;
- }
-
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG, "processing %s with %d retries",
- aw->name, aw->retries);
- }
- aw->s->busy++;
- if (aw->s->state == JK_AJP_STATE_ERROR)
- aw->s->state = JK_AJP_STATE_PROBE;
- if (aw->s->busy > aw->s->max_busy)
- aw->s->max_busy = aw->s->busy;
- retry_interval = p->worker->retry_interval;
- for (i = 0; i < aw->retries; i++) {
- /* Reset reply message buffer for each retry */
- jk_b_reset(op->reply);
-
- /*
- * ajp_send_request() already locally handles
- * reconnecting and broken connection detection.
- * So if we already failed in it, wait a bit before
- * retrying the same backend.
- */
- if (i > 0 && retry_interval >= 0) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "retry %d, sleeping for %d ms before retrying",
- i, retry_interval);
- jk_sleep(retry_interval);
- /* Pull shared memory if something changed during sleep */
- if (aw->sequence != aw->s->h.sequence)
- jk_ajp_pull(aw, JK_FALSE, l);
- }
- /*
- * We're using op->request which hold initial request
- * if Tomcat is stopped or restarted, we will pass op->request
- * to next valid tomcat.
- */
- log_error = JK_TRUE;
- rc = JK_UNSET;
- msg = "";
- err = ajp_send_request(e, s, l, p, op);
- e->recoverable = op->recoverable;
- if (err == JK_CLIENT_RD_ERROR) {
- *is_error = JK_HTTP_BAD_REQUEST;
- msg = "because of client read error";
- aw->s->client_errors++;
- rc = JK_CLIENT_ERROR;
- log_error = JK_FALSE;
- e->recoverable = JK_FALSE;
- /* Ajp message set reuse to TRUE in END_REQUEST message
- * However due to client bad request if the recovery
- * RECOVER_ABORT_IF_CLIENTERROR is set the physical connection
- * will be closed and application in Tomcat can catch that
- * generated exception, knowing the client aborted the
- * connection. This AJP protocol limitation, where we
- * should actually send some packet informing the backend
- * that client broke the connection in a middle of
- * request/response cycle.
- */
- if (aw->recovery_opts & RECOVER_ABORT_IF_CLIENTERROR) {
- /* Mark the endpoint for shutdown */
- p->reuse = JK_FALSE;
- p->hard_close = JK_TRUE;
- }
- }
- else if (err == JK_FATAL_ERROR) {
- *is_error = JK_HTTP_SERVER_BUSY;
- msg = "because of error during request sending";
- rc = err;
- if (!op->recoverable) {
- *is_error = JK_HTTP_SERVER_ERROR;
- msg = "because of protocol error during request sending";
- }
- }
- else if (err == JK_TRUE && op->recoverable) {
- /* Up to there we can recover */
-
- err = ajp_get_reply(e, s, l, p, op);
- e->recoverable = op->recoverable;
- if (err == JK_TRUE) {
- *is_error = JK_HTTP_OK;
- /* Done with the request */
- ajp_update_stats(e, aw, JK_TRUE, l);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
-
- if (err == JK_CLIENT_RD_ERROR) {
- *is_error = JK_HTTP_BAD_REQUEST;
- msg = "because of client read error";
- aw->s->client_errors++;
- rc = JK_CLIENT_ERROR;
- log_error = JK_FALSE;
- e->recoverable = JK_FALSE;
- op->recoverable = JK_FALSE;
- if (aw->recovery_opts & RECOVER_ABORT_IF_CLIENTERROR) {
- /* Mark the endpoint for shutdown */
- p->reuse = JK_FALSE;
- p->hard_close = JK_TRUE;
- }
- }
- else if (err == JK_CLIENT_WR_ERROR) {
- /* XXX: Is this correct to log this as 200? */
- *is_error = JK_HTTP_OK;
- msg = "because of client write error";
- aw->s->client_errors++;
- rc = JK_CLIENT_ERROR;
- log_error = JK_FALSE;
- e->recoverable = JK_FALSE;
- op->recoverable = JK_FALSE;
- if (aw->recovery_opts & RECOVER_ABORT_IF_CLIENTERROR) {
- /* Mark the endpoint for shutdown */
- p->reuse = JK_FALSE;
- p->hard_close = JK_TRUE;
- }
- }
- else if (err == JK_FATAL_ERROR) {
- *is_error = JK_HTTP_SERVER_ERROR;
- msg = "because of server error";
- rc = err;
- }
- else if (err == JK_REPLY_TIMEOUT) {
- *is_error = JK_HTTP_GATEWAY_TIME_OUT;
- msg = "because of reply timeout";
- aw->s->reply_timeouts++;
- rc = err;
- }
- else if (err == JK_STATUS_ERROR || err == JK_STATUS_FATAL_ERROR) {
- *is_error = JK_HTTP_SERVER_BUSY;
- msg = "because of response status";
- rc = err;
- }
- else if (err == JK_AJP_PROTOCOL_ERROR) {
- *is_error = JK_HTTP_BAD_GATEWAY;
- msg = "because of protocol error";
- rc = err;
- }
- /* This should only be the cases err == JK_FALSE */
- else {
- /* if we can't get reply, check if unrecoverable flag was set
- * if is_recoverable_error is cleared, we have started
- * receiving upload data and we must consider that
- * operation is no more recoverable
- */
- *is_error = JK_HTTP_BAD_GATEWAY;
- msg = "";
- rc = JK_FALSE;
- }
- }
- else {
- /* XXX: this should never happen:
- * ajp_send_request() never returns JK_TRUE if !op->recoverable.
- * and all other return values have already been handled.
- */
- e->recoverable = JK_FALSE;
- *is_error = JK_HTTP_SERVER_ERROR;
- msg = "because of an unknown reason";
- rc = JK_FATAL_ERROR;
- jk_log(l, JK_LOG_ERROR,
- "(%s) unexpected condition err=%d recoverable=%d",
- aw->name, err, op->recoverable);
- }
- if (!op->recoverable && log_error == JK_TRUE) {
- jk_log(l, JK_LOG_ERROR,
- "(%s) sending request to tomcat failed (unrecoverable), "
- "%s "
- "(attempt=%d)",
- aw->name, msg, i + 1);
- }
- else {
- jk_log(l, JK_LOG_INFO,
- "(%s) sending request to tomcat failed (%srecoverable), "
- "%s "
- "(attempt=%d)",
- aw->name,
- op->recoverable ? "" : "un",
- msg, i + 1);
- }
- if (!op->recoverable) {
- ajp_update_stats(e, aw, rc, l);
- JK_TRACE_EXIT(l);
- return rc;
- }
- /* Get another connection from the pool and try again.
- * Note: All sockets are probably closed already.
- */
- ajp_next_connection(p, l);
- }
- /* Log the error only once per failed request. */
- jk_log(l, JK_LOG_ERROR,
- "(%s) connecting to tomcat failed.",
- aw->name);
-
- ajp_update_stats(e, aw, rc, l);
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-/*
- * Validate the worker (ajp13/ajp14)
- */
-
-int ajp_validate(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l, int proto)
-{
- int port;
- const char *host;
-
- JK_TRACE_ENTER(l);
-
- if (proto == AJP13_PROTO) {
- port = AJP13_DEF_PORT;
- host = AJP13_DEF_HOST;
- }
- else if (proto == AJP14_PROTO) {
- port = AJP14_DEF_PORT;
- host = AJP14_DEF_HOST;
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "unknown protocol %d", proto);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (pThis && pThis->worker_private) {
- ajp_worker_t *p = pThis->worker_private;
- p->port = jk_get_worker_port(props, p->name, port);
- if (!host) {
- host = "undefined";
- }
- strncpy(p->host, jk_get_worker_host(props, p->name, host), JK_SHM_STR_SIZ);
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "worker %s contact is '%s:%d'",
- p->name, p->host, p->port);
- /* Copy the contact to shm */
- strncpy(p->s->host, p->host, JK_SHM_STR_SIZ);
- p->s->port = p->port;
- p->s->addr_sequence = p->addr_sequence = 0;
- /* Resolve if port > 0.
- */
- if (p->port > 0) {
- if (jk_resolve(p->host, p->port, &p->worker_inet_addr, we->pool, l)) {
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- jk_log(l, JK_LOG_ERROR,
- "worker %s can't resolve tomcat address %s",
- p->name, p->host);
- p->s->port = p->port = 0;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "worker %s contact is disabled",
- p->name);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else {
- p->s->port = p->port = 0;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "worker %s contact is disabled",
- p->name);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- }
- else {
- JK_LOG_NULL_PARAMS(l);
- }
-
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-static int ajp_create_endpoint_cache(ajp_worker_t *p, int proto, jk_logger_t *l)
-{
- unsigned int i;
- time_t now = time(NULL);
-
- JK_TRACE_ENTER(l);
-
- p->ep_cache = (ajp_endpoint_t **)calloc(1, sizeof(ajp_endpoint_t *) *
- p->ep_cache_sz);
- if (!p->ep_cache) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "setting connection pool size to %u with min %u and acquire timeout %d",
- p->ep_cache_sz, p->ep_mincache_sz, p->cache_acquire_timeout);
- for (i = 0; i < p->ep_cache_sz; i++) {
- p->ep_cache[i] = (ajp_endpoint_t *)calloc(1, sizeof(ajp_endpoint_t));
- if (!p->ep_cache[i]) {
- jk_log(l, JK_LOG_ERROR,
- "allocating endpoint slot %d (errno=%d)",
- i, errno);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- p->ep_cache[i]->sd = JK_INVALID_SOCKET;
- p->ep_cache[i]->reuse = JK_FALSE;
- p->ep_cache[i]->hard_close = JK_FALSE;
- p->ep_cache[i]->last_access = now;
- jk_open_pool(&(p->ep_cache[i]->pool), p->ep_cache[i]->buf,
- sizeof(p->ep_cache[i]->buf));
- p->ep_cache[i]->worker = p;
- p->ep_cache[i]->endpoint.endpoint_private = p->ep_cache[i];
- p->ep_cache[i]->proto = proto;
- p->ep_cache[i]->endpoint.service = ajp_service;
- p->ep_cache[i]->endpoint.done = ajp_done;
- p->ep_cache[i]->last_op = JK_AJP13_END_RESPONSE;
- p->ep_cache[i]->addr_sequence = 0;
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-int ajp_init(jk_worker_t *pThis,
- jk_map_t *props, jk_worker_env_t *we, jk_logger_t *l, int proto)
-{
- int rc = JK_FALSE;
- int cache;
- /*
- * start the connection cache
- */
- JK_TRACE_ENTER(l);
-
- cache = jk_get_worker_def_cache_size(proto);
-
- if (pThis && pThis->worker_private) {
- ajp_worker_t *p = pThis->worker_private;
- p->worker.we = we;
- p->ep_cache_sz = jk_get_worker_cache_size(props, p->name, cache);
- p->ep_mincache_sz = jk_get_worker_cache_size_min(props, p->name,
- (p->ep_cache_sz+1) / 2);
- p->socket_timeout =
- jk_get_worker_socket_timeout(props, p->name, AJP_DEF_SOCKET_TIMEOUT);
-
- p->socket_connect_timeout =
- jk_get_worker_socket_connect_timeout(props, p->name,
- p->socket_timeout * 1000);
-
- p->keepalive =
- jk_get_worker_socket_keepalive(props, p->name, JK_FALSE);
-
- p->cache_timeout =
- jk_get_worker_cache_timeout(props, p->name,
- AJP_DEF_CACHE_TIMEOUT);
-
- p->ping_timeout =
- jk_get_worker_ping_timeout(props, p->name,
- AJP_DEF_PING_TIMEOUT);
- p->ping_mode =
- jk_get_worker_ping_mode(props, p->name,
- AJP_CPING_NONE);
-
- p->connect_timeout =
- jk_get_worker_connect_timeout(props, p->name,
- AJP_DEF_CONNECT_TIMEOUT);
-
- p->prepost_timeout =
- jk_get_worker_prepost_timeout(props, p->name,
- AJP_DEF_PREPOST_TIMEOUT);
-
- if ((p->ping_mode & AJP_CPING_CONNECT) &&
- p->connect_timeout == AJP_DEF_CONNECT_TIMEOUT)
- p->connect_timeout = p->ping_timeout;
-
- if ((p->ping_mode & AJP_CPING_PREPOST) &&
- p->prepost_timeout == AJP_DEF_PREPOST_TIMEOUT)
- p->prepost_timeout = p->ping_timeout;
-
- p->conn_ping_interval =
- jk_get_worker_conn_ping_interval(props, p->name, 0);
- if ((p->ping_mode & AJP_CPING_INTERVAL) &&
- p->conn_ping_interval == 0) {
- /* XXX: Ping timeout is in miliseconds
- * and ping_interval is in seconds.
- * Use 10 times larger value for ping interval
- * (ping_timeout / 1000) * 10
- */
- p->conn_ping_interval = p->ping_timeout / 100;
- }
- p->reply_timeout =
- jk_get_worker_reply_timeout(props, p->name,
- AJP_DEF_REPLY_TIMEOUT);
-
- p->recovery_opts =
- jk_get_worker_recovery_opts(props, p->name,
- AJP_DEF_RECOVERY_OPTS);
-
- p->retries =
- jk_get_worker_retries(props, p->name,
- JK_RETRIES);
-
- p->max_packet_size =
- jk_get_max_packet_size(props, p->name);
-
- p->socket_buf =
- jk_get_worker_socket_buffer(props, p->name, p->max_packet_size);
-
- p->retry_interval =
- jk_get_worker_retry_interval(props, p->name,
- JK_SLEEP_DEF);
- p->cache_acquire_timeout = jk_get_worker_cache_acquire_timeout(props,
- p->name, p->retries * p->retry_interval);
- p->http_status_fail_num = jk_get_worker_fail_on_status(props, p->name,
- &p->http_status_fail[0],
- JK_MAX_HTTP_STATUS_FAILS);
-
- if (p->retries < 1) {
- jk_log(l, JK_LOG_INFO,
- "number of retries must be greater then 1. Setting to default=%d",
- JK_RETRIES);
- p->retries = JK_RETRIES;
- }
-
- p->maintain_time = jk_get_worker_maintain_time(props);
- if(p->maintain_time < 0)
- p->maintain_time = 0;
- p->s->last_maintain_time = time(NULL);
- p->s->last_reset = p->s->last_maintain_time;
-
- if (JK_IS_DEBUG_LEVEL(l)) {
-
- jk_log(l, JK_LOG_DEBUG,
- "setting endpoint options:",
- p->keepalive);
- jk_log(l, JK_LOG_DEBUG,
- "keepalive: %d",
- p->keepalive);
-
- jk_log(l, JK_LOG_DEBUG,
- "socket timeout: %d",
- p->socket_timeout);
-
- jk_log(l, JK_LOG_DEBUG,
- "socket connect timeout: %d",
- p->socket_connect_timeout);
-
- jk_log(l, JK_LOG_DEBUG,
- "buffer size: %d",
- p->socket_buf);
-
- jk_log(l, JK_LOG_DEBUG,
- "pool timeout: %d",
- p->cache_timeout);
-
- jk_log(l, JK_LOG_DEBUG,
- "ping timeout: %d",
- p->ping_timeout);
-
- jk_log(l, JK_LOG_DEBUG,
- "connect timeout: %d",
- p->connect_timeout);
-
- jk_log(l, JK_LOG_DEBUG,
- "reply timeout: %d",
- p->reply_timeout);
-
- jk_log(l, JK_LOG_DEBUG,
- "prepost timeout: %d",
- p->prepost_timeout);
-
- jk_log(l, JK_LOG_DEBUG,
- "recovery options: %d",
- p->recovery_opts);
-
- jk_log(l, JK_LOG_DEBUG,
- "retries: %d",
- p->retries);
-
- jk_log(l, JK_LOG_DEBUG,
- "max packet size: %d",
- p->max_packet_size);
-
- jk_log(l, JK_LOG_DEBUG,
- "retry interval: %d",
- p->retry_interval);
- }
- /*
- * Need to initialize secret here since we could return from inside
- * of the following loop
- */
-
- p->secret = jk_get_worker_secret(props, p->name);
- /* Initialize cache slots */
- JK_INIT_CS(&(p->cs), rc);
- if (!rc) {
- jk_log(l, JK_LOG_ERROR,
- "creating thread lock (errno=%d)",
- errno);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if (!ajp_create_endpoint_cache(p, proto, l)) {
- jk_log(l, JK_LOG_ERROR,
- "allocating connection pool of size %u",
- p->ep_cache_sz);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- rc = JK_TRUE;
- }
- else {
- JK_LOG_NULL_PARAMS(l);
- }
-
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-int JK_METHOD ajp_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l)
-{
- ajp_worker_t *aw;
-
- JK_TRACE_ENTER(l);
- if (name == NULL || w == NULL) {
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- aw = (ajp_worker_t *) calloc(1, sizeof(ajp_worker_t));
- if (!aw) {
- jk_log(l, JK_LOG_ERROR,
- "malloc of private_data failed");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- jk_open_pool(&aw->p,
- aw->buf,
- sizeof(jk_pool_atom_t) * TINY_POOL_SIZE);
-
- strncpy(aw->name, name, JK_SHM_STR_SIZ);
- aw->login = NULL;
-
- aw->ep_cache_sz = 0;
- aw->ep_cache = NULL;
- aw->connect_retry_attempts = AJP_DEF_RETRY_ATTEMPTS;
- aw->worker.worker_private = aw;
-
- aw->worker.maintain = ajp_maintain;
-
- aw->logon = NULL;
-
- *w = &aw->worker;
-
- aw->s = jk_shm_alloc_ajp_worker(&aw->p);
- if (!aw->s) {
- jk_close_pool(&aw->p);
- free(aw);
- jk_log(l, JK_LOG_ERROR,
- "allocating ajp worker record from shared memory");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-int ajp_destroy(jk_worker_t **pThis, jk_logger_t *l, int proto)
-{
- JK_TRACE_ENTER(l);
-
- if (pThis && *pThis && (*pThis)->worker_private) {
- unsigned int i;
- ajp_worker_t *aw = (*pThis)->worker_private;
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "up to %u endpoints to close",
- aw->ep_cache_sz);
-
- for (i = 0; i < aw->ep_cache_sz; i++) {
- if (aw->ep_cache[i])
- ajp_close_endpoint(aw->ep_cache[i], l);
- }
- free(aw->ep_cache);
- JK_DELETE_CS(&(aw->cs), i);
-
- if (aw->login) {
- /* take care of removing previously allocated data */
- if (aw->login->servlet_engine_name)
- free(aw->login->servlet_engine_name);
-
- free(aw->login);
- aw->login = NULL;
- }
-
- jk_close_pool(&aw->p);
- free(aw);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
-
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-int JK_METHOD ajp_done(jk_endpoint_t **e, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (e && *e && (*e)->endpoint_private) {
- ajp_endpoint_t *p = (*e)->endpoint_private;
- int rc;
- ajp_worker_t *w = p->worker;
-
- /* set last_access only if needed */
- if (w->cache_timeout > 0)
- p->last_access = time(NULL);
- if (w->s->addr_sequence != p->addr_sequence) {
- p->reuse = JK_FALSE;
- p->addr_sequence = w->s->addr_sequence;
- }
- ajp_reset_endpoint(p, l);
- *e = NULL;
- JK_ENTER_CS(&w->cs, rc);
- if (rc) {
- int i;
-
- for (i = w->ep_cache_sz - 1; i >= 0; i--) {
- if (w->ep_cache[i] == NULL) {
- w->ep_cache[i] = p;
- break;
- }
- }
- JK_LEAVE_CS(&w->cs, rc);
-
- if (i >= 0) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "recycling connection pool slot=%u for worker %s",
- i, p->worker->name);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- /* This should never hapen because
- * there is always free empty cache slot
- */
- jk_log(l, JK_LOG_ERROR,
- "could not find empty connection pool slot from %u for worker %s",
- w->ep_cache_sz, w->name);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- jk_log(l, JK_LOG_ERROR,
- "locking thread (errno=%d)", errno);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-int ajp_get_endpoint(jk_worker_t *pThis,
- jk_endpoint_t **je, jk_logger_t *l, int proto)
-{
- JK_TRACE_ENTER(l);
-
- if (pThis && pThis->worker_private && je) {
- ajp_worker_t *aw = pThis->worker_private;
- ajp_endpoint_t *ae = NULL;
- int rc;
- int retry = 0;
-
- *je = NULL;
- /* Loop until cache_acquire_timeout interval elapses */
- while ((retry * JK_SLEEP_DEF) < aw->cache_acquire_timeout) {
-
- JK_ENTER_CS(&aw->cs, rc);
- if (rc) {
- unsigned int slot;
- /* Try to find connected socket cache entry */
- for (slot = 0; slot < aw->ep_cache_sz; slot++) {
- if (aw->ep_cache[slot] &&
- IS_VALID_SOCKET(aw->ep_cache[slot]->sd)) {
- ae = aw->ep_cache[slot];
- if (ae->reuse) {
- aw->ep_cache[slot] = NULL;
- break;
- }
- else {
- /* XXX: We shouldn't have non reusable
- * opened socket in the cache
- */
- ajp_reset_endpoint(ae, l);
- ae = NULL;
- jk_log(l, JK_LOG_WARNING,
- "closing non reusable pool slot=%d", slot);
- }
- }
- }
- if (!ae) {
- /* No connected cache entry found.
- * Use the first free one.
- */
- for (slot = 0; slot < aw->ep_cache_sz; slot++) {
- if (aw->ep_cache[slot]) {
- ae = aw->ep_cache[slot];
- aw->ep_cache[slot] = NULL;
- break;
- }
- }
- }
- JK_LEAVE_CS(&aw->cs, rc);
- if (ae) {
- if (aw->cache_timeout > 0)
- ae->last_access = time(NULL);
- *je = &ae->endpoint;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "acquired connection pool slot=%u after %d retries",
- slot, retry);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else {
- retry++;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "could not get free endpoint for worker %s"
- " (retry %d, sleeping for %d ms)",
- aw->name, retry, JK_SLEEP_DEF);
- jk_sleep(JK_SLEEP_DEF);
- }
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "locking thread (errno=%d)", errno);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-
- }
- }
- jk_log(l, JK_LOG_WARNING,
- "Unable to get the free endpoint for worker %s from %u slots",
- aw->name, aw->ep_cache_sz);
- }
- else {
- JK_LOG_NULL_PARAMS(l);
- }
-
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-int JK_METHOD ajp_maintain(jk_worker_t *pThis, time_t mstarted, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (pThis && pThis->worker_private) {
- ajp_worker_t *aw = pThis->worker_private;
- time_t now = mstarted;
- int rc;
- long delta;
-
- jk_shm_lock();
-
- /* Now we check for global maintenance (once for all processes).
- * Checking workers for idleness.
- * Therefore we globally sync and we use a global timestamp.
- * Since it's possible that we come here a few milliseconds
- * before the interval has passed, we allow a little tolerance.
- */
- delta = (long)difftime(mstarted, aw->s->last_maintain_time) + JK_AJP_MAINTAIN_TOLERANCE;
- if (delta >= aw->maintain_time) {
- aw->s->last_maintain_time = mstarted;
- if (aw->s->state == JK_AJP_STATE_OK &&
- aw->s->used == aw->s->used_snapshot)
- aw->s->state = JK_AJP_STATE_IDLE;
- aw->s->used_snapshot = aw->s->used;
- }
-
- jk_shm_unlock();
-
- /* Do connection pool maintenance only if timeouts or keepalives are set */
- if (aw->cache_timeout <= 0 &&
- aw->conn_ping_interval <= 0) {
- /* Nothing to do. */
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
-
- JK_ENTER_CS(&aw->cs, rc);
- if (rc) {
- unsigned int n = 0, k = 0, cnt = 0;
- int i;
- unsigned int m, m_count = 0;
- jk_sock_t *m_sock;
- /* Count open slots */
- for (i = (int)aw->ep_cache_sz - 1; i >= 0; i--) {
- if (aw->ep_cache[i] && IS_VALID_SOCKET(aw->ep_cache[i]->sd))
- cnt++;
- }
- m_sock = (jk_sock_t *)malloc((cnt + 1) * sizeof(jk_sock_t));
- /* Handle worker cache timeouts */
- if (aw->cache_timeout > 0) {
- for (i = (int)aw->ep_cache_sz - 1;
- i >= 0; i--) {
- /* Skip the closed sockets */
- if (aw->ep_cache[i] && IS_VALID_SOCKET(aw->ep_cache[i]->sd)) {
- int elapsed = (int)difftime(mstarted, aw->ep_cache[i]->last_access);
- if (elapsed > aw->cache_timeout) {
- time_t rt = 0;
- n++;
- if (JK_IS_DEBUG_LEVEL(l))
- rt = time(NULL);
- aw->ep_cache[i]->reuse = JK_FALSE;
- m_sock[m_count++] = aw->ep_cache[i]->sd;
- aw->ep_cache[i]->sd = JK_INVALID_SOCKET;
- ajp_reset_endpoint(aw->ep_cache[i], l);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "cleaning pool slot=%d elapsed %d in %d",
- i, elapsed, (int)(difftime(time(NULL), rt)));
- }
- }
- if (cnt <= aw->ep_mincache_sz + n) {
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "reached pool min size %u from %u cache slots",
- aw->ep_mincache_sz, aw->ep_cache_sz);
- }
- break;
- }
- }
- }
- /* Handle worker connection keepalive */
- if (aw->conn_ping_interval > 0 && aw->ping_timeout > 0) {
- for (i = (int)aw->ep_cache_sz - 1; i >= 0; i--) {
- /* Skip the closed sockets */
- if (aw->ep_cache[i] && IS_VALID_SOCKET(aw->ep_cache[i]->sd)) {
- int elapsed = (int)difftime(now, aw->ep_cache[i]->last_access);
- if (elapsed > aw->conn_ping_interval) {
- k++;
- /* handle cping/cpong.
- */
- if (ajp_handle_cping_cpong(aw->ep_cache[i],
- aw->ping_timeout, l) == JK_FALSE) {
- jk_log(l, JK_LOG_INFO,
- "(%s) failed sending request, "
- "socket %d keepalive cping/cpong "
- "failure (errno=%d)",
- aw->name,
- aw->ep_cache[i]->sd,
- aw->ep_cache[i]->last_errno);
- aw->ep_cache[i]->reuse = JK_FALSE;
- m_sock[m_count++] = aw->ep_cache[i]->sd;
- aw->ep_cache[i]->sd = JK_INVALID_SOCKET;
- ajp_reset_endpoint(aw->ep_cache[i], l);
- }
- else {
- now = time(NULL);
- aw->ep_cache[i]->last_access = now;
- }
- }
- }
- }
- }
- JK_LEAVE_CS(&aw->cs, rc);
- /* Shutdown sockets outside of the lock.
- * This has benefits only if maintain was
- * called from the watchdog thread.
- */
- for (m = 0; m < m_count; m++) {
- jk_shutdown_socket(m_sock[m], l);
- }
- free(m_sock);
- if (n && JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "recycled %u sockets in %d seconds from %u pool slots",
- n, (int)(difftime(time(NULL), mstarted)),
- aw->ep_cache_sz);
- if (k && JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "pinged %u sockets in %d seconds from %u pool slots",
- k, (int)(difftime(time(NULL), mstarted)),
- aw->ep_cache_sz);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "locking thread (errno=%d)",
- errno);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-
- }
- }
- else {
- JK_LOG_NULL_PARAMS(l);
- }
-
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-int ajp_has_endpoint(jk_worker_t *pThis,
- jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (pThis && pThis->worker_private) {
- ajp_worker_t *aw = pThis->worker_private;
- int rc;
-
- JK_ENTER_CS(&aw->cs, rc);
- if (rc) {
- unsigned int slot;
- /* Try to find connected socket cache entry */
- for (slot = 0; slot < aw->ep_cache_sz; slot++) {
- if (aw->ep_cache[slot]) {
- JK_LEAVE_CS(&aw->cs, rc);
- return JK_TRUE;
- }
- }
- JK_LEAVE_CS(&aw->cs, rc);
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "locking thread (errno=%d)", errno);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- else {
- JK_LOG_NULL_PARAMS(l);
- }
-
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.h
deleted file mode 100644
index 09940fd9..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.h
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: common stuff for bi-directional protocol ajp13/ajp14. *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 1137200 $ *
- ***************************************************************************/
-
-#ifndef JK_AJP_COMMON_H
-#define JK_AJP_COMMON_H
-
-#include "jk_service.h"
-#include "jk_msg_buff.h"
-#include "jk_shm.h"
-#include "jk_mt.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define JK_AJP_STATE_IDLE (0)
-#define JK_AJP_STATE_OK (1)
-#define JK_AJP_STATE_ERROR (2)
-#define JK_AJP_STATE_PROBE (3)
-#define JK_AJP_STATE_DEF (JK_AJP_STATE_IDLE)
-#define JK_AJP_STATE_TEXT_IDLE ("OK/IDLE")
-#define JK_AJP_STATE_TEXT_OK ("OK")
-#define JK_AJP_STATE_TEXT_ERROR ("ERR")
-#define JK_AJP_STATE_TEXT_PROBE ("ERR/PRB")
-#define JK_AJP_STATE_TEXT_MAX (JK_AJP_STATE_PROBE)
-#define JK_AJP_STATE_TEXT_DEF (JK_AJP_STATE_TEXT_IDLE)
-
-/* We accept doing global maintenance if we are */
-/* JK_AJP_MAINTAIN_TOLERANCE seconds early. */
-#define JK_AJP_MAINTAIN_TOLERANCE (2)
-
-/*
- * Conditional request attributes
- *
- */
-#define SC_A_CONTEXT (unsigned char)1
-#define SC_A_SERVLET_PATH (unsigned char)2
-#define SC_A_REMOTE_USER (unsigned char)3
-#define SC_A_AUTH_TYPE (unsigned char)4
-#define SC_A_QUERY_STRING (unsigned char)5
-#define SC_A_ROUTE (unsigned char)6
-#define SC_A_SSL_CERT (unsigned char)7
-#define SC_A_SSL_CIPHER (unsigned char)8
-#define SC_A_SSL_SESSION (unsigned char)9
-#define SC_A_REQ_ATTRIBUTE (unsigned char)10
-#define SC_A_SSL_KEY_SIZE (unsigned char)11 /* only in if JkOptions +ForwardKeySize */
-#define SC_A_SECRET (unsigned char)12
-#define SC_A_STORED_METHOD (unsigned char)13
-#define SC_A_ARE_DONE (unsigned char)0xFF
-
-/*
- * AJP private request attributes
- *
- * The following request attribute is recognized by Tomcat
- * to contain the forwarded remote port.
- */
-#define SC_A_REQ_REMOTE_PORT ("AJP_REMOTE_PORT")
-
-/*
- * JK public request attributes
- *
- * Activation state of the worker in the load balancer.
- * Can be any of the JK_LB_ACTIVATION_TEXT_* strings
- * from jk_lb_worker.h.
- */
-#define SC_A_JK_LB_ACTIVATION ("JK_LB_ACTIVATION")
-
-/*
- * Request methods, coded as numbers instead of strings.
- * The list of methods was taken from Section 5.1.1 of RFC 2616,
- * RFC 2518, the ACL IETF draft, and the DeltaV IESG Proposed Standard.
- * Method = "OPTIONS"
- * | "GET"
- * | "HEAD"
- * | "POST"
- * | "PUT"
- * | "DELETE"
- * | "TRACE"
- * | "PROPFIND"
- * | "PROPPATCH"
- * | "MKCOL"
- * | "COPY"
- * | "MOVE"
- * | "LOCK"
- * | "UNLOCK"
- * | "ACL"
- * | "REPORT"
- * | "VERSION-CONTROL"
- * | "CHECKIN"
- * | "CHECKOUT"
- * | "UNCHECKOUT"
- * | "SEARCH"
- * | "MKWORKSPACE"
- * | "UPDATE"
- * | "LABEL"
- * | "MERGE"
- * | "BASELINE-CONTROL"
- * | "MKACTIVITY"
- *
- */
-#define SC_M_OPTIONS (unsigned char)1
-#define SC_M_GET (unsigned char)2
-#define SC_M_HEAD (unsigned char)3
-#define SC_M_POST (unsigned char)4
-#define SC_M_PUT (unsigned char)5
-#define SC_M_DELETE (unsigned char)6
-#define SC_M_TRACE (unsigned char)7
-#define SC_M_PROPFIND (unsigned char)8
-#define SC_M_PROPPATCH (unsigned char)9
-#define SC_M_MKCOL (unsigned char)10
-#define SC_M_COPY (unsigned char)11
-#define SC_M_MOVE (unsigned char)12
-#define SC_M_LOCK (unsigned char)13
-#define SC_M_UNLOCK (unsigned char)14
-#define SC_M_ACL (unsigned char)15
-#define SC_M_REPORT (unsigned char)16
-#define SC_M_VERSION_CONTROL (unsigned char)17
-#define SC_M_CHECKIN (unsigned char)18
-#define SC_M_CHECKOUT (unsigned char)19
-#define SC_M_UNCHECKOUT (unsigned char)20
-#define SC_M_SEARCH (unsigned char)21
-#define SC_M_MKWORKSPACE (unsigned char)22
-#define SC_M_UPDATE (unsigned char)23
-#define SC_M_LABEL (unsigned char)24
-#define SC_M_MERGE (unsigned char)25
-#define SC_M_BASELINE_CONTROL (unsigned char)26
-#define SC_M_MKACTIVITY (unsigned char)27
-#define SC_M_JK_STORED (unsigned char)0xFF
-
-/*
- * Frequent request headers, these headers are coded as numbers
- * instead of strings.
- *
- * Accept
- * Accept-Charset
- * Accept-Encoding
- * Accept-Language
- * Authorization
- * Connection
- * Content-Type
- * Content-Length
- * Cookie
- * Cookie2
- * Host
- * Pragma
- * Referer
- * User-Agent
- *
- */
-
-#define SC_ACCEPT (unsigned short)0xA001
-#define SC_ACCEPT_CHARSET (unsigned short)0xA002
-#define SC_ACCEPT_ENCODING (unsigned short)0xA003
-#define SC_ACCEPT_LANGUAGE (unsigned short)0xA004
-#define SC_AUTHORIZATION (unsigned short)0xA005
-#define SC_CONNECTION (unsigned short)0xA006
-#define SC_CONTENT_TYPE (unsigned short)0xA007
-#define SC_CONTENT_LENGTH (unsigned short)0xA008
-#define SC_COOKIE (unsigned short)0xA009
-#define SC_COOKIE2 (unsigned short)0xA00A
-#define SC_HOST (unsigned short)0xA00B
-#define SC_PRAGMA (unsigned short)0xA00C
-#define SC_REFERER (unsigned short)0xA00D
-#define SC_USER_AGENT (unsigned short)0xA00E
-
-/*
- * Frequent response headers, these headers are coded as numbers
- * instead of strings.
- *
- * Content-Type
- * Content-Language
- * Content-Length
- * Date
- * Last-Modified
- * Location
- * Set-Cookie
- * Servlet-Engine
- * Status
- * WWW-Authenticate
- *
- */
-
-#define SC_RESP_CONTENT_TYPE (unsigned short)0xA001
-#define SC_RESP_CONTENT_LANGUAGE (unsigned short)0xA002
-#define SC_RESP_CONTENT_LENGTH (unsigned short)0xA003
-#define SC_RESP_DATE (unsigned short)0xA004
-#define SC_RESP_LAST_MODIFIED (unsigned short)0xA005
-#define SC_RESP_LOCATION (unsigned short)0xA006
-#define SC_RESP_SET_COOKIE (unsigned short)0xA007
-#define SC_RESP_SET_COOKIE2 (unsigned short)0xA008
-#define SC_RESP_SERVLET_ENGINE (unsigned short)0xA009
-#define SC_RESP_STATUS (unsigned short)0xA00A
-#define SC_RESP_WWW_AUTHENTICATE (unsigned short)0xA00B
-#define SC_RES_HEADERS_NUM 11
-
-/*
- * AJP13/AJP14 use same message structure
- */
-
-#define AJP_DEF_RETRY_ATTEMPTS (1)
-
-#define AJP_HEADER_LEN (4)
-#define AJP_HEADER_SZ_LEN (2)
-#define CHUNK_BUFFER_PAD (12)
-#define AJP_DEF_CACHE_TIMEOUT (0)
-#define AJP_DEF_CONNECT_TIMEOUT (0) /* NO CONNECTION TIMEOUT => NO CPING/CPONG */
-#define AJP_DEF_REPLY_TIMEOUT (0) /* NO REPLY TIMEOUT */
-#define AJP_DEF_PREPOST_TIMEOUT (0) /* NO PREPOST TIMEOUT => NO CPING/CPONG */
-#define AJP_DEF_RECOVERY_OPTS (0) /* NO RECOVERY / NO */
-#define AJP_DEF_SOCKET_TIMEOUT (0) /* No timeout */
-#define AJP_DEF_PING_TIMEOUT (10000) /* Default CPING/CPONG timeout (10 seconds) */
-
-#define AJP_CPING_NONE (0) /* Do not send cping packets */
-#define AJP_CPING_CONNECT (1) /* Send cping on fresh connection */
-#define AJP_CPING_PREPOST (2) /* Send cping before sending request */
-#define AJP_CPING_INTERVAL (4) /* Send cping on regular intervals */
-
-
-#define RECOVER_ABORT_IF_TCGETREQUEST 0x0001 /* DON'T RECOVER IF TOMCAT FAILS AFTER RECEIVING REQUEST */
-#define RECOVER_ABORT_IF_TCSENDHEADER 0x0002 /* DON'T RECOVER IF TOMCAT FAILS AFTER SENDING HEADERS */
-#define RECOVER_ABORT_IF_CLIENTERROR 0x0004 /* CLOSE THE SOCKET IN CASE OF CLIENT ERROR */
-#define RECOVER_ALWAYS_HTTP_HEAD 0x0008 /* RECOVER HTTP HEAD REQUESTS, EVEN IF ABORT OPTIONS ARE SET */
-#define RECOVER_ALWAYS_HTTP_GET 0x0010 /* RECOVER HTTP GET REQUESTS, EVEN IF ABORT OPTIONS ARE SET */
-
-#define JK_MAX_HTTP_STATUS_FAILS 32 /* Should be enough for most 400 and 500 statuses */
-
-struct jk_res_data
-{
- int status;
-#ifdef AS400
- char *msg;
-#else
- const char *msg;
-#endif
- unsigned num_headers;
- char **header_names;
- char **header_values;
-};
-typedef struct jk_res_data jk_res_data_t;
-
-#include "jk_ajp14.h"
-
-struct ajp_operation;
-typedef struct ajp_operation ajp_operation_t;
-
-struct ajp_endpoint;
-typedef struct ajp_endpoint ajp_endpoint_t;
-
-struct ajp_worker;
-typedef struct ajp_worker ajp_worker_t;
-
-struct ajp_worker
-{
- jk_worker_t worker;
- /* Shared memory worker data */
- jk_shm_ajp_worker_t *s;
-
- char name[JK_SHM_STR_SIZ+1];
- /* Sequence counter starting at 0 and increasing
- * every time we change the config
- */
- volatile unsigned int sequence;
-
- jk_pool_t p;
- jk_pool_atom_t buf[TINY_POOL_SIZE];
-
- JK_CRIT_SEC cs;
-
- struct sockaddr_in worker_inet_addr; /* Contains host and port */
- unsigned connect_retry_attempts;
- char host[JK_SHM_STR_SIZ+1];
- int port;
- int addr_sequence; /* Whether the address is resolved */
- int maintain_time;
- /*
- * Open connections cache...
- *
- * 1. Critical section object to protect the cache.
- * 2. Cache size.
- * 3. An array of "open" endpoints.
- */
- unsigned int ep_cache_sz;
- unsigned int ep_mincache_sz;
- unsigned int ep_maxcache_sz;
- int cache_acquire_timeout;
- ajp_endpoint_t **ep_cache;
-
- int proto; /* PROTOCOL USED AJP13/AJP14 */
-
- jk_login_service_t *login;
-
- /* Weak secret similar with ajp12, used in ajp13 */
- const char *secret;
-
- /*
- * Post physical connect handler.
- * AJP14 will set here its login handler
- */
- int (*logon) (ajp_endpoint_t * ae, jk_logger_t *l);
-
- /*
- * Handle Socket Timeouts
- */
- int socket_timeout;
- int socket_connect_timeout;
- int keepalive;
- int socket_buf;
- /*
- * Handle Cache Timeouts
- */
- int cache_timeout;
-
- /*
- * Handle Connection/Reply Timeouts
- */
- int connect_timeout; /* connect cping/cpong delay in ms (0 means disabled) */
- int reply_timeout; /* reply timeout delay in ms (0 means disabled) */
- int prepost_timeout; /* before sending a request cping/cpong timeout delay in ms (0 means disabled) */
- int conn_ping_interval; /* interval for sending keepalive cping packets on
- * unused connection */
- int ping_timeout; /* generic cping/cpong timeout. Used for keepalive packets or
- * as default for boolean valued connect and prepost timeouts.
- */
- unsigned int ping_mode; /* Ping mode flags (which types of cpings should be used) */
- /*
- * Recovery options
- */
- unsigned int recovery_opts;
-
- /*
- * Public property to enable the number of retry attempts
- * on this worker.
- */
- int retries;
-
- unsigned int max_packet_size; /* Maximum AJP Packet size */
-
- int retry_interval; /* Number of milliseconds to sleep before doing a retry */
-
- /*
- * HTTP status that will cause failover (0 means disabled)
- */
- unsigned int http_status_fail_num;
- int http_status_fail[JK_MAX_HTTP_STATUS_FAILS];
-};
-
-
-/*
- * endpoint, the remote connector which does the work
- */
-struct ajp_endpoint
-{
- ajp_worker_t *worker;
-
- jk_pool_t pool;
- jk_pool_atom_t buf[BIG_POOL_SIZE];
-
- int proto; /* PROTOCOL USED AJP13/AJP14 */
-
- jk_sock_t sd;
- int reuse;
-
- /* Used with RECOVER_ABORT_IF_CLIENTERROR to hard abort
- write of AJP response on client write errors */
- int hard_close;
-
- jk_endpoint_t endpoint;
-
- jk_uint64_t left_bytes_to_send;
-
- /* time of the last request
- handled by this endpoint */
- time_t last_access;
- int last_errno;
- /* Last operation performed via this endpoint */
- int last_op;
- int addr_sequence; /* Whether the address is resolved */
-};
-
-/*
- * little struct to avoid multiples ptr passing
- * this struct is ready to hold upload file fd
- * to add upload persistant storage
- */
-struct ajp_operation
-{
- jk_msg_buf_t *request; /* original request storage */
- jk_msg_buf_t *reply; /* reply storage (chuncked by ajp13 */
- jk_msg_buf_t *post; /* small post data storage area */
- int uploadfd; /* future persistant storage id */
- int recoverable; /* if exchange could be conducted on another TC */
-};
-
-/*
- * Functions
- */
-
-
-const char *jk_ajp_get_state(ajp_worker_t *aw, jk_logger_t *l);
-
-int jk_ajp_get_state_code(const char *v);
-
-int ajp_validate(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l, int proto);
-
-int ajp_init(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l, int proto);
-
-int JK_METHOD ajp_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l);
-
-int ajp_destroy(jk_worker_t **pThis, jk_logger_t *l, int proto);
-
-int JK_METHOD ajp_done(jk_endpoint_t **e, jk_logger_t *l);
-
-int ajp_get_endpoint(jk_worker_t *pThis,
- jk_endpoint_t **pend, jk_logger_t *l, int proto);
-
-int ajp_connect_to_endpoint(ajp_endpoint_t * ae, jk_logger_t *l);
-
-void ajp_close_endpoint(ajp_endpoint_t * ae, jk_logger_t *l);
-
-void jk_ajp_pull(ajp_worker_t * aw, int locked, jk_logger_t *l);
-
-void jk_ajp_push(ajp_worker_t * aw, int locked, jk_logger_t *l);
-
-int ajp_connection_tcp_send_message(ajp_endpoint_t * ae,
- jk_msg_buf_t *msg, jk_logger_t *l);
-
-int ajp_connection_tcp_get_message(ajp_endpoint_t * ae,
- jk_msg_buf_t *msg, jk_logger_t *l);
-
-int JK_METHOD ajp_maintain(jk_worker_t *pThis, time_t now, jk_logger_t *l);
-
-int jk_ajp_get_cping_mode(const char *m, int def);
-
-int ajp_has_endpoint(jk_worker_t *pThis, jk_logger_t *l);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* JK_AJP_COMMON_H */
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.lo
deleted file mode 100644
index 9d02a8f0..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_ajp_common.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_ajp_common.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_ajp_common.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.o
deleted file mode 100644
index 2e6679aa..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_ajp_common.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.c
deleted file mode 100644
index edf8c33b..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.c
+++ /dev/null
@@ -1,1190 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * Description: Socket/Naming manipulation functions
- * Based on: Various Jserv files
- */
-/**
- * @package jk_connect
- * @author Gal Shachor <shachor@il.ibm.com>
- * @author Mladen Turk <mturk@apache.org>
- * @version $Revision: 1125651 $
- */
-
-
-#include "jk_connect.h"
-#include "jk_util.h"
-
-#ifdef HAVE_APR
-#include "apr_network_io.h"
-#include "apr_errno.h"
-#include "apr_general.h"
-#include "apr_pools.h"
-static apr_pool_t *jk_apr_pool = NULL;
-#endif
-
-#ifdef HAVE_SYS_FILIO_H
-/* FIONREAD on Solaris et al. */
-#include <sys/filio.h>
-#endif
-#ifdef HAVE_POLL_H
-/* Use poll instead select */
-#include <poll.h>
-#endif
-
-#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#define JK_IS_SOCKET_ERROR(x) ((x) == SOCKET_ERROR)
-#define JK_GET_SOCKET_ERRNO() errno = WSAGetLastError() - WSABASEERR
-#else
-#define JK_IS_SOCKET_ERROR(x) ((x) == -1)
-#define JK_GET_SOCKET_ERRNO() ((void)0)
-#endif /* WIN32 */
-
-#if defined(NETWARE) && defined(__NOVELL_LIBC__)
-#define USE_SOCK_CLOEXEC
-#endif
-
-/* our compiler cant deal with char* <-> const char* ... */
-#if defined(NETWARE) && !defined(__NOVELL_LIBC__)
-typedef char* SET_TYPE;
-#else
-typedef const char* SET_TYPE;
-#endif
-
-/** Set socket to blocking
- * @param sd socket to manipulate
- * @return errno: fcntl returns -1 (!WIN32)
- * pseudo errno: ioctlsocket returns SOCKET_ERROR (WIN32)
- * 0: success
- */
-static int soblock(jk_sock_t sd)
-{
-/* BeOS uses setsockopt at present for non blocking... */
-#if defined (WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
- u_long on = 0;
- if (JK_IS_SOCKET_ERROR(ioctlsocket(sd, FIONBIO, &on))) {
- JK_GET_SOCKET_ERRNO();
- return errno;
- }
-#else
- int fd_flags;
-
- fd_flags = fcntl(sd, F_GETFL, 0);
-#if defined(O_NONBLOCK)
- fd_flags &= ~O_NONBLOCK;
-#elif defined(O_NDELAY)
- fd_flags &= ~O_NDELAY;
-#elif defined(FNDELAY)
- fd_flags &= ~FNDELAY;
-#else
-#error Please teach JK how to make sockets blocking on your platform.
-#endif
- if (fcntl(sd, F_SETFL, fd_flags) == -1) {
- return errno;
- }
-#endif /* WIN32 || (NETWARE && __NOVELL_LIBC__) */
- return 0;
-}
-
-/** Set socket to non-blocking
- * @param sd socket to manipulate
- * @return errno: fcntl returns -1 (!WIN32)
- * pseudo errno: ioctlsocket returns SOCKET_ERROR (WIN32)
- * 0: success
- */
-static int sononblock(jk_sock_t sd)
-{
-#if defined (WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
- u_long on = 1;
- if (JK_IS_SOCKET_ERROR(ioctlsocket(sd, FIONBIO, &on))) {
- JK_GET_SOCKET_ERRNO();
- return errno;
- }
-#else
- int fd_flags;
-
- fd_flags = fcntl(sd, F_GETFL, 0);
-#if defined(O_NONBLOCK)
- fd_flags |= O_NONBLOCK;
-#elif defined(O_NDELAY)
- fd_flags |= O_NDELAY;
-#elif defined(FNDELAY)
- fd_flags |= FNDELAY;
-#else
-#error Please teach JK how to make sockets non-blocking on your platform.
-#endif
- if (fcntl(sd, F_SETFL, fd_flags) == -1) {
- return errno;
- }
-#endif /* WIN32 || (NETWARE && __NOVELL_LIBC__) */
- return 0;
-}
-
-#if defined (WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
-/* WIN32 implementation */
-/** Non-blocking socket connect
- * @param sd socket to connect
- * @param addr address to connect to
- * @param timeout connect timeout in seconds
- * (<=0: no timeout=blocking)
- * @param l logger
- * @return -1: some kind of error occured
- * SOCKET_ERROR: no timeout given and error
- * during blocking connect
- * 0: success
- */
-static int nb_connect(jk_sock_t sd, struct sockaddr *addr, int timeout, jk_logger_t *l)
-{
- int rc;
-
- JK_TRACE_ENTER(l);
-
- if (timeout <= 0) {
- rc = connect(sd, addr, sizeof(struct sockaddr_in));
- JK_TRACE_EXIT(l);
- return rc;
- }
-
- if ((rc = sononblock(sd))) {
- JK_TRACE_EXIT(l);
- return -1;
- }
- if (JK_IS_SOCKET_ERROR(connect(sd, addr, sizeof(struct sockaddr_in)))) {
- struct timeval tv;
- fd_set wfdset, efdset;
-
- if ((rc = WSAGetLastError()) != WSAEWOULDBLOCK) {
- soblock(sd);
- WSASetLastError(rc);
- JK_TRACE_EXIT(l);
- return -1;
- }
- /* wait for the connect to complete or timeout */
- FD_ZERO(&wfdset);
- FD_SET(sd, &wfdset);
- FD_ZERO(&efdset);
- FD_SET(sd, &efdset);
-
- tv.tv_sec = timeout / 1000;
- tv.tv_usec = (timeout % 1000) * 1000;
-
- rc = select((int)sd + 1, NULL, &wfdset, &efdset, &tv);
- if (JK_IS_SOCKET_ERROR(rc) || rc == 0) {
- rc = WSAGetLastError();
- soblock(sd);
- WSASetLastError(rc);
- JK_TRACE_EXIT(l);
- return -1;
- }
- /* Evaluate the efdset */
- if (FD_ISSET(sd, &efdset)) {
- /* The connect failed. */
- int rclen = (int)sizeof(rc);
- if (getsockopt(sd, SOL_SOCKET, SO_ERROR, (char*) &rc, &rclen))
- rc = 0;
- soblock(sd);
- if (rc)
- WSASetLastError(rc);
- JK_TRACE_EXIT(l);
- return -1;
- }
- }
- soblock(sd);
- JK_TRACE_EXIT(l);
- return 0;
-}
-
-#elif !defined(NETWARE)
-/* POSIX implementation */
-/** Non-blocking socket connect
- * @param sd socket to connect
- * @param addr address to connect to
- * @param timeout connect timeout in seconds
- * (<=0: no timeout=blocking)
- * @param l logger
- * @return -1: some kind of error occured
- * 0: success
- */
-static int nb_connect(jk_sock_t sd, struct sockaddr *addr, int timeout, jk_logger_t *l)
-{
- int rc = 0;
-
- JK_TRACE_ENTER(l);
-
- if (timeout > 0) {
- if (sononblock(sd)) {
- JK_TRACE_EXIT(l);
- return -1;
- }
- }
- do {
- rc = connect(sd, addr, sizeof(struct sockaddr_in));
- } while (rc == -1 && errno == EINTR);
-
- if ((rc == -1) && (errno == EINPROGRESS || errno == EALREADY)
- && (timeout > 0)) {
- fd_set wfdset;
- struct timeval tv;
- socklen_t rclen = (socklen_t)sizeof(rc);
-
- FD_ZERO(&wfdset);
- FD_SET(sd, &wfdset);
- tv.tv_sec = timeout / 1000;
- tv.tv_usec = (timeout % 1000) * 1000;
- rc = select(sd + 1, NULL, &wfdset, NULL, &tv);
- if (rc <= 0) {
- /* Save errno */
- int err = errno;
- soblock(sd);
- errno = err;
- JK_TRACE_EXIT(l);
- return -1;
- }
- rc = 0;
-#ifdef SO_ERROR
- if (!FD_ISSET(sd, &wfdset) ||
- (getsockopt(sd, SOL_SOCKET, SO_ERROR,
- (char *)&rc, &rclen) < 0) || rc) {
- if (rc)
- errno = rc;
- rc = -1;
- }
-#endif /* SO_ERROR */
- }
- /* Not sure we can be already connected */
- if (rc == -1 && errno == EISCONN)
- rc = 0;
- soblock(sd);
- JK_TRACE_EXIT(l);
- return rc;
-}
-#else
-/* NETWARE implementation - blocking for now */
-/** Non-blocking socket connect
- * @param sd socket to connect
- * @param addr address to connect to
- * @param timeout connect timeout in seconds (ignored!)
- * @param l logger
- * @return -1: some kind of error occured
- * 0: success
- */
-static int nb_connect(jk_sock_t sd, struct sockaddr *addr, int timeout, jk_logger_t *l)
-{
- int rc;
-
- JK_TRACE_ENTER(l);
-
- rc = connect(sd, addr, sizeof(struct sockaddr_in));
- JK_TRACE_EXIT(l);
- return rc;
-}
-#endif
-
-
-#ifdef AS400_UTF8
-
-/*
- * i5/OS V5R4 need EBCDIC for its runtime calls but APR/APACHE works in UTF
- */
-in_addr_t jk_inet_addr(const char * addrstr)
-{
- in_addr_t addr;
- char *ptr;
-
- ptr = (char *)malloc(strlen(addrstr) + 1);
- jk_ascii2ebcdic((char *)addrstr, ptr);
- addr = inet_addr(ptr);
- free(ptr);
-
- return(addr);
-}
-
-#endif
-
-/** Resolve the host IP
- * @param host host or ip address
- * @param port port
- * @param rc return value pointer
- * @param l logger
- * @return JK_FALSE: some kind of error occured
- * JK_TRUE: success
- */
-int jk_resolve(const char *host, int port, struct sockaddr_in *rc,
- void *pool, jk_logger_t *l)
-{
- int x;
- struct in_addr laddr;
-
- JK_TRACE_ENTER(l);
-
- memset(rc, 0, sizeof(struct sockaddr_in));
-
- rc->sin_port = htons((short)port);
- rc->sin_family = AF_INET;
-
- /* Check if we only have digits in the string */
- for (x = 0; host[x] != '\0'; x++) {
- if (!isdigit((int)(host[x])) && host[x] != '.') {
- break;
- }
- }
-
- /* If we found also characters we should make name to IP resolution */
- if (host[x] != '\0') {
-
-#ifdef HAVE_APR
- apr_sockaddr_t *remote_sa, *temp_sa;
- char *remote_ipaddr;
-
- if (!jk_apr_pool) {
- if (apr_pool_create(&jk_apr_pool, (apr_pool_t *)pool) != APR_SUCCESS) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- apr_pool_clear(jk_apr_pool);
- if (apr_sockaddr_info_get
- (&remote_sa, host, APR_UNSPEC, (apr_port_t) port, 0, jk_apr_pool)
- != APR_SUCCESS) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- /* Since we are only handling AF_INET (IPV4) address (in_addr_t) */
- /* make sure we find one of those. */
- temp_sa = remote_sa;
- while ((NULL != temp_sa) && (AF_INET != temp_sa->family))
- temp_sa = temp_sa->next;
-
- /* if temp_sa is set, we have a valid address otherwise, just return */
- if (NULL != temp_sa)
- remote_sa = temp_sa;
- else {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- apr_sockaddr_ip_get(&remote_ipaddr, remote_sa);
-
- laddr.s_addr = jk_inet_addr(remote_ipaddr);
-
-#else /* HAVE_APR */
-
- /* XXX : WARNING : We should really use gethostbyname_r in multi-threaded env */
- /* Fortunatly when APR is available, ie under Apache 2.0, we use it */
-#if defined(NETWARE) && !defined(__NOVELL_LIBC__)
- struct hostent *hoste = gethostbyname((char*)host);
-#else
- struct hostent *hoste = gethostbyname(host);
-#endif
- if (!hoste) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- laddr = *((struct in_addr *)hoste->h_addr_list[0]);
-
-#endif /* HAVE_APR */
- }
- else {
- /* If we found only digits we use inet_addr() */
- laddr.s_addr = jk_inet_addr(host);
- }
- memcpy(&(rc->sin_addr), &laddr, sizeof(laddr));
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-/** Connect to Tomcat
- * @param addr address to connect to
- * @param keepalive should we set SO_KEEPALIVE (if !=0)
- * @param timeout connect timeout in seconds
- * (<=0: no timeout=blocking)
- * @param sock_buf size of send and recv buffer
- * (<=0: use default)
- * @param l logger
- * @return JK_INVALID_SOCKET: some kind of error occured
- * created socket: success
- * @remark Cares about errno
- */
-jk_sock_t jk_open_socket(struct sockaddr_in *addr, int keepalive,
- int timeout, int connect_timeout,
- int sock_buf, jk_logger_t *l)
-{
- char buf[64];
- jk_sock_t sd;
- int set = 1;
- int ret = 0;
- int flags = 0;
-#ifdef SO_LINGER
- struct linger li;
-#endif
-
- JK_TRACE_ENTER(l);
-
- errno = 0;
-#if defined(SOCK_CLOEXEC) && defined(USE_SOCK_CLOEXEC)
- flags |= SOCK_CLOEXEC;
-#endif
- sd = socket(AF_INET, SOCK_STREAM | flags, 0);
- if (!IS_VALID_SOCKET(sd)) {
- JK_GET_SOCKET_ERRNO();
- jk_log(l, JK_LOG_ERROR,
- "socket() failed (errno=%d)", errno);
- JK_TRACE_EXIT(l);
- return JK_INVALID_SOCKET;
- }
-#if defined(FD_CLOEXEC) && !defined(USE_SOCK_CLOEXEC)
- if ((flags = fcntl(sd, F_GETFD)) == -1) {
- JK_GET_SOCKET_ERRNO();
- jk_log(l, JK_LOG_ERROR,
- "fcntl() failed (errno=%d)", errno);
- jk_close_socket(sd, l);
- JK_TRACE_EXIT(l);
- return JK_INVALID_SOCKET;
- }
- flags |= FD_CLOEXEC;
- if (fcntl(sd, F_SETFD, flags) == -1) {
- JK_GET_SOCKET_ERRNO();
- jk_log(l, JK_LOG_ERROR,
- "fcntl() failed (errno=%d)", errno);
- jk_close_socket(sd, l);
- JK_TRACE_EXIT(l);
- return JK_INVALID_SOCKET;
- }
-#endif
-
- /* Disable Nagle algorithm */
- if (setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (SET_TYPE)&set,
- sizeof(set))) {
- JK_GET_SOCKET_ERRNO();
- jk_log(l, JK_LOG_ERROR,
- "failed setting TCP_NODELAY (errno=%d)", errno);
- jk_close_socket(sd, l);
- JK_TRACE_EXIT(l);
- return JK_INVALID_SOCKET;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "socket TCP_NODELAY set to On");
- if (keepalive) {
-#if defined(WIN32) && !defined(NETWARE)
- DWORD dw;
- struct tcp_keepalive ka = { 0 }, ks = { 0 };
- if (timeout)
- ka.keepalivetime = timeout * 10000;
- else
- ka.keepalivetime = 60 * 10000; /* 10 minutes */
- ka.keepaliveinterval = 1000;
- ka.onoff = 1;
- if (WSAIoctl(sd, SIO_KEEPALIVE_VALS, &ka, sizeof(ka),
- &ks, sizeof(ks), &dw, NULL, NULL)) {
- JK_GET_SOCKET_ERRNO();
- jk_log(l, JK_LOG_ERROR,
- "failed setting SIO_KEEPALIVE_VALS (errno=%d)", errno);
- jk_close_socket(sd, l);
- JK_TRACE_EXIT(l);
- return JK_INVALID_SOCKET;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "socket SO_KEEPALIVE set to %d seconds",
- ka.keepalivetime / 1000);
-#else
- set = 1;
- if (setsockopt(sd, SOL_SOCKET, SO_KEEPALIVE, (SET_TYPE)&set,
- sizeof(set))) {
- JK_GET_SOCKET_ERRNO();
- jk_log(l, JK_LOG_ERROR,
- "failed setting SO_KEEPALIVE (errno=%d)", errno);
- jk_close_socket(sd, l);
- JK_TRACE_EXIT(l);
- return JK_INVALID_SOCKET;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "socket SO_KEEPALIVE set to On");
-#endif
- }
-
- if (sock_buf > 0) {
- set = sock_buf;
- /* Set socket send buffer size */
- if (setsockopt(sd, SOL_SOCKET, SO_SNDBUF, (SET_TYPE)&set,
- sizeof(set))) {
- JK_GET_SOCKET_ERRNO();
- jk_log(l, JK_LOG_ERROR,
- "failed setting SO_SNDBUF (errno=%d)", errno);
- jk_close_socket(sd, l);
- JK_TRACE_EXIT(l);
- return JK_INVALID_SOCKET;
- }
- set = sock_buf;
- /* Set socket receive buffer size */
- if (setsockopt(sd, SOL_SOCKET, SO_RCVBUF, (SET_TYPE)&set,
- sizeof(set))) {
- JK_GET_SOCKET_ERRNO();
- jk_log(l, JK_LOG_ERROR,
- "failed setting SO_RCVBUF (errno=%d)", errno);
- jk_close_socket(sd, l);
- JK_TRACE_EXIT(l);
- return JK_INVALID_SOCKET;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "socket SO_SNDBUF and SO_RCVBUF set to %d",
- sock_buf);
- }
-
- if (timeout > 0) {
-#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
- int tmout = timeout * 1000;
- setsockopt(sd, SOL_SOCKET, SO_RCVTIMEO,
- (const char *) &tmout, sizeof(int));
- setsockopt(sd, SOL_SOCKET, SO_SNDTIMEO,
- (const char *) &tmout, sizeof(int));
- JK_GET_SOCKET_ERRNO();
-#elif defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO)
- struct timeval tv;
- tv.tv_sec = timeout;
- tv.tv_usec = 0;
- setsockopt(sd, SOL_SOCKET, SO_RCVTIMEO,
- (const void *) &tv, sizeof(tv));
- setsockopt(sd, SOL_SOCKET, SO_SNDTIMEO,
- (const void *) &tv, sizeof(tv));
-#endif
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "timeout %d set for socket=%d",
- timeout, sd);
- }
-#ifdef SO_NOSIGPIPE
- /* The preferred method on Mac OS X (10.2 and later) to prevent SIGPIPEs when
- * sending data to a dead peer. Possibly also existing and in use on other BSD
- * systems?
- */
- set = 1;
- if (setsockopt(sd, SOL_SOCKET, SO_NOSIGPIPE, (const char *)&set,
- sizeof(int))) {
- JK_GET_SOCKET_ERRNO();
- jk_log(l, JK_LOG_ERROR,
- "failed setting SO_NOSIGPIPE (errno=%d)", errno);
- jk_close_socket(sd, l);
- JK_TRACE_EXIT(l);
- return JK_INVALID_SOCKET;
- }
-#endif
-#ifdef SO_LINGER
- /* Make hard closesocket by disabling lingering */
- li.l_linger = li.l_onoff = 0;
- if (setsockopt(sd, SOL_SOCKET, SO_LINGER, (SET_TYPE)&li,
- sizeof(li))) {
- JK_GET_SOCKET_ERRNO();
- jk_log(l, JK_LOG_ERROR,
- "failed setting SO_LINGER (errno=%d)", errno);
- jk_close_socket(sd, l);
- JK_TRACE_EXIT(l);
- return JK_INVALID_SOCKET;
- }
-#endif
- /* Tries to connect to Tomcat (continues trying while error is EINTR) */
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "trying to connect socket %d to %s", sd,
- jk_dump_hinfo(addr, buf));
-
-/* Need more infos for BSD 4.4 and Unix 98 defines, for now only
-iSeries when Unix98 is required at compil time */
-#if (_XOPEN_SOURCE >= 520) && defined(AS400)
- ((struct sockaddr *)addr)->sa_len = sizeof(struct sockaddr_in);
-#endif
- ret = nb_connect(sd, (struct sockaddr *)addr, connect_timeout, l);
-#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
- if (JK_IS_SOCKET_ERROR(ret)) {
- JK_GET_SOCKET_ERRNO();
- }
-#endif /* WIN32 */
-
- /* Check if we are connected */
- if (ret) {
- jk_log(l, JK_LOG_INFO,
- "connect to %s failed (errno=%d)",
- jk_dump_hinfo(addr, buf), errno);
- jk_close_socket(sd, l);
- sd = JK_INVALID_SOCKET;
- }
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG, "socket %d [%s] connected",
- sd, jk_dump_sinfo(sd, buf));
- }
- JK_TRACE_EXIT(l);
- return sd;
-}
-
-/** Close the socket
- * @param sd socket to close
- * @param l logger
- * @return -1: some kind of error occured (!WIN32)
- * SOCKET_ERROR: some kind of error occured (WIN32)
- * 0: success
- * @remark Does not change errno
- */
-int jk_close_socket(jk_sock_t sd, jk_logger_t *l)
-{
- int rc;
- int save_errno;
-
- JK_TRACE_ENTER(l);
-
- if (!IS_VALID_SOCKET(sd)) {
- JK_TRACE_EXIT(l);
- return -1;
- }
-
- save_errno = errno;
-#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
- rc = closesocket(sd) ? -1 : 0;
-#else
- do {
- rc = close(sd);
- } while (JK_IS_SOCKET_ERROR(rc) && (errno == EINTR || errno == EAGAIN));
-#endif
- JK_TRACE_EXIT(l);
- errno = save_errno;
- return rc;
-}
-
-#ifndef MAX_SECS_TO_LINGER
-#define MAX_SECS_TO_LINGER 2
-#endif
-#define MS_TO_LINGER 500
-#define MS_TO_LINGER_LAST 2
-
-#ifndef MAX_LINGER_BYTES
-#define MAX_LINGER_BYTES 32768
-#endif
-
-#ifndef SHUT_WR
-#ifdef SD_SEND
-#define SHUT_WR SD_SEND
-#else
-#define SHUT_WR 0x01
-#endif
-#endif
-
-#ifndef SHUT_RD
-#ifdef SD_RECEIVE
-#define SHUT_RD SD_RECEIVE
-#else
-#define SHUT_RD 0x00
-#endif
-#endif
-
-/** Drain and close the socket
- * @param sd socket to close
- * @param l logger
- * @return -1: socket to close is invalid
- * -1: some kind of error occured (!WIN32)
- * SOCKET_ERROR: some kind of error occured (WIN32)
- * 0: success
- * @remark Does not change errno
- */
-int jk_shutdown_socket(jk_sock_t sd, jk_logger_t *l)
-{
- char dummy[512];
- char buf[64];
- char *sb = NULL;
- int rc = 0;
- size_t rd = 0;
- size_t rp = 0;
- int save_errno;
- int timeout = MS_TO_LINGER;
- time_t start = time(NULL);
-
- JK_TRACE_ENTER(l);
-
- if (!IS_VALID_SOCKET(sd)) {
- JK_TRACE_EXIT(l);
- return -1;
- }
-
- save_errno = errno;
- if (JK_IS_DEBUG_LEVEL(l)) {
- sb = jk_dump_sinfo(sd, buf);
- jk_log(l, JK_LOG_DEBUG, "About to shutdown socket %d [%s]",
- sd, sb);
- }
- /* Shut down the socket for write, which will send a FIN
- * to the peer.
- */
- if (shutdown(sd, SHUT_WR)) {
- rc = jk_close_socket(sd, l);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Failed sending SHUT_WR for socket %d [%s]",
- sd, sb);
- errno = save_errno;
- JK_TRACE_EXIT(l);
- return rc;
- }
-
- do {
- rp = 0;
- if (jk_is_input_event(sd, timeout, l)) {
- /* Do a restartable read on the socket
- * draining out all the data currently in the socket buffer.
- */
- do {
-#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
- rc = recv(sd, &dummy[0], sizeof(dummy), 0);
- if (JK_IS_SOCKET_ERROR(rc))
- JK_GET_SOCKET_ERRNO();
-#else
- rc = read(sd, &dummy[0], sizeof(dummy));
-#endif
- if (rc > 0)
- rp += rc;
- } while (JK_IS_SOCKET_ERROR(rc) && (errno == EINTR || errno == EAGAIN));
-
- if (rc < 0) {
- /* Read failed.
- * Bail out from the loop.
- */
- break;
- }
- }
- else {
- /* Error or timeout (reason is logged within jk_is_input_event)
- * Exit the drain loop
- */
- break;
- }
- rd += rp;
- if (rp < sizeof(dummy)) {
- if (timeout > MS_TO_LINGER_LAST) {
- /* Try one last time with a short timeout
- */
- timeout = MS_TO_LINGER_LAST;
- continue;
- }
- /* We have read less then size of buffer
- * It's a good chance there will be no more data
- * to read.
- */
- if ((rc = sononblock(sd))) {
- rc = jk_close_socket(sd, l);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "error setting socket %d [%s] to nonblocking",
- sd, sb);
- errno = save_errno;
- JK_TRACE_EXIT(l);
- return rc;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "shutting down the read side of socket %d [%s]",
- sd, sb);
- shutdown(sd, SHUT_RD);
- break;
- }
- timeout = MS_TO_LINGER;
- } while ((rd < MAX_LINGER_BYTES) && (difftime(time(NULL), start) < MAX_SECS_TO_LINGER));
-
- rc = jk_close_socket(sd, l);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Shutdown socket %d [%s] and read %d lingering bytes in %d sec.",
- sd, sb, rd, (int)difftime(time(NULL), start));
- errno = save_errno;
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-/** send a message
- * @param sd socket to use
- * @param b buffer containing the data
- * @param len length to send
- * @param l logger
- * @return negative errno: write returns a fatal -1 (!WIN32)
- * negative pseudo errno: send returns SOCKET_ERROR (WIN32)
- * JK_SOCKET_EOF: no bytes could be sent
- * >0: success, provided number of bytes send
- * @remark Always closes socket in case of error
- * @remark Cares about errno
- * @bug this fails on Unixes if len is too big for the underlying
- * protocol
- */
-int jk_tcp_socket_sendfull(jk_sock_t sd, const unsigned char *b, int len, jk_logger_t *l)
-{
- int sent = 0;
- int wr;
-
- JK_TRACE_ENTER(l);
-
- errno = 0;
- while (sent < len) {
- do {
-#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
- wr = send(sd, (const char*)(b + sent),
- len - sent, 0);
- if (JK_IS_SOCKET_ERROR(wr))
- JK_GET_SOCKET_ERRNO();
-#else
- wr = write(sd, b + sent, len - sent);
-#endif
- } while (JK_IS_SOCKET_ERROR(wr) && (errno == EINTR || errno == EAGAIN));
-
- if (JK_IS_SOCKET_ERROR(wr)) {
- int err;
- jk_shutdown_socket(sd, l);
- err = (errno > 0) ? -errno : errno;
- JK_TRACE_EXIT(l);
- return err;
- }
- else if (wr == 0) {
- jk_shutdown_socket(sd, l);
- JK_TRACE_EXIT(l);
- return JK_SOCKET_EOF;
- }
- sent += wr;
- }
-
- JK_TRACE_EXIT(l);
- return sent;
-}
-
-/** receive a message
- * @param sd socket to use
- * @param b buffer to store the data
- * @param len length to receive
- * @param l logger
- * @return negative errno: read returns a fatal -1 (!WIN32)
- * negative pseudo errno: recv returns SOCKET_ERROR (WIN32)
- * JK_SOCKET_EOF: no bytes could be read
- * >0: success, requested number of bytes received
- * @remark Always closes socket in case of error
- * @remark Cares about errno
- */
-int jk_tcp_socket_recvfull(jk_sock_t sd, unsigned char *b, int len, jk_logger_t *l)
-{
- int rdlen = 0;
- int rd;
-
- JK_TRACE_ENTER(l);
-
- errno = 0;
- while (rdlen < len) {
- do {
-#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
- rd = recv(sd, (char *)b + rdlen,
- len - rdlen, 0);
- if (JK_IS_SOCKET_ERROR(rd))
- JK_GET_SOCKET_ERRNO();
-#else
- rd = read(sd, (char *)b + rdlen, len - rdlen);
-#endif
- } while (JK_IS_SOCKET_ERROR(rd) && errno == EINTR);
-
- if (JK_IS_SOCKET_ERROR(rd)) {
- int err = (errno > 0) ? -errno : errno;
- jk_shutdown_socket(sd, l);
- JK_TRACE_EXIT(l);
- return (err == 0) ? JK_SOCKET_EOF : err;
- }
- else if (rd == 0) {
- jk_shutdown_socket(sd, l);
- JK_TRACE_EXIT(l);
- return JK_SOCKET_EOF;
- }
- rdlen += rd;
- }
-
- JK_TRACE_EXIT(l);
- return rdlen;
-}
-
-/**
- * dump a sockaddr_in in A.B.C.D:P in ASCII buffer
- *
- */
-char *jk_dump_hinfo(struct sockaddr_in *saddr, char *buf)
-{
- unsigned long laddr = (unsigned long)htonl(saddr->sin_addr.s_addr);
- unsigned short lport = (unsigned short)htons(saddr->sin_port);
-
- sprintf(buf, "%d.%d.%d.%d:%d",
- (int)(laddr >> 24), (int)((laddr >> 16) & 0xff),
- (int)((laddr >> 8) & 0xff), (int)(laddr & 0xff), (int)lport);
-
- return buf;
-}
-
-char *jk_dump_sinfo(jk_sock_t sd, char *buf)
-{
- struct sockaddr_in rsaddr;
- struct sockaddr_in lsaddr;
- socklen_t salen;
-
- salen = sizeof(struct sockaddr);
- if (getsockname(sd, (struct sockaddr *)&lsaddr, &salen) == 0) {
- salen = sizeof(struct sockaddr);
- if (getpeername(sd, (struct sockaddr *)&rsaddr, &salen) == 0) {
- unsigned long laddr = (unsigned long)htonl(lsaddr.sin_addr.s_addr);
- unsigned short lport = (unsigned short)htons(lsaddr.sin_port);
- unsigned long raddr = (unsigned long)htonl(rsaddr.sin_addr.s_addr);
- unsigned short rport = (unsigned short)htons(rsaddr.sin_port);
- sprintf(buf, "%d.%d.%d.%d:%d -> %d.%d.%d.%d:%d",
- (int)(laddr >> 24), (int)((laddr >> 16) & 0xff),
- (int)((laddr >> 8) & 0xff), (int)(laddr & 0xff), (int)lport,
- (int)(raddr >> 24), (int)((raddr >> 16) & 0xff),
- (int)((raddr >> 8) & 0xff), (int)(raddr & 0xff), (int)rport);
- return buf;
- }
- }
- sprintf(buf, "error=%d", errno);
- return buf;
-}
-
-/** Wait for input event on socket until timeout
- * @param sd socket to use
- * @param timeout wait timeout in milliseconds
- * @param l logger
- * @return JK_FALSE: Timeout expired without something to read
- * JK_FALSE: Error during waiting
- * JK_TRUE: success
- * @remark Does not close socket in case of error
- * to allow for iterative waiting
- * @remark Cares about errno
- */
-#ifdef HAVE_POLL
-int jk_is_input_event(jk_sock_t sd, int timeout, jk_logger_t *l)
-{
- struct pollfd fds;
- int rc;
- int save_errno;
- char buf[64];
-
- JK_TRACE_ENTER(l);
-
- errno = 0;
- fds.fd = sd;
- fds.events = POLLIN;
- fds.revents = 0;
-
- do {
- rc = poll(&fds, 1, timeout);
- } while (rc < 0 && errno == EINTR);
-
- if (rc == 0) {
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "timeout during poll on socket %d [%s] (timeout=%d)",
- sd, jk_dump_sinfo(sd, buf), timeout);
- }
- /* Timeout. Set the errno to timeout */
- errno = ETIMEDOUT;
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- else if (rc < 0) {
- save_errno = errno;
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "error during poll on socket %d [%s] (errno=%d)",
- sd, jk_dump_sinfo(sd, buf), errno);
- }
- errno = save_errno;
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if ((fds.revents & (POLLERR | POLLHUP))) {
- save_errno = fds.revents & (POLLERR | POLLHUP);
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "error event during poll on socket %d [%s] (event=%d)",
- sd, jk_dump_sinfo(sd, buf), save_errno);
- }
- errno = save_errno;
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- errno = 0;
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-#else
-int jk_is_input_event(jk_sock_t sd, int timeout, jk_logger_t *l)
-{
- fd_set rset;
- struct timeval tv;
- int rc;
- int save_errno;
- char buf[64];
-
- JK_TRACE_ENTER(l);
-
- errno = 0;
- FD_ZERO(&rset);
- FD_SET(sd, &rset);
- tv.tv_sec = timeout / 1000;
- tv.tv_usec = (timeout % 1000) * 1000;
-
- do {
- rc = select((int)sd + 1, &rset, NULL, NULL, &tv);
- } while (rc < 0 && errno == EINTR);
-
- if (rc == 0) {
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "timeout during select on socket %d [%s] (timeout=%d)",
- sd, jk_dump_sinfo(sd, buf), timeout);
- }
- /* Timeout. Set the errno to timeout */
-#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
- errno = WSAETIMEDOUT - WSABASEERR;
-#else
- errno = ETIMEDOUT;
-#endif
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- else if (rc < 0) {
- save_errno = errno;
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "error during select on socket %d [%s] (errno=%d)",
- sd, jk_dump_sinfo(sd, buf), errno);
- }
- errno = save_errno;
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- errno = 0;
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-#endif
-
-/** Test if a socket is still connected
- * @param sd socket to use
- * @param l logger
- * @return JK_FALSE: failure
- * JK_TRUE: success
- * @remark Always closes socket in case of error
- * @remark Cares about errno
- */
-#ifdef HAVE_POLL
-int jk_is_socket_connected(jk_sock_t sd, jk_logger_t *l)
-{
- struct pollfd fds;
- int rc;
-
- JK_TRACE_ENTER(l);
-
- errno = 0;
- fds.fd = sd;
- fds.events = POLLIN;
-
- do {
- rc = poll(&fds, 1, 0);
- } while (rc < 0 && errno == EINTR);
-
- if (rc == 0) {
- /* If we get a timeout, then we are still connected */
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else if (rc == 1 && fds.revents == POLLIN) {
- char buf;
- do {
- rc = (int)recvfrom(sd, &buf, 1, MSG_PEEK, NULL, NULL);
- } while (rc < 0 && errno == EINTR);
- if (rc == 1) {
- /* There is at least one byte to read. */
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- }
- jk_shutdown_socket(sd, l);
-
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-#else
-int jk_is_socket_connected(jk_sock_t sd, jk_logger_t *l)
-{
- fd_set fd;
- struct timeval tv;
- int rc;
-
- JK_TRACE_ENTER(l);
-
- errno = 0;
- FD_ZERO(&fd);
- FD_SET(sd, &fd);
-
- /* Initially test the socket without any blocking.
- */
- tv.tv_sec = 0;
- tv.tv_usec = 0;
-
- do {
- rc = select((int)sd + 1, &fd, NULL, NULL, &tv);
- JK_GET_SOCKET_ERRNO();
- /* Wait one microsecond on next select, if EINTR */
- tv.tv_sec = 0;
- tv.tv_usec = 1;
- } while (JK_IS_SOCKET_ERROR(rc) && errno == EINTR);
-
- errno = 0;
- if (rc == 0) {
- /* If we get a timeout, then we are still connected */
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else if (rc == 1) {
-#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
- u_long nr;
- rc = ioctlsocket(sd, FIONREAD, &nr);
- if (rc == 0) {
- if (WSAGetLastError() == 0)
- errno = 0;
- else
- JK_GET_SOCKET_ERRNO();
- }
-#else
- int nr;
- rc = ioctl(sd, FIONREAD, (void*)&nr);
-#endif
- if (rc == 0 && nr != 0) {
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- JK_GET_SOCKET_ERRNO();
- }
- jk_shutdown_socket(sd, l);
-
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-#endif
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.h
deleted file mode 100644
index 04edde23..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Socket connections header file *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 995751 $ *
- ***************************************************************************/
-
-#ifndef JK_CONNECT_H
-#define JK_CONNECT_H
-
-#include "jk_logger.h"
-#include "jk_global.h"
-
-#if !defined(WIN32) && !(defined(NETWARE) && defined(__NOVELL_LIBC__))
-#define closesocket close
-#endif
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define JK_SOCKET_EOF (-2)
-
-int jk_resolve(const char *host, int port, struct sockaddr_in *rc, void *pool, jk_logger_t *l);
-
-jk_sock_t jk_open_socket(struct sockaddr_in *addr, int keepalive,
- int timeout, int connect_timeout,
- int sock_buf, jk_logger_t *l);
-
-int jk_close_socket(jk_sock_t sd, jk_logger_t *l);
-
-int jk_shutdown_socket(jk_sock_t sd, jk_logger_t *l);
-
-int jk_tcp_socket_sendfull(jk_sock_t sd, const unsigned char *b, int len, jk_logger_t *l);
-
-int jk_tcp_socket_recvfull(jk_sock_t sd, unsigned char *b, int len, jk_logger_t *l);
-
-char *jk_dump_hinfo(struct sockaddr_in *saddr, char *buf);
-
-char *jk_dump_sinfo(jk_sock_t sd, char *buf);
-
-int jk_is_input_event(jk_sock_t sd, int timeout, jk_logger_t *l);
-
-int jk_is_socket_connected(jk_sock_t sd, jk_logger_t *l);
-
-
-/***
- * i5/OS V5R4 need ASCII<->EBCDIC translation for inet_addr() call
- */
-#if !defined(AS400_UTF8)
-
-#define jk_inet_addr inet_addr
-
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* JK_CONNECT_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.lo
deleted file mode 100644
index d1cf96e4..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_connect.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_connect.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_connect.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.o
deleted file mode 100644
index d33c04e2..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_connect.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.c
deleted file mode 100644
index f65ba836..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Context handling (Autoconf) *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-#include "jk_global.h"
-#include "jk_context.h"
-#include "jk_ajp_common.h"
-
-
-/*
- * Set the virtual name of the context
- */
-
-int context_set_virtual(jk_context_t *c, char *virt)
-{
- if (c) {
-
- if (virt) {
- c->virt = jk_pool_strdup(&c->p, virt);
-
- if (!c->virt)
- return JK_FALSE;
- }
-
- return JK_TRUE;
- }
-
- return JK_FALSE;
-}
-
-/*
- * Init the context info struct
- */
-
-int context_open(jk_context_t *c, char *virt)
-{
- if (c) {
- jk_open_pool(&c->p, c->buf, sizeof(jk_pool_atom_t) * SMALL_POOL_SIZE);
- c->size = 0;
- c->capacity = 0;
- c->contexts = NULL;
-
- return context_set_virtual(c, virt);
- }
-
- return JK_FALSE;
-}
-
-/*
- * Close the context info struct
- */
-
-int context_close(jk_context_t *c)
-{
- if (c) {
-
- jk_close_pool(&c->p);
- return JK_TRUE;
- }
-
- return JK_FALSE;
-}
-
-/*
- * Allocate and open context
- */
-
-int context_alloc(jk_context_t **c, char *virt)
-{
- if (c)
- return context_open(*c =
- (jk_context_t *)calloc(1, sizeof(jk_context_t)),
- virt);
-
- return JK_FALSE;
-}
-
-/*
- * Close and destroy context
- */
-
-int context_free(jk_context_t **c)
-{
- if (c && *c) {
- context_close(*c);
- free(*c);
- *c = NULL;
- return JK_TRUE;
- }
-
- return JK_FALSE;
-}
-
-
-/*
- * Ensure there will be memory in context info to store Context Bases
- */
-
-static int context_realloc(jk_context_t *c)
-{
- if (c->size == c->capacity) {
- jk_context_item_t **contexts;
- int capacity = c->capacity + CBASE_INC_SIZE;
-
- contexts =
- (jk_context_item_t **)jk_pool_alloc(&c->p,
- sizeof(jk_context_item_t *) *
- capacity);
-
- if (!contexts)
- return JK_FALSE;
-
- if (c->capacity && c->contexts)
- memcpy(contexts, c->contexts,
- sizeof(jk_context_item_t *) * c->capacity);
-
- c->contexts = contexts;
- c->capacity = capacity;
- }
-
- return JK_TRUE;
-}
-
-/*
- * Ensure there will be memory in context info to URIS
- */
-
-static int context_item_realloc(jk_context_t *c, jk_context_item_t *ci)
-{
- if (ci->size == ci->capacity) {
- char **uris;
- int capacity = ci->capacity + URI_INC_SIZE;
-
- uris = (char **)jk_pool_alloc(&c->p, sizeof(char *) * capacity);
-
- if (!uris)
- return JK_FALSE;
-
- memcpy(uris, ci->uris, sizeof(char *) * ci->capacity);
-
- ci->uris = uris;
- ci->capacity = capacity;
- }
-
- return JK_TRUE;
-}
-
-
-/*
- * Locate a context base in context list
- */
-
-jk_context_item_t *context_find_base(jk_context_t *c, char *cbase)
-{
- int i;
- jk_context_item_t *ci;
-
- if (!c || !cbase)
- return NULL;
-
- for (i = 0; i < c->size; i++) {
-
- ci = c->contexts[i];
-
- if (!ci)
- continue;
-
- if (!strcmp(ci->cbase, cbase))
- return ci;
- }
-
- return NULL;
-}
-
-/*
- * Locate an URI in a context item
- */
-
-char *context_item_find_uri(jk_context_item_t *ci, char *uri)
-{
- int i;
-
- if (!ci || !uri)
- return NULL;
-
- for (i = 0; i < ci->size; i++) {
- if (!strcmp(ci->uris[i], uri))
- return ci->uris[i];
- }
-
- return NULL;
-}
-
-void context_dump_uris(jk_context_t *c, char *cbase, FILE * f)
-{
- jk_context_item_t *ci;
- int i;
-
- ci = context_find_base(c, cbase);
-
- if (!ci)
- return;
-
- for (i = 0; i < ci->size; i++)
- fprintf(f, "/%s/%s\n", ci->cbase, ci->uris[i]);
-
- fflush(f);
-}
-
-
-/*
- * Add a new context item to context
- */
-
-jk_context_item_t *context_add_base(jk_context_t *c, char *cbase)
-{
- jk_context_item_t *ci;
-
- if (!c || !cbase)
- return NULL;
-
- /* Check if the context base was not allready created */
- ci = context_find_base(c, cbase);
-
- if (ci)
- return ci;
-
- if (context_realloc(c) != JK_TRUE)
- return NULL;
-
- ci = (jk_context_item_t *)jk_pool_alloc(&c->p, sizeof(jk_context_item_t));
-
- if (!ci)
- return NULL;
-
- c->contexts[c->size] = ci;
- c->size++;
- ci->cbase = jk_pool_strdup(&c->p, cbase);
- ci->status = 0;
- ci->size = 0;
- ci->capacity = 0;
- ci->uris = NULL;
-
- return ci;
-}
-
-/*
- * Add a new URI to a context item
- */
-
-int context_add_uri(jk_context_t *c, char *cbase, char *uri)
-{
- jk_context_item_t *ci;
-
- if (!uri)
- return JK_FALSE;
-
- /* Get/Create the context base */
- ci = context_add_base(c, cbase);
-
- if (!ci)
- return JK_FALSE;
-
- if (context_item_find_uri(ci, uri) != NULL)
- return JK_TRUE;
-
- if (context_item_realloc(c, ci) == JK_FALSE)
- return JK_FALSE;
-
- ci->uris[ci->size] = jk_pool_strdup(&c->p, uri);
-
- if (ci->uris[ci->size] == NULL)
- return JK_FALSE;
-
- ci->size++;
- return JK_TRUE;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.h
deleted file mode 100644
index 7c872f58..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Context Stuff (Autoconf) *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-#ifndef JK_CONTEXT_H
-#define JK_CONTEXT_H
-
-#include "jk_pool.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define CBASE_INC_SIZE (8) /* Allocate memory by step of 8 URIs : ie 8 URI by context */
-#define URI_INC_SIZE (8) /* Allocate memory by step of 8 CONTEXTs : ie 8 contexts by worker */
-
-typedef struct
-{
-
- /*
- * Context base (ie examples)
- */
-
- char *cbase;
-
- /*
- * Status (Up/Down)
- */
-
- int status;
-
- /*
- * Num of URI handled
- */
-
- int size;
-
- /*
- * Capacity
- */
-
- int capacity;
-
- /*
- * URL/URIs (autoconf)
- */
-
- char **uris;
-}
-jk_context_item_t;
-
-
-typedef struct
-{
-
- /*
- * Memory Pool
- */
-
- jk_pool_t p;
- jk_pool_atom_t buf[SMALL_POOL_SIZE];
-
- /*
- * Virtual Server (if use)
- */
-
- char *virt;
-
- /*
- * Num of context handled (ie: examples, admin...)
- */
-
- int size;
-
- /*
- * Capacity
- */
-
- int capacity;
-
- /*
- * Context list, context / URIs
- */
-
- jk_context_item_t **contexts;
-}
-jk_context_t;
-
-
-/*
- * functions defined here
- */
-
-int context_set_virtual(jk_context_t *c, char *virt);
-
-int context_open(jk_context_t *c, char *virt);
-
-int context_close(jk_context_t *c);
-
-int context_alloc(jk_context_t **c, char *virt);
-
-int context_free(jk_context_t **c);
-
-jk_context_item_t *context_find_base(jk_context_t *c, char *cbase);
-
-char *context_item_find_uri(jk_context_item_t *ci, char *uri);
-
-void context_dump_uris(jk_context_t *c, char *cbase, FILE * f);
-
-jk_context_item_t *context_add_base(jk_context_t *c, char *cbase);
-
-int context_add_uri(jk_context_t *c, char *cbase, char *uri);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* JK_CONTEXT_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.lo
deleted file mode 100644
index a03a50c6..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_context.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_context.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_context.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.o
deleted file mode 100644
index 88da42a1..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_context.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_global.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_global.h
deleted file mode 100644
index c041b49a..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_global.h
+++ /dev/null
@@ -1,405 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Global definitions and include files that should exist *
- * anywhere *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 1126561 $ *
- ***************************************************************************/
-
-#ifndef JK_GLOBAL_H
-#define JK_GLOBAL_H
-
-#if defined(HAVE_CONFIG_H)
-#include "config.h"
-#endif
-
-#if defined(WIN32)
-
-/* Ignore most warnings (back down to /W3) for poorly constructed headers
- */
-#if defined(_MSC_VER) && _MSC_VER >= 1200
-#pragma warning(push, 3)
-#endif
-
-/* disable or reduce the frequency of...
- * C4057: indirection to slightly different base types
- * C4075: slight indirection changes (unsigned short* vs short[])
- * C4100: unreferenced formal parameter
- * C4127: conditional expression is constant
- * C4163: '_rotl64' : not available as an intrinsic function
- * C4201: nonstandard extension nameless struct/unions
- * C4244: int to char/short - precision loss
- * C4514: unreferenced inline function removed
- */
-#pragma warning(disable: 4100 4127 4163 4201 4514; once: 4057 4075 4244)
-
-/* Ignore Microsoft's interpretation of secure development
- * and the POSIX string handling API
- */
-#if defined(_MSC_VER) && _MSC_VER >= 1400
-#ifndef _CRT_SECURE_NO_DEPRECATE
-#define _CRT_SECURE_NO_DEPRECATE
-#endif
-#pragma warning(disable: 4996)
-#endif /* defined(_MSC_VER) && _MSC_VER >= 1400 */
-#endif /* defined(WIN32) */
-
-#include "jk_version.h"
-
-#ifdef HAVE_APR
-#include "apr_lib.h"
-#include "apr_strings.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <time.h>
-#include <ctype.h>
-#include <limits.h>
-
-#ifdef _OSD_POSIX
-#include "ap_config.h"
-#endif
-
-#ifdef AS400
-#include "ap_config.h"
-extern char *strdup(const char *str);
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef WIN32
-#ifndef _WINDOWS_
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN
-#endif
-#ifndef _WIN32_WINNT
-
-/* Restrict the server to a subset of Windows NT 4.0 header files by default
- */
-#define _WIN32_WINNT 0x0500
-#endif
-#ifndef NOUSER
-#define NOUSER
-#endif
-#ifndef NOMCX
-#define NOMCX
-#endif
-#ifndef NOIME
-#define NOIME
-#endif
-#include <windows.h>
-/*
- * Add a _very_few_ declarations missing from the restricted set of headers
- * (If this list becomes extensive, re-enable the required headers above!)
- * winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now
- */
-#include <winsock2.h>
-#include <mswsock.h>
-#include <mstcpip.h>
-#endif /* _WINDOWS_ */
-#ifdef _WINDOWS_
-#ifndef SIO_RCVALL
-#include <mstcpip.h>
-#endif
-#endif
-#include <sys/timeb.h>
-#include <process.h>
-#include <io.h>
-#include <ws2tcpip.h>
-#else /* WIN32 */
-#include <unistd.h>
-#if defined(NETWARE) && defined(__NOVELL_LIBC__)
-#include <novsock2.h>
-#define __sys_socket_h__
-#define __netdb_h__
-#define __netinet_in_h__
-#define HAVE_VSNPRINTF
-#define HAVE_SNPRINTF
-#endif
-#include <netdb.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-#include <fcntl.h>
-#ifdef NETWARE
-#ifndef _SOCKLEN_T
-#define _SOCKLEN_T
-typedef int socklen_t;
-#endif
-#else
-#include <netinet/tcp.h>
-#include <arpa/inet.h>
-#include <sys/un.h>
-#if !defined(_OSD_POSIX) && !defined(AS400) && !defined(__CYGWIN__) && !defined(HPUX11)
-#include <sys/socketvar.h>
-#endif
-#if !defined(HPUX11) && !defined(AS400)
-#include <sys/select.h>
-#endif
-#endif /* NETWARE */
-
-#include <sys/time.h>
-#include <sys/ioctl.h>
-#endif /* WIN32 */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define JK_WORKER_FILE_TAG ("worker_file")
-#define JK_MOUNT_FILE_TAG ("worker_mount_file")
-#define JK_LOG_LEVEL_TAG ("log_level")
-#define JK_LOG_FILE_TAG ("log_file")
-#define JK_SHM_FILE_TAG ("shm_file")
-#define JK_WORKER_NAME_TAG ("worker")
-
-#define JK_WORKER_FILE_DEF ("workers.properties")
-
-/* Urimap reload check time. Use 60 seconds by default.
- */
-#define JK_URIMAP_DEF_RELOAD (60)
-
-#define JK_TRUE (1)
-#define JK_FALSE (0)
-
-#define JK_UNSET (-1)
-
-#define JK_LF (10)
-#define JK_CR (13)
-
-#define JK_SESSION_IDENTIFIER "JSESSIONID"
-#define JK_PATH_SESSION_IDENTIFIER ";jsessionid"
-
-#if defined(WIN32) || defined(NETWARE)
-#ifdef __GNUC__
-#define JK_METHOD
-#define C_LEVEL_TRY_START
-#define C_LEVEL_TRY_END
-#define C_LEVEL_FINALLY_START
-#define C_LEVEL_FINALLY_END
-#else
-#define JK_METHOD __stdcall
-#define C_LEVEL_TRY_START __try {
-#define C_LEVEL_TRY_END }
-#define C_LEVEL_FINALLY_START __finally {
-#define C_LEVEL_FINALLY_END }
-#endif
-#define PATH_SEPERATOR (';')
-#define FILE_SEPERATOR ('\\')
-#define PATH_ENV_VARIABLE ("PATH")
-
- /* incompatible names... */
-#ifndef strcasecmp
-#define strcasecmp stricmp
-#endif
-#else /* defined(WIN32) || defined(NETWARE) */
-#define JK_METHOD
-#define C_LEVEL_TRY_START
-#define C_LEVEL_TRY_END
-#define C_LEVEL_FINALLY_START
-#define C_LEVEL_FINALLY_END
-#define PATH_SEPERATOR (':')
-#define FILE_SEPERATOR ('/')
-#define PATH_ENV_VARIABLE ("LD_LIBRARY_PATH")
-#endif /* defined(WIN32) || defined(NETWARE) */
-
-/* HTTP Error codes
- */
-
-#define JK_HTTP_OK 200
-#define JK_HTTP_BAD_REQUEST 400
-#define JK_HTTP_UNAUTHORIZED 401
-#define JK_HTTP_REQUEST_TOO_LARGE 413
-#define JK_HTTP_SERVER_ERROR 500
-#define JK_HTTP_NOT_IMPLEMENTED 501
-#define JK_HTTP_BAD_GATEWAY 502
-#define JK_HTTP_SERVER_BUSY 503
-#define JK_HTTP_GATEWAY_TIME_OUT 504
-
-
-/*
- * RECO STATUS
- */
-
-#define RECO_NONE 0x00
-#define RECO_INITED 0x01
-#define RECO_FILLED 0x02
-
-/*
- * JK options
- */
-
-#define JK_OPT_FWDURIMASK 0x0007
-
-#define JK_OPT_FWDURICOMPAT 0x0001
-#define JK_OPT_FWDURICOMPATUNPARSED 0x0002
-#define JK_OPT_FWDURIESCAPED 0x0003
-#define JK_OPT_FWDURIPROXY 0x0004
-
-#define JK_OPT_FWDURIDEFAULT JK_OPT_FWDURIPROXY
-
-#define JK_OPT_FWDDIRS 0x0008
-/* Forward local instead remote address */
-#define JK_OPT_FWDLOCAL 0x0010
-#define JK_OPT_FLUSHPACKETS 0x0020
-#define JK_OPT_FLUSHEADER 0x0040
-#define JK_OPT_DISABLEREUSE 0x0080
-#define JK_OPT_FWDCERTCHAIN 0x0100
-#define JK_OPT_FWDKEYSIZE 0x0200
-#define JK_OPT_REJECTUNSAFE 0x0400
-
-#define JK_OPT_DEFAULT (JK_OPT_FWDURIDEFAULT | JK_OPT_FWDKEYSIZE)
-
-/* Check for EBCDIC systems */
-
-/* Check for Apache 2.0 running on an EBCDIC system */
-#if APR_CHARSET_EBCDIC
-
-#include <util_ebcdic.h>
-
-#define USE_CHARSET_EBCDIC
-#define jk_xlate_to_ascii(b, l) ap_xlate_proto_to_ascii(b, l)
-#define jk_xlate_from_ascii(b, l) ap_xlate_proto_from_ascii(b, l)
-
-#else /* APR_CHARSET_EBCDIC */
-
-/* Check for Apache 1.3 running on an EBCDIC system */
-#ifdef CHARSET_EBCDIC
-
-#define USE_CHARSET_EBCDIC
-#define jk_xlate_to_ascii(b, l) ebcdic2ascii(b, b, l)
-#define jk_xlate_from_ascii(b, l) ascii2ebcdic(b, b, l)
-
-#else /* CHARSET_EBCDIC */
-
-/* We're in on an ASCII system */
-
-#define jk_xlate_to_ascii(b, l) /* NOOP */
-#define jk_xlate_from_ascii(b, l) /* NOOP */
-
-#endif /* CHARSET_EBCDIC */
-
-#endif /* APR_CHARSET_EBCDIC */
-
-/* on i5/OS V5R4 HTTP/APR APIs and Datas are in UTF */
-#if defined(AS400_UTF8)
-#undef USE_CHARSET_EBCDIC
-#define jk_xlate_to_ascii(b, l) /* NOOP */
-#define jk_xlate_from_ascii(b, l) /* NOOP */
-#endif
-
-/* jk_uint32_t defines a four byte word */
-/* jk_uint64_t defines a eight byte word */
-#if defined (WIN32)
- typedef unsigned int jk_uint32_t;
-#define JK_UINT32_T_FMT "u"
-#define JK_UINT32_T_HEX_FMT "x"
- typedef unsigned __int64 jk_uint64_t;
-#define JK_UINT64_T_FMT "I64u"
-#define JK_UINT64_T_HEX_FMT "I64x"
-#define JK_PID_T_FMT "d"
-#define JK_PTHREAD_T_FMT "d"
-#elif defined(AS400) || defined(NETWARE)
- typedef unsigned int jk_uint32_t;
-#define JK_UINT32_T_FMT "u"
-#define JK_UINT32_T_HEX_FMT "x"
- typedef unsigned long long jk_uint64_t;
-#define JK_UINT64_T_FMT "llu"
-#define JK_UINT64_T_HEX_FMT "llx"
-#define JK_PID_T_FMT "d"
-#define JK_PTHREAD_T_FMT "d"
-#else
-#include "jk_types.h"
-#endif
-
-#define JK_UINT32_T_FMT_LEN (sizeof(JK_UINT32_T_FMT) - 1)
-#define JK_UINT32_T_HEX_FMT_LEN (sizeof(JK_UINT32_T_HEX_FMT) - 1)
-#define JK_UINT64_T_FMT_LEN (sizeof(JK_UINT64_T_FMT) - 1)
-#define JK_UINT64_T_HEX_FMT_LEN (sizeof(JK_UINT64_T_HEX_FMT) - 1)
-
-#ifdef WIN32
-/* For WIN32, emulate gettimeofday() using _ftime() */
-#define gettimeofday(tv, tz) { struct _timeb tb; _ftime(&tb); \
- (tv)->tv_sec = (long)tb.time; \
- (tv)->tv_usec = tb.millitm * 1000; }
-#define HAVE_VSNPRINTF
-#define HAVE_SNPRINTF
-#ifdef HAVE_APR
-#define snprintf apr_snprintf
-#define vsnprintf apr_vsnprintf
-#else
-/* define snprint to match windows version */
-#define snprintf _snprintf
-#define vsnprintf _vsnprintf
-#endif
-#endif /* WIN32" */
-
-/* Use apr snprintf() and vsnprintf() when needed */
-#if defined(HAVE_APR)
-#if !defined(HAVE_SNPRINTF)
-#define snprintf apr_snprintf
-#endif
-#if !defined(HAVE_VSNPRINTF)
-#define vsnprintf apr_vsnprintf
-#endif
-#endif
-
-/* Use ap snprintf() and vsnprintf() when needed */
-#if !defined(HAVE_APR)
-#if !defined(HAVE_SNPRINTF)
-#define snprintf ap_snprintf
-#endif
-#if !defined(HAVE_VSNPRINTF)
-#define vsnprintf ap_vsnprintf
-#endif
-#endif
-
-#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
-typedef SOCKET jk_sock_t;
-#define IS_VALID_SOCKET(s) ((s) != INVALID_SOCKET)
-#define JK_INVALID_SOCKET INVALID_SOCKET
-#else
-typedef int jk_sock_t;
-#define IS_VALID_SOCKET(s) ((s) > 0)
-#define JK_INVALID_SOCKET (-1)
-#endif
-
-#ifdef NETWARE
-#ifdef __NOVELL_LIBC__
-#define MAX_PATH 511
-#else
-#define MAX_PATH 255
-#endif
-#endif
-
-#ifdef AS400_UTF8
-#define strcasecmp(a,b) apr_strnatcasecmp(a,b)
-#endif
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* JK_GLOBAL_H */
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.c
deleted file mode 100644
index 048f4435..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.c
+++ /dev/null
@@ -1,1267 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: In process JNI worker *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Based on: *
- * Version: $Revision: 750428 $ *
- ***************************************************************************/
-
-#if !defined(WIN32) && !defined(NETWARE) && !defined(AS400)
-#include <dlfcn.h>
-#endif
-
-#include <jni.h>
-
-#include "jk_pool.h"
-#include "jk_jni_worker.h"
-#include "jk_util.h"
-
-#if !defined(JNI_VERSION_1_6)
-#if defined LINUX && defined APACHE2_SIGHACK
-#include <pthread.h>
-#include <signal.h>
-#include <bits/signum.h>
-#endif
-
-#ifdef NETWARE
-#ifdef __NOVELL_LIBC__
-#include <dlfcn.h>
-#else
-#include <nwthread.h>
-#include <nwadv.h>
-#endif
-#endif
-
-#ifndef JNI_VERSION_1_1
-#define JNI_VERSION_1_1 0x00010001
-#endif
-
-/* probably on an older system that doesn't support RTLD_NOW or RTLD_LAZY.
- * The below define is a lie since we are really doing RTLD_LAZY since the
- * system doesn't support RTLD_NOW.
- */
-#ifndef RTLD_NOW
-#define RTLD_NOW 1
-#endif
-
-#ifndef RTLD_GLOBAL
-#define RTLD_GLOBAL 0
-#endif
-
-#define null_check(e) if ((e) == 0) return JK_FALSE
-
-jint(JNICALL * jni_get_default_java_vm_init_args) (void *) = NULL;
-jint(JNICALL * jni_create_java_vm) (JavaVM **, JNIEnv **, void *) = NULL;
-#ifdef AS400
-jint(JNICALL * jni_get_created_java_vms) (JavaVM **, long, long *) = NULL;
-#else
-jint(JNICALL * jni_get_created_java_vms) (JavaVM **, int, int *) = NULL;
-#endif
-
-#define TC33_JAVA_BRIDGE_CLASS_NAME ("org/apache/tomcat/modules/server/JNIEndpoint")
-#define TC32_JAVA_BRIDGE_CLASS_NAME ("org/apache/tomcat/service/JNIEndpoint")
-
-static jk_worker_t *the_singleton_jni_worker = NULL;
-
-struct jni_worker
-{
-
- int was_verified;
- int was_initialized;
-
- jk_pool_t p;
- jk_pool_atom_t buf[TINY_POOL_SIZE];
-
- /*
- * JVM Object pointer.
- */
- JavaVM *jvm;
-
- /*
- * [V] JNIEnv used for boostraping from validate -> init w/o an attach
- */
- JNIEnv *tmp_env;
-
- /*
- * Web Server to Java bridge, instance and class.
- */
- jobject jk_java_bridge_object;
- jclass jk_java_bridge_class;
-
- /*
- * Java methods ids, to jump into the JVM
- */
- jmethodID jk_startup_method;
- jmethodID jk_service_method;
- jmethodID jk_shutdown_method;
-
- /*
- * Command line for tomcat startup
- */
- char *tomcat_cmd_line;
-
- /*
- * Bridge Type, Tomcat 32/33/40/41/5
- */
- unsigned bridge_type;
-
- /*
- * Classpath
- */
- char *tomcat_classpath;
-
- /*
- * Full path to the jni javai/jvm dll
- */
- char *jvm_dll_path;
-
- /*
- * Initial Java heap size
- */
- unsigned tomcat_ms;
-
- /*
- * Max Java heap size
- */
- unsigned tomcat_mx;
-
- /*
- * Java system properties
- */
- char **sysprops;
-
-#ifdef JNI_VERSION_1_2
- /*
- * Java 2 initialization options (-X... , -verbose etc.)
- */
- char **java2opts;
-
- /*
- * Java 2 lax/strict option checking (bool)
- */
- int java2lax;
-#endif
-
- /*
- * stdout and stderr file names for Java
- */
- char *stdout_name;
- char *stderr_name;
-
- char *name;
- jk_worker_t worker;
-};
-typedef struct jni_worker jni_worker_t;
-
-struct jni_endpoint
-{
- int attached;
- JNIEnv *env;
- jni_worker_t *worker;
-
- jk_endpoint_t endpoint;
-};
-typedef struct jni_endpoint jni_endpoint_t;
-
-
-static int load_jvm_dll(jni_worker_t * p, jk_logger_t *l);
-
-static int open_jvm(jni_worker_t * p, JNIEnv ** env, jk_logger_t *l);
-
-static int open_jvm1(jni_worker_t * p, JNIEnv ** env, jk_logger_t *l);
-
-#ifdef JNI_VERSION_1_2
-static int detect_jvm_version(jk_logger_t *l);
-
-static int open_jvm2(jni_worker_t * p, JNIEnv ** env, jk_logger_t *l);
-#endif
-
-
-static int get_bridge_object(jni_worker_t * p, JNIEnv * env, jk_logger_t *l);
-
-static int get_method_ids(jni_worker_t * p, JNIEnv * env, jk_logger_t *l);
-
-static JNIEnv *attach_to_jvm(jni_worker_t * p, jk_logger_t *l);
-
-static void detach_from_jvm(jni_worker_t * p, jk_logger_t *l);
-
-
-/*
- Duplicate string and convert it to ASCII on EBDIC based systems
- Needed for at least AS/400 (before V5R4 ?) and BS2000 but what about other EBDIC systems ?
-*/
-static void *strdup_ascii(jk_pool_t *p, char *s)
-{
- char *rc;
- rc = jk_pool_strdup(p, s);
-
-#if defined(AS400) || defined(_OSD_POSIX)
- jk_xlate_to_ascii(rc, strlen(rc));
-#endif
-
- return rc;
-}
-
-#if defined LINUX && defined APACHE2_SIGHACK
-static void linux_signal_hack()
-{
- sigset_t newM;
- sigset_t old;
-
- sigemptyset(&newM);
- pthread_sigmask(SIG_SETMASK, &newM, &old);
-
- sigdelset(&old, SIGUSR1);
- sigdelset(&old, SIGUSR2);
- sigdelset(&old, SIGUNUSED);
- sigdelset(&old, SIGRTMIN);
- sigdelset(&old, SIGRTMIN + 1);
- sigdelset(&old, SIGRTMIN + 2);
- pthread_sigmask(SIG_SETMASK, &old, NULL);
-}
-
-static void print_signals(sigset_t * sset)
-{
- int sig;
- for (sig = 1; sig < 20; sig++) {
- if (sigismember(sset, sig)) {
- printf(" %d", sig);
- }
- }
- printf("\n");
-}
-#endif
-
-/*
- * Return values of service() method for jni worker:
- * return value is_error reason
- * JK_FALSE JK_HTTP_SERVER_ERROR Invalid parameters (null values)
- * Error during attach to the JNI backend
- * Error during JNI call
- * JK_TRUE JK_HTTP_OK All other cases
- */
-static int JK_METHOD service(jk_endpoint_t *e,
- jk_ws_service_t *s,
- jk_logger_t *l, int *is_error)
-{
- jni_endpoint_t *p;
- jint rc;
-
- JK_TRACE_ENTER(l);
-
- if (!e || !e->endpoint_private || !s || !is_error) {
- JK_LOG_NULL_PARAMS(l);
- if (is_error)
- *is_error = JK_HTTP_SERVER_ERROR;
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- p = e->endpoint_private;
-
- /* Set returned error to OK */
- *is_error = JK_HTTP_OK;
-
- if (!p->attached) {
- /* Try to attach */
- if (!(p->env = attach_to_jvm(p->worker, l))) {
- jk_log(l, JK_LOG_EMERG, "Attach failed");
- *is_error = JK_HTTP_SERVER_ERROR;
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- p->attached = JK_TRUE;
- }
-
- /* we are attached now */
-
- /*
- * When we call the JVM we cannot know what happens
- * So we can not recover !!!
- */
- jk_log(l, JK_LOG_DEBUG, "In service, calling Tomcat...");
-
- rc = (*(p->env))->CallIntMethod(p->env,
- p->worker->jk_java_bridge_object,
- p->worker->jk_service_method,
- /* [V] For some reason gcc likes this pointer -> int -> jlong conversion, */
- /* but not the direct pointer -> jlong conversion. I hope it's okay. */
-#ifdef AS400
- s, l
-#else
- (jlong) (int)s, (jlong) (int)l
-#endif
- );
-
- /* [V] Righ now JNIEndpoint::service() only returns 1 or 0 */
- if (rc) {
- jk_log(l, JK_LOG_DEBUG, "Tomcat returned OK, done");
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else {
- jk_log(l, JK_LOG_ERROR, "Tomcat FAILED!");
- *is_error = JK_HTTP_SERVER_ERROR;
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-}
-
-static int JK_METHOD done(jk_endpoint_t **e, jk_logger_t *l)
-{
- jni_endpoint_t *p;
-
- JK_TRACE_ENTER(l);
- if (!e || !*e || !(*e)->endpoint_private) {
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- p = (*e)->endpoint_private;
-
- if (p->attached) {
- detach_from_jvm(p->worker, l);
- }
-
- free(p);
- *e = NULL;
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static int JK_METHOD validate(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l)
-{
- jni_worker_t *p;
- int mem_config = 0;
- int btype = 0;
- const char *str_config = NULL;
- JNIEnv *env;
-
- JK_TRACE_ENTER(l);
-
- if (!pThis || !pThis->worker_private) {
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- p = pThis->worker_private;
-
- if (p->was_verified) {
- jk_log(l, JK_LOG_DEBUG, "been here before, done");
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
-
- if (jk_get_worker_mx(props, p->name, (unsigned int *)&mem_config)) {
- p->tomcat_mx = mem_config;
- }
-
- if (jk_get_worker_ms(props, p->name, (unsigned int *)&mem_config)) {
- p->tomcat_ms = mem_config;
- }
-
- if (jk_get_worker_classpath(props, p->name, &str_config)) {
- p->tomcat_classpath = jk_pool_strdup(&p->p, str_config);
- }
-
- if (!p->tomcat_classpath) {
- jk_log(l, JK_LOG_EMERG, "no classpath");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (jk_get_worker_bridge_type(props, p->name, (unsigned int *)&btype)) {
- p->bridge_type = btype;
- }
-
- if (jk_get_worker_jvm_path(props, p->name, &str_config)) {
- p->jvm_dll_path = jk_pool_strdup(&p->p, str_config);
- }
-
- if (!p->jvm_dll_path || !jk_file_exists(p->jvm_dll_path)) {
- jk_log(l, JK_LOG_EMERG, "no jvm_dll_path");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (jk_get_worker_cmd_line(props, p->name, &str_config)) {
- p->tomcat_cmd_line = jk_pool_strdup(&p->p, str_config);
- }
-
- if (jk_get_worker_stdout(props, p->name, &str_config)) {
- p->stdout_name = jk_pool_strdup(&p->p, str_config);
- }
-
- if (jk_get_worker_stderr(props, p->name, &str_config)) {
- p->stderr_name = jk_pool_strdup(&p->p, str_config);
- }
-
- if (jk_get_worker_sysprops(props, p->name, &str_config)) {
- p->sysprops = jk_parse_sysprops(&p->p, str_config);
- }
-
-#ifdef JNI_VERSION_1_2
- if (jk_get_worker_str_prop(props, p->name, "java2opts", &str_config)) {
- /* jk_log(l, JK_LOG_DEBUG, "Got opts: %s", str_config); */
- p->java2opts = jk_parse_sysprops(&p->p, str_config);
- }
- if (jk_get_worker_int_prop(props, p->name, "java2lax", &mem_config)) {
- p->java2lax = mem_config ? JK_TRUE : JK_FALSE;
- }
-#endif
-
- if (jk_get_worker_libpath(props, p->name, &str_config)) {
- jk_append_libpath(&p->p, str_config);
- }
-
- if (!load_jvm_dll(p, l)) {
- jk_log(l, JK_LOG_EMERG, "can't load jvm dll");
- /* [V] no detach needed here */
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (!open_jvm(p, &env, l)) {
- jk_log(l, JK_LOG_EMERG, "can't open jvm");
- /* [V] no detach needed here */
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (!get_bridge_object(p, env, l)) {
- jk_log(l, JK_LOG_EMERG, "can't get bridge object");
- /* [V] the detach here may segfault on 1.1 JVM... */
- detach_from_jvm(p, l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (!get_method_ids(p, env, l)) {
- jk_log(l, JK_LOG_EMERG, "can't get method ids");
- /* [V] the detach here may segfault on 1.1 JVM... */
- detach_from_jvm(p, l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- p->was_verified = JK_TRUE;
- p->tmp_env = env;
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static int JK_METHOD init(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l)
-{
- jni_worker_t *p;
- JNIEnv *env;
-
- JK_TRACE_ENTER(l);
-
- if (!pThis || !pThis->worker_private) {
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- p = pThis->worker_private;
-
- if (p->was_initialized) {
- jk_log(l, JK_LOG_DEBUG, "done (been here!)");
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
-
- if (!p->jvm ||
- !p->jk_java_bridge_object ||
- !p->jk_service_method ||
- !p->jk_startup_method || !p->jk_shutdown_method) {
- jk_log(l, JK_LOG_EMERG, "worker not set completely");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- /* [V] init is called from the same thread that called validate */
- /* there is no need to attach to the JVM, just get the env */
-
- /* if(env = attach_to_jvm(p,l)) { */
- if ((env = p->tmp_env)) {
- jstring cmd_line = (jstring) NULL;
- jstring stdout_name = (jstring) NULL;
- jstring stderr_name = (jstring) NULL;
- jint rc = 0;
-
- /* AS400/BS2000 need EBCDIC to ASCII conversion for JNI */
-
- if (p->tomcat_cmd_line) {
- cmd_line =
- (*env)->NewStringUTF(env,
- strdup_ascii(&p->p, p->tomcat_cmd_line));
- }
- if (p->stdout_name) {
- stdout_name =
- (*env)->NewStringUTF(env,
- strdup_ascii(&p->p, p->stdout_name));
- }
- if (p->stderr_name) {
- stderr_name =
- (*env)->NewStringUTF(env,
- strdup_ascii(&p->p, p->stderr_name));
- }
-
- jk_log(l, JK_LOG_DEBUG,
- "calling Tomcat to intialize itself...");
- rc = (*env)->CallIntMethod(env, p->jk_java_bridge_object,
- p->jk_startup_method, cmd_line,
- stdout_name, stderr_name);
-
- detach_from_jvm(p, l);
-
- if (rc) {
- p->was_initialized = JK_TRUE;
- jk_log(l, JK_LOG_DEBUG, "Tomcat initialized OK, done");
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else {
- jk_log(l, JK_LOG_EMERG, "could not initialize Tomcat");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "In init, FIXME: init didn't gen env from validate!");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-}
-
-static int JK_METHOD get_endpoint(jk_worker_t *pThis,
- jk_endpoint_t **pend, jk_logger_t *l)
-{
- /* [V] This slow, needs replacement */
- jni_endpoint_t *p;
-
- JK_TRACE_ENTER(l);
-
- if (!pThis || !pThis->worker_private || !pend) {
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- p = (jni_endpoint_t *) calloc(1, sizeof(jni_endpoint_t));
- if (p) {
- p->attached = JK_FALSE;
- p->env = NULL;
- p->worker = pThis->worker_private;
- p->endpoint.endpoint_private = p;
- p->endpoint.service = service;
- p->endpoint.done = done;
- *pend = &p->endpoint;
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "could not allocate endpoint");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-}
-
-static int JK_METHOD destroy(jk_worker_t **pThis, jk_logger_t *l)
-{
- jni_worker_t *p;
- JNIEnv *env;
-
- JK_TRACE_ENTER(l);
-
- if (!pThis || !*pThis || !(*pThis)->worker_private) {
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- p = (*pThis)->worker_private;
-
- if (!p->jvm) {
- jk_log(l, JK_LOG_DEBUG, "JVM not intantiated");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (!p->jk_java_bridge_object || !p->jk_shutdown_method) {
- jk_log(l, JK_LOG_DEBUG, "Tomcat not intantiated");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if ((env = attach_to_jvm(p, l))) {
- jk_log(l, JK_LOG_DEBUG, "shutting down Tomcat...");
- (*env)->CallVoidMethod(env,
- p->jk_java_bridge_object,
- p->jk_shutdown_method);
- detach_from_jvm(p, l);
- }
-
- jk_close_pool(&p->p);
- free(p);
-
- jk_log(l, JK_LOG_DEBUG, "destroyed");
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-int JK_METHOD jni_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l)
-{
- jni_worker_t *private_data;
-
- JK_TRACE_ENTER(l);
-
- jk_log(l, JK_LOG_WARNING,
- "Worker '%s' is of type jni, which is deprecated "
- "and will be removed in a future release.",
- name ? name : "(null)");
-
- if (!name || !w) {
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return 0;
- }
-
- if (the_singleton_jni_worker) {
- jk_log(l, JK_LOG_DEBUG,
- "instance already created");
- *w = the_singleton_jni_worker;
- JK_TRACE_EXIT(l);
- return JK_JNI_WORKER_TYPE;
- }
-
- private_data = (jni_worker_t *) malloc(sizeof(jni_worker_t));
-
- if (!private_data) {
- jk_log(l, JK_LOG_ERROR,
- "memory allocation error");
- JK_TRACE_EXIT(l);
- return 0;
- }
-
- jk_open_pool(&private_data->p,
- private_data->buf, sizeof(jk_pool_atom_t) * TINY_POOL_SIZE);
-
- private_data->name = jk_pool_strdup(&private_data->p, name);
-
- if (!private_data->name) {
- jk_log(l, JK_LOG_ERROR,
- "memory allocation error");
- jk_close_pool(&private_data->p);
- free(private_data);
- JK_TRACE_EXIT(l);
- return 0;
- }
-
- private_data->was_verified = JK_FALSE;
- private_data->was_initialized = JK_FALSE;
- private_data->jvm = NULL;
- private_data->tmp_env = NULL;
- private_data->jk_java_bridge_object = (jobject) NULL;
- private_data->jk_java_bridge_class = (jclass) NULL;
- private_data->jk_startup_method = (jmethodID) NULL;
- private_data->jk_service_method = (jmethodID) NULL;
- private_data->jk_shutdown_method = (jmethodID) NULL;
- private_data->tomcat_cmd_line = NULL;
- private_data->tomcat_classpath = NULL;
- private_data->bridge_type = TC33_BRIDGE_TYPE;
- private_data->jvm_dll_path = NULL;
- private_data->tomcat_ms = 0;
- private_data->tomcat_mx = 0;
- private_data->sysprops = NULL;
-#ifdef JNI_VERSION_1_2
- private_data->java2opts = NULL;
- private_data->java2lax = JK_TRUE;
-#endif
- private_data->stdout_name = NULL;
- private_data->stderr_name = NULL;
-
- private_data->worker.worker_private = private_data;
- private_data->worker.validate = validate;
- private_data->worker.init = init;
- private_data->worker.get_endpoint = get_endpoint;
- private_data->worker.destroy = destroy;
-
- *w = &private_data->worker;
- the_singleton_jni_worker = &private_data->worker;
-
- JK_TRACE_EXIT(l);
- return JK_JNI_WORKER_TYPE;
-}
-
-static int load_jvm_dll(jni_worker_t * p, jk_logger_t *l)
-{
-#ifdef WIN32
- HINSTANCE hInst = LoadLibrary(p->jvm_dll_path);
- if (hInst) {
- (FARPROC) jni_create_java_vm =
- GetProcAddress(hInst, "JNI_CreateJavaVM");
-
- (FARPROC) jni_get_created_java_vms =
- GetProcAddress(hInst, "JNI_GetCreatedJavaVMs");
-
- (FARPROC) jni_get_default_java_vm_init_args =
- GetProcAddress(hInst, "JNI_GetDefaultJavaVMInitArgs");
-
- jk_log(l, JK_LOG_DEBUG, "Loaded all JNI procs");
-
- if (jni_create_java_vm && jni_get_default_java_vm_init_args
- && jni_get_created_java_vms) {
- return JK_TRUE;
- }
-
- FreeLibrary(hInst);
- }
-#elif defined(NETWARE) && !defined(__NOVELL_LIBC__)
- int javaNlmHandle = FindNLMHandle("JVM");
- if (0 == javaNlmHandle) {
- /* if we didn't get a handle, try to load java and retry getting the */
- /* handle */
- spawnlp(P_NOWAIT, "JVM.NLM", NULL);
- ThreadSwitchWithDelay();
- javaNlmHandle = FindNLMHandle("JVM");
- if (0 == javaNlmHandle)
- printf("Error loading Java.");
-
- }
- if (0 != javaNlmHandle) {
- jni_create_java_vm = ImportSymbol(GetNLMHandle(), "JNI_CreateJavaVM");
- jni_get_created_java_vms =
- ImportSymbol(GetNLMHandle(), "JNI_GetCreatedJavaVMs");
- jni_get_default_java_vm_init_args =
- ImportSymbol(GetNLMHandle(), "JNI_GetDefaultJavaVMInitArgs");
- }
- if (jni_create_java_vm && jni_get_default_java_vm_init_args
- && jni_get_created_java_vms) {
- return JK_TRUE;
- }
-#elif defined(AS400)
- jk_log(l, JK_LOG_DEBUG,
- "Direct reference to JNI entry points (no SRVPGM)");
- jni_create_java_vm = &JNI_CreateJavaVM;
- jni_get_default_java_vm_init_args = &JNI_GetDefaultJavaVMInitArgs;
- jni_get_created_java_vms = &JNI_GetCreatedJavaVMs;
-#else
- void *handle;
- jk_log(l, JK_LOG_DEBUG, "loading JVM %s", p->jvm_dll_path);
-
- handle = dlopen(p->jvm_dll_path, RTLD_NOW | RTLD_GLOBAL);
-
- if (!handle) {
- jk_log(l, JK_LOG_EMERG,
- "Can't load native library %s : %s", p->jvm_dll_path,
- dlerror());
- }
- else {
- jni_create_java_vm = dlsym(handle, "JNI_CreateJavaVM");
- jni_get_default_java_vm_init_args =
- dlsym(handle, "JNI_GetDefaultJavaVMInitArgs");
- jni_get_created_java_vms = dlsym(handle, "JNI_GetCreatedJavaVMs");
-
- if (jni_create_java_vm && jni_get_default_java_vm_init_args &&
- jni_get_created_java_vms) {
- jk_log(l, JK_LOG_DEBUG,
- "In load_jvm_dll, symbols resolved, done");
- return JK_TRUE;
- }
- jk_log(l, JK_LOG_EMERG,
- "Can't resolve JNI_CreateJavaVM or JNI_GetDefaultJavaVMInitArgs");
- dlclose(handle);
- }
-#endif
- return JK_FALSE;
-}
-
-static int open_jvm(jni_worker_t * p, JNIEnv ** env, jk_logger_t *l)
-{
-#ifdef JNI_VERSION_1_2
- int jvm_version = detect_jvm_version(l);
-
- switch (jvm_version) {
- case JNI_VERSION_1_1:
- return open_jvm1(p, env, l);
- case JNI_VERSION_1_2:
- return open_jvm2(p, env, l);
- default:
- return JK_FALSE;
- }
-#else
- /* [V] Make sure this is _really_ visible */
-#warning -------------------------------------------------------
-#warning NO JAVA 2 HEADERS! SUPPORT FOR JAVA 2 FEATURES DISABLED
-#warning -------------------------------------------------------
- return open_jvm1(p, env, l);
-#endif
-}
-
-static int open_jvm1(jni_worker_t * p, JNIEnv ** env, jk_logger_t *l)
-{
- JDK1_1InitArgs vm_args;
- JNIEnv *penv;
- int err;
- *env = NULL;
-
- JK_TRACE_ENTER(l);
-
- vm_args.version = JNI_VERSION_1_1;
-
- if (0 != jni_get_default_java_vm_init_args(&vm_args)) {
- jk_log(l, JK_LOG_EMERG, "can't get default vm init args");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jk_log(l, JK_LOG_DEBUG, "got default jvm args");
-
- if (vm_args.classpath) {
- size_t len = strlen(vm_args.classpath) +
- strlen(p->tomcat_classpath) + 3;
- char *tmp = jk_pool_alloc(&p->p, len);
- if (tmp) {
- sprintf(tmp, "%s%c%s",
- strdup_ascii(&p->p, p->tomcat_classpath),
- PATH_SEPERATOR, vm_args.classpath);
- p->tomcat_classpath = tmp;
- }
- else {
- jk_log(l, JK_LOG_EMERG,
- "allocation error for classpath");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- vm_args.classpath = p->tomcat_classpath;
-
- if (p->tomcat_mx) {
- vm_args.maxHeapSize = p->tomcat_mx;
- }
-
- if (p->tomcat_ms) {
- vm_args.minHeapSize = p->tomcat_ms;
- }
-
- if (p->sysprops) {
- /* No EBCDIC to ASCII conversion here for AS/400 - later */
- vm_args.properties = p->sysprops;
- }
-
- jk_log(l, JK_LOG_DEBUG, "In open_jvm1, about to create JVM...");
- if ((err = jni_create_java_vm(&(p->jvm), &penv, &vm_args)) != 0) {
- jk_log(l, JK_LOG_EMERG,
- "could not create JVM, code: %d ", err);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jk_log(l, JK_LOG_DEBUG, "JVM created, done");
-
- *env = penv;
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-#ifdef JNI_VERSION_1_2
-static int detect_jvm_version(jk_logger_t *l)
-{
- JNIEnv *env = NULL;
- JDK1_1InitArgs vm_args;
-
- JK_TRACE_ENTER(l);
-
- /* [V] Idea: ask for 1.2. If the JVM is 1.1 it will return 1.1 instead */
- /* Note: asking for 1.1 won't work, 'cause 1.2 JVMs will return 1.1 */
- vm_args.version = JNI_VERSION_1_2;
-
- if (0 != jni_get_default_java_vm_init_args(&vm_args)) {
- jk_log(l, JK_LOG_EMERG, "can't get default vm init args");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jk_log(l, JK_LOG_DEBUG,
- "found version: %X, done", vm_args.version);
-
- JK_TRACE_EXIT(l);
- return vm_args.version;
-}
-
-static char *build_opt_str(jk_pool_t *p,
- char *opt_name, char *opt_value, jk_logger_t *l)
-{
- size_t len = strlen(opt_name) + strlen(opt_value) + 2;
-
- /* [V] IMHO, these should not be deallocated as long as the JVM runs */
- char *tmp = jk_pool_alloc(p, len);
-
- if (tmp) {
- sprintf(tmp, "%s%s", opt_name, opt_value);
- return tmp;
- }
- else {
- jk_log(l, JK_LOG_EMERG,
- "allocation error for %s", opt_name);
- return NULL;
- }
-}
-
-static char *build_opt_int(jk_pool_t *p,
- char *opt_name, int opt_value, jk_logger_t *l)
-{
- /* [V] this should suffice even for 64-bit int */
- size_t len = strlen(opt_name) + 20 + 2;
- /* [V] IMHO, these should not be deallocated as long as the JVM runs */
- char *tmp = jk_pool_alloc(p, len);
-
- if (tmp) {
- sprintf(tmp, "%s%d", opt_name, opt_value);
- return tmp;
- }
- else {
- jk_log(l, JK_LOG_EMERG,
- "allocation error for %s", opt_name);
- return NULL;
- }
-}
-
-static int open_jvm2(jni_worker_t * p, JNIEnv ** env, jk_logger_t *l)
-{
- JavaVMInitArgs vm_args;
- JNIEnv *penv = NULL;
- JavaVMOption options[100];
- int optn = 0, err;
- char *tmp;
-
- *env = NULL;
-
- JK_TRACE_ENTER(l);
-
- vm_args.version = JNI_VERSION_1_2;
- vm_args.options = options;
-
-/* AS/400 need EBCDIC to ASCII conversion to parameters passed to JNI */
-/* No conversion for ASCII based systems (what about BS2000 ?) */
-
- if (p->tomcat_classpath) {
- jk_log(l, JK_LOG_DEBUG, "setting classpath to %s",
- p->tomcat_classpath);
- tmp =
- build_opt_str(&p->p, "-Djava.class.path=", p->tomcat_classpath,
- l);
- null_check(tmp);
- options[optn++].optionString = strdup_ascii(&p->p, tmp);
- }
-
- if (p->tomcat_mx) {
- jk_log(l, JK_LOG_DEBUG, "setting max heap to %d",
- p->tomcat_mx);
- tmp = build_opt_int(&p->p, "-Xmx", p->tomcat_mx, l);
- null_check(tmp);
- options[optn++].optionString = strdup_ascii(&p->p, tmp);
- }
-
- if (p->tomcat_ms) {
- jk_log(l, JK_LOG_DEBUG, "setting start heap to %d",
- p->tomcat_ms);
- tmp = build_opt_int(&p->p, "-Xms", p->tomcat_ms, l);
- null_check(tmp);
- options[optn++].optionString = strdup_ascii(&p->p, tmp);
- }
-
- if (p->sysprops) {
- int i = 0;
- while (p->sysprops[i]) {
- jk_log(l, JK_LOG_DEBUG, "setting %s",
- p->sysprops[i]);
- tmp = build_opt_str(&p->p, "-D", p->sysprops[i], l);
- null_check(tmp);
- options[optn++].optionString = strdup_ascii(&p->p, tmp);
- i++;
- }
- }
-
- if (p->java2opts) {
- int i = 0;
-
- while (p->java2opts[i]) {
- jk_log(l, JK_LOG_DEBUG, "using option: %s",
- p->java2opts[i]);
- /* Pass it "as is" */
- options[optn++].optionString =
- strdup_ascii(&p->p, p->java2opts[i++]);
- }
- }
-
- vm_args.nOptions = optn;
-
- if (p->java2lax) {
- jk_log(l, JK_LOG_DEBUG,
- "the JVM will ignore unknown options");
- vm_args.ignoreUnrecognized = JNI_TRUE;
- }
- else {
- jk_log(l, JK_LOG_DEBUG,
- "the JVM will FAIL if it finds unknown options");
- vm_args.ignoreUnrecognized = JNI_FALSE;
- }
-
- jk_log(l, JK_LOG_DEBUG, "about to create JVM...");
-
- err = jni_create_java_vm(&(p->jvm), &penv, &vm_args);
-
- if (JNI_EEXIST == err) {
-#ifdef AS400
- long vmCount;
-#else
- int vmCount;
-#endif
- jk_log(l, JK_LOG_DEBUG, "JVM alread instantiated."
- "Trying to attach instead.");
-
- jni_get_created_java_vms(&(p->jvm), 1, &vmCount);
- if (NULL != p->jvm)
- penv = attach_to_jvm(p, l);
-
- if (NULL != penv)
- err = 0;
- }
-
- if (err != 0) {
- jk_log(l, JK_LOG_EMERG, "Fail-> could not create JVM, code: %d ",
- err);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- *env = penv;
- jk_log(l, JK_LOG_DEBUG, "JVM created");
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-#endif
-
-static int get_bridge_object(jni_worker_t * p, JNIEnv * env, jk_logger_t *l)
-{
- char *btype;
- char *ctype;
-
- jmethodID constructor_method_id;
-
- JK_TRACE_ENTER(l);
-
- switch (p->bridge_type) {
- case TC32_BRIDGE_TYPE:
- btype = TC32_JAVA_BRIDGE_CLASS_NAME;
- break;
-
- case TC33_BRIDGE_TYPE:
- btype = TC33_JAVA_BRIDGE_CLASS_NAME;
- break;
-
- case TC40_BRIDGE_TYPE:
- case TC41_BRIDGE_TYPE:
- case TC50_BRIDGE_TYPE:
- jk_log(l, JK_LOG_EMERG, "Bridge type %d not supported",
- p->bridge_type);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
-/* AS400/BS2000 need conversion from EBCDIC to ASCII before passing to JNI */
-/* for others, strdup_ascii is just jk_pool_strdup */
-
- ctype = strdup_ascii(&p->p, btype);
-
- p->jk_java_bridge_class = (*env)->FindClass(env, ctype);
-
- if (!p->jk_java_bridge_class) {
- jk_log(l, JK_LOG_EMERG, "Can't find class %s", btype);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- jk_log(l, JK_LOG_DEBUG,
- "In get_bridge_object, loaded %s bridge class", btype);
-
- constructor_method_id = (*env)->GetMethodID(env, p->jk_java_bridge_class, strdup_ascii(&p->p, "<init>"), /* method name */
- strdup_ascii(&p->p, "()V")); /* method sign */
-
- if (!constructor_method_id) {
- p->jk_java_bridge_class = (jclass) NULL;
- jk_log(l, JK_LOG_EMERG, "Can't find constructor");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- p->jk_java_bridge_object = (*env)->NewObject(env,
- p->jk_java_bridge_class,
- constructor_method_id);
- if (!p->jk_java_bridge_object) {
- p->jk_java_bridge_class = (jclass) NULL;
- jk_log(l, JK_LOG_EMERG, "Can't create new bridge object");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- p->jk_java_bridge_object =
- (jobject) (*env)->NewGlobalRef(env, p->jk_java_bridge_object);
- if (!p->jk_java_bridge_object) {
- jk_log(l, JK_LOG_EMERG, "Can't create global ref to bridge object");
- p->jk_java_bridge_class = (jclass) NULL;
- p->jk_java_bridge_object = (jobject) NULL;
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static int get_method_ids(jni_worker_t * p, JNIEnv * env, jk_logger_t *l)
-{
-
-/* AS400/BS2000 need conversion from EBCDIC to ASCII before passing to JNI */
-
- p->jk_startup_method = (*env)->GetMethodID(env,
- p->jk_java_bridge_class,
- strdup_ascii(&p->p, "startup"),
- strdup_ascii(&p->p,
- "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I"));
-
- if (!p->jk_startup_method) {
- jk_log(l, JK_LOG_EMERG, "Can't find startup()");
- return JK_FALSE;
- }
-
- p->jk_service_method = (*env)->GetMethodID(env,
- p->jk_java_bridge_class,
- strdup_ascii(&p->p, "service"),
- strdup_ascii(&p->p, "(JJ)I"));
-
- if (!p->jk_service_method) {
- jk_log(l, JK_LOG_EMERG, "Can't find service()");
- return JK_FALSE;
- }
-
- p->jk_shutdown_method = (*env)->GetMethodID(env,
- p->jk_java_bridge_class,
- strdup_ascii(&p->p,
- "shutdown"),
- strdup_ascii(&p->p, "()V"));
-
- if (!p->jk_shutdown_method) {
- jk_log(l, JK_LOG_EMERG, "Can't find shutdown()");
- return JK_FALSE;
- }
-
- return JK_TRUE;
-}
-
-static JNIEnv *attach_to_jvm(jni_worker_t * p, jk_logger_t *l)
-{
- JNIEnv *rc = NULL;
- /* [V] This message is important. If there are signal mask issues, *
- * the JVM usually hangs when a new thread tries to attach to it */
- JK_TRACE_ENTER(l);
-
-#if defined LINUX && defined APACHE2_SIGHACK
- linux_signal_hack();
-#endif
-
- if (0 == (*(p->jvm))->AttachCurrentThread(p->jvm,
-#ifdef JNI_VERSION_1_2
- (void **)
-#endif
- &rc, NULL)) {
- jk_log(l, JK_LOG_DEBUG, "In attach_to_jvm, attached ok");
- JK_TRACE_EXIT(l);
- return rc;
- }
- jk_log(l, JK_LOG_ERROR,
- "In attach_to_jvm, cannot attach thread to JVM.");
- JK_TRACE_EXIT(l);
- return NULL;
-}
-
-/*
-static JNIEnv *attach_to_jvm(jni_worker_t *p)
-{
- JNIEnv *rc = NULL;
-
-#ifdef LINUX
- linux_signal_hack();
-#endif
-
- if(0 == (*(p->jvm))->AttachCurrentThread(p->jvm,
-#ifdef JNI_VERSION_1_2
- (void **)
-#endif
- &rc,
- NULL)) {
- return rc;
- }
-
- return NULL;
-}
-*/
-static void detach_from_jvm(jni_worker_t * p, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
- if (!p->jvm || !(*(p->jvm))) {
- jk_log(l, JK_LOG_ERROR,
- "cannot detach from NULL JVM.");
- }
-
- if (0 == (*(p->jvm))->DetachCurrentThread(p->jvm)) {
- jk_log(l, JK_LOG_DEBUG, "detached ok");
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "cannot detach from JVM.");
- }
- JK_TRACE_EXIT(l);
-}
-#else
-int JK_METHOD jni_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l)
-{
- jk_log(l, JK_LOG_WARNING,
- "Worker '%s' is of type jni, which is deprecated "
- "and will be removed in a future release.",
- name ? name : "(null)");
- if (w)
- *w = NULL;
- return 0;
-}
-#endif /* JNI_VERSION_1_6 */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.h
deleted file mode 100644
index 0adef2ab..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: jni worker header file *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-#ifndef JK_JNI_WORKER_H
-#define JK_JNI_WORKER_H
-
-#include "jk_logger.h"
-#include "jk_service.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define JK_JNI_WORKER_NAME ("jni")
-#define JK_JNI_WORKER_TYPE (4)
-
-int JK_METHOD jni_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* JK_JNI_WORKER_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.lo
deleted file mode 100644
index b3a8ed60..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_jni_worker.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_jni_worker.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_jni_worker.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.o
deleted file mode 100644
index 9f00e3e5..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_jni_worker.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.c
deleted file mode 100644
index 3c0ce67a..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.c
+++ /dev/null
@@ -1,1823 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Load balancer worker, knows how to load balance among *
- * several workers. *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Author: Mladen Turk <mturk@apache.org> *
- * Author: Rainer Jung <rjung@apache.org> *
- * Based on: *
- * Version: $Revision: 1137200 $ *
- ***************************************************************************/
-
-#include "jk_pool.h"
-#include "jk_service.h"
-#include "jk_util.h"
-#include "jk_worker.h"
-#include "jk_lb_worker.h"
-#include "jk_ajp13.h"
-#include "jk_ajp13_worker.h"
-#include "jk_ajp14_worker.h"
-#include "jk_mt.h"
-#include "jk_shm.h"
-
-/*
- * The load balancing code in this
- */
-
-/*
- * The following two macros need to be kept in sync with
- * the existing values for state and activation.
- * Note: state <= JK_LB_STATE_FORCE is equivalent to
- * state is none of JK_LB_STATE_BUSY, JK_LB_STATE_ERROR, JK_LB_STATE_PROBE
- * Note: state <= JK_LB_STATE_BUSY is equivalent to
- * state is none of JK_LB_STATE_ERROR, JK_LB_STATE_PROBE
- * Note: activation == JK_LB_ACTIVATION_ACTIVE is equivalent to
- * activation is none of JK_LB_ACTIVATION_STOPPED, JK_LB_ACTIVATION_DISABLED
- */
-#define JK_WORKER_USABLE(s, activation) ((s) <= JK_LB_STATE_FORCE && activation == JK_LB_ACTIVATION_ACTIVE)
-#define JK_WORKER_USABLE_STICKY(s, activation) ((s) <= JK_LB_STATE_BUSY && activation != JK_LB_ACTIVATION_STOPPED)
-
-static const char *lb_locking_type[] = {
- JK_LB_LOCK_TEXT_OPTIMISTIC,
- JK_LB_LOCK_TEXT_PESSIMISTIC,
- "unknown",
- NULL
-};
-
-static const char *lb_method_type[] = {
- JK_LB_METHOD_TEXT_REQUESTS,
- JK_LB_METHOD_TEXT_TRAFFIC,
- JK_LB_METHOD_TEXT_BUSYNESS,
- JK_LB_METHOD_TEXT_SESSIONS,
- "unknown",
- NULL
-};
-
-static const char *lb_state_type[] = {
- JK_LB_STATE_TEXT_IDLE,
- JK_LB_STATE_TEXT_OK,
- JK_LB_STATE_TEXT_RECOVER,
- JK_LB_STATE_TEXT_FORCE,
- JK_LB_STATE_TEXT_BUSY,
- JK_LB_STATE_TEXT_ERROR,
- JK_LB_STATE_TEXT_PROBE,
- "unknown",
- NULL
-};
-
-static const char *lb_activation_type[] = {
- JK_LB_ACTIVATION_TEXT_ACTIVE,
- JK_LB_ACTIVATION_TEXT_DISABLED,
- JK_LB_ACTIVATION_TEXT_STOPPED,
- "unknown",
- NULL
-};
-
-static const char *lb_first_log_names[] = {
- JK_NOTE_LB_FIRST_NAME,
- JK_NOTE_LB_FIRST_VALUE,
- JK_NOTE_LB_FIRST_ACCESSED,
- JK_NOTE_LB_FIRST_READ,
- JK_NOTE_LB_FIRST_TRANSFERRED,
- JK_NOTE_LB_FIRST_ERRORS,
- JK_NOTE_LB_FIRST_BUSY,
- JK_NOTE_LB_FIRST_ACTIVATION,
- JK_NOTE_LB_FIRST_STATE,
- NULL
-};
-
-static const char *lb_last_log_names[] = {
- JK_NOTE_LB_LAST_NAME,
- JK_NOTE_LB_LAST_VALUE,
- JK_NOTE_LB_LAST_ACCESSED,
- JK_NOTE_LB_LAST_READ,
- JK_NOTE_LB_LAST_TRANSFERRED,
- JK_NOTE_LB_LAST_ERRORS,
- JK_NOTE_LB_LAST_BUSY,
- JK_NOTE_LB_LAST_ACTIVATION,
- JK_NOTE_LB_LAST_STATE,
- NULL
-};
-
-struct lb_endpoint
-{
- lb_worker_t *worker;
- jk_endpoint_t endpoint;
- int *states;
-};
-typedef struct lb_endpoint lb_endpoint_t;
-
-
-/* Calculate the greatest common divisor of two positive integers */
-static jk_uint64_t gcd(jk_uint64_t a, jk_uint64_t b)
-{
- jk_uint64_t r;
- if (b > a) {
- r = a;
- a = b;
- b = r;
- }
- while (b > 0) {
- r = a % b;
- a = b;
- b = r;
- }
- return a;
-}
-
-/* Calculate the smallest common multiple of two positive integers */
-static jk_uint64_t scm(jk_uint64_t a, jk_uint64_t b)
-{
- return a * b / gcd(a, b);
-}
-
-/* Return the string representation of the lb lock type */
-const char *jk_lb_get_lock(lb_worker_t *p, jk_logger_t *l)
-{
- return lb_locking_type[p->lblock];
-}
-
-/* Return the int representation of the lb lock type */
-int jk_lb_get_lock_code(const char *v)
-{
- if (!v)
- return JK_LB_LOCK_DEF;
- else if (*v == 'o' || *v == 'O' || *v == '0')
- return JK_LB_LOCK_OPTIMISTIC;
- else if (*v == 'p' || *v == 'P' || *v == '1')
- return JK_LB_LOCK_PESSIMISTIC;
- else
- return JK_LB_LOCK_DEF;
-}
-
-/* Return the string representation of the lb method type */
-const char *jk_lb_get_method(lb_worker_t *p, jk_logger_t *l)
-{
- return lb_method_type[p->lbmethod];
-}
-
-/* Return the int representation of the lb method type */
-int jk_lb_get_method_code(const char *v)
-{
- if (!v)
- return JK_LB_METHOD_DEF;
- else if (*v == 'r' || *v == 'R' || *v == '0')
- return JK_LB_METHOD_REQUESTS;
- else if (*v == 't' || *v == 'T' || *v == '1')
- return JK_LB_METHOD_TRAFFIC;
- else if (*v == 'b' || *v == 'B' || *v == '2')
- return JK_LB_METHOD_BUSYNESS;
- else if (*v == 's' || *v == 'S' || *v == '3')
- return JK_LB_METHOD_SESSIONS;
- else
- return JK_LB_METHOD_DEF;
-}
-
-/* Return the string representation of the balance worker state */
-const char *jk_lb_get_state(lb_sub_worker_t *p, jk_logger_t *l)
-{
- return lb_state_type[p->s->state];
-}
-
-/* Return the int representation of the lb state */
-int jk_lb_get_state_code(const char *v)
-{
- if (!v)
- return JK_LB_STATE_DEF;
- else if (*v == 'i' || *v == 'I' || *v == 'n' || *v == 'N' || *v == '0')
- return JK_LB_STATE_IDLE;
- else if (*v == 'o' || *v == 'O' || *v == '1')
- return JK_LB_STATE_OK;
- else if (*v == 'r' || *v == 'R' || *v == '2')
- return JK_LB_STATE_RECOVER;
- else if (*v == 'f' || *v == 'F' || *v == '3')
- return JK_LB_STATE_FORCE;
- else if (*v == 'b' || *v == 'B' || *v == '4')
- return JK_LB_STATE_BUSY;
- else if (*v == 'e' || *v == 'E' || *v == '5')
- return JK_LB_STATE_ERROR;
- else if (*v == 'p' || *v == 'P' || *v == '6')
- return JK_LB_STATE_PROBE;
- else
- return JK_LB_STATE_DEF;
-}
-
-/* Return the string representation of the balance worker activation */
-/* based on the integer representation */
-const char *jk_lb_get_activation_direct(int activation, jk_logger_t *l)
-{
- return lb_activation_type[activation];
-}
-
-/* Return the string representation of the balance worker activation */
-/* based on the sub worker struct */
-const char *jk_lb_get_activation(lb_sub_worker_t *p, jk_logger_t *l)
-{
- return lb_activation_type[p->activation];
-}
-
-int jk_lb_get_activation_code(const char *v)
-{
- if (!v)
- return JK_LB_ACTIVATION_DEF;
- else if (*v == 'a' || *v == 'A' || *v == '0')
- return JK_LB_ACTIVATION_ACTIVE;
- else if (*v == 'd' || *v == 'D' || *v == '1')
- return JK_LB_ACTIVATION_DISABLED;
- else if (*v == 's' || *v == 'S' || *v == '2')
- return JK_LB_ACTIVATION_STOPPED;
- else
- return JK_LB_ACTIVATION_DEF;
-}
-
-/* Update the load multipliers wrt. lb_factor */
-void update_mult(lb_worker_t *p, jk_logger_t *l)
-{
- unsigned int i = 0;
- jk_uint64_t s = 1;
- JK_TRACE_ENTER(l);
- for (i = 0; i < p->num_of_workers; i++) {
- s = scm(s, p->lb_workers[i].lb_factor);
- }
- for (i = 0; i < p->num_of_workers; i++) {
- p->lb_workers[i].lb_mult = s / p->lb_workers[i].lb_factor;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "worker %s gets multiplicity %"
- JK_UINT64_T_FMT,
- p->lb_workers[i].name,
- p->lb_workers[i].lb_mult);
- }
- JK_TRACE_EXIT(l);
-}
-
-/* Reset all lb values.
- */
-void reset_lb_values(lb_worker_t *p, jk_logger_t *l)
-{
- unsigned int i = 0;
- JK_TRACE_ENTER(l);
- if (p->lbmethod != JK_LB_METHOD_BUSYNESS) {
- for (i = 0; i < p->num_of_workers; i++) {
- p->lb_workers[i].s->lb_value = 0;
- }
- }
- JK_TRACE_EXIT(l);
-}
-
-/* Syncing config values from shm */
-void jk_lb_pull(lb_worker_t *p, int locked, jk_logger_t *l)
-{
- unsigned int i = 0;
-
- JK_TRACE_ENTER(l);
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "syncing mem for lb '%s' from shm (%u->%u)",
- p->name, p->sequence, p->s->h.sequence);
- if (locked == JK_FALSE)
- jk_shm_lock();
- p->sticky_session = p->s->sticky_session;
- p->sticky_session_force = p->s->sticky_session_force;
- p->recover_wait_time = p->s->recover_wait_time;
- p->error_escalation_time = p->s->error_escalation_time;
- p->max_reply_timeouts = p->s->max_reply_timeouts;
- p->retries = p->s->retries;
- p->retry_interval = p->s->retry_interval;
- p->lbmethod = p->s->lbmethod;
- p->lblock = p->s->lblock;
- p->max_packet_size = p->s->max_packet_size;
- p->sequence = p->s->h.sequence;
- strncpy(p->session_cookie, p->s->session_cookie, JK_SHM_STR_SIZ);
- strncpy(p->session_path, p->s->session_path, JK_SHM_STR_SIZ);
-
- for (i = 0; i < p->num_of_workers; i++) {
- lb_sub_worker_t *w = &p->lb_workers[i];
- if (w->sequence != w->s->h.sequence) {
- jk_worker_t *jw = w->worker;
- ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "syncing mem for member '%s' of lb '%s' from shm",
- w->name, p->name);
-
- jk_ajp_pull(aw, JK_TRUE, l);
- strncpy(w->route, w->s->route, JK_SHM_STR_SIZ);
- strncpy(w->domain, w->s->domain, JK_SHM_STR_SIZ);
- strncpy(w->redirect, w->s->redirect, JK_SHM_STR_SIZ);
- w->distance = w->s->distance;
- w->activation = w->s->activation;
- w->lb_factor = w->s->lb_factor;
- w->lb_mult = w->s->lb_mult;
- w->sequence = w->s->h.sequence;
- }
- }
- if (locked == JK_FALSE)
- jk_shm_unlock();
-
- JK_TRACE_EXIT(l);
-}
-
-/* Syncing config values to shm */
-void jk_lb_push(lb_worker_t *p, int locked, jk_logger_t *l)
-{
- unsigned int i = 0;
-
- JK_TRACE_ENTER(l);
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "syncing shm for lb '%s' from mem (%u->%u)",
- p->name, p->s->h.sequence, p->sequence);
- if (locked == JK_FALSE)
- jk_shm_lock();
- p->s->sticky_session = p->sticky_session;
- p->s->sticky_session_force = p->sticky_session_force;
- p->s->recover_wait_time = p->recover_wait_time;
- p->s->error_escalation_time = p->error_escalation_time;
- p->s->max_reply_timeouts = p->max_reply_timeouts;
- p->s->retries = p->retries;
- p->s->retry_interval = p->retry_interval;
- p->s->lbmethod = p->lbmethod;
- p->s->lblock = p->lblock;
- p->s->max_packet_size = p->max_packet_size;
- p->s->h.sequence = p->sequence;
- strncpy(p->s->session_cookie, p->session_cookie, JK_SHM_STR_SIZ);
- strncpy(p->s->session_path, p->session_path, JK_SHM_STR_SIZ);
-
- for (i = 0; i < p->num_of_workers; i++) {
- lb_sub_worker_t *w = &p->lb_workers[i];
- if (w->sequence != w->s->h.sequence) {
- jk_worker_t *jw = w->worker;
- ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "syncing shm for member '%s' of lb '%s' from mem",
- w->name, p->name);
-
- jk_ajp_push(aw, JK_TRUE, l);
- strncpy(w->s->route, w->route, JK_SHM_STR_SIZ);
- strncpy(w->s->domain, w->domain, JK_SHM_STR_SIZ);
- strncpy(w->s->redirect, w->redirect, JK_SHM_STR_SIZ);
- w->s->distance = w->distance;
- w->s->activation = w->activation;
- w->s->lb_factor = w->lb_factor;
- w->s->lb_mult = w->lb_mult;
- w->s->h.sequence = w->sequence;
- }
- }
- if (locked == JK_FALSE)
- jk_shm_unlock();
-
- JK_TRACE_EXIT(l);
-}
-
-/* Retrieve the parameter with the given name */
-static char *get_path_param(jk_ws_service_t *s, const char *name)
-{
- char *id_start = NULL;
- for (id_start = strstr(s->req_uri, name);
- id_start; id_start = strstr(id_start + 1, name)) {
- if (id_start[strlen(name)] == '=') {
- /*
- * Session path-cookie was found, get it's value
- */
- id_start += (1 + strlen(name));
- if (strlen(id_start)) {
- char *id_end;
- id_start = jk_pool_strdup(s->pool, id_start);
- /*
- * The query string is not part of req_uri, however
- * to be on the safe side lets remove the trailing query
- * string if appended...
- */
- if ((id_end = strchr(id_start, '?')) != NULL) {
- *id_end = '\0';
- }
- /*
- * Remove any trailing path element.
- */
- if ((id_end = strchr(id_start, ';')) != NULL) {
- *id_end = '\0';
- }
- return id_start;
- }
- }
- }
-
- return NULL;
-}
-
-/* Retrieve the cookie with the given name */
-static char *get_cookie(jk_ws_service_t *s, const char *name)
-{
- unsigned i;
- char *result = NULL;
-
- for (i = 0; i < s->num_headers; i++) {
- if (strcasecmp(s->headers_names[i], "cookie") == 0) {
-
- char *id_start;
- for (id_start = strstr(s->headers_values[i], name);
- id_start; id_start = strstr(id_start + 1, name)) {
- if (id_start == s->headers_values[i] ||
- id_start[-1] == ';' ||
- id_start[-1] == ',' || isspace((int)id_start[-1])) {
- id_start += strlen(name);
- while (*id_start && isspace((int)(*id_start)))
- ++id_start;
- if (*id_start == '=' && id_start[1]) {
- /*
- * Session cookie was found, get it's value
- */
- char *id_end;
- size_t sz;
- ++id_start;
- if ((id_end = strpbrk(id_start, ";,")) != NULL)
- sz = id_end - id_start;
- else {
- sz = strlen(id_start);
- id_end = id_start + sz;
- }
- if (result == NULL) {
- result = jk_pool_alloc(s->pool, sz + 1);
- memcpy(result, id_start, sz);
- result[sz] = '\0';
- }
- else {
- size_t osz = strlen(result) + 1;
- result =
- jk_pool_realloc(s->pool, osz + sz + 1, result, osz);
- strcat(result, ";");
- strncat(result, id_start, sz);
- }
- id_start = id_end;
- }
- }
- }
- }
- }
-
- return result;
-}
-
-
-/* Retrieve session id from the cookie or the parameter
- * (parameter first)
- */
-static char *get_sessionid(jk_ws_service_t *s, lb_worker_t *p, jk_logger_t *l)
-{
- char *val;
- val = get_path_param(s, p->session_path);
- if (!val) {
- val = get_cookie(s, p->session_cookie);
- }
- if (val && !*val) {
- /* TODO: For now only log the empty sessions.
- * However we should probably return 400
- * (BAD_REQUEST) in this case
- */
- jk_log(l, JK_LOG_INFO,
- "Detected empty session identifier.");
- return NULL;
- }
- return val;
-}
-
-static void close_workers(lb_worker_t *p, int num_of_workers, jk_logger_t *l)
-{
- int i = 0;
- for (i = 0; i < num_of_workers; i++) {
- p->lb_workers[i].worker->destroy(&(p->lb_workers[i].worker), l);
- }
-}
-
-/* If the worker is in error state run
- * retry on that worker. It will be marked as
- * operational if the retry timeout is elapsed.
- * The worker might still be unusable, but we try
- * anyway.
- * If the worker is in ok state and got no requests
- * since the last global maintenance, we mark its
- * state as not available.
- * Return the number of workers not in error state.
- */
-static int recover_workers(lb_worker_t *p,
- jk_uint64_t curmax,
- time_t now,
- jk_logger_t *l)
-{
- unsigned int i;
- int non_error = 0;
- int elapsed;
- lb_sub_worker_t *w = NULL;
- ajp_worker_t *aw = NULL;
- JK_TRACE_ENTER(l);
-
- if (p->sequence != p->s->h.sequence)
- jk_lb_pull(p, JK_TRUE, l);
- for (i = 0; i < p->num_of_workers; i++) {
- w = &p->lb_workers[i];
- aw = (ajp_worker_t *)w->worker->worker_private;
- if (w->s->state == JK_LB_STATE_ERROR) {
- elapsed = (int)difftime(now, w->s->error_time);
- if (elapsed <= p->recover_wait_time) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "worker %s will recover in %d seconds",
- w->name, p->recover_wait_time - elapsed);
- }
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "worker %s is marked for recovery",
- w->name);
- if (p->lbmethod != JK_LB_METHOD_BUSYNESS)
- w->s->lb_value = curmax;
- aw->s->reply_timeouts = 0;
- w->s->state = JK_LB_STATE_RECOVER;
- non_error++;
- }
- }
- else if (w->s->error_time > 0 &&
- (int)difftime(now, w->s->error_time) >= p->error_escalation_time) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "worker %s escalating local error to global error",
- w->name);
- w->s->state = JK_LB_STATE_ERROR;
- }
- else {
- non_error++;
- if (w->s->state == JK_LB_STATE_OK &&
- aw->s->used == w->s->elected_snapshot)
- w->s->state = JK_LB_STATE_IDLE;
- }
- w->s->elected_snapshot = aw->s->used;
- }
-
- JK_TRACE_EXIT(l);
- return non_error;
-}
-
-static int force_recovery(lb_worker_t *p,
- int *states,
- jk_logger_t *l)
-{
- unsigned int i;
- int forced = 0;
- lb_sub_worker_t *w = NULL;
- ajp_worker_t *aw = NULL;
- JK_TRACE_ENTER(l);
-
- for (i = 0; i < p->num_of_workers; i++) {
- w = &p->lb_workers[i];
- if (w->s->state == JK_LB_STATE_ERROR) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_INFO,
- "worker %s is marked for forced recovery",
- w->name);
- aw = (ajp_worker_t *)w->worker->worker_private;
- aw->s->reply_timeouts = 0;
- w->s->state = JK_LB_STATE_FORCE;
- if (states != NULL)
- states[i] = JK_LB_STATE_FORCE;
- forced++;
- }
- }
-
- JK_TRACE_EXIT(l);
- return forced;
-}
-
-/* Divide old load values by the decay factor,
- * such that older values get less important
- * for the routing decisions.
- */
-static jk_uint64_t decay_load(lb_worker_t *p,
- time_t exponent,
- jk_logger_t *l)
-{
- unsigned int i;
- jk_uint64_t curmax = 0;
- lb_sub_worker_t *w;
- ajp_worker_t *aw;
-
- JK_TRACE_ENTER(l);
- for (i = 0; i < p->num_of_workers; i++) {
- w = &p->lb_workers[i];
- if (p->lbmethod != JK_LB_METHOD_BUSYNESS) {
- w->s->lb_value >>= exponent;
- if (w->s->lb_value > curmax) {
- curmax = w->s->lb_value;
- }
- }
- aw = (ajp_worker_t *)w->worker->worker_private;
- aw->s->reply_timeouts >>= exponent;
- }
- JK_TRACE_EXIT(l);
- return curmax;
-}
-
-static int JK_METHOD maintain_workers(jk_worker_t *p, time_t now, jk_logger_t *l)
-{
- unsigned int i = 0;
- jk_uint64_t curmax = 0;
- long delta;
-
- JK_TRACE_ENTER(l);
- if (p && p->worker_private) {
- lb_worker_t *lb = (lb_worker_t *)p->worker_private;
-
- for (i = 0; i < lb->num_of_workers; i++) {
- if (lb->lb_workers[i].worker->maintain) {
- lb->lb_workers[i].worker->maintain(lb->lb_workers[i].worker, now, l);
- }
- }
-
- jk_shm_lock();
-
- /* Now we check for global maintenance (once for all processes).
- * Checking workers for recovery and applying decay to the
- * load values should not be done by each process individually.
- * Therefore we globally sync and we use a global timestamp.
- * Since it's possible that we come here a few milliseconds
- * before the interval has passed, we allow a little tolerance.
- */
- delta = (long)difftime(now, lb->s->last_maintain_time) + JK_LB_MAINTAIN_TOLERANCE;
- if (delta >= lb->maintain_time) {
- lb->s->last_maintain_time = now;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "decay with 2^%d",
- JK_LB_DECAY_MULT * delta / lb->maintain_time);
- curmax = decay_load(lb, JK_LB_DECAY_MULT * delta / lb->maintain_time, l);
- if (!recover_workers(lb, curmax, now, l)) {
- force_recovery(lb, NULL, l);
- }
- }
-
- jk_shm_unlock();
-
- }
- else {
- JK_LOG_NULL_PARAMS(l);
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static int find_by_session(jk_ws_service_t *s,
- lb_worker_t *p,
- const char *session_route,
- jk_logger_t *l)
-{
-
- int rc = -1;
- unsigned int i;
-
- for (i = 0; i < p->num_of_workers; i++) {
- if (strcmp(p->lb_workers[i].route, session_route) == 0) {
- rc = i;
- break;
- }
- }
- return rc;
-}
-
-static int find_best_bydomain(jk_ws_service_t *s,
- lb_worker_t *p,
- const char *route_or_domain,
- int *states,
- jk_logger_t *l)
-{
- unsigned int i;
- int d = 0;
- jk_uint64_t curmin = 0;
- int candidate = -1;
- int activation;
- lb_sub_worker_t wr;
- char *idpart = strchr(route_or_domain, '.');
- size_t domain_len = 0;
-
- if (idpart) {
- domain_len = idpart - route_or_domain;
- }
- else {
- domain_len = strlen(route_or_domain);
- }
- /* First try to see if we have available candidate */
- for (i = 0; i < p->num_of_workers; i++) {
- /* Skip all workers that are not member of domain */
- wr = p->lb_workers[i];
- if (strlen(wr.domain) == 0 ||
- strlen(wr.domain) != domain_len ||
- strncmp(wr.domain, route_or_domain, domain_len))
- continue;
- /* Take into calculation only the workers that are
- * not in error state, stopped, disabled or busy.
- */
- activation = s->extension.activation ?
- s->extension.activation[i] :
- JK_LB_ACTIVATION_UNSET;
- if (activation == JK_LB_ACTIVATION_UNSET)
- activation = wr.activation;
- if (JK_WORKER_USABLE(states[wr.i], activation)) {
- if (candidate < 0 || wr.distance < d ||
- (wr.s->lb_value < curmin &&
- wr.distance == d)) {
- candidate = i;
- curmin = wr.s->lb_value;
- d = wr.distance;
- }
- }
- }
- return candidate;
-}
-
-
-static int find_best_byvalue(jk_ws_service_t *s,
- lb_worker_t *p,
- int *states,
- jk_logger_t *l)
-{
- unsigned int i;
- unsigned int j;
- unsigned int offset;
- int d = 0;
- jk_uint64_t curmin = 0;
-
- /* find the least busy worker */
- int candidate = -1;
- int activation;
- lb_sub_worker_t wr;
-
- offset = p->next_offset;
-
- /* First try to see if we have available candidate */
- for (j = offset; j < p->num_of_workers + offset; j++) {
- i = j % p->num_of_workers;
- wr = p->lb_workers[i];
- activation = s->extension.activation ?
- s->extension.activation[i] :
- JK_LB_ACTIVATION_UNSET;
- if (activation == JK_LB_ACTIVATION_UNSET)
- activation = wr.activation;
-
- /* Take into calculation only the workers that are
- * not in error state, stopped, disabled or busy.
- */
- if (JK_WORKER_USABLE(states[wr.i], activation)) {
- if (candidate < 0 || wr.distance < d ||
- (wr.s->lb_value < curmin &&
- wr.distance == d)) {
- candidate = i;
- curmin = wr.s->lb_value;
- d = wr.distance;
- p->next_offset = i + 1;
- }
- }
- }
- return candidate;
-}
-
-static int find_bysession_route(jk_ws_service_t *s,
- lb_worker_t *p,
- const char *session_route,
- int *states,
- jk_logger_t *l)
-{
- int uses_domain = 0;
- int candidate = -1;
-
- candidate = find_by_session(s, p, session_route, l);
- if (candidate < 0) {
- uses_domain = 1;
- candidate = find_best_bydomain(s, p, session_route, states, l);
- }
- if (candidate >= 0) {
- lb_sub_worker_t wr = p->lb_workers[candidate];
- int activation;
- if (uses_domain)
- s->route = wr.domain;
- activation = s->extension.activation ?
- s->extension.activation[candidate] :
- JK_LB_ACTIVATION_UNSET;
- if (activation == JK_LB_ACTIVATION_UNSET)
- activation = wr.activation;
- if (!JK_WORKER_USABLE_STICKY(states[wr.i], activation)) {
- /* We have a worker that is error state or stopped.
- * If it has a redirection set use that redirection worker.
- * This enables to safely remove the member from the
- * balancer. Of course you will need a some kind of
- * session replication between those two remote.
- */
- if (p->sticky_session_force)
- candidate = -1;
- else if (*wr.redirect) {
- candidate = find_by_session(s, p, wr.redirect, l);
- s->route = NULL;
- }
- else if (*wr.domain && !uses_domain) {
- candidate = find_best_bydomain(s, p, wr.domain, states, l);
- if (candidate >= 0) {
- s->route = wr.domain;
- } else {
- s->route = NULL;
- }
- }
- if (candidate >= 0) {
- wr = p->lb_workers[candidate];
- activation = s->extension.activation ?
- s->extension.activation[candidate] :
- JK_LB_ACTIVATION_UNSET;
- if (activation == JK_LB_ACTIVATION_UNSET)
- activation = wr.activation;
- if (!JK_WORKER_USABLE_STICKY(states[wr.i], activation))
- candidate = -1;
- }
- }
- }
- return candidate;
-}
-
-static int find_failover_worker(jk_ws_service_t *s,
- lb_worker_t *p,
- int *states,
- jk_logger_t *l)
-{
- int rc = -1;
- unsigned int i;
- char *redirect = NULL;
-
- for (i = 0; i < p->num_of_workers; i++) {
- if (strlen(p->lb_workers[i].redirect)) {
- redirect = p->lb_workers[i].redirect;
- break;
- }
- }
- if (redirect)
- rc = find_bysession_route(s, p, redirect, states, l);
- return rc;
-}
-
-static int find_best_worker(jk_ws_service_t *s,
- lb_worker_t *p,
- int *states,
- jk_logger_t *l)
-{
- int rc = -1;
-
- rc = find_best_byvalue(s, p, states, l);
- /* By default use worker route as session route */
- if (rc < 0)
- rc = find_failover_worker(s, p, states, l);
- return rc;
-}
-
-static int get_most_suitable_worker(jk_ws_service_t *s,
- lb_worker_t *p,
- char *sessionid,
- int *states,
- jk_logger_t *l)
-{
- int rc = -1;
- int r;
-
- JK_TRACE_ENTER(l);
- if (p->num_of_workers == 1) {
- /* No need to find the best worker
- * if there is a single one
- */
- int activation = s->extension.activation ?
- s->extension.activation[0] :
- JK_LB_ACTIVATION_UNSET;
- if (activation == JK_LB_ACTIVATION_UNSET)
- activation = p->lb_workers[0].activation;
- if (JK_WORKER_USABLE_STICKY(states[0], activation)) {
- if (activation != JK_LB_ACTIVATION_DISABLED) {
- JK_TRACE_EXIT(l);
- return 0;
- }
- }
- else {
- JK_TRACE_EXIT(l);
- return -1;
- }
- }
- if (p->lblock == JK_LB_LOCK_PESSIMISTIC)
- r = jk_shm_lock();
- else {
- JK_ENTER_CS(&(p->cs), r);
- }
- if (!r) {
- jk_log(l, JK_LOG_ERROR,
- "locking failed (errno=%d)",
- errno);
- }
- if (sessionid) {
- char *session = sessionid;
- while (sessionid) {
- char *next = strchr(sessionid, ';');
- char *session_route = NULL;
- if (next)
- *next++ = '\0';
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "searching worker for partial sessionid %s",
- sessionid);
- session_route = strchr(sessionid, '.');
- if (session_route) {
- ++session_route;
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "searching worker for session route %s",
- session_route);
-
- /* We have a session route. Whow! */
- rc = find_bysession_route(s, p, session_route, states, l);
- if (rc >= 0) {
- lb_sub_worker_t *wr = &(p->lb_workers[rc]);
- if (p->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_shm_unlock();
- else {
- JK_LEAVE_CS(&(p->cs), r);
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "found worker %s (%s) for route %s and partial sessionid %s",
- wr->name, wr->route, session_route, sessionid);
- JK_TRACE_EXIT(l);
- return rc;
- }
- }
- /* Try next partial sessionid if present */
- sessionid = next;
- rc = -1;
- }
- if (rc < 0 && p->sticky_session_force) {
- if (p->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_shm_unlock();
- else {
- JK_LEAVE_CS(&(p->cs), r);
- }
- jk_log(l, JK_LOG_INFO,
- "all workers are in error state for session %s",
- session);
- JK_TRACE_EXIT(l);
- return -1;
- }
- }
- rc = find_best_worker(s, p, states, l);
- if (p->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_shm_unlock();
- else {
- JK_LEAVE_CS(&(p->cs), r);
- }
- if (rc >= 0) {
- lb_sub_worker_t *wr = &(p->lb_workers[rc]);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "found best worker %s (%s) using method '%s'",
- wr->name, wr->route, jk_lb_get_method(p, l));
- JK_TRACE_EXIT(l);
- return rc;
- }
- JK_TRACE_EXIT(l);
- return -1;
-}
-
-static void lb_add_log_items(jk_ws_service_t *s,
- const char *const *log_names,
- lb_sub_worker_t *w,
- jk_logger_t *l)
-{
- ajp_worker_t *aw = (ajp_worker_t *)w->worker->worker_private;
- const char **log_values = jk_pool_alloc(s->pool, sizeof(char *) * JK_LB_NOTES_COUNT);
- char *buf = jk_pool_alloc(s->pool, sizeof(char *) * JK_LB_NOTES_COUNT * JK_LB_UINT64_STR_SZ);
- if (log_values && buf) {
- /* JK_NOTE_LB_FIRST/LAST_NAME */
- log_values[0] = w->name;
- snprintf(buf, JK_LB_UINT64_STR_SZ, "%" JK_UINT64_T_FMT, w->s->lb_value);
- /* JK_NOTE_LB_FIRST/LAST_VALUE */
- log_values[1] = buf;
- buf += JK_LB_UINT64_STR_SZ;
- snprintf(buf, JK_LB_UINT64_STR_SZ, "%" JK_UINT64_T_FMT, aw->s->used);
- /* JK_NOTE_LB_FIRST/LAST_ACCESSED */
- log_values[2] = buf;
- buf += JK_LB_UINT64_STR_SZ;
- snprintf(buf, JK_LB_UINT64_STR_SZ, "%" JK_UINT64_T_FMT, aw->s->readed);
- /* JK_NOTE_LB_FIRST/LAST_READ */
- log_values[3] = buf;
- buf += JK_LB_UINT64_STR_SZ;
- snprintf(buf, JK_LB_UINT64_STR_SZ, "%" JK_UINT64_T_FMT, aw->s->transferred);
- /* JK_NOTE_LB_FIRST/LAST_TRANSFERRED */
- log_values[4] = buf;
- buf += JK_LB_UINT64_STR_SZ;
- snprintf(buf, JK_LB_UINT64_STR_SZ, "%" JK_UINT32_T_FMT, w->s->errors);
- /* JK_NOTE_LB_FIRST/LAST_ERRORS */
- log_values[5] = buf;
- buf += JK_LB_UINT64_STR_SZ;
- snprintf(buf, JK_LB_UINT64_STR_SZ, "%d", aw->s->busy);
- /* JK_NOTE_LB_FIRST/LAST_BUSY */
- log_values[6] = buf;
- /* JK_NOTE_LB_FIRST/LAST_ACTIVATION */
- log_values[7] = jk_lb_get_activation(w, l);
- /* JK_NOTE_LB_FIRST/LAST_STATE */
- log_values[8] = jk_lb_get_state(w, l);
- s->add_log_items(s, log_names, log_values, JK_LB_NOTES_COUNT);
- }
-}
-
-static int JK_METHOD service(jk_endpoint_t *e,
- jk_ws_service_t *s,
- jk_logger_t *l, int *is_error)
-{
- lb_endpoint_t *p;
- int attempt = 0;
- lb_sub_worker_t *prec = NULL;
- int num_of_workers;
- int first = 1;
- int was_forced = 0;
- int recoverable = JK_TRUE;
- int rc = JK_UNSET;
- char *sessionid = NULL;
- int i;
- int retry = 0;
-
- JK_TRACE_ENTER(l);
-
- if (!e || !e->endpoint_private || !s || !is_error) {
- JK_LOG_NULL_PARAMS(l);
- if (is_error)
- *is_error = JK_HTTP_SERVER_ERROR;
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- p = e->endpoint_private;
- num_of_workers = p->worker->num_of_workers;
-
- /* Set returned error to OK */
- *is_error = JK_HTTP_OK;
-
- if (p->worker->sequence != p->worker->s->h.sequence)
- jk_lb_pull(p->worker, JK_FALSE, l);
- for (i = 0; i < num_of_workers; i++) {
- lb_sub_worker_t *rec = &(p->worker->lb_workers[i]);
- if (rec->s->state == JK_LB_STATE_BUSY) {
- if (ajp_has_endpoint(rec->worker, l)) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "worker %s busy count fixed",
- rec->name);
- rec->s->state = JK_LB_STATE_OK;
- }
- }
- /* Copy the shared state info */
- p->states[i] = rec->s->state;
- }
-
- /* set the recovery post, for LB mode */
- s->reco_buf = jk_b_new(s->pool);
- if (!s->reco_buf) {
- *is_error = JK_HTTP_SERVER_ERROR;
- jk_log(l, JK_LOG_ERROR,
- "Failed allocating AJP message");
- JK_TRACE_EXIT(l);
- return JK_SERVER_ERROR;
- }
- if (jk_b_set_buffer_size(s->reco_buf, p->worker->max_packet_size)) {
- *is_error = JK_HTTP_SERVER_ERROR;
- jk_log(l, JK_LOG_ERROR,
- "Failed allocating AJP message buffer");
- JK_TRACE_EXIT(l);
- return JK_SERVER_ERROR;
- }
- jk_b_reset(s->reco_buf);
- s->reco_status = RECO_INITED;
-
- if (p->worker->sticky_session) {
- /* Use sessionid only if sticky_session is
- * defined for this load balancer
- */
- sessionid = get_sessionid(s, p->worker, l);
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "service sticky_session=%d id='%s'",
- p->worker->sticky_session, sessionid ? sessionid : "empty");
-
- while (recoverable == JK_TRUE) {
- if (attempt >= num_of_workers) {
- retry++;
- if (retry >= p->worker->retries) {
- /* Done with retrying */
- break;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "retry %d, sleeping for %d ms before retrying",
- retry, p->worker->retry_interval);
- jk_sleep(p->worker->retry_interval);
- /* Pull shared memory if something changed during sleep */
- if (p->worker->sequence != p->worker->s->h.sequence)
- jk_lb_pull(p->worker, JK_FALSE, l);
- for (i = 0; i < num_of_workers; i++) {
- /* Copy the shared state info */
- p->states[i] = p->worker->lb_workers[i].s->state;
- }
- attempt = 0;
- }
- rc = JK_FALSE;
- *is_error = JK_HTTP_SERVER_BUSY;
- i = get_most_suitable_worker(s, p->worker, sessionid, p->states, l);
- if (i >= 0) {
- int r;
- int is_service_error = JK_HTTP_OK;
- lb_sub_worker_t *rec = &(p->worker->lb_workers[i]);
- ajp_worker_t *aw = (ajp_worker_t *)rec->worker->worker_private;
- jk_endpoint_t *end = NULL;
- int activation = s->extension.activation ?
- s->extension.activation[i] :
- JK_LB_ACTIVATION_UNSET;
- if (activation == JK_LB_ACTIVATION_UNSET)
- activation = rec->activation;
- if (!s->route)
- s->route = rec->route;
- s->activation = jk_lb_get_activation_direct(activation, l);
- prec = rec;
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "service worker=%s route=%s",
- rec->name, s->route);
-
- if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_shm_lock();
- if (rec->s->state == JK_LB_STATE_RECOVER) {
- rec->s->state = JK_LB_STATE_PROBE;
- p->states[rec->i] = JK_LB_STATE_PROBE;
- }
- if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_shm_unlock();
-
- r = rec->worker->get_endpoint(rec->worker, &end, l);
- if (!r || !end) {
- /* If we can not get the endpoint
- * mark the worker as busy rather then
- * as in error if the retry number is
- * greater then the number of retries.
- */
- if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_shm_lock();
- if (rec->s->state != JK_LB_STATE_ERROR) {
- rec->s->state = JK_LB_STATE_BUSY;
- p->states[rec->i] = JK_LB_STATE_BUSY;
- }
- if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_shm_unlock();
- jk_log(l, JK_LOG_INFO,
- "could not get free endpoint for worker %s (%d retries)",
- rec->name, retry);
- }
- else {
- int service_stat = JK_UNSET;
- jk_uint64_t rd = 0;
- jk_uint64_t wr = 0;
- /* Reset endpoint read and write sizes for
- * this request.
- */
- end->rd = end->wr = 0;
- end->recoverable = JK_TRUE;
- if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_shm_lock();
-
- /* Increment the number of workers serving request */
- p->worker->s->busy++;
- rec->s->busy++;
- if (p->worker->s->busy > p->worker->s->max_busy)
- p->worker->s->max_busy = p->worker->s->busy;
- if ( (p->worker->lbmethod == JK_LB_METHOD_REQUESTS) ||
- (p->worker->lbmethod == JK_LB_METHOD_BUSYNESS) ||
- (p->worker->lbmethod == JK_LB_METHOD_SESSIONS &&
- !sessionid) )
- rec->s->lb_value += rec->lb_mult;
- if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_shm_unlock();
-
- service_stat = end->service(end, s, l, &is_service_error);
- rd = end->rd;
- wr = end->wr;
- recoverable = end->recoverable;
- *is_error = is_service_error;
- end->done(&end, l);
-
- if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_shm_lock();
-
- /* Update partial reads and writes if any */
- if (p->worker->lbmethod == JK_LB_METHOD_TRAFFIC) {
- rec->s->lb_value += (rd+wr)*rec->lb_mult;
- }
- else if (p->worker->lbmethod == JK_LB_METHOD_BUSYNESS) {
- if (rec->s->lb_value >= rec->lb_mult) {
- rec->s->lb_value -= rec->lb_mult;
- }
- else {
- rec->s->lb_value = 0;
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "worker %s has load value to low (%"
- JK_UINT64_T_FMT
- " < %"
- JK_UINT64_T_FMT
- ") ",
- "- correcting to 0",
- rec->name,
- rec->s->lb_value,
- rec->lb_mult);
- }
- }
- }
-
- /* When have an endpoint and we ran a request, assume
- * we are OK, unless we last were in error.
- * We will below explicitely set OK or ERROR according
- * to the returned service_stat.
- */
- if (rec->s->state != JK_LB_STATE_ERROR) {
- rec->s->state = JK_LB_STATE_OK;
- p->states[rec->i] = JK_LB_STATE_OK;
- }
- /* Decrement the busy worker count.
- * Check if the busy was reset to zero by graceful
- * restart of the server.
- */
- if (p->worker->s->busy)
- p->worker->s->busy--;
- if (rec->s->busy)
- rec->s->busy--;
- if (service_stat == JK_TRUE) {
- /*
- * Successful request.
- */
- rec->s->state = JK_LB_STATE_OK;
- p->states[rec->i] = JK_LB_STATE_OK;
- rec->s->error_time = 0;
- rc = JK_TRUE;
- recoverable = JK_UNSET;
- }
- else if (service_stat == JK_CLIENT_ERROR) {
- /*
- * Client error !!!
- * Since this is bad request do not fail over.
- */
- rec->s->state = JK_LB_STATE_OK;
- p->states[rec->i] = JK_LB_STATE_ERROR;
- rec->s->error_time = 0;
- rc = JK_CLIENT_ERROR;
- recoverable = JK_FALSE;
- }
- else if (service_stat == JK_SERVER_ERROR) {
- /*
- * Internal JK server error.
- * Keep previous global state.
- * Do not try to reuse the same node for the same request.
- * Failing over to another node could help.
- */
- p->states[rec->i] = JK_LB_STATE_ERROR;
- rc = JK_FALSE;
- }
- else if (service_stat == JK_AJP_PROTOCOL_ERROR) {
- /*
- * We've received a bad AJP message from the backend.
- * Keep previous global state.
- * Do not try to reuse the same node for the same request.
- * Failing over to another node could help.
- */
- p->states[rec->i] = JK_LB_STATE_ERROR;
- rc = JK_FALSE;
- }
- else if (service_stat == JK_STATUS_ERROR) {
- /*
- * Status code configured as service is down.
- * The node is fine.
- * Do not try to reuse the same node for the same request.
- * Failing over to another node could help.
- */
- rec->s->state = JK_LB_STATE_OK;
- p->states[rec->i] = JK_LB_STATE_ERROR;
- rec->s->error_time = 0;
- rc = JK_FALSE;
- }
- else if (service_stat == JK_STATUS_FATAL_ERROR) {
- /*
- * Status code configured as service is down.
- * Mark the node as bad.
- * Do not try to reuse the same node for the same request.
- * Failing over to another node could help.
- */
- rec->s->errors++;
- rec->s->state = JK_LB_STATE_ERROR;
- p->states[rec->i] = JK_LB_STATE_ERROR;
- rec->s->error_time = time(NULL);
- rc = JK_FALSE;
- }
- else if (service_stat == JK_REPLY_TIMEOUT) {
- if (aw->s->reply_timeouts > (unsigned)p->worker->max_reply_timeouts) {
- /*
- * Service failed - to many reply timeouts
- * Mark the node as bad.
- * Do not try to reuse the same node for the same request.
- * Failing over to another node could help.
- */
- rec->s->errors++;
- rec->s->state = JK_LB_STATE_ERROR;
- p->states[rec->i] = JK_LB_STATE_ERROR;
- rec->s->error_time = time(NULL);
- }
- else {
- /*
- * Reply timeout, bot not yet too many of them.
- * Keep previous global state.
- * Do not try to reuse the same node for the same request.
- * Failing over to another node could help.
- */
- p->states[rec->i] = JK_LB_STATE_ERROR;
- }
- rc = JK_FALSE;
- }
- else {
- /*
- * Various unspecific error cases.
- * Keep previous global state, if we are not in local error since to long.
- * Do not try to reuse the same node for the same request.
- * Failing over to another node could help.
- */
- time_t now = time(NULL);
- rec->s->errors++;
- if (rec->s->busy == 0 ||
- p->worker->error_escalation_time == 0 ||
- (rec->s->error_time > 0 &&
- (int)difftime(now, rec->s->error_time) >= p->worker->error_escalation_time)) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "worker %s escalating local error to global error",
- rec->name);
- rec->s->state = JK_LB_STATE_ERROR;
- }
- p->states[rec->i] = JK_LB_STATE_ERROR;
- if (rec->s->error_time == 0) {
- rec->s->error_time = now;
- }
- rc = JK_FALSE;
- }
- if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_shm_unlock();
- if (p->states[rec->i] == JK_LB_STATE_ERROR)
- jk_log(l, JK_LOG_INFO,
- "service failed, worker %s is in %serror state",
- rec->name,
- rec->s->state == JK_LB_STATE_ERROR ? "" : "local ");
- }
- if (recoverable == JK_TRUE) {
- /*
- * Error is recoverable by submitting the request to
- * another worker... Lets try to do that.
- */
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "recoverable error... will try to recover on other worker");
- }
- else {
- /*
- * Error is not recoverable - break with an error.
- */
- if (rc == JK_CLIENT_ERROR)
- jk_log(l, JK_LOG_INFO,
- "unrecoverable error %d, request failed."
- " Client failed in the middle of request,"
- " we can't recover to another instance.",
- *is_error);
- else if (rc != JK_TRUE)
- jk_log(l, JK_LOG_ERROR,
- "unrecoverable error %d, request failed."
- " Tomcat failed in the middle of request,"
- " we can't recover to another instance.",
- *is_error);
- }
- if (first == 1 && s->add_log_items) {
- first = 0;
- lb_add_log_items(s, lb_first_log_names, prec, l);
- }
- }
- else {
- /* No more workers left ... */
- if (!was_forced) {
- int nf;
- /* Force recovery only once.
- * If it still fails, Tomcat is still disconnected.
- */
- jk_shm_lock();
- nf = force_recovery(p->worker, p->states, l);
- jk_shm_unlock();
- was_forced = 1;
- if (nf) {
- /* We have forced recovery.
- * Reset the service loop and go again
- */
- prec = NULL;
- jk_log(l, JK_LOG_INFO,
- "Forcing recovery once for %d workers", nf);
- continue;
- }
- else {
- /* No workers in error state.
- * Somebody set them all to disabled?
- */
- jk_log(l, JK_LOG_INFO,
- "All tomcat instances failed, no more workers "
- "left for recovery (attempt=%d, retry=%d)",
- attempt, retry);
- *is_error = JK_HTTP_SERVER_BUSY;
- rc = JK_FALSE;
- }
- }
- else {
- jk_log(l, JK_LOG_INFO,
- "All tomcat instances failed, no more workers "
- "left (attempt=%d, retry=%d)",
- attempt, retry);
- *is_error = JK_HTTP_SERVER_BUSY;
- rc = JK_FALSE;
- }
- }
- attempt++;
- }
- if (recoverable == JK_TRUE) {
- jk_log(l, JK_LOG_INFO,
- "All tomcat instances are busy or in error state");
- /* rc and http error must be set above */
- }
- if (rc == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "All tomcat instances failed, no more workers left");
- }
- if (prec && s->add_log_items) {
- lb_add_log_items(s, lb_last_log_names, prec, l);
- }
-
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-static int JK_METHOD done(jk_endpoint_t **e, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (e && *e && (*e)->endpoint_private) {
- lb_endpoint_t *p = (*e)->endpoint_private;
- free(p->states);
- free(p);
- *e = NULL;
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
-
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-static int JK_METHOD validate(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (pThis && pThis->worker_private) {
- lb_worker_t *p = pThis->worker_private;
- char **worker_names;
- unsigned int num_of_workers;
- const char *secret;
-
- p->sticky_session = jk_get_is_sticky_session(props, p->name);
- p->sticky_session_force = jk_get_is_sticky_session_force(props, p->name);
- secret = jk_get_worker_secret(props, p->name);
-
- if (jk_get_lb_worker_list(props,
- p->name,
- &worker_names,
- &num_of_workers) && num_of_workers) {
- unsigned int i = 0;
- unsigned int j = 0;
- p->max_packet_size = DEF_BUFFER_SZ;
- p->lb_workers = jk_pool_alloc(&p->p,
- num_of_workers *
- sizeof(lb_sub_worker_t));
- if (!p->lb_workers) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- memset(p->lb_workers, 0, num_of_workers * sizeof(lb_sub_worker_t));
- for (i = 0; i < num_of_workers; i++) {
- p->lb_workers[i].s = jk_shm_alloc_lb_sub_worker(&p->p);
- if (p->lb_workers[i].s == NULL) {
- jk_log(l, JK_LOG_ERROR,
- "allocating lb sub worker record from shared memory");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
-
- for (i = 0; i < num_of_workers; i++) {
- const char *s;
- unsigned int ms;
-
- p->lb_workers[i].i = i;
- strncpy(p->lb_workers[i].name, worker_names[i],
- JK_SHM_STR_SIZ);
- strncpy(p->lb_workers[i].s->h.name, worker_names[i],
- JK_SHM_STR_SIZ);
- p->lb_workers[i].sequence = 0;
- p->lb_workers[i].s->h.sequence = 0;
- p->lb_workers[i].lb_factor =
- jk_get_lb_factor(props, worker_names[i]);
- if (p->lb_workers[i].lb_factor < 1) {
- p->lb_workers[i].lb_factor = 1;
- }
- /* Calculate the maximum packet size from all workers
- * for the recovery buffer.
- */
- ms = jk_get_max_packet_size(props, worker_names[i]);
- if (ms > p->max_packet_size)
- p->max_packet_size = ms;
- p->lb_workers[i].distance =
- jk_get_distance(props, worker_names[i]);
- if ((s = jk_get_worker_route(props, worker_names[i], NULL)))
- strncpy(p->lb_workers[i].route, s, JK_SHM_STR_SIZ);
- else
- strncpy(p->lb_workers[i].route, worker_names[i], JK_SHM_STR_SIZ);
- if ((s = jk_get_worker_domain(props, worker_names[i], NULL)))
- strncpy(p->lb_workers[i].domain, s, JK_SHM_STR_SIZ);
- if ((s = jk_get_worker_redirect(props, worker_names[i], NULL)))
- strncpy(p->lb_workers[i].redirect, s, JK_SHM_STR_SIZ);
-
- p->lb_workers[i].s->lb_value = 0;
- p->lb_workers[i].s->state = JK_LB_STATE_IDLE;
- p->lb_workers[i].s->error_time = 0;
- p->lb_workers[i].activation =
- jk_get_worker_activation(props, worker_names[i]);
- if (!wc_create_worker(p->lb_workers[i].name, 0,
- props,
- &(p->lb_workers[i].worker),
- we, l) || !p->lb_workers[i].worker) {
- break;
- }
- if (secret && (p->lb_workers[i].worker->type == JK_AJP13_WORKER_TYPE ||
- p->lb_workers[i].worker->type == JK_AJP14_WORKER_TYPE)) {
- ajp_worker_t *aw = (ajp_worker_t *)p->lb_workers[i].worker->worker_private;
- if (!aw->secret)
- aw->secret = secret;
- }
- if (p->lb_workers[i].worker->type == JK_AJP13_WORKER_TYPE ||
- p->lb_workers[i].worker->type == JK_AJP14_WORKER_TYPE) {
- ajp_worker_t *aw = (ajp_worker_t *)p->lb_workers[i].worker->worker_private;
- if (aw->port == 0) {
- p->lb_workers[i].activation = JK_LB_ACTIVATION_STOPPED;
- }
- }
- }
-
- if (i != num_of_workers) {
- jk_log(l, JK_LOG_ERROR,
- "Failed creating worker %s",
- p->lb_workers[i].name);
- close_workers(p, i, l);
- }
- else {
- /* Update domain names if route contains period '.' */
- for (i = 0; i < num_of_workers; i++) {
- if (!p->lb_workers[i].domain[0]) {
- char *id_domain = strchr(p->lb_workers[i].route, '.');
- if (id_domain) {
- *id_domain = '\0';
- strcpy(p->lb_workers[i].domain, p->lb_workers[i].route);
- *id_domain = '.';
- }
- }
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "Balanced worker %i has name %s and route %s in domain %s",
- i,
- p->lb_workers[i].name,
- p->lb_workers[i].route,
- p->lb_workers[i].domain);
- }
- }
- p->num_of_workers = num_of_workers;
- update_mult(p, l);
- for (i = 0; i < num_of_workers; i++) {
- for (j = 0; j < i; j++) {
- if (strcmp(p->lb_workers[i].route, p->lb_workers[j].route) == 0) {
- jk_log(l, JK_LOG_ERROR,
- "Balanced workers number %i (%s) and %i (%s) share the same route %s - aborting configuration!",
- i,
- p->lb_workers[i].name,
- j,
- p->lb_workers[j].name,
- p->lb_workers[i].route);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- }
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- }
- }
-
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-static int JK_METHOD init(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *log)
-{
- int i;
-
- lb_worker_t *p = (lb_worker_t *)pThis->worker_private;
- JK_TRACE_ENTER(log);
-
- p->worker.we = we;
- p->retries = jk_get_worker_retries(props, p->name,
- JK_RETRIES);
- p->retry_interval =
- jk_get_worker_retry_interval(props, p->name,
- JK_SLEEP_DEF);
- p->recover_wait_time = jk_get_worker_recover_timeout(props, p->name,
- WAIT_BEFORE_RECOVER);
- if (p->recover_wait_time < 1)
- p->recover_wait_time = 1;
- p->error_escalation_time = jk_get_worker_error_escalation_time(props, p->name,
- p->recover_wait_time / 2);
- p->max_reply_timeouts = jk_get_worker_max_reply_timeouts(props, p->name,
- 0);
- p->maintain_time = jk_get_worker_maintain_time(props);
- if(p->maintain_time < 0)
- p->maintain_time = 0;
- p->s->last_maintain_time = time(NULL);
- p->s->last_reset = p->s->last_maintain_time;
-
- p->lbmethod = jk_get_lb_method(props, p->name);
- p->lblock = jk_get_lb_lock(props, p->name);
- strncpy(p->session_cookie,
- jk_get_lb_session_cookie(props, p->name, JK_SESSION_IDENTIFIER),
- JK_SHM_STR_SIZ);
- strncpy(p->session_path,
- jk_get_lb_session_path(props, p->name, JK_PATH_SESSION_IDENTIFIER),
- JK_SHM_STR_SIZ);
- strcpy(p->s->session_cookie, p->session_cookie);
- strcpy(p->s->session_path, p->session_path);
-
- JK_INIT_CS(&(p->cs), i);
- if (i == JK_FALSE) {
- jk_log(log, JK_LOG_ERROR,
- "creating thread lock (errno=%d)",
- errno);
- JK_TRACE_EXIT(log);
- return JK_FALSE;
- }
-
- p->sequence++;
- jk_lb_push(p, JK_FALSE, log);
-
- JK_TRACE_EXIT(log);
- return JK_TRUE;
-}
-
-static int JK_METHOD get_endpoint(jk_worker_t *pThis,
- jk_endpoint_t **pend, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (pThis && pThis->worker_private && pend) {
- lb_endpoint_t *p = (lb_endpoint_t *) malloc(sizeof(lb_endpoint_t));
- p->worker = pThis->worker_private;
- p->endpoint.endpoint_private = p;
- p->endpoint.service = service;
- p->endpoint.done = done;
- p->states = (int *)malloc((p->worker->num_of_workers + 1) * sizeof(int));
- if (!p->states) {
- free(p);
- jk_log(l, JK_LOG_ERROR,
- "Failed allocating private worker state memory");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- *pend = &p->endpoint;
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else {
- JK_LOG_NULL_PARAMS(l);
- }
-
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-static int JK_METHOD destroy(jk_worker_t **pThis, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (pThis && *pThis && (*pThis)->worker_private) {
- unsigned int i;
- lb_worker_t *private_data = (*pThis)->worker_private;
-
- close_workers(private_data, private_data->num_of_workers, l);
- JK_DELETE_CS(&(private_data->cs), i);
- jk_close_pool(&private_data->p);
- free(private_data);
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
-
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-int JK_METHOD lb_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (NULL != name && NULL != w) {
- lb_worker_t *private_data =
- (lb_worker_t *) calloc(1, sizeof(lb_worker_t));
-
-
- jk_open_pool(&private_data->p,
- private_data->buf,
- sizeof(jk_pool_atom_t) * TINY_POOL_SIZE);
-
- private_data->s = jk_shm_alloc_lb_worker(&private_data->p);
- if (!private_data->s) {
- free(private_data);
- JK_TRACE_EXIT(l);
- return 0;
- }
- strncpy(private_data->name, name, JK_SHM_STR_SIZ);
- strncpy(private_data->s->h.name, name, JK_SHM_STR_SIZ);
- private_data->lb_workers = NULL;
- private_data->num_of_workers = 0;
- private_data->worker.worker_private = private_data;
- private_data->worker.validate = validate;
- private_data->worker.init = init;
- private_data->worker.get_endpoint = get_endpoint;
- private_data->worker.destroy = destroy;
- private_data->worker.maintain = maintain_workers;
- private_data->recover_wait_time = WAIT_BEFORE_RECOVER;
- private_data->error_escalation_time = private_data->recover_wait_time / 2;
- private_data->max_reply_timeouts = 0;
- private_data->sequence = 0;
- private_data->s->h.sequence = 0;
- private_data->next_offset = 0;
- *w = &private_data->worker;
- JK_TRACE_EXIT(l);
- return JK_LB_WORKER_TYPE;
- }
- else {
- JK_LOG_NULL_PARAMS(l);
- }
-
- JK_TRACE_EXIT(l);
- return 0;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.h
deleted file mode 100644
index f0885e24..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.h
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: load balance worker header file *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Author: Rainer Jung <rjung@apache.org> *
- * Version: $Revision: 751916 $ *
- ***************************************************************************/
-
-#ifndef JK_LB_WORKER_H
-#define JK_LB_WORKER_H
-
-#include "jk_logger.h"
-#include "jk_service.h"
-#include "jk_mt.h"
-#include "jk_shm.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define JK_LB_WORKER_NAME ("lb")
-#define JK_LB_WORKER_TYPE (5)
-#define JK_LB_SUB_WORKER_TYPE (7)
-#define JK_LB_DEF_DOMAIN_NAME ("unknown")
-
-#define JK_LB_METHOD_REQUESTS (0)
-#define JK_LB_METHOD_TRAFFIC (1)
-#define JK_LB_METHOD_BUSYNESS (2)
-#define JK_LB_METHOD_SESSIONS (3)
-#define JK_LB_METHOD_DEF (JK_LB_METHOD_REQUESTS)
-#define JK_LB_METHOD_MAX (JK_LB_METHOD_SESSIONS)
-#define JK_LB_METHOD_TEXT_REQUESTS ("Request")
-#define JK_LB_METHOD_TEXT_TRAFFIC ("Traffic")
-#define JK_LB_METHOD_TEXT_BUSYNESS ("Busyness")
-#define JK_LB_METHOD_TEXT_SESSIONS ("Sessions")
-#define JK_LB_METHOD_TEXT_DEF (JK_LB_METHOD_TEXT_REQUESTS)
-#define JK_LB_LOCK_OPTIMISTIC (0)
-#define JK_LB_LOCK_PESSIMISTIC (1)
-#define JK_LB_LOCK_DEF (JK_LB_LOCK_OPTIMISTIC)
-#define JK_LB_LOCK_MAX (JK_LB_LOCK_PESSIMISTIC)
-#define JK_LB_LOCK_TEXT_OPTIMISTIC ("Optimistic")
-#define JK_LB_LOCK_TEXT_PESSIMISTIC ("Pessimistic")
-#define JK_LB_LOCK_TEXT_DEF (JK_LB_LOCK_TEXT_OPTIMISTIC)
-/*
- * The following definitions for state and activation
- * need to be kept in sync with the two macros
- * JK_WORKER_USABLE() and JK_WORKER_USABLE_STICKY() in jk_lb_worker.c.
- * Since we use ordered comparisons there instead of multiple
- * equal/unequal compares, order of the values is critical here.
- */
-#define JK_LB_STATE_IDLE (0)
-#define JK_LB_STATE_OK (1)
-#define JK_LB_STATE_RECOVER (2)
-#define JK_LB_STATE_FORCE (3)
-#define JK_LB_STATE_BUSY (4)
-#define JK_LB_STATE_ERROR (5)
-#define JK_LB_STATE_PROBE (6)
-#define JK_LB_STATE_DEF (JK_LB_STATE_IDLE)
-#define JK_LB_STATE_TEXT_IDLE ("OK/IDLE")
-#define JK_LB_STATE_TEXT_OK ("OK")
-#define JK_LB_STATE_TEXT_RECOVER ("ERR/REC")
-#define JK_LB_STATE_TEXT_FORCE ("ERR/FRC")
-#define JK_LB_STATE_TEXT_BUSY ("OK/BUSY")
-#define JK_LB_STATE_TEXT_ERROR ("ERR")
-#define JK_LB_STATE_TEXT_PROBE ("ERR/PRB")
-#define JK_LB_STATE_TEXT_MAX (JK_LB_STATE_PROBE)
-#define JK_LB_STATE_TEXT_DEF (JK_LB_STATE_TEXT_IDLE)
-/* All JK_LB_ACTIVATION_* values must be single digit. */
-/* Otherwise the string encoding of the activation array */
-/* fails e.g. in the isapi redirector. */
-/* JK_LB_ACTIVATION_UNSET is not allowed as an actual worker state. */
-/* It will not work e.g. when the status worker tries to show the state. */
-/* It is only used in rule extension data to indicate, that the */
-/* activation state should not be overwritten. */
-#define JK_LB_ACTIVATION_ACTIVE (0)
-#define JK_LB_ACTIVATION_DISABLED (1)
-#define JK_LB_ACTIVATION_STOPPED (2)
-#define JK_LB_ACTIVATION_UNSET (9)
-#define JK_LB_ACTIVATION_DEF (JK_LB_ACTIVATION_ACTIVE)
-#define JK_LB_ACTIVATION_MAX (JK_LB_ACTIVATION_STOPPED)
-#define JK_LB_ACTIVATION_TEXT_ACTIVE ("ACT")
-#define JK_LB_ACTIVATION_TEXT_DISABLED ("DIS")
-#define JK_LB_ACTIVATION_TEXT_STOPPED ("STP")
-#define JK_LB_ACTIVATION_TEXT_DEF (JK_LB_ACTIVATION_TEXT_ACTIVE)
-
-#define JK_LB_UINT64_STR_SZ (21)
-#define JK_LB_NOTES_COUNT (9)
-#define JK_NOTE_LB_FIRST_NAME ("JK_LB_FIRST_NAME")
-#define JK_NOTE_LB_FIRST_VALUE ("JK_LB_FIRST_VALUE")
-#define JK_NOTE_LB_FIRST_ACCESSED ("JK_LB_FIRST_ACCESSED")
-#define JK_NOTE_LB_FIRST_READ ("JK_LB_FIRST_READ")
-#define JK_NOTE_LB_FIRST_TRANSFERRED ("JK_LB_FIRST_TRANSFERRED")
-#define JK_NOTE_LB_FIRST_ERRORS ("JK_LB_FIRST_ERRORS")
-#define JK_NOTE_LB_FIRST_BUSY ("JK_LB_FIRST_BUSY")
-#define JK_NOTE_LB_FIRST_ACTIVATION ("JK_LB_FIRST_ACTIVATION")
-#define JK_NOTE_LB_FIRST_STATE ("JK_LB_FIRST_STATE")
-#define JK_NOTE_LB_LAST_NAME ("JK_LB_LAST_NAME")
-#define JK_NOTE_LB_LAST_VALUE ("JK_LB_LAST_VALUE")
-#define JK_NOTE_LB_LAST_ACCESSED ("JK_LB_LAST_ACCESSED")
-#define JK_NOTE_LB_LAST_READ ("JK_LB_LAST_READ")
-#define JK_NOTE_LB_LAST_TRANSFERRED ("JK_LB_LAST_TRANSFERRED")
-#define JK_NOTE_LB_LAST_ERRORS ("JK_LB_LAST_ERRORS")
-#define JK_NOTE_LB_LAST_BUSY ("JK_LB_LAST_BUSY")
-#define JK_NOTE_LB_LAST_ACTIVATION ("JK_LB_LAST_ACTIVATION")
-#define JK_NOTE_LB_LAST_STATE ("JK_LB_LAST_STATE")
-
-/* Time to wait before retry. */
-#define WAIT_BEFORE_RECOVER (60)
-/* We accept doing global maintenance if we are */
-/* JK_LB_MAINTAIN_TOLERANCE seconds early. */
-#define JK_LB_MAINTAIN_TOLERANCE (2)
-/* We divide load values by 2^x during global maintenance. */
-/* The exponent x is JK_LB_DECAY_MULT*#MAINT_INTV_SINCE_LAST_MAINT */
-#define JK_LB_DECAY_MULT (1)
-
-struct lb_sub_worker
-{
- jk_worker_t *worker;
- /* Shared memory worker data */
- jk_shm_lb_sub_worker_t *s;
-
- char name[JK_SHM_STR_SIZ+1];
- /* Sequence counter starting at 0 and increasing
- * every time we change the config
- */
- volatile unsigned int sequence;
-
- /* route */
- char route[JK_SHM_STR_SIZ+1];
- /* worker domain */
- char domain[JK_SHM_STR_SIZ+1];
- /* worker redirect route */
- char redirect[JK_SHM_STR_SIZ+1];
- /* worker distance */
- int distance;
- /* current activation state (config) of the worker */
- int activation;
- /* Current lb factor */
- int lb_factor;
- /* Current worker index */
- int i;
- /* Current lb reciprocal factor */
- jk_uint64_t lb_mult;
-};
-typedef struct lb_sub_worker lb_sub_worker_t;
-
-struct lb_worker
-{
- jk_worker_t worker;
- /* Shared memory worker data */
- jk_shm_lb_worker_t *s;
-
- char name[JK_SHM_STR_SIZ+1];
- /* Sequence counter starting at 0 and increasing
- * every time we change the config
- */
- volatile unsigned int sequence;
-
- jk_pool_t p;
- jk_pool_atom_t buf[TINY_POOL_SIZE];
-
- JK_CRIT_SEC cs;
-
- lb_sub_worker_t *lb_workers;
- unsigned int num_of_workers;
- int sticky_session;
- int sticky_session_force;
- int recover_wait_time;
- int error_escalation_time;
- int max_reply_timeouts;
- int retries;
- int retry_interval;
- int lbmethod;
- int lblock;
- int maintain_time;
- unsigned int max_packet_size;
- unsigned int next_offset;
- /* Session cookie */
- char session_cookie[JK_SHM_STR_SIZ+1];
- /* Session path */
- char session_path[JK_SHM_STR_SIZ+1];
-};
-typedef struct lb_worker lb_worker_t;
-
-int JK_METHOD lb_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l);
-
-const char *jk_lb_get_lock(lb_worker_t *p, jk_logger_t *l);
-int jk_lb_get_lock_code(const char *v);
-const char *jk_lb_get_method(lb_worker_t *p, jk_logger_t *l);
-int jk_lb_get_method_code(const char *v);
-const char *jk_lb_get_state(lb_sub_worker_t *p, jk_logger_t *l);
-int jk_lb_get_state_code(const char *v);
-const char *jk_lb_get_activation_direct(int activation, jk_logger_t *l);
-const char *jk_lb_get_activation(lb_sub_worker_t *p, jk_logger_t *l);
-int jk_lb_get_activation_code(const char *v);
-void reset_lb_values(lb_worker_t *p, jk_logger_t *l);
-void jk_lb_pull(lb_worker_t * p, int locked, jk_logger_t *l);
-void jk_lb_push(lb_worker_t * p, int locked, jk_logger_t *l);
-void update_mult(lb_worker_t * p, jk_logger_t *l);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* JK_LB_WORKER_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.lo
deleted file mode 100644
index 1a84f8f0..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_lb_worker.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_lb_worker.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_lb_worker.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.o
deleted file mode 100644
index d8b71999..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_lb_worker.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_logger.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_logger.h
deleted file mode 100644
index b3ba7c99..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_logger.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Logger object definitions *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 1001219 $ *
- ***************************************************************************/
-
-#ifndef JK_LOGGER_H
-#define JK_LOGGER_H
-
-#include "jk_global.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#define JK_TIME_MAX_SIZE (64)
-
-typedef struct jk_logger jk_logger_t;
-struct jk_logger
-{
- void *logger_private;
- int level;
- const char *log_fmt; /* the configured timestamp format for logging */
- char log_fmt_subsec[JK_TIME_MAX_SIZE]; /* like log_fmt, but milli/micro seconds marker
- replaced, because strftime() doesn't handle those */
- int log_fmt_type; /* do we want milli or microseconds */
- size_t log_fmt_offset; /* at which position should we insert */
- size_t log_fmt_size; /* how long is this format string */
-
- int (JK_METHOD * log) (jk_logger_t *l, int level, int used, char *what);
-
-};
-
-typedef struct jk_file_logger_t jk_file_logger_t;
-struct jk_file_logger_t
-{
- FILE *logfile;
- /* For Apache 2 APR piped logging */
- void *jklogfp;
- /* For Apache 1.3 piped logging */
- int log_fd;
-};
-
-/* Level like Java tracing, but available only
- at compile time on DEBUG preproc define.
- */
-#define JK_LOG_TRACE_LEVEL 0
-#define JK_LOG_DEBUG_LEVEL 1
-#define JK_LOG_INFO_LEVEL 2
-#define JK_LOG_WARNING_LEVEL 3
-#define JK_LOG_ERROR_LEVEL 4
-#define JK_LOG_EMERG_LEVEL 5
-#define JK_LOG_REQUEST_LEVEL 6
-#define JK_LOG_DEF_LEVEL JK_LOG_INFO_LEVEL
-
-#define JK_LOG_TRACE_VERB "trace"
-#define JK_LOG_DEBUG_VERB "debug"
-#define JK_LOG_INFO_VERB "info"
-#define JK_LOG_WARN_VERB "warn"
-#define JK_LOG_ERROR_VERB "error"
-#define JK_LOG_EMERG_VERB "emerg"
-#define JK_LOG_DEF_VERB JK_LOG_INFO_VERB
-
-#if defined(__GNUC__) || (defined(_MSC_VER) && (_MSC_VER > 1200))
-#define JK_LOG_TRACE __FILE__,__LINE__,__FUNCTION__,JK_LOG_TRACE_LEVEL
-#define JK_LOG_DEBUG __FILE__,__LINE__,__FUNCTION__,JK_LOG_DEBUG_LEVEL
-#define JK_LOG_ERROR __FILE__,__LINE__,__FUNCTION__,JK_LOG_ERROR_LEVEL
-#define JK_LOG_EMERG __FILE__,__LINE__,__FUNCTION__,JK_LOG_EMERG_LEVEL
-#define JK_LOG_INFO __FILE__,__LINE__,__FUNCTION__,JK_LOG_INFO_LEVEL
-#define JK_LOG_WARNING __FILE__,__LINE__,__FUNCTION__,JK_LOG_WARNING_LEVEL
-#else
-#define JK_LOG_TRACE __FILE__,__LINE__,NULL,JK_LOG_TRACE_LEVEL
-#define JK_LOG_DEBUG __FILE__,__LINE__,NULL,JK_LOG_DEBUG_LEVEL
-#define JK_LOG_ERROR __FILE__,__LINE__,NULL,JK_LOG_ERROR_LEVEL
-#define JK_LOG_EMERG __FILE__,__LINE__,NULL,JK_LOG_EMERG_LEVEL
-#define JK_LOG_INFO __FILE__,__LINE__,NULL,JK_LOG_INFO_LEVEL
-#define JK_LOG_WARNING __FILE__,__LINE__,NULL,JK_LOG_WARNING_LEVEL
-#endif
-
-#define JK_LOG_REQUEST __FILE__,0,NULL,JK_LOG_REQUEST_LEVEL
-
-#if defined(JK_PRODUCTION)
-/* TODO: all DEBUG messages should be compiled out
- * when this define is in place.
- */
-#define JK_IS_PRODUCTION 1
-#define JK_TRACE_ENTER(l)
-#define JK_TRACE_EXIT(l)
-#else
-#define JK_IS_PRODUCTION 0
-#define JK_TRACE_ENTER(l) \
- do { \
- if ((l) && (l)->level == JK_LOG_TRACE_LEVEL) { \
- int tmp_errno = errno; \
- jk_log((l), JK_LOG_TRACE, "enter"); \
- errno = tmp_errno; \
- } } while (0)
-
-#define JK_TRACE_EXIT(l) \
- do { \
- if ((l) && (l)->level == JK_LOG_TRACE_LEVEL) { \
- int tmp_errno = errno; \
- jk_log((l), JK_LOG_TRACE, "exit"); \
- errno = tmp_errno; \
- } } while (0)
-
-#endif /* JK_PRODUCTION */
-
-#define JK_LOG_NULL_PARAMS(l) jk_log((l), JK_LOG_ERROR, "NULL parameters")
-
-/* Debug level macro
- * It is more efficient to check the level prior
- * calling function that will not execute anyhow because of level
- */
-#define JK_IS_DEBUG_LEVEL(l) ((l) && (l)->level < JK_LOG_INFO_LEVEL)
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* JK_LOGGER_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.c
deleted file mode 100644
index 4b025425..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.c
+++ /dev/null
@@ -1,889 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: General purpose map object *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Author: Mladen Turk <mturk@apache.org> *
- * Version: $Revision: 1042364 $ *
- ***************************************************************************/
-#if defined(AS400) && !defined(AS400_UTF8)
-#include "apr_xlate.h"
-#endif
-
-#include "jk_global.h"
-#include "jk_pool.h"
-#include "jk_util.h"
-#include "jk_map.h"
-
-#define CAPACITY_INC_SIZE (50)
-#define LENGTH_OF_LINE (8192)
-#define JK_MAP_RECURSION (20)
-#define JK_MAP_REFERENCE (".reference")
-#define JK_MAP_REFERENCE_SZ (strlen(JK_MAP_REFERENCE))
-
-/* Compute the "checksum" for a key, consisting of the first
- * 4 bytes, packed into an int.
- * This checksum allows us to do a single integer
- * comparison as a fast check to determine whether we can
- * skip a strcmp
- */
-#define COMPUTE_KEY_CHECKSUM(key, checksum) \
-{ \
- const char *k = (key); \
- unsigned int c = (unsigned int)*k; \
- (checksum) = c; \
- (checksum) <<= 8; \
- if (c) { \
- c = (unsigned int)*++k; \
- checksum |= c; \
- } \
- (checksum) <<= 8; \
- if (c) { \
- c = (unsigned int)*++k; \
- checksum |= c; \
- } \
- (checksum) <<= 8; \
- if (c) { \
- c = (unsigned int)*++k; \
- checksum |= c; \
- } \
-}
-
-struct jk_map
-{
- jk_pool_t p;
- jk_pool_atom_t buf[SMALL_POOL_SIZE];
-
- const char **names;
- const void **values;
- unsigned int *keys;
-
- unsigned int capacity;
- unsigned int size;
-};
-
-static void trim_prp_comment(char *prp);
-static size_t trim(char *s);
-static int map_realloc(jk_map_t *m);
-static char *jk_map_replace_properties(jk_map_t *m, jk_map_t *env, char *value);
-
-int jk_map_alloc(jk_map_t **m)
-{
- if (m) {
- return jk_map_open(*m = (jk_map_t *)malloc(sizeof(jk_map_t)));
- }
-
- return JK_FALSE;
-}
-
-int jk_map_free(jk_map_t **m)
-{
- int rc = JK_FALSE;
-
- if (m && *m) {
- jk_map_close(*m);
- free(*m);
- *m = NULL;
- }
-
- return rc;
-}
-
-int jk_map_open(jk_map_t *m)
-{
- int rc = JK_FALSE;
-
- if (m) {
- jk_open_pool(&m->p, m->buf, sizeof(jk_pool_atom_t) * SMALL_POOL_SIZE);
- m->capacity = 0;
- m->size = 0;
- m->keys = NULL;
- m->names = NULL;
- m->values = NULL;
- rc = JK_TRUE;
- }
-
- return rc;
-}
-
-int jk_map_close(jk_map_t *m)
-{
- int rc = JK_FALSE;
-
- if (m) {
- jk_close_pool(&m->p);
- rc = JK_TRUE;
- }
-
- return rc;
-}
-
-void *jk_map_get(jk_map_t *m, const char *name, const void *def)
-{
- const void *rc = (void *)def;
-
- if (m && name) {
- unsigned int i;
- unsigned int key;
- COMPUTE_KEY_CHECKSUM(name, key)
- for (i = 0; i < m->size; i++) {
- if (m->keys[i] == key && strcmp(m->names[i], name) == 0) {
- rc = m->values[i];
- break;
- }
- }
- }
-
- return (void *)rc; /* DIRTY */
-}
-
-int jk_map_get_id(jk_map_t *m, const char *name)
-{
- int rc = -1;
- if (m && name) {
- unsigned int i;
- unsigned int key;
- COMPUTE_KEY_CHECKSUM(name, key)
- for (i = 0; i < m->size; i++) {
- if (m->keys[i] == key && strcmp(m->names[i], name) == 0) {
- rc = i;
- break;
- }
- }
- }
-
- return rc;
-}
-
-const char *jk_map_get_string(jk_map_t *m, const char *name, const char *def)
-{
- const char *rc = def;
-
- if (m && name) {
- unsigned int i;
- unsigned int key;
- COMPUTE_KEY_CHECKSUM(name, key)
- for (i = 0; i < m->size; i++) {
- if (m->keys[i] == key && strcmp(m->names[i], name) == 0) {
- rc = m->values[i];
- break;
- }
- }
- }
-
- return rc;
-}
-
-
-int jk_map_get_int(jk_map_t *m, const char *name, int def)
-{
- char buf[100];
- const char *rc;
- size_t len;
- int int_res;
- int multit = 1;
-
- sprintf(buf, "%d", def);
- rc = jk_map_get_string(m, name, buf);
-
- len = strlen(rc);
- if (len) {
- char *lastchar = &buf[0] + len - 1;
- strcpy(buf, rc);
- if ('m' == *lastchar || 'M' == *lastchar) {
- *lastchar = '\0';
- multit = 1024 * 1024;
- }
- else if ('k' == *lastchar || 'K' == *lastchar) {
- *lastchar = '\0';
- multit = 1024;
- }
- int_res = atoi(buf);
- }
- else
- int_res = def;
-
- return int_res * multit;
-}
-
-double jk_map_get_double(jk_map_t *m, const char *name, double def)
-{
- char buf[100];
- const char *rc;
-
- sprintf(buf, "%f", def);
- rc = jk_map_get_string(m, name, buf);
-
- return atof(rc);
-}
-
-int jk_map_get_bool(jk_map_t *m, const char *name, int def)
-{
- char buf[100];
- const char *rc;
-
- sprintf(buf, "%d", def);
- rc = jk_map_get_string(m, name, buf);
-
- return jk_get_bool_code(rc, def);
-}
-
-char **jk_map_get_string_list(jk_map_t *m,
- const char *name,
- unsigned int *list_len, const char *def)
-{
- const char *l = jk_map_get_string(m, name, def);
- char **ar = NULL;
-
-#ifdef _MT_CODE_PTHREAD
- char *lasts;
-#endif
-
- *list_len = 0;
-
- if (l) {
- unsigned capacity = 0;
- unsigned idex = 0;
- char *p;
- char *v = jk_pool_strdup(&m->p, l);
-
- if (!v) {
- return NULL;
- }
-
- /*
- * GS, in addition to VG's patch, we now need to
- * strtok also by a "*"
- */
-#ifdef _MT_CODE_PTHREAD
- for (p = strtok_r(v, " \t,", &lasts);
- p; p = strtok_r(NULL, " \t,", &lasts))
-#else
- for (p = strtok(v, " \t,"); p; p = strtok(NULL, " \t,"))
-#endif
-
- {
-
- if (idex == capacity) {
- ar = jk_pool_realloc(&m->p,
- sizeof(char *) * (capacity + 5),
- ar, sizeof(char *) * capacity);
- if (!ar) {
- return JK_FALSE;
- }
- capacity += 5;
- }
- ar[idex] = jk_pool_strdup(&m->p, p);
- idex++;
- }
-
- *list_len = idex;
- }
-
- return ar;
-}
-
-int jk_map_get_int_list(jk_map_t *m,
- const char *name,
- int *list,
- unsigned int list_len,
- const char *def)
-{
- const char *l = jk_map_get_string(m, name, def);
-
-#ifdef _MT_CODE_PTHREAD
- char *lasts;
-#endif
-
- if (!list_len)
- return 0;
-
- if (l) {
- unsigned int capacity = list_len;
- unsigned int index = 0;
- char *p;
- char *v = jk_pool_strdup(&m->p, l);
-
- if (!v) {
- return 0;
- }
-
- /*
- * GS, in addition to VG's patch, we now need to
- * strtok also by a "*"
- */
-#ifdef _MT_CODE_PTHREAD
- for (p = strtok_r(v, " \t,", &lasts);
- p; p = strtok_r(NULL, " \t,", &lasts))
-#else
- for (p = strtok(v, " \t,"); p; p = strtok(NULL, " \t,"))
-#endif
-
- {
- if (index < capacity) {
- list[index] = atoi(p);
- index++;
- }
- else
- break;
- }
- return index;
- }
- return 0;
-}
-
-int jk_map_add(jk_map_t *m, const char *name, const void *value)
-{
- int rc = JK_FALSE;
-
- if (m && name) {
- unsigned int key;
- COMPUTE_KEY_CHECKSUM(name, key)
- map_realloc(m);
-
- if (m->size < m->capacity) {
- m->values[m->size] = value;
- m->names[m->size] = jk_pool_strdup(&m->p, name);
- m->keys[m->size] = key;
- m->size++;
- rc = JK_TRUE;
- }
- }
-
- return rc;
-}
-
-int jk_map_put(jk_map_t *m, const char *name, const void *value, void **old)
-{
- int rc = JK_FALSE;
-
- if (m && name) {
- unsigned int i;
- unsigned int key;
- COMPUTE_KEY_CHECKSUM(name, key)
- for (i = 0; i < m->size; i++) {
- if (m->keys[i] == key && strcmp(m->names[i], name) == 0) {
- break;
- }
- }
-
- if (i < m->size) {
- if (old)
- *old = (void *)m->values[i]; /* DIRTY */
- m->values[i] = value;
- rc = JK_TRUE;
- }
- else {
- rc = jk_map_add(m, name, value);
- }
- }
-
- return rc;
-}
-
-
-static int jk_map_validate_property(char *prp, jk_logger_t *l)
-{
- /* check the worker properties */
- if (!jk_is_valid_property(prp)) {
- jk_log(l, JK_LOG_ERROR,
- "The attribute '%s' is not supported - please check"
- " the documentation for the supported attributes.",
- prp);
- return JK_FALSE;
- }
- if (jk_is_deprecated_property(prp)) {
- jk_log(l, JK_LOG_WARNING,
- "The attribute '%s' is deprecated - please check"
- " the documentation for the correct replacement.",
- prp);
- }
- return JK_TRUE;
-}
-
-static int jk_map_handle_duplicates(jk_map_t *m, const char *prp, char **v,
- int treatment, jk_logger_t *l)
-{
- const char *oldv = jk_map_get_string(m, prp, NULL);
- if (oldv) {
- if ((treatment == JK_MAP_HANDLE_DUPLICATES)
- && jk_is_unique_property(prp) == JK_FALSE) {
- char *tmpv = jk_pool_alloc(&m->p,
- strlen(*v) + strlen(oldv) + 3);
- if (tmpv) {
- char sep = '*';
- if (jk_is_path_property(prp))
- sep = PATH_SEPERATOR;
- else if (jk_is_cmd_line_property(prp))
- sep = ' ';
- else if (jk_is_list_property(prp))
- sep = ',';
- sprintf(tmpv, "%s%c%s", oldv, sep, *v);
- }
- *v = tmpv;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Concatenated value is: %s -> %s",
- prp, *v);
- return JK_FALSE;
- }
- else {
- jk_log(l, JK_LOG_WARNING,
- "Duplicate key '%s' detected - previous value '%s'"
- " will be overwritten with '%s'.",
- prp, oldv ? oldv : "(null)", v ? *v : "(null)");
- return JK_TRUE;
- }
- }
- else {
- return JK_TRUE;
- }
-}
-
-int jk_map_read_property(jk_map_t *m, jk_map_t *env, const char *str,
- int treatment, jk_logger_t *l)
-{
- int rc = JK_TRUE;
- char buf[LENGTH_OF_LINE + 1];
- char *prp = &buf[0];
-
- if (strlen(str) > LENGTH_OF_LINE) {
- jk_log(l, JK_LOG_WARNING,
- "Line to long (%d > %d), ignoring entry",
- strlen(str), LENGTH_OF_LINE);
- return JK_FALSE;
- }
-
- strcpy(prp, str);
- if (trim(prp)) {
- char *v = strchr(prp, '=');
- if (v) {
- *v = '\0';
- v++;
- if (trim(v) && trim(prp)) {
- if (treatment == JK_MAP_HANDLE_RAW) {
- v = jk_pool_strdup(&m->p, v);
- }
- else {
- if (jk_map_validate_property(prp, l) == JK_FALSE)
- return JK_FALSE;
- v = jk_map_replace_properties(m, env, v);
- if (jk_map_handle_duplicates(m, prp, &v, treatment, l) == JK_TRUE)
- v = jk_pool_strdup(&m->p, v);
- }
- if (v) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Adding property '%s' with value '%s' to map.",
- prp, v);
- jk_map_put(m, prp, v, NULL);
- }
- else {
- JK_LOG_NULL_PARAMS(l);
- rc = JK_FALSE;
- }
- }
- }
- }
- return rc;
-}
-
-
-int jk_map_read_properties(jk_map_t *m, jk_map_t *env, const char *f, time_t *modified,
- int treatment, jk_logger_t *l)
-{
- int rc = JK_FALSE;
-
- if (m && f) {
- struct stat statbuf;
- FILE *fp;
- if (jk_stat(f, &statbuf) == -1)
- return JK_FALSE;
-#if defined(AS400) && !defined(AS400_UTF8)
- fp = fopen(f, "r, o_ccsid=0");
-#else
- fp = fopen(f, "r");
-#endif
-
- if (fp) {
- char buf[LENGTH_OF_LINE + 1];
- char *prp;
-
- rc = JK_TRUE;
-
- while (NULL != (prp = fgets(buf, LENGTH_OF_LINE, fp))) {
- trim_prp_comment(prp);
- if (*prp) {
- if ((rc = jk_map_read_property(m, env, prp, treatment, l)) == JK_FALSE)
- break;
- }
- }
- fclose(fp);
- if (modified)
- *modified = statbuf.st_mtime;
- }
- }
-
- return rc;
-}
-
-
-int jk_map_size(jk_map_t *m)
-{
- if (m) {
- return m->size;
- }
-
- return -1;
-}
-
-const char *jk_map_name_at(jk_map_t *m, int idex)
-{
- if (m && idex >= 0) {
- return m->names[idex]; /* DIRTY */
- }
-
- return NULL;
-}
-
-void *jk_map_value_at(jk_map_t *m, int idex)
-{
- if (m && idex >= 0) {
- return (void *)m->values[idex]; /* DIRTY */
- }
-
- return NULL;
-}
-
-void jk_map_dump(jk_map_t *m, jk_logger_t *l)
-{
- if (m) {
- int s = jk_map_size(m);
- int i;
- for (i=0;i<s;i++) {
- if (!jk_map_name_at(m, i)) {
- jk_log(l, JK_LOG_WARNING,
- "Map contains empty name at index %d\n", i);
- }
- if (!jk_map_value_at(m, i)) {
- jk_log(l, JK_LOG_WARNING,
- "Map contains empty value for name '%s' at index %d\n",
- jk_map_name_at(m, i), i);
- }
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "Dump of map: '%s' -> '%s'",
- jk_map_name_at(m, i) ? jk_map_name_at(m, i) : "(null)",
- jk_map_value_at(m, i) ? jk_map_value_at(m, i) : "(null)");
- }
- }
- }
-}
-
-int jk_map_copy(jk_map_t *src, jk_map_t *dst)
-{
- int sz = jk_map_size(src);
- int i;
- for (i = 0; i < sz; i++) {
- const char *name = jk_map_name_at(src, i);
- if (jk_map_get(dst, name, NULL) == NULL) {
- if (!jk_map_put(dst, name,
- jk_pool_strdup(&dst->p, jk_map_get_string(src, name, NULL)),
- NULL)) {
- return JK_FALSE;
- }
- }
- }
- return JK_TRUE;
-}
-
-
-static void trim_prp_comment(char *prp)
-{
-#if defined(AS400) && !defined(AS400_UTF8)
- char *comment;
- /* lots of lines that translate a '#' realtime deleted */
- comment = strchr(prp, *APR_NUMBERSIGN);
-#else
- char *comment = strchr(prp, '#');
-#endif
- if (comment) {
- *comment = '\0';
- }
-}
-
-static size_t trim(char *s)
-{
- size_t first;
- size_t len;
-
- /* check for empty strings */
- if (!(len = strlen(s)))
- return 0;
- for (len = len - 1; (len > 0) &&
- isspace((int)((unsigned char)s[len])); len--);
- if ((len > 0) || !isspace((int)((unsigned char)s[len]))) {
- len++;
- }
-
- s[len] = '\0';
- len++;
-
- for (first = 0; (s[first] != '\0') &&
- isspace((int)((unsigned char)s[first])); first++);
-
- if (first > 0) {
- memmove(s, s + first, len - first);
- }
-
- return len;
-}
-
-static int map_realloc(jk_map_t *m)
-{
- if (m->size == m->capacity) {
- char **names;
- void **values;
- unsigned int *keys;
- int capacity = m->capacity + CAPACITY_INC_SIZE;
-
- names = (char **)jk_pool_alloc(&m->p, sizeof(char *) * capacity);
- values = (void **)jk_pool_alloc(&m->p, sizeof(void *) * capacity);
- keys = (unsigned int *)jk_pool_alloc(&m->p, sizeof(unsigned int) * capacity);
-
- if (values && names) {
- if (m->capacity && m->names)
- memcpy(names, m->names, sizeof(char *) * m->capacity);
-
- if (m->capacity && m->values)
- memcpy(values, m->values, sizeof(void *) * m->capacity);
-
- if (m->capacity && m->keys)
- memcpy(keys, m->keys, sizeof(unsigned int) * m->capacity);
-
- m->names = (const char **)names;
- m->values = (const void **)values;
- m->keys = keys;
- m->capacity = capacity;
-
- return JK_TRUE;
- }
- }
-
- return JK_FALSE;
-}
-
-/**
- * Replace $(property) in value.
- *
- */
-static char *jk_map_replace_properties(jk_map_t *m, jk_map_t *env, char *value)
-{
- char *rc = value;
- char *env_start = rc;
- int rec = 0;
-
- while ((env_start = strstr(env_start, "$(")) != NULL) {
- char *env_end = strstr(env_start, ")");
- if (rec++ > 20)
- return rc;
- if (env_end) {
- char env_name[LENGTH_OF_LINE + 1] = "";
- const char *env_value;
-#if defined(WIN32)
- char env_buf[LENGTH_OF_LINE + 1];
-#endif
- *env_end = '\0';
- strcpy(env_name, env_start + 2);
- *env_end = ')';
-
- env_value = jk_map_get_string(m, env_name, NULL);
- if (!env_value) {
- env_value = getenv(env_name);
- }
- if (!env_value && env) {
- /* Search inside local environment table */
- env_value = jk_map_get_string(env, env_name, NULL);
- }
-
-#if defined(WIN32)
- if (!env_value) {
- /* Try the env block from calling process */
- if (GetEnvironmentVariable(env_name, env_buf,
- sizeof(env_buf)))
- env_value = &env_buf[0];
- }
-#endif
- if (env_value) {
- size_t offset = 0;
- char *new_value = jk_pool_alloc(&m->p,
- (sizeof(char) *
- (strlen(rc) +
- strlen(env_value))));
- if (!new_value) {
- break;
- }
- *env_start = '\0';
- strcpy(new_value, rc);
- strcat(new_value, env_value);
- strcat(new_value, env_end + 1);
- offset = env_start - rc + strlen(env_value);
- rc = new_value;
- /* Avoid recursive subst */
- env_start = rc + offset;
- }
- else {
- env_start = env_end;
- }
- }
- else {
- break;
- }
- }
-
- return rc;
-}
-
-/**
- * Resolve references
- *
- */
-int jk_map_resolve_references(jk_map_t *m, const char *prefix,
- int wildcard, int depth, jk_logger_t *l)
-{
- int rc = JK_FALSE;
-
- JK_TRACE_ENTER(l);
-
- if (m && prefix) {
- if (depth <= JK_MAP_RECURSION) {
- size_t prelen = strlen(prefix);
- unsigned int i;
- rc = JK_TRUE;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Checking for references with prefix %s with%s wildcard (recursion %d)",
- prefix, wildcard? "" : "out", depth);
- for (i = 0; i < m->size; i++) {
- char *v = (char *)m->values[i];
- if (v && *v &&
- !strncmp(m->names[i], prefix, prelen)) {
- size_t remain = strlen(m->names[i]) - prelen;
- if ((remain == JK_MAP_REFERENCE_SZ ) || (wildcard && remain > JK_MAP_REFERENCE_SZ)) {
- remain = strlen(m->names[i]) - JK_MAP_REFERENCE_SZ;
- if (!strncmp(m->names[i] + remain, JK_MAP_REFERENCE, JK_MAP_REFERENCE_SZ)) {
- char *from = jk_pool_alloc(&m->p,
- (sizeof(char) *
- (strlen(v) + 2)));
- char *to = jk_pool_alloc(&m->p,
- (sizeof(char) *
- (remain + 2)));
- if (!from || !to) {
- jk_log(l, JK_LOG_ERROR,
- "Error in string allocation");
- rc = JK_FALSE;
- break;
- }
- strcpy(from, v);
- *(from+strlen(v)) = '.';
- *(from+strlen(v)+1) = '\0';
- strncpy(to, m->names[i], remain);
- *(to+remain) = '.';
- *(to+remain+1) = '\0';
-
- rc = jk_map_resolve_references(m, v, 0, depth+1, l);
- if (rc == JK_FALSE) {
- break;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Copying values from %s to %s",
- from, to);
- rc = jk_map_inherit_properties(m, from, to, l);
- if (rc == JK_FALSE) {
- break;
- }
- }
- }
- }
- }
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "Recursion limit %d for worker references with prefix '%s' reached",
- JK_MAP_RECURSION, prefix);
- }
- }
- else {
- JK_LOG_NULL_PARAMS(l);
- }
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-/**
- * Inherit properties
- *
- */
-int jk_map_inherit_properties(jk_map_t *m, const char *from, const char *to, jk_logger_t *l)
-{
- int rc = JK_FALSE;
- const char *prp;
- char *to_prp;
-
- if (m && from && to) {
- unsigned int i;
- for (i = 0; i < m->size; i++) {
- if (!strncmp(m->names[i], from, strlen(from))) {
- rc = JK_TRUE;
- prp = m->names[i] + strlen(from);
- to_prp = jk_pool_alloc(&m->p,
- (sizeof(char) *
- (strlen(to) +
- strlen(prp) + 1)));
- if (!to_prp) {
- jk_log(l, JK_LOG_ERROR,
- "Error in string allocation for attribute '%s.%s'",
- to, prp);
- rc = JK_FALSE;
- break;
- }
- strcpy(to_prp, to);
- strcat(to_prp, prp);
- if (jk_map_get_id(m, to_prp) < 0 ) {
- rc = jk_map_add(m, to_prp, m->values[i]);
- if (rc == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "Error when adding attribute '%s'",
- to_prp);
- break;
- }
- }
- }
- }
- if ( rc == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "Reference '%s' not found",
- from);
- }
- }
- else {
- JK_LOG_NULL_PARAMS(l);
- }
- return rc;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.h
deleted file mode 100644
index 6e88861d..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Map object header file *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 756058 $ *
- ***************************************************************************/
-
-#ifndef JK_MAP_H
-#define JK_MAP_H
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define JK_MAP_HANDLE_NORMAL 0
-#define JK_MAP_HANDLE_DUPLICATES 1
-#define JK_MAP_HANDLE_RAW 2
-
-struct jk_map;
-typedef struct jk_map jk_map_t;
-
-int jk_map_alloc(jk_map_t **m);
-
-int jk_map_free(jk_map_t **m);
-
-int jk_map_open(jk_map_t *m);
-
-int jk_map_close(jk_map_t *m);
-
-void *jk_map_get(jk_map_t *m, const char *name, const void *def);
-
-int jk_map_get_id(jk_map_t *m, const char *name);
-
-int jk_map_get_int(jk_map_t *m, const char *name, int def);
-
-double jk_map_get_double(jk_map_t *m, const char *name, double def);
-
-int jk_map_get_bool(jk_map_t *m, const char *name, int def);
-
-const char *jk_map_get_string(jk_map_t *m, const char *name, const char *def);
-
-char **jk_map_get_string_list(jk_map_t *m,
- const char *name,
- unsigned *list_len, const char *def);
-
-int jk_map_get_int_list(jk_map_t *m,
- const char *name,
- int *list, unsigned int list_len,
- const char *def);
-
-int jk_map_add(jk_map_t *m, const char *name, const void *value);
-
-int jk_map_put(jk_map_t *m, const char *name, const void *value, void **old);
-
-int jk_map_read_property(jk_map_t *m, jk_map_t *env, const char *str, int treatment, jk_logger_t *l);
-
-int jk_map_read_properties(jk_map_t *m, jk_map_t *env, const char *f, time_t *modified, int treatment, jk_logger_t *l);
-
-int jk_map_size(jk_map_t *m);
-
-const char *jk_map_name_at(jk_map_t *m, int idex);
-
-void *jk_map_value_at(jk_map_t *m, int idex);
-
-void jk_map_dump(jk_map_t *m, jk_logger_t *l);
-
-int jk_map_copy(jk_map_t *src, jk_map_t *dst);
-
-int jk_map_resolve_references(jk_map_t *m, const char *prefix, int wildcard, int depth, jk_logger_t *l);
-
-int jk_map_inherit_properties(jk_map_t *m, const char *from, const char *to, jk_logger_t *l);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* JK_MAP_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.lo
deleted file mode 100644
index 137e8eac..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_map.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_map.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_map.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.o
deleted file mode 100644
index 5274ff78..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_map.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.c
deleted file mode 100644
index 1edcd073..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.c
+++ /dev/null
@@ -1,475 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * This is work is derived from material Copyright RSA Data Security, Inc.
- *
- * The RSA copyright statement and Licence for that original material is
- * included below. This is followed by the Apache copyright statement and
- * licence for the modifications made to that material.
- */
-
-/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
- rights reserved.
-
- License to copy and use this software is granted provided that it
- is identified as the "RSA Data Security, Inc. MD5 Message-Digest
- Algorithm" in all material mentioning or referencing this software
- or this function.
-
- License is also granted to make and use derivative works provided
- that such works are identified as "derived from the RSA Data
- Security, Inc. MD5 Message-Digest Algorithm" in all material
- mentioning or referencing the derived work.
-
- RSA Data Security, Inc. makes no representations concerning either
- the merchantability of this software or the suitability of this
- software for any particular purpose. It is provided "as is"
- without express or implied warranty of any kind.
-
- These notices must be retained in any copies of any part of this
- documentation and/or software.
- */
-
-/*
- * The ap_MD5Encode() routine uses much code obtained from the FreeBSD 3.0
- * MD5 crypt() function, which is licenced as follows:
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dknet.dk> wrote this file. As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- */
-
-/***************************************************************************
- * Description: MD5 encoding wrapper *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-/*
- * JK MD5 Encoding function (jk_MD5Encode)
- *
- * Jk delegate MD5 encoding to ap_MD5Encode when used in Apache Web-Server.
- * When another web-server is used like NES/IIS, we should use corresponding calls.
- * NES/IIS specialists will add the necessary code but until that, I reused the code
- * from Apache HTTP server.
- *
- * Nota: If you use an EBCDIC system without Apache, you'll have to use MD5 encoding
- * corresponding call or have a ebcdic2ascii() functions somewhere.
- * For example current AS/400 have MD5 encoding support APIs but olders not....
- */
-
-#include "jk_global.h"
-#include "jk_md5.h"
-
-char *JK_METHOD jk_hextocstr(unsigned char *org, char *dst, int n)
-{
- char *os = dst;
- unsigned char v;
- static unsigned char zitohex[] = "0123456789ABCDEF";
-
- while (--n >= 0) {
- v = *org++;
- *dst++ = zitohex[v >> 4];
- *dst++ = zitohex[v & 0x0f];
- }
- *dst = 0;
-
- return (os);
-}
-
-#ifndef USE_APACHE_MD5
-
-/* Constants for MD5Transform routine.
- */
-
-#define S11 7
-#define S12 12
-#define S13 17
-#define S14 22
-#define S21 5
-#define S22 9
-#define S23 14
-#define S24 20
-#define S31 4
-#define S32 11
-#define S33 16
-#define S34 23
-#define S41 6
-#define S42 10
-#define S43 15
-#define S44 21
-
-static void MD5Transform(jk_uint32_t state[4], const unsigned char block[64]);
-static void Encode(unsigned char *output, const jk_uint32_t * input, size_t len);
-static void Decode(jk_uint32_t * output, const unsigned char *input, size_t len);
-static void jk_MD5Init(JK_MD5_CTX * context);
-static void jk_MD5Update(JK_MD5_CTX * context, const unsigned char *input,
- size_t inputLen);
-/*static void jk_MD5Final(unsigned char digest[JK_MD5_DIGESTSIZE], JK_MD5_CTX *context);*/
-
-static unsigned char PADDING[64] = {
- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-/* F, G, H and I are basic MD5 functions.
- */
-#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
-#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define I(x, y, z) ((y) ^ ((x) | (~z)))
-
-/* ROTATE_LEFT rotates x left n bits.
- */
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-
-/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
- Rotation is separate from addition to prevent recomputation.
- */
-#define FF(a, b, c, d, x, s, ac) { \
- (a) += F ((b), (c), (d)) + (x) + (jk_uint32_t)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define GG(a, b, c, d, x, s, ac) { \
- (a) += G ((b), (c), (d)) + (x) + (jk_uint32_t)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define HH(a, b, c, d, x, s, ac) { \
- (a) += H ((b), (c), (d)) + (x) + (jk_uint32_t)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define II(a, b, c, d, x, s, ac) { \
- (a) += I ((b), (c), (d)) + (x) + (jk_uint32_t)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-
-/* MD5 initialization. Begins an MD5 operation, writing a new context.
- */
-static void jk_MD5Init(JK_MD5_CTX * context)
-{
- context->count[0] = context->count[1] = 0;
- /* Load magic initialization constants. */
- context->state[0] = 0x67452301;
- context->state[1] = 0xefcdab89;
- context->state[2] = 0x98badcfe;
- context->state[3] = 0x10325476;
-}
-
-/* MD5 block update operation. Continues an MD5 message-digest
- operation, processing another message block, and updating the
- context.
- */
-static void jk_MD5Update(JK_MD5_CTX * context, const unsigned char *input,
- size_t inputLen)
-{
- size_t i, idx, partLen;
-
- /* Compute number of bytes mod 64 */
- idx = (size_t) ((context->count[0] >> 3) & 0x3F);
-
- /* Update number of bits */
- if ((context->count[0] += ((jk_uint32_t) inputLen << 3))
- < ((jk_uint32_t) inputLen << 3)) {
- context->count[1]++;
- }
- context->count[1] += (jk_uint32_t) inputLen >> 29;
-
- partLen = 64 - idx;
-
- /* Transform as many times as possible. */
-#ifndef CHARSET_EBCDIC
- if (inputLen >= partLen) {
- memcpy(&context->buffer[idx], input, partLen);
- MD5Transform(context->state, context->buffer);
-
- for (i = partLen; i + 63 < inputLen; i += 64) {
- MD5Transform(context->state, &input[i]);
- }
-
- idx = 0;
- }
- else {
- i = 0;
- }
-
- /* Buffer remaining input */
- memcpy(&context->buffer[idx], &input[i], inputLen - i);
-#else /*CHARSET_EBCDIC */
- if (inputLen >= partLen) {
- ebcdic2ascii(&context->buffer[idx], input, partLen);
- MD5Transform(context->state, context->buffer);
-
- for (i = partLen; i + 63 < inputLen; i += 64) {
- unsigned char inp_tmp[64];
- ebcdic2ascii(inp_tmp, &input[i], 64);
- MD5Transform(context->state, inp_tmp);
- }
-
- idx = 0;
- }
- else {
- i = 0;
- }
-
- /* Buffer remaining input */
- ebcdic2ascii(&context->buffer[idx], &input[i], inputLen - i);
-#endif /*CHARSET_EBCDIC */
-}
-
-/* MD5 finalization. Ends an MD5 message-digest operation, writing the
- the message digest and zeroizing the context.
- */
-static void JK_METHOD jk_MD5Final(unsigned char digest[16], JK_MD5_CTX * context)
-{
- unsigned char bits[8];
- size_t idx, padLen;
-
-
- /* Save number of bits */
- Encode(bits, context->count, 8);
-
-#ifdef CHARSET_EBCDIC
- /* XXX: @@@: In order to make this no more complex than necessary,
- * this kludge converts the bits[] array using the ascii-to-ebcdic
- * table, because the following jk_MD5Update() re-translates
- * its input (ebcdic-to-ascii).
- * Otherwise, we would have to pass a "conversion" flag to jk_MD5Update()
- */
- ascii2ebcdic(bits, bits, 8);
-
- /* Since everything is converted to ascii within jk_MD5Update(),
- * the initial 0x80 (PADDING[0]) must be stored as 0x20
- */
- ascii2ebcdic(PADDING, PADDING, 1);
-#endif /*CHARSET_EBCDIC */
-
- /* Pad out to 56 mod 64. */
- idx = (size_t) ((context->count[0] >> 3) & 0x3f);
- padLen = (idx < 56) ? (56 - idx) : (120 - idx);
- jk_MD5Update(context, (const unsigned char *)PADDING, padLen);
-
- /* Append length (before padding) */
- jk_MD5Update(context, (const unsigned char *)bits, 8);
-
- /* Store state in digest */
- Encode(digest, context->state, 16);
-
- /* Zeroize sensitive information. */
- memset(context, 0, sizeof(*context));
-}
-
-/* MD5 basic transformation. Transforms state based on block. */
-static void MD5Transform(jk_uint32_t state[4], const unsigned char block[64])
-{
- jk_uint32_t a = state[0], b = state[1], c = state[2], d = state[3], x[16];
-
- Decode(x, block, 64);
-
- /* Round 1 */
- FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */
- FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */
- FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */
- FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */
- FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */
- FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */
- FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */
- FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */
- FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */
- FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */
- FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
- FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
- FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
- FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
- FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
- FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
-
- /* Round 2 */
- GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */
- GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */
- GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
- GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */
- GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */
- GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
- GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
- GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */
- GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */
- GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
- GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */
- GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */
- GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
- GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */
- GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */
- GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
-
- /* Round 3 */
- HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */
- HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */
- HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
- HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
- HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */
- HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */
- HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */
- HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
- HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
- HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */
- HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */
- HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */
- HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */
- HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
- HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
- HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */
-
- /* Round 4 */
- II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */
- II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */
- II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
- II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */
- II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
- II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */
- II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
- II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */
- II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */
- II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
- II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */
- II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
- II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */
- II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
- II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */
- II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */
-
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
-
- /* Zeroize sensitive information. */
- memset(x, 0, sizeof(x));
-}
-
-/* Encodes input (jk_uint32_t) into output (unsigned char). Assumes len is
- a multiple of 4.
- */
-static void Encode(unsigned char *output, const jk_uint32_t * input, size_t len)
-{
- size_t i, j;
- jk_uint32_t k;
-
- for (i = 0, j = 0; j < len; i++, j += 4) {
- k = input[i];
- output[j] = (unsigned char)(k & 0xff);
- output[j + 1] = (unsigned char)((k >> 8) & 0xff);
- output[j + 2] = (unsigned char)((k >> 16) & 0xff);
- output[j + 3] = (unsigned char)((k >> 24) & 0xff);
- }
-}
-
-/* Decodes input (unsigned char) into output (jk_uint32_t). Assumes len is
- * a multiple of 4.
- */
-static void Decode(jk_uint32_t * output, const unsigned char *input, size_t len)
-{
- size_t i, j;
-
- for (i = 0, j = 0; j < len; i++, j += 4)
- output[i] = ((jk_uint32_t) input[j]) | (((jk_uint32_t) input[j + 1]) << 8) |
- (((jk_uint32_t) input[j + 2]) << 16) | (((jk_uint32_t) input[j + 3]) <<
- 24);
-}
-
-char *JK_METHOD jk_md5(const unsigned char *org, const unsigned char *org2,
- char *dst)
-{
- JK_MD5_CTX ctx;
- char buf[JK_MD5_DIGESTSIZE + 1];
-
- jk_MD5Init(&ctx);
- jk_MD5Update(&ctx, org, strlen((const char *)org));
-
- if (org2 != NULL)
- jk_MD5Update(&ctx, org2, strlen((const char *)org2));
-
- jk_MD5Final((unsigned char *)buf, &ctx);
- return (jk_hextocstr((unsigned char *)buf, dst, JK_MD5_DIGESTSIZE));
-}
-
-#else /* USE_APACHE_MD5 */
-
-#include "httpd.h"
-#include "http_config.h"
-
-#ifdef STANDARD20_MODULE_STUFF
-
-#include "apr_md5.h"
-#define AP_MD5_CTX apr_md5_ctx_t
-#define ap_MD5Init apr_md5_init
-#define ap_MD5Update apr_md5_update
-#define ap_MD5Final apr_md5_final
-
-#else /* STANDARD20_MODULE_STUFF */
-
-#include "ap_md5.h"
-
-#endif /* STANDARD20_MODULE_STUFF */
-
-char *JK_METHOD jk_md5(const unsigned char *org, const unsigned char *org2,
- char *dst)
-{
- AP_MD5_CTX ctx;
- char buf[JK_MD5_DIGESTSIZE + 1];
-
- ap_MD5Init(&ctx);
- ap_MD5Update(&ctx, org, strlen((const char *)org));
-
- if (org2 != NULL)
- ap_MD5Update(&ctx, org2, strlen((const char *)org2));
-
- ap_MD5Final((unsigned char *)buf, &ctx);
- return (jk_hextocstr((unsigned char *)buf, dst, JK_MD5_DIGESTSIZE));
-}
-
-#endif /* USE_APACHE_MD5 */
-
-/* Test values:
- * "" D4 1D 8C D9 8F 00 B2 04 E9 80 09 98 EC F8 42 7E
- * "a" 0C C1 75 B9 C0 F1 B6 A8 31 C3 99 E2 69 77 26 61
- * "abc 90 01 50 98 3C D2 4F B0 D6 96 3F 7D 28 E1 7F 72
- * "message digest" F9 6B 69 7D 7C B7 93 8D 52 5A 2F 31 AA F1 61 D0
- *
- */
-
-#ifdef TEST_JKMD5
-
-main(int argc, char **argv)
-{
- char xxx[(2 * JK_MD5_DIGESTSIZE) + 1];
-
- if (argc > 1)
- printf("%s => %s\n", argv[1], jk_md5(argv[1], NULL, xxx));
-}
-
-#endif
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.h
deleted file mode 100644
index f740048b..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * This is work is derived from material Copyright RSA Data Security, Inc.
- *
- * The RSA copyright statement and Licence for that original material is
- * included below. This is followed by the Apache copyright statement and
- * licence for the modifications made to that material.
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
- rights reserved.
-
- License to copy and use this software is granted provided that it
- is identified as the "RSA Data Security, Inc. MD5 Message-Digest
- Algorithm" in all material mentioning or referencing this software
- or this function.
-
- License is also granted to make and use derivative works provided
- that such works are identified as "derived from the RSA Data
- Security, Inc. MD5 Message-Digest Algorithm" in all material
- mentioning or referencing the derived work.
-
- RSA Data Security, Inc. makes no representations concerning either
- the merchantability of this software or the suitability of this
- software for any particular purpose. It is provided "as is"
- without express or implied warranty of any kind.
-
- These notices must be retained in any copies of any part of this
- documentation and/or software.
-*/
-
-#ifndef JK_APACHE_MD5_H
-#define JK_APACHE_MD5_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* MD5.H - header file for MD5.C */
-
-#define JK_MD5_DIGESTSIZE 16
-
-/* MD5 context. */
-typedef struct
-{
- jk_uint32_t state[4]; /* state (ABCD) */
- jk_uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */
- unsigned char buffer[64]; /* input buffer */
-} JK_MD5_CTX;
-
-/*
- * Define the Magic String prefix that identifies a password as being
- * hashed using our algorithm.
- */
-#define JK_MD5PW_ID "$apr1$"
-#define JK_MD5PW_IDLEN 6
-
-char *JK_METHOD jk_hextocstr(unsigned char *org, char *dst, int n);
-char *JK_METHOD jk_md5(const unsigned char *org,
- const unsigned char *org2, char *dst);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !JK_APACHE_MD5_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.lo
deleted file mode 100644
index c6617e56..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_md5.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_md5.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_md5.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.o
deleted file mode 100644
index d3a98259..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_md5.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.c
deleted file mode 100644
index 955fd5ab..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.c
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Data marshaling. XDR like *
- * Author: Costin <costin@costin.dnt.ro> *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 705882 $ *
- ***************************************************************************/
-
-#include "jk_pool.h"
-#include "jk_connect.h"
-#include "jk_util.h"
-#include "jk_sockbuf.h"
-#include "jk_msg_buff.h"
-#include "jk_logger.h"
-
-static char *jk_HEX = "0123456789ABCDEFX";
-
-/*
- * Simple marshaling code.
- */
-
-void jk_b_reset(jk_msg_buf_t *msg)
-{
- msg->len = 4;
- msg->pos = 4;
- if (msg->buf && msg->maxlen) {
- /* Clear the message buffer */
- memset(msg->buf, 0, msg->maxlen);
- }
-}
-
-int jk_b_append_long(jk_msg_buf_t *msg, unsigned long val)
-{
- if (msg->len + 4 > msg->maxlen) {
- return -1;
- }
-
- msg->buf[msg->len++] = (unsigned char)((val >> 24) & 0xFF);
- msg->buf[msg->len++] = (unsigned char)((val >> 16) & 0xFF);
- msg->buf[msg->len++] = (unsigned char)((val >> 8) & 0xFF);
- msg->buf[msg->len++] = (unsigned char)((val) & 0xFF);
-
- return 0;
-}
-
-
-int jk_b_append_int(jk_msg_buf_t *msg, unsigned short val)
-{
- if (msg->len + 2 > msg->maxlen) {
- return -1;
- }
-
- msg->buf[msg->len++] = (unsigned char)((val >> 8) & 0xFF);
- msg->buf[msg->len++] = (unsigned char)((val) & 0xFF);
-
- return 0;
-}
-
-
-int jk_b_append_byte(jk_msg_buf_t *msg, unsigned char val)
-{
- if (msg->len + 1 > msg->maxlen) {
- return -1;
- }
-
- msg->buf[msg->len++] = val;
-
- return 0;
-}
-
-
-void jk_b_end(jk_msg_buf_t *msg, int protoh)
-{
- /*
- * Ugly way to set the size in the right position
- */
- int hlen = msg->len - 4;
-
- msg->buf[0] = (unsigned char)((protoh >> 8) & 0xFF);
- msg->buf[1] = (unsigned char)((protoh) & 0xFF);
- msg->buf[2] = (unsigned char)((hlen >> 8) & 0xFF);
- msg->buf[3] = (unsigned char)((hlen) & 0xFF);
-
-}
-
-
-jk_msg_buf_t *jk_b_new(jk_pool_t *p)
-{
- jk_msg_buf_t *msg =
- (jk_msg_buf_t *)jk_pool_alloc(p, sizeof(jk_msg_buf_t));
-
- if (!msg) {
- return NULL;
- }
- memset(msg, 0, sizeof(jk_msg_buf_t));
- msg->pool = p;
-
- return msg;
-}
-
-int jk_b_set_buffer(jk_msg_buf_t *msg, unsigned char *data, int buffSize)
-{
- if (!msg) {
- return -1;
- }
-
- msg->len = 0;
- msg->buf = data;
- msg->maxlen = buffSize;
-
- return 0;
-}
-
-
-int jk_b_set_buffer_size(jk_msg_buf_t *msg, int buffSize)
-{
- unsigned char *data = (unsigned char *)jk_pool_alloc(msg->pool, buffSize);
-
- if (!data) {
- return -1;
- }
-
- jk_b_set_buffer(msg, data, buffSize);
- return 0;
-}
-
-#if defined(AS400) && !defined(AS400_UTF8)
-int jk_b_append_asciistring(jk_msg_buf_t *msg, const char *param)
-{
- int len;
-
- if (!param) {
- jk_b_append_int(msg, 0xFFFF);
- return 0;
- }
-
- len = strlen(param);
- if (msg->len + len + 2 > msg->maxlen) {
- return -1;
- }
-
- /* ignore error - we checked once */
- jk_b_append_int(msg, (unsigned short)len);
-
- /* We checked for space !! */
- strncpy((char *)msg->buf + msg->len, param, len + 1); /* including \0 */
- msg->len += len + 1;
-
- return 0;
-}
-#endif
-
-int jk_b_append_string(jk_msg_buf_t *msg, const char *param)
-{
- unsigned short len;
-
- if (!param) {
- jk_b_append_int(msg, 0xFFFF);
- return 0;
- }
-
- len = (unsigned short)strlen(param);
- if (msg->len + len + 3 > msg->maxlen) {
- return -1;
- }
-
- /* ignore error - we checked once */
- jk_b_append_int(msg, len);
-
- /* We checked for space !! */
- memcpy(msg->buf + msg->len, param, len + 1); /* including \0 */
-#if (defined(AS400) && !defined(AS400_UTF8)) || defined(_OSD_POSIX)
- /* convert from EBCDIC if needed */
- jk_xlate_to_ascii((char *)msg->buf + msg->len, len + 1);
-#endif
- msg->len += len + 1;
-
- return 0;
-}
-
-
-int jk_b_append_bytes(jk_msg_buf_t *msg, const unsigned char *param, int len)
-{
- if (!len) {
- return 0;
- }
-
- if (msg->len + len > msg->maxlen) {
- return -1;
- }
-
- /* We checked for space !! */
- memcpy((char *)msg->buf + msg->len, param, len);
- msg->len += len;
-
- return 0;
-}
-
-unsigned long jk_b_get_long(jk_msg_buf_t *msg)
-{
- unsigned long i;
- if (msg->pos + 3 > msg->len) {
- return 0xFFFFFFFF;
- }
- i = ((msg->buf[(msg->pos++)] & 0xFF) << 24);
- i |= ((msg->buf[(msg->pos++)] & 0xFF) << 16);
- i |= ((msg->buf[(msg->pos++)] & 0xFF) << 8);
- i |= ((msg->buf[(msg->pos++)] & 0xFF));
- return i;
-}
-
-unsigned long jk_b_pget_long(jk_msg_buf_t *msg, int pos)
-{
- unsigned long i;
- i = ((msg->buf[(pos++)] & 0xFF) << 24);
- i |= ((msg->buf[(pos++)] & 0xFF) << 16);
- i |= ((msg->buf[(pos++)] & 0xFF) << 8);
- i |= ((msg->buf[(pos)] & 0xFF));
- return i;
-}
-
-
-unsigned short jk_b_get_int(jk_msg_buf_t *msg)
-{
- unsigned short i;
- if (msg->pos + 1 > msg->len) {
- return 0xFFFF;
- }
- i = ((msg->buf[(msg->pos++)] & 0xFF) << 8);
- i += ((msg->buf[(msg->pos++)] & 0xFF));
- return i;
-}
-
-unsigned short jk_b_pget_int(jk_msg_buf_t *msg, int pos)
-{
- unsigned short i;
- i = ((msg->buf[pos++] & 0xFF) << 8);
- i += ((msg->buf[pos] & 0xFF));
- return i;
-}
-
-unsigned char jk_b_get_byte(jk_msg_buf_t *msg)
-{
- unsigned char rc;
- if (msg->pos > msg->len) {
- return 0xFF;
- }
- rc = msg->buf[msg->pos++];
-
- return rc;
-}
-
-unsigned char jk_b_pget_byte(jk_msg_buf_t *msg, int pos)
-{
- return msg->buf[pos];
-}
-
-
-unsigned char *jk_b_get_string(jk_msg_buf_t *msg)
-{
- unsigned short size = jk_b_get_int(msg);
- int start = msg->pos;
-
- if ((size == 0xFFFF) || (size + start > msg->maxlen)) {
- /* Error of overflow in AJP packet.
- * The complete message is probably invalid.
- */
- return NULL;
- }
-
- msg->pos += size;
- msg->pos++; /* terminating NULL */
-
- return (unsigned char *)(msg->buf + start);
-}
-
-int jk_b_get_bytes(jk_msg_buf_t *msg, unsigned char *buf, int len)
-{
- int start = msg->pos;
-
- if ((len < 0) || (len + start > msg->maxlen)) {
- return (-1);
- }
-
- memcpy(buf, msg->buf + start, len);
- msg->pos += len;
- return (len);
-}
-
-
-
-/** Helpie dump function
- */
-void jk_dump_buff(jk_logger_t *l,
- const char *file,
- int line, const char *funcname,
- int level, char *what, jk_msg_buf_t *msg)
-{
- int i = 0;
- char lb[80];
- char *current;
- int j;
- int len = msg->len;
-
- if (l == NULL)
- return;
- if (l->level != JK_LOG_TRACE_LEVEL && len > 1024)
- len = 1024;
-
- jk_log(l, file, line, funcname, level,
- "%s pos=%d len=%d max=%d",
- what, msg->pos, msg->len, msg->maxlen);
-
- for (i = 0; i < len; i += 16) {
- current = &lb[0];
-
- for (j = 0; j < 16; j++) {
- unsigned char x = (msg->buf[i + j]);
- if ((i + j) >= len)
- x = 0;
- *current++ = jk_HEX[x >> 4];
- *current++ = jk_HEX[x & 0x0f];
- *current++ = ' ';
- }
- *current++ = ' ';
- *current++ = '-';
- *current++ = ' ';
- for (j = 0; j < 16; j++) {
- unsigned char x = msg->buf[i + j];
- if ((i + j) >= len)
- x = 0;
- if (x > 0x20 && x < 0x7F) {
-#ifdef USE_CHARSET_EBCDIC
- *current = x;
- jk_xlate_from_ascii(current, 1);
- current++;
-#else
- *current++ = x;
-#endif
- }
- else {
- *current++ = '.';
- }
- }
- *current++ = '\0';
-
- jk_log(l, file, line, funcname, level,
- "%.4x %s", i, lb);
- }
-}
-
-
-int jk_b_copy(jk_msg_buf_t *smsg, jk_msg_buf_t *dmsg)
-{
- if (smsg == NULL || dmsg == NULL)
- return (-1);
-
- if (dmsg->maxlen < smsg->len)
- return (-2);
-
- memcpy(dmsg->buf, smsg->buf, smsg->len);
- dmsg->len = smsg->len;
-
- return (smsg->len);
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.h
deleted file mode 100644
index 3fdc006b..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Data marshaling. XDR like *
- * Author: Costin <costin@costin.dnt.ro> *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 530674 $ *
- ***************************************************************************/
-
-#ifndef JK_MSG_BUF_H
-#define JK_MSG_BUF_H
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define DEF_BUFFER_SZ (8 * 1024)
-
-/* XXX replace all return values with error codes */
-#define ERR_BAD_PACKET -5
-
-/*
-RPC details:
-
- - one parameter - use a structure for more. The method
- is encoded as part of the request
- - one or no result
- -
-
-
-
- */
-
-typedef struct jk_msg_buf_t jk_msg_buf_t;
-struct jk_msg_buf_t
-{
- jk_pool_t *pool;
- unsigned char *buf;
- int pos;
- int len;
- int maxlen;
-};
-
-
-/* -------------------- Setup routines -------------------- */
-
-/** Allocate a buffer.
- */
-jk_msg_buf_t *jk_b_new(jk_pool_t *p);
-
-/** Set up a buffer with an existing buffer
- */
-int jk_b_set_buffer(jk_msg_buf_t *msg, unsigned char *data, int buffSize);
-
-/*
- * Set up a buffer with a new buffer of buffSize
- */
-int jk_b_set_buffer_size(jk_msg_buf_t *msg, int buffSize);
-
-/*
- * Finalize the buffer before sending - set length fields, etc
- */
-void jk_b_end(jk_msg_buf_t *msg, int protoh);
-
-/*
- * Recycle the buffer - z for a new invocation
- */
-void jk_b_reset(jk_msg_buf_t *msg);
-
-/* -------------------- Real encoding -------------------- */
-
-int jk_b_append_byte(jk_msg_buf_t *msg, unsigned char val);
-
-int jk_b_append_bytes(jk_msg_buf_t *msg,
- const unsigned char *param, int len);
-
-int jk_b_append_int(jk_msg_buf_t *msg, unsigned short val);
-
-int jk_b_append_long(jk_msg_buf_t *msg, unsigned long val);
-
-int jk_b_append_string(jk_msg_buf_t *msg, const char *param);
-
-#if defined(AS400) && !defined(AS400_UTF8)
-int jk_b_append_asciistring(jk_msg_buf_t *msg, const char *param);
-#endif
-
-int jk_b_append_bytes(jk_msg_buf_t *msg,
- const unsigned char *param, int len);
-
-/* -------------------- Decoding -------------------- */
-
-/** Get a byte from the current position
- */
-unsigned char jk_b_get_byte(jk_msg_buf_t *msg);
-
-/** Get an int from the current position
- */
-unsigned short jk_b_get_int(jk_msg_buf_t *msg);
-
-/** Get a long from the current position
- */
-unsigned long jk_b_get_long(jk_msg_buf_t *msg);
-
-/** Get a String from the current position
- */
-unsigned char *jk_b_get_string(jk_msg_buf_t *msg);
-
-/** Get Bytes from the current position
- */
-int jk_b_get_bytes(jk_msg_buf_t *msg, unsigned char *buf, int len);
-
-/** Get a byte from an arbitrary position
- */
-unsigned char jk_b_pget_byte(jk_msg_buf_t *msg, int pos);
-
-/** Get an int from an arbitrary position
- */
-unsigned short jk_b_pget_int(jk_msg_buf_t *msg, int pos);
-
-/** Get a long from an arbitrary position
- */
-unsigned long jk_b_pget_long(jk_msg_buf_t *msg, int pos);
-
-/* --------------------- Help ------------------------ */
-void jk_dump_buff(jk_logger_t *l,
- const char *file,
- int line, const char *funcname,
- int level, char *what, jk_msg_buf_t *msg);
-
-/** Copy a msg buf into another one
- */
-int jk_b_copy(jk_msg_buf_t *smsg, jk_msg_buf_t *dmsg);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* JK_MSG_BUF_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.lo
deleted file mode 100644
index 8ea86702..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_msg_buff.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_msg_buff.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_msg_buff.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.o
deleted file mode 100644
index 3f0a0391..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_mt.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_mt.h
deleted file mode 100644
index b5525bb7..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_mt.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Multi thread portability code for JK *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 918711 $ *
- ***************************************************************************/
-
-#ifndef _JK_MT_H
-#define _JK_MT_H
-
-#include "jk_global.h"
-
-
-#if defined(WIN32)
-#define jk_gettid() ((jk_uint32_t)GetCurrentThreadId())
-#elif defined(NETWARE) && !defined(__NOVELL_LIBC__)
-#define getpid() ((int)GetThreadGroupID())
-#endif
-
-#ifdef JK_PREFORK
-#define _MT_CODE 0
-#else
-#define _MT_CODE 1
-#endif
-
-/*
- * Marks execution under MT compilation
- */
-#if _MT_CODE
-#ifdef WIN32
-#include <windows.h>
-
-typedef CRITICAL_SECTION JK_CRIT_SEC;
-#define JK_INIT_CS(x, rc) InitializeCriticalSection(x); rc = JK_TRUE
-#define JK_DELETE_CS(x, rc) DeleteCriticalSection(x); rc = JK_TRUE
-#define JK_ENTER_CS(x, rc) EnterCriticalSection(x); rc = JK_TRUE
-#define JK_LEAVE_CS(x, rc) LeaveCriticalSection(x); rc = JK_TRUE
-
-#else /* !WIN32 */
-#define _MT_CODE_PTHREAD
-#include <pthread.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-typedef pthread_mutex_t JK_CRIT_SEC;
-#define JK_INIT_CS(x, rc)\
- if(pthread_mutex_init(x, NULL)) rc = JK_FALSE; else rc = JK_TRUE
-
-#define JK_DELETE_CS(x, rc)\
- if(pthread_mutex_destroy(x)) rc = JK_FALSE; else rc = JK_TRUE
-
-#define JK_ENTER_CS(x, rc)\
- if(pthread_mutex_lock(x)) rc = JK_FALSE; else rc = JK_TRUE
-
-#define JK_LEAVE_CS(x, rc)\
- if(pthread_mutex_unlock(x)) rc = JK_FALSE; else rc = JK_TRUE
-
-#if defined(AS400) || defined(NETWARE)
-#define jk_pthread_t jk_uint32_t
-#endif /* AS400 || NETWARE */
-jk_pthread_t jk_gettid(void);
-#endif /* WIN32 */
-
-#else /* !_MT_CODE */
-
-typedef void *JK_CRIT_SEC;
-#define JK_INIT_CS(x, rc) rc = JK_TRUE
-#define JK_DELETE_CS(x, rc) rc = JK_TRUE
-#define JK_ENTER_CS(x, rc) rc = JK_TRUE
-#define JK_LEAVE_CS(x, rc) rc = JK_TRUE
-#define jk_gettid() 0
-#endif /* MT_CODE */
-
-#if !defined(WIN32) && !defined(NETWARE)
-#include <unistd.h>
-#include <fcntl.h>
-
-
-#define USE_FLOCK_LK 0
-#if HAVE_FLOCK
-#ifdef JK_USE_FLOCK
-#define USE_FLOCK_LK 1
-#endif
-#endif
-
-#if USE_FLOCK_LK
-#include <sys/file.h>
-
-#define JK_ENTER_LOCK(x, rc) \
- do { \
- while ((rc = flock((x), LOCK_EX) < 0) && (errno == EINTR)); \
- rc = rc == 0 ? JK_TRUE : JK_FALSE; \
- } while (0)
-
-#define JK_LEAVE_LOCK(x, rc) \
- do { \
- while ((rc = flock((x), LOCK_UN) < 0) && (errno == EINTR)); \
- rc = rc == 0 ? JK_TRUE : JK_FALSE; \
- } while (0)
-
-#else /* !USE_FLOCK_LK */
-
-#define JK_ENTER_LOCK(x, rc) \
- do { \
- struct flock _fl; \
- _fl.l_type = F_WRLCK; \
- _fl.l_whence = SEEK_SET; \
- _fl.l_start = 0; \
- _fl.l_len = 1L; \
- _fl.l_pid = 0; \
- while ((rc = fcntl((x), F_SETLKW, &_fl) < 0) && (errno == EINTR)); \
- rc = rc == 0 ? JK_TRUE : JK_FALSE; \
- } while (0)
-
-#define JK_LEAVE_LOCK(x, rc) \
- do { \
- struct flock _fl; \
- _fl.l_type = F_UNLCK; \
- _fl.l_whence = SEEK_SET; \
- _fl.l_start = 0; \
- _fl.l_len = 1L; \
- _fl.l_pid = 0; \
- while ((rc = fcntl((x), F_SETLKW, &_fl) < 0) && (errno == EINTR)); \
- rc = rc == 0 ? JK_TRUE : JK_FALSE; \
- } while (0)
-
-#endif /* USE_FLOCK_LK */
-
-#else /* WIN32 || NETWARE */
-#define JK_ENTER_LOCK(x, rc) rc = JK_TRUE
-#define JK_LEAVE_LOCK(x, rc) rc = JK_TRUE
-#endif
-
-#endif /* _JK_MT_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_nwmain.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_nwmain.c
deleted file mode 100644
index 804de00d..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_nwmain.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Netware Wrapper *
- * Author: Mike Anderson <mmander@novell.com> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-#ifdef NETWARE
-/*
- * NATIVE_MAIN
- */
-
-/*
- * INCLUDES
- */
-
-#include <stdio.h>
-
-/* Apache 2/APR uses NOVELL_LIBC which has a different way of handling
- * "library" nlms. If we aren't on LIBC, use the old method
- */
-
-#ifndef __NOVELL_LIBC__
-#include <nwthread.h>
-#include <netdb.h>
-
-NETDB_DEFINE_CONTEXT
-/*
- * main ()
- *
- * Main entry point -- don't do much more than I've provided
- *
- * Entry:
- *
- * Exit:
- * Nothing
- */
-void main()
-{
- ExitThread(TSR_THREAD, 0);
-}
-#else /* __NOVELL_LIBC__ */
-
-/* Since we are on LibC, we need to handle our own startup and shutdown */
-
-#include <netware.h>
-#include "novsock2.h"
-
-int _NonAppStart
- (void *NLMHandle,
- void *errorScreen,
- const char *cmdLine,
- const char *loadDirPath,
- size_t uninitializedDataLength,
- void *NLMFileHandle,
- int (*readRoutineP) (int conn, void *fileHandle, size_t offset,
- size_t nbytes, size_t * bytesRead, void *buffer),
- size_t customDataOffset,
- size_t customDataSize, int messageCount, const char **messages)
-{
-#pragma unused(cmdLine)
-#pragma unused(loadDirPath)
-#pragma unused(uninitializedDataLength)
-#pragma unused(NLMFileHandle)
-#pragma unused(readRoutineP)
-#pragma unused(customDataOffset)
-#pragma unused(customDataSize)
-#pragma unused(messageCount)
-#pragma unused(messages)
-
- WSADATA wsaData;
-
- return WSAStartup((WORD) MAKEWORD(2, 0), &wsaData);
-}
-
-void _NonAppStop(void)
-{
- WSACleanup();
-}
-
-int _NonAppCheckUnload(void)
-{
- return 0;
-}
-#endif /* __NOVELL_LIBC__ */
-
-#endif
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.c
deleted file mode 100644
index 685f75c6..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Simple memory pool *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-#include "jk_pool.h"
-
-#define DEFAULT_DYNAMIC 10
-
-
-static void *jk_pool_dyn_alloc(jk_pool_t *p, size_t size);
-
-
-void jk_open_pool(jk_pool_t *p, jk_pool_atom_t *buf, size_t size)
-{
- p->pos = 0;
- p->size = size;
- p->buf = (char *)buf;
-
- p->dyn_pos = 0;
- p->dynamic = NULL;
- p->dyn_size = 0;
-}
-
-void jk_close_pool(jk_pool_t *p)
-{
- jk_reset_pool(p);
- if (p->dynamic) {
- free(p->dynamic);
- }
-}
-
-void jk_reset_pool(jk_pool_t *p)
-{
- if (p->dyn_pos && p->dynamic) {
- size_t i;
- for (i = 0; i < p->dyn_pos; i++) {
- if (p->dynamic[i]) {
- free(p->dynamic[i]);
- }
- }
- }
-
- p->dyn_pos = 0;
- p->pos = 0;
-}
-
-void *jk_pool_alloc(jk_pool_t *p, size_t size)
-{
- void *rc = NULL;
-
- size = JK_ALIGN_DEFAULT(size);
- if ((p->size - p->pos) >= size) {
- rc = &(p->buf[p->pos]);
- p->pos += size;
- }
- else {
- rc = jk_pool_dyn_alloc(p, size);
- }
-
- return rc;
-}
-
-void *jk_pool_realloc(jk_pool_t *p, size_t sz, const void *old, size_t old_sz)
-{
- void *rc;
-
- if (!p || (!old && old_sz)) {
- return NULL;
- }
-
- rc = jk_pool_alloc(p, sz);
- if (rc) {
- memcpy(rc, old, old_sz);
- }
-
- return rc;
-}
-
-void *jk_pool_strdup(jk_pool_t *p, const char *s)
-{
- void *rc = NULL;
- if (s && p) {
- size_t size = strlen(s);
-
- if (!size) {
- return "";
- }
-
- size++;
- rc = jk_pool_alloc(p, size);
- if (rc) {
- memcpy(rc, s, size);
- }
- }
-
- return rc;
-}
-
-#if defined (DEBUG) || defined(_DEBUG)
-static void jk_dump_pool(jk_pool_t *p, FILE * f)
-{
- fprintf(f, "Dumping for pool [%p]\n", p);
- fprintf(f, "size [%ld]\n", p->size);
- fprintf(f, "pos [%ld]\n", p->pos);
- fprintf(f, "buf [%p]\n", p->buf);
- fprintf(f, "dyn_size [%ld]\n", p->dyn_size);
- fprintf(f, "dyn_pos [%ld]\n", p->dyn_pos);
- fprintf(f, "dynamic [%p]\n", p->dynamic);
-
- fflush(f);
-}
-#endif
-
-static void *jk_pool_dyn_alloc(jk_pool_t *p, size_t size)
-{
- void *rc;
-
- if (p->dyn_size == p->dyn_pos) {
- size_t new_dyn_size = p->dyn_size * 2 + DEFAULT_DYNAMIC;
- void **new_dynamic = (void **)malloc(new_dyn_size * sizeof(void *));
- if (new_dynamic) {
- if (p->dynamic) {
- /* Copy old dynamic slots */
- memcpy(new_dynamic, p->dynamic, p->dyn_size * sizeof(void *));
-
- free(p->dynamic);
- }
-
- p->dynamic = new_dynamic;
- p->dyn_size = new_dyn_size;
- }
- else {
-#if defined (DEBUG) || defined(_DEBUG)
- jk_dump_pool(p, stderr);
-#endif
- return NULL;
- }
- }
-
- rc = p->dynamic[p->dyn_pos] = malloc(size);
- if (p->dynamic[p->dyn_pos]) {
- p->dyn_pos++;
- }
-
- return rc;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.h
deleted file mode 100644
index b4c582df..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Memory Pool object header file *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-#ifndef _JK_POOL_H
-#define _JK_POOL_H
-
-#include "jk_global.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/**
- * @file jk_pool.h
- * @brief Jk memory allocation
- *
- * Similar with apr_pools, but completely unsynchronized.
- * XXX use same names
- *
- */
-
-/*
- * The pool atom (basic pool alocation unit) is an 8 byte long.
- * Each allocation (even for 1 byte) will return a round up to the
- * number of atoms.
- *
- * This is to help in alignment of 32/64 bit machines ...
- * G.S
- */
-#ifdef WIN32
- typedef __int64 jk_pool_atom_t;
-#elif defined(AIX)
- typedef long long jk_pool_atom_t;
-#elif defined(SOLARIS)
- typedef long long jk_pool_atom_t;
-#elif defined(LINUX)
- typedef long long jk_pool_atom_t;
-#elif defined(FREEBSD)
- typedef long long jk_pool_atom_t;
-#elif defined(OS2)
- typedef long long jk_pool_atom_t;
-#elif defined(NETWARE)
- typedef long long jk_pool_atom_t;
-#elif defined(HPUX11)
- typedef long long jk_pool_atom_t;
-#elif defined(IRIX)
- typedef long long jk_pool_atom_t;
-#elif defined(AS400)
- typedef void *jk_pool_atom_t;
-#else
- typedef long long jk_pool_atom_t;
-#endif
-
-/**
- * Alignment macros
- */
-
-/* JK_ALIGN() is only to be used to align on a power of 2 boundary */
-#define JK_ALIGN(size, boundary) \
- (((size) + ((boundary) - 1)) & ~((boundary) - 1))
-
-/** Default alignment */
-#ifdef AS400
-#define JK_ALIGN_DEFAULT(size) JK_ALIGN(size, 16)
-#else
-#define JK_ALIGN_DEFAULT(size) JK_ALIGN(size, 8)
-#endif
-
-/*
- * Pool size in number of pool atoms.
- */
-#define TINY_POOL_SIZE 256 /* Tiny 1/4K atom pool. */
-#define SMALL_POOL_SIZE 512 /* Small 1/2K atom pool. */
-#define BIG_POOL_SIZE 2*SMALL_POOL_SIZE /* Bigger 1K atom pool. */
-#define HUGE_POOL_SIZE 2*BIG_POOL_SIZE /* Huge 2K atom pool. */
-
-/** jk pool structure */
-struct jk_pool
-{
- size_t size;
- size_t pos;
- char *buf;
- size_t dyn_size;
- size_t dyn_pos;
- void **dynamic;
-};
-
-typedef struct jk_pool jk_pool_t;
-
-void jk_open_pool(jk_pool_t *p, jk_pool_atom_t *buf, size_t size);
-
-void jk_close_pool(jk_pool_t *p);
-
-void jk_reset_pool(jk_pool_t *p);
-
-void *jk_pool_alloc(jk_pool_t *p, size_t sz);
-
-void *jk_pool_realloc(jk_pool_t *p,
- size_t sz, const void *old, size_t old_sz);
-
-void *jk_pool_strdup(jk_pool_t *p, const char *s);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* _JK_POOL_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.lo
deleted file mode 100644
index 490290d5..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_pool.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_pool.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_pool.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.o
deleted file mode 100644
index e2e72173..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_pool.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_service.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_service.h
deleted file mode 100644
index e99e774b..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_service.h
+++ /dev/null
@@ -1,546 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Definitions of the objects used during the service step. *
- * These are the web server (ws) the worker and the connection*
- * JVM connection point *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Author: Dan Milstein <danmil@shore.net> *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 1078846 $ *
- ***************************************************************************/
-
-#ifndef JK_SERVICE_H
-#define JK_SERVICE_H
-
-#include "jk_global.h"
-#include "jk_logger.h"
-#include "jk_pool.h"
-#include "jk_map.h"
-#include "jk_uri_worker_map.h"
-#include "jk_msg_buff.h"
-
-#define JK_RETRIES 2
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/*
- * Env Information to be provided to worker at init time
- * With AJP14 support we need to have access to many informations
- * about web-server, uri to worker map....
- */
-
-struct jk_worker_env
-{
-
- /* The original configuration map */
- jk_map_t *init_data;
-
- /* The URI to WORKER map, will be feeded by AJP14 autoconf feature */
- jk_uri_worker_map_t *uri_to_worker;
-
- unsigned int num_of_workers;
- char **worker_list;
-
- /* Web-Server we're running on (Apache/IIS/NES) */
- char *server_name;
-
- /* Virtual server handled - "*" is all virtual */
- char *virtual;
-
- /* Optional APR pool used for configuration */
- void *pool;
-};
-typedef struct jk_worker_env jk_worker_env_t;
-
-struct jk_ws_service;
-struct jk_endpoint;
-struct jk_worker;
-typedef struct jk_ws_service jk_ws_service_t;
-typedef struct jk_endpoint jk_endpoint_t;
-typedef struct jk_worker jk_worker_t;
-
-struct svc_extension
-{
- /* reply_timeout overwrite */
- int reply_timeout;
- /* activation state overwrites for load balancers */
- /* Dynamically allocated array with one entry per lb member. */
- int *activation;
- /* fail_on_status overwrites */
- /* Number of elements in the array fail_on_status. */
- int fail_on_status_size;
- /* Dynamically allocated array with one entry per status. */
- int *fail_on_status;
- /* Use server error pages for responses >= 400. */
- int use_server_error_pages;
-};
-typedef struct svc_extension svc_extension_t;
-
-/*
- * The web server service 'class'. An instance of this class is created
- * for each request which is forwarded from the web server to the servlet
- * container. Contains the basic information about the request
- * (e.g. protocol, req_uri, etc), and also contains a series of methods
- * which provide access to core web server functionality (start_response,
- * read, write). This class might be more accurately called ws_request.
- *
- * As with all the core jk classes, this is essentially an abstract base
- * class which is implemented/extended by classes which are specific to a
- * particular web server. By using an abstract base class in this manner,
- * workers can be written for different protocols (e.g. ajp12, ajp13, ajp14)
- * without the workers having to worry about which web server they are
- * talking to.
- *
- * This particular OO-in-C system uses a 'ws_private' pointer to point to
- * the platform-specific data. So in the subclasses, the methods do most
- * of their work by getting their hands on the ws_private pointer and then
- * using that to get at the correctly formatted data and functions for
- * their platform.
- *
- * Try imagining this as a 'public abstract class', and the ws_private
- * pointer as a sort of extra 'this' reference. Or imagine that you are
- * seeing the internal vtables of your favorite OO language. Whatever
- * works for you.
- *
- * See apache1.3/mod_jk.c and iis/jk_isapi_plugin.c for examples.
- */
-struct jk_ws_service
-{
-
- /*
- * A 'this' pointer which is used by the subclasses of this class to
- * point to data which is specific to a given web server platform
- * (e.g. Apache or IIS).
- */
- void *ws_private;
-
- /*
- * Provides memory management. All data specific to this request is
- * allocated within this pool, which can then be reclaimed at the end
- * of the request handling cycle.
- *
- * Alive as long as the request is alive.
- */
- jk_pool_t *pool;
-
- /*
- * CGI Environment needed by servlets
- */
- const char *method;
- const char *protocol;
- char *req_uri;
- const char *remote_addr;
- const char *remote_port;
- const char *remote_host;
- const char *remote_user;
- const char *auth_type;
- const char *query_string;
- const char *server_name;
- unsigned server_port;
- char *server_software;
- jk_uint64_t content_length; /* 64 bit integer that represents the content */
- /* length should be 0 if unknown. */
- unsigned is_chunked; /* 1 if content length is unknown (chunked rq) */
- unsigned no_more_chunks; /* 1 if last chunk has been read */
- jk_uint64_t content_read; /* number of bytes read */
-
- /*
- * SSL information
- *
- * is_ssl - True if request is in ssl connection
- * ssl_cert - If available, base64 ASN.1 encoded client certificates.
- * ssl_cert_len - Length of ssl_cert, 0 if certificates are not available.
- * ssl_cipher - The ssl cipher suite in use.
- * ssl_session - The ssl session string
- *
- * In some servers it is impossible to extract all this information, in this
- * case, we are passing NULL.
- */
- int is_ssl;
- char *ssl_cert;
- unsigned ssl_cert_len;
- char *ssl_cipher;
- char *ssl_session;
-
- /*
- * SSL extra information for Servlet 2.3 API
- *
- * ssl_key_size - ssl key size in use
- */
- int ssl_key_size;
-
- /*
- * Headers, names and values.
- */
- char **headers_names; /* Names of the request headers */
- char **headers_values; /* Values of the request headers */
- unsigned num_headers; /* Number of request headers */
-
-
- /*
- * Request attributes.
- *
- * These attributes that were extracted from the web server and are
- * sent to Tomcat.
- *
- * The developer should be able to read them from the ServletRequest
- * attributes. Tomcat is required to append org.apache.tomcat. to
- * these attrinbute names.
- */
- char **attributes_names; /* Names of the request attributes */
- char **attributes_values; /* Values of the request attributes */
- unsigned num_attributes; /* Number of request attributes */
-
- /*
- * The route is in use when the adapter load balance among
- * several workers. It is the ID of a specific target in the load balance
- * group. We are using this variable to implement target session
- * affinity
- */
- const char *route;
-
- /*
- * Activation state of the worker in the load balancer.
- * Will be forwarded as a request attribute.
- */
- const char *activation;
-
- /* Temp solution for auth. For native1 it'll be sent on each request,
- if an option is present. For native2 it'll be sent with the first
- request. On java side, both cases will work. For tomcat3.2 or
- a version that doesn't support secret - don't set the secret,
- and it'll work.
- */
- const char *secret;
-
- /*
- * Area to get POST data for fail-over recovery in POST
- */
- jk_msg_buf_t *reco_buf;
- int reco_status;
-
- /*
- * If set call flush after each write
- */
- int flush_packets;
-
- /*
- * If set call flush after AJP13_SEND_HEADERS.
- */
- int flush_header;
-
- /*
- * service extensions
- */
- svc_extension_t extension;
-
- /*
- * JK_TRUE if response headers have been sent back
- */
- int response_started;
-
- /*
- * JK_TRUE if response should not be send to the client
- */
- int response_blocked;
-
- /*
- * HTTP status sent from container.
- */
- int http_response_status;
-
- /* Uri worker map. Added for virtual host support
- */
- jk_uri_worker_map_t *uw_map;
-
- /*
- * Callbacks into the web server. For each, the first argument is
- * essentially a 'this' pointer. All return JK_TRUE on success
- * and JK_FALSE on failure.
- */
- /*
- * Send the response headers to the browser.
- */
- int (JK_METHOD * start_response) (jk_ws_service_t *s,
- int status,
- const char *reason,
- const char *const *header_names,
- const char *const *header_values,
- unsigned num_of_headers);
-
- /*
- * Read a chunk of the request body into a buffer. Attempt to read len
- * bytes into the buffer. Write the number of bytes actually read into
- * actually_read.
- */
- int (JK_METHOD * read) (jk_ws_service_t *s,
- void *buffer,
- unsigned len, unsigned *actually_read);
-
- /*
- * Write a chunk of response data back to the browser.
- */
- int (JK_METHOD * write) (jk_ws_service_t *s,
- const void *buffer, unsigned len);
-
- /*
- * Flush a chunk of response data back to the browser.
- */
- void (JK_METHOD * flush) (jk_ws_service_t *s);
-
- /*
- * Done with sending response back to the browser.
- */
- void (JK_METHOD * done) (jk_ws_service_t *s);
-
- /*
- * If set do not reuse socket after each full response
- */
- int disable_reuse;
-
- /*
- * Add more data to log facilities.
- */
- void (JK_METHOD * add_log_items) (jk_ws_service_t *s,
- const char *const *log_names,
- const char *const *log_values,
- unsigned num_of_items);
-
- /*
- * Iterate through all vhosts
- */
- void *(JK_METHOD * next_vhost) (void *d);
-
- /*
- * String representation of a vhost
- */
- void (JK_METHOD * vhost_to_text) (void *d, char *buf, size_t len);
-
- /*
- * Get uw_map associated with a vhost
- */
- jk_uri_worker_map_t *(JK_METHOD * vhost_to_uw_map) (void *d);
-};
-
-/*
- * The endpoint 'class', which represents one end of a connection to the
- * servlet engine. Basically, supports nothing other than forwarding the
- * request to the servlet engine. Endpoints can be persistent (as with
- * ajp13/ajp14, where a single connection is reused many times), or can last for a
- * single request (as with ajp12, where a new connection is created for
- * every request).
- *
- * An endpoint for a given protocol is obtained by the web server plugin
- * from a worker object for that protocol. See below for details.
- *
- * As with all the core jk classes, this is essentially an abstract base
- * class which is implemented/extended by classes which are specific to a
- * particular protocol. By using an abstract base class in this manner,
- * plugins can be written for different servers (e.g. IIS, Apache) without
- * the plugins having to worry about which protocol they are talking.
- *
- * This particular OO-in-C system uses a 'endpoint_private' pointer to
- * point to the protocol-specific data/functions. So in the subclasses, the
- * methods do most of their work by getting their hands on the
- * endpoint_private pointer and then using that to get at the functions for
- * their protocol.
- *
- * Try imagining this as a 'public abstract class', and the
- * endpoint_private pointer as a sort of extra 'this' reference. Or
- * imagine that you are seeing the internal vtables of your favorite OO
- * language. Whatever works for you.
- *
- * See jk_ajp13_worker.c/jk_ajp14_worker.c and jk_ajp12_worker.c for examples.
- */
-struct jk_endpoint
-{
- jk_uint64_t rd;
- jk_uint64_t wr;
-
- /*
- * Flag to pass back recoverability status from
- * a load balancer member to the load balancer itself.
- * Depending on the configuration and request status
- * recovery is not allowed.
- */
- int recoverable;
-
- /*
- * A 'this' pointer which is used by the subclasses of this class to
- * point to data/functions which are specific to a given protocol
- * (e.g. ajp12 or ajp13 or ajp14).
- */
- void *endpoint_private;
-
- /*
- * Forward a request to the servlet engine. The request is described
- * by the jk_ws_service_t object.
- * is_error is either 0 meaning recoverable or set to
- * the HTTP error code.
- */
- int (JK_METHOD * service) (jk_endpoint_t *e,
- jk_ws_service_t *s,
- jk_logger_t *l, int *is_error);
-
- /*
- * Called when this particular endpoint has finished processing a
- * request. For some protocols (e.g. ajp12), this frees the memory
- * associated with the endpoint. For others (e.g. ajp13/ajp14), this can
- * return the endpoint to a cache of already opened endpoints.
- *
- * Note that the first argument is *not* a 'this' pointer, but is
- * rather a pointer to a 'this' pointer. This is necessary, because
- * we may need to free this object.
- */
- int (JK_METHOD * done) (jk_endpoint_t **p, jk_logger_t *l);
-};
-
-/*
- * The worker 'class', which represents something to which the web server
- * can delegate requests.
- *
- * This can mean communicating with a particular servlet engine instance,
- * using a particular protocol. A single web server instance may have
- * multiple workers communicating with a single servlet engine (it could be
- * using ajp12 for some requests and ajp13/ajp14 for others). Or, a single web
- * server instance could have multiple workers communicating with different
- * servlet engines using the same protocol (it could be load balancing
- * among many engines, using ajp13/ajp14 for all communication).
- *
- * There is also a load balancing worker (jk_lb_worker.c), which itself
- * manages a group of workers.
- *
- * Web servers are configured to forward requests to a given worker. To
- * handle those requests, the worker's get_endpoint method is called, and
- * then the service() method of that endpoint is called.
- *
- * As with all the core jk classes, this is essentially an abstract base
- * class which is implemented/extended by classes which are specific to a
- * particular protocol (or request-handling system). By using an abstract
- * base class in this manner, plugins can be written for different servers
- * (e.g. IIS, Apache) without the plugins having to worry about which
- * protocol they are talking.
- *
- * This particular OO-in-C system uses a 'worker_private' pointer to
- * point to the protocol-specific data/functions. So in the subclasses, the
- * methods do most of their work by getting their hands on the
- * worker_private pointer and then using that to get at the functions for
- * their protocol.
- *
- * Try imagining this as a 'public abstract class', and the
- * worker_private pointer as a sort of extra 'this' reference. Or
- * imagine that you are seeing the internal vtables of your favorite OO
- * language. Whatever works for you.
- *
- * See jk_ajp14_worker.c, jk_ajp13_worker.c and jk_ajp12_worker.c for examples.
- */
-struct jk_worker
-{
-
- jk_worker_env_t *we;
-
- /*
- * A 'this' pointer which is used by the subclasses of this class to
- * point to data/functions which are specific to a given protocol
- * (e.g. ajp12 or ajp13 or ajp14).
- */
- void *worker_private;
-
- int type;
- /*
- * For all of the below (except destroy), the first argument is
- * essentially a 'this' pointer.
- */
-
- /*
- * Given a worker which is in the process of being created, and a list
- * of configuration options (or 'properties'), check to see if it the
- * options are. This will always be called before the init() method.
- * The init/validate distinction is a bit hazy to me.
- * See jk_ajp13_worker.c/jk_ajp14_worker.c and jk_worker.c->wc_create_worker()
- */
- int (JK_METHOD * validate) (jk_worker_t *w,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l);
-
- /*
- * Update worker either from jk_status or reloading from workers.properties
- */
- int (JK_METHOD * update) (jk_worker_t *w,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l);
-
- /*
- * Do whatever initialization needs to be done to start this worker up.
- * Configuration options are passed in via the props parameter.
- */
- int (JK_METHOD * init) (jk_worker_t *w,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l);
-
-
- /*
- * Obtain an endpoint to service a particular request. A pointer to
- * the endpoint is stored in pend.
- */
- int (JK_METHOD * get_endpoint) (jk_worker_t *w,
- jk_endpoint_t **pend, jk_logger_t *l);
-
- /*
- * Shutdown this worker. The first argument is not a 'this' pointer,
- * but rather a pointer to 'this', so that the object can be free'd (I
- * think -- though that doesn't seem to be happening. Hmmm).
- */
- int (JK_METHOD * destroy) (jk_worker_t **w, jk_logger_t *l);
-
- /*
- * Maintain this worker.
- */
- int (JK_METHOD * maintain) (jk_worker_t *w, time_t now, jk_logger_t *l);
-
-};
-
-/*
- * Essentially, an abstract base class (or factory class) with a single
- * method -- think of it as createWorker() or the Factory Method Design
- * Pattern. There is a different worker_factory function for each of the
- * different types of workers. The set of all these functions is created
- * at startup from the list in jk_worker_list.h, and then the correct one
- * is chosen in jk_worker.c->wc_create_worker(). See jk_worker.c and
- * jk_ajp13_worker.c/jk_ajp14_worker.c for examples.
- *
- * This allows new workers to be written without modifing the plugin code
- * for the various web servers (since the only link is through
- * jk_worker_list.h).
- */
-typedef int (JK_METHOD * worker_factory) (jk_worker_t **w,
- const char *name,
- jk_logger_t *l);
-
-void jk_init_ws_service(jk_ws_service_t *s);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* JK_SERVICE_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.c
deleted file mode 100644
index 1640f474..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.c
+++ /dev/null
@@ -1,812 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Shared Memory support *
- * Author: Mladen Turk <mturk@jboss.com> *
- * Author: Rainer Jung <rjung@apache.org> *
- * Version: $Revision: 704548 $ *
- ***************************************************************************/
-
-#include "jk_global.h"
-#include "jk_pool.h"
-#include "jk_util.h"
-#include "jk_mt.h"
-#include "jk_lb_worker.h"
-#include "jk_ajp13_worker.h"
-#include "jk_ajp14_worker.h"
-#include "jk_shm.h"
-
-/** jk shm header core data structure */
-struct jk_shm_header_data
-{
- /* Shared memory magic JK_SHM_MAGIC */
- char magic[JK_SHM_MAGIC_SIZ];
- size_t size;
- size_t pos;
- unsigned int childs;
- unsigned int workers;
- time_t modified;
-};
-
-typedef struct jk_shm_header_data jk_shm_header_data_t;
-
-/** jk shm header record structure */
-struct jk_shm_header
-{
- union {
- jk_shm_header_data_t data;
- char alignbuf[JK_SHM_ALIGN(sizeof(jk_shm_header_data_t))];
- } h;
- char buf[1];
-};
-
-typedef struct jk_shm_header jk_shm_header_t;
-
-/** jk shm structure */
-struct jk_shm
-{
- size_t size;
- unsigned ajp_workers;
- unsigned lb_sub_workers;
- unsigned lb_workers;
- char *filename;
- char *lockname;
- int fd;
- int fd_lock;
- int attached;
- jk_shm_header_t *hdr;
- JK_CRIT_SEC cs;
-};
-
-typedef struct jk_shm jk_shm_t;
-
-static const char shm_signature[] = { JK_SHM_MAGIC };
-static jk_shm_t jk_shmem = { 0, 0, 0, 0, NULL, NULL, -1, -1, 0, NULL};
-static time_t jk_workers_modified_time = 0;
-static time_t jk_workers_access_time = 0;
-#if defined (WIN32)
-static HANDLE jk_shm_map = NULL;
-static HANDLE jk_shm_hlock = NULL;
-#endif
-
-/* Calculate needed shm size */
-size_t jk_shm_calculate_size(jk_map_t *init_data, jk_logger_t *l)
-{
- char **worker_list;
- unsigned i;
- unsigned num_of_workers;
- int num_of_ajp_workers = 0;
- int num_of_lb_sub_workers = 0;
- int num_of_lb_workers = 0;
-
- JK_TRACE_ENTER(l);
-
- if (jk_get_worker_list(init_data, &worker_list,
- &num_of_workers) == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "Could not get worker list from map");
- JK_TRACE_EXIT(l);
- return 0;
- }
-
- for (i = 0; i < num_of_workers; i++) {
- const char *type = jk_get_worker_type(init_data, worker_list[i]);
-
- if (!strcmp(type, JK_AJP13_WORKER_NAME) ||
- !strcmp(type, JK_AJP14_WORKER_NAME)) {
- num_of_ajp_workers++;
- }
- else if (!strcmp(type, JK_LB_WORKER_NAME)) {
- char **member_list;
- unsigned num_of_members;
- num_of_lb_workers++;
- if (jk_get_lb_worker_list(init_data, worker_list[i],
- &member_list, &num_of_members) == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "Could not get member list for lb worker from map");
- }
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG, "worker %s of type %s has %u members",
- worker_list[i], JK_LB_WORKER_NAME, num_of_members);
- num_of_lb_sub_workers += num_of_members;
- }
- }
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG, "shared memory will contain %d ajp workers of size %d and %d lb workers of size %d with %d members of size %d+%d",
- num_of_ajp_workers, JK_SHM_AJP_SIZE(1),
- num_of_lb_workers, JK_SHM_LB_SIZE(1),
- num_of_lb_sub_workers, JK_SHM_LB_SUB_SIZE(1), JK_SHM_AJP_SIZE(1));
- jk_shmem.ajp_workers = num_of_ajp_workers;
- jk_shmem.lb_sub_workers = num_of_lb_sub_workers;
- jk_shmem.lb_workers = num_of_lb_workers;
- JK_TRACE_EXIT(l);
- return JK_SHM_AJP_SIZE(jk_shmem.ajp_workers) +
- JK_SHM_LB_SUB_SIZE(jk_shmem.lb_sub_workers) +
- JK_SHM_AJP_SIZE(jk_shmem.lb_sub_workers) +
- JK_SHM_LB_SIZE(jk_shmem.lb_workers);
-}
-
-
-#if defined (WIN32) || defined(NETWARE)
-
-/* Use plain memory */
-int jk_shm_open(const char *fname, size_t sz, jk_logger_t *l)
-{
- int rc;
- int attached = 0;
- char lkname[MAX_PATH];
- JK_TRACE_ENTER(l);
- if (jk_shmem.hdr) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG, "Shared memory is already opened");
- JK_TRACE_EXIT(l);
- return 0;
- }
-
- jk_shmem.size = JK_SHM_ALIGN(sizeof(jk_shm_header_t) + sz);
-
-#if defined (WIN32)
- if (fname) {
- jk_shm_map = CreateFileMapping(INVALID_HANDLE_VALUE,
- NULL,
- PAGE_READWRITE,
- 0,
- (DWORD)(sizeof(jk_shm_header_t) + sz),
- fname);
- if (GetLastError() == ERROR_ALREADY_EXISTS) {
- attached = 1;
- if (jk_shm_map == NULL || jk_shm_map == INVALID_HANDLE_VALUE) {
- jk_shm_map = OpenFileMapping(PAGE_READWRITE, FALSE, fname);
- }
- }
- if (jk_shm_map == NULL || jk_shm_map == INVALID_HANDLE_VALUE) {
- JK_TRACE_EXIT(l);
- return -1;
- }
- sprintf(lkname, "Global\\%s_MUTEX", fname);
- if (attached) {
- jk_shm_hlock = OpenMutex(MUTEX_ALL_ACCESS, FALSE, lkname);
- }
- else {
- jk_shm_hlock = CreateMutex(NULL, FALSE, lkname);
- }
- if (jk_shm_hlock == NULL || jk_shm_hlock == INVALID_HANDLE_VALUE) {
- CloseHandle(jk_shm_map);
- jk_shm_map = NULL;
- JK_TRACE_EXIT(l);
- return -1;
- }
- jk_shmem.hdr = (jk_shm_header_t *)MapViewOfFile(jk_shm_map,
- FILE_MAP_ALL_ACCESS,
- 0,
- 0,
- 0);
- }
- else
-#endif
- jk_shmem.hdr = (jk_shm_header_t *)calloc(1, jk_shmem.size);
- if (!jk_shmem.hdr) {
-#if defined (WIN32)
- if (jk_shm_map) {
- CloseHandle(jk_shm_map);
- jk_shm_map = NULL;
- }
- if (jk_shm_hlock) {
- CloseHandle(jk_shm_hlock);
- jk_shm_hlock = NULL;
- }
-#endif
- JK_TRACE_EXIT(l);
- return -1;
- }
- if (!jk_shmem.filename) {
- if (fname)
- jk_shmem.filename = strdup(fname);
- else
- jk_shmem.filename = strdup("memory");
- }
- jk_shmem.fd = 0;
- jk_shmem.attached = attached;
- if (!attached) {
- memcpy(jk_shmem.hdr->h.data.magic, shm_signature,
- JK_SHM_MAGIC_SIZ);
- jk_shmem.hdr->h.data.size = sz;
- jk_shmem.hdr->h.data.childs = 1;
- }
- else {
- jk_shmem.hdr->h.data.childs++;
- /*
- * Reset the shared memory so that
- * alloc works even for attached memory.
- * XXX: This might break already used memory
- * if the number of workers change between
- * open and attach or between two attach operations.
- */
- if (jk_shmem.hdr->h.data.childs > 1) {
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "Resetting the shared memory for child %d",
- jk_shmem.hdr->h.data.childs);
- }
- }
- jk_shmem.hdr->h.data.pos = 0;
- jk_shmem.hdr->h.data.workers = 0;
- }
- JK_INIT_CS(&(jk_shmem.cs), rc);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "%s shared memory %s size=%u free=%u addr=%#lx",
- attached ? "Attached" : "Initialized",
- jk_shm_name(), jk_shmem.size,
- jk_shmem.hdr->h.data.size - jk_shmem.hdr->h.data.pos,
- jk_shmem.hdr);
- JK_TRACE_EXIT(l);
- return 0;
-}
-
-int jk_shm_attach(const char *fname, size_t sz, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
- if (!jk_shm_open(fname, sz, l)) {
- if (!jk_shmem.attached) {
- jk_shmem.attached = 1;
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "Attached shared memory %s [%d] size=%u free=%u addr=%#lx",
- jk_shm_name(), jk_shmem.hdr->h.data.childs, jk_shmem.size,
- jk_shmem.hdr->h.data.size - jk_shmem.hdr->h.data.pos,
- jk_shmem.hdr);
- }
- }
- JK_TRACE_EXIT(l);
- return 0;
- }
- else {
- JK_TRACE_EXIT(l);
- return -1;
- }
-}
-
-void jk_shm_close()
-{
- if (jk_shmem.hdr) {
- int rc;
-#if defined (WIN32)
- if (jk_shm_hlock) {
- CloseHandle(jk_shm_hlock);
- jk_shm_hlock = NULL;
- }
- if (jk_shm_map) {
- --jk_shmem.hdr->h.data.childs;
- UnmapViewOfFile(jk_shmem.hdr);
- CloseHandle(jk_shm_map);
- jk_shm_map = NULL;
- }
- else
-#endif
- free(jk_shmem.hdr);
- JK_DELETE_CS(&(jk_shmem.cs), rc);
- }
- jk_shmem.hdr = NULL;
- if (jk_shmem.filename) {
- free(jk_shmem.filename);
- jk_shmem.filename = NULL;
- }
-}
-
-#else
-
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <sys/uio.h>
-
-#ifndef MAP_FAILED
-#define MAP_FAILED (-1)
-#endif
-
-#ifndef MAP_FILE
-#define MAP_FILE (0)
-#endif
-
-static int do_shm_open_lock(const char *fname, int attached, jk_logger_t *l)
-{
- int rc;
- char flkname[256];
-#ifdef AS400_UTF8
- char *wptr;
-#endif
-
- JK_TRACE_ENTER(l);
-
- if (attached && jk_shmem.lockname) {
-#ifdef JK_SHM_LOCK_REOPEN
- jk_shmem.fd_lock = open(jk_shmem.lockname, O_RDWR, 0666);
-#else
- errno = EINVAL;
-#endif
- if (jk_shmem.fd_lock == -1) {
- rc = errno;
- JK_TRACE_EXIT(l);
- return rc;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Duplicated shared memory lock %s", jk_shmem.lockname);
- JK_TRACE_EXIT(l);
- return 0;
- }
-
- if (!jk_shmem.lockname) {
-#ifdef JK_SHM_LOCK_REOPEN
- int i;
- jk_shmem.fd_lock = -1;
- mode_t mask = umask(0);
- for (i = 0; i < 8; i++) {
- strcpy(flkname, "/tmp/jkshmlock.XXXXXX");
- if (mktemp(flkname)) {
- jk_shmem.fd_lock = open(flkname, O_RDWR|O_CREAT|O_TRUNC, 0666);
- if (jk_shmem.fd_lock >= 0)
- break;
- }
- }
- umask(mask);
-#else
- strcpy(flkname, fname);
- strcat(flkname, ".lock");
-#ifdef AS400_UTF8
- wptr = (char *)malloc(strlen(flkname) + 1);
- jk_ascii2ebcdic((char *)flkname, wptr);
- jk_shmem.fd_lock = open(wptr, O_RDWR|O_CREAT|O_TRUNC, 0666);
- free(wptr);
-#else
- jk_shmem.fd_lock = open(flkname, O_RDWR|O_CREAT|O_TRUNC, 0666);
-#endif
-#endif
- if (jk_shmem.fd_lock == -1) {
- rc = errno;
- JK_TRACE_EXIT(l);
- return rc;
- }
- jk_shmem.lockname = strdup(flkname);
- }
- else {
- /* Nothing to do */
- JK_TRACE_EXIT(l);
- return 0;
- }
-
- if (ftruncate(jk_shmem.fd_lock, 1)) {
- rc = errno;
- close(jk_shmem.fd_lock);
- jk_shmem.fd_lock = -1;
- JK_TRACE_EXIT(l);
- return rc;
- }
- if (lseek(jk_shmem.fd_lock, 0, SEEK_SET) != 0) {
- rc = errno;
- close(jk_shmem.fd_lock);
- jk_shmem.fd_lock = -1;
- return rc;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Opened shared memory lock %s", jk_shmem.lockname);
- JK_TRACE_EXIT(l);
- return 0;
-}
-
-static int do_shm_open(const char *fname, int attached,
- size_t sz, jk_logger_t *l)
-{
- int rc;
- int fd;
- void *base;
-#ifdef AS400_UTF8
- char *wptr;
-#endif
-
- JK_TRACE_ENTER(l);
- if (jk_shmem.hdr) {
- /* Probably a call from vhost */
- if (!attached)
- attached = 1;
- }
- else if (attached) {
- /* We should already have a header
- * Use memory if we don't
- */
- JK_TRACE_EXIT(l);
- return 0;
- }
- jk_shmem.size = JK_SHM_ALIGN(sizeof(jk_shm_header_t) + sz);
-
- if (!fname) {
- /* Use plain memory in case there is no file name */
- if (!jk_shmem.filename)
- jk_shmem.filename = strdup("memory");
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Using process memory as shared memory");
- JK_TRACE_EXIT(l);
- return 0;
- }
-
- if (!jk_shmem.filename) {
- jk_shmem.filename = (char *)malloc(strlen(fname) + 32);
- sprintf(jk_shmem.filename, "%s.%" JK_PID_T_FMT, fname, getpid());
- }
- if (!attached) {
- size_t size;
- jk_shmem.attached = 0;
-#ifdef AS400_UTF8
- wptr = (char *)malloc(strlen(jk_shmem.filename) + 1);
- jk_ascii2ebcdic((char *)jk_shmem.filename, wptr);
- fd = open(wptr, O_RDWR|O_CREAT|O_TRUNC, 0666);
- free(wptr);
-#else
- fd = open(jk_shmem.filename, O_RDWR|O_CREAT|O_TRUNC, 0666);
-#endif
- if (fd == -1) {
- jk_shmem.size = 0;
- JK_TRACE_EXIT(l);
- return errno;
- }
- size = lseek(fd, 0, SEEK_END);
- if (size < jk_shmem.size) {
- size = jk_shmem.size;
- if (ftruncate(fd, jk_shmem.size)) {
- rc = errno;
- close(fd);
-#ifdef AS400_UTF8
- wptr = (char *)malloc(strlen(jk_shmem.filename) + 1);
- jk_ascii2ebcdic((char *)jk_shmem.filename, wptr);
- unlink(wptr);
- free(wptr);
-#else
- unlink(jk_shmem.filename);
-#endif
- jk_shmem.size = 0;
- JK_TRACE_EXIT(l);
- return rc;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Truncated shared memory to %u", size);
- }
- if (lseek(fd, 0, SEEK_SET) != 0) {
- rc = errno;
- close(fd);
-#ifdef AS400_UTF8
- wptr = (char *)malloc(strlen(jk_shmem.filename) + 1);
- jk_ascii2ebcdic((char *)jk_shmem.filename, wptr);
- unlink(wptr);
- free(wptr);
-#else
- unlink(jk_shmem.filename);
-#endif
- jk_shmem.size = 0;
- JK_TRACE_EXIT(l);
- return rc;
- }
-
- base = mmap((caddr_t)0, jk_shmem.size,
- PROT_READ | PROT_WRITE,
- MAP_FILE | MAP_SHARED,
- fd, 0);
- if (base == (caddr_t)MAP_FAILED || base == (caddr_t)0) {
- rc = errno;
- close(fd);
-#ifdef AS400_UTF8
- wptr = (char *)malloc(strlen(jk_shmem.filename) + 1);
- jk_ascii2ebcdic((char *)jk_shmem.filename, wptr);
- unlink(wptr);
- free(wptr);
-#else
- unlink(jk_shmem.filename);
-#endif
- jk_shmem.size = 0;
- JK_TRACE_EXIT(l);
- return rc;
- }
- jk_shmem.hdr = base;
- jk_shmem.fd = fd;
- memset(jk_shmem.hdr, 0, jk_shmem.size);
- memcpy(jk_shmem.hdr->h.data.magic, shm_signature, JK_SHM_MAGIC_SIZ);
- jk_shmem.hdr->h.data.size = sz;
- jk_shmem.hdr->h.data.childs = 1;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Initialized shared memory %s size=%u free=%u addr=%#lx",
- jk_shm_name(), jk_shmem.size,
- jk_shmem.hdr->h.data.size - jk_shmem.hdr->h.data.pos,
- jk_shmem.hdr);
- }
- else {
- unsigned int nchild;
- jk_shmem.hdr->h.data.childs++;
- jk_shmem.attached = (int)getpid();
- nchild = jk_shmem.hdr->h.data.childs;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Attached shared memory %s [%d] size=%u free=%u addr=%#lx",
- jk_shm_name(), nchild, jk_shmem.size,
- jk_shmem.hdr->h.data.size - jk_shmem.hdr->h.data.pos,
- jk_shmem.hdr);
- /*
- * Reset the shared memory so that
- * alloc works even for attached memory.
- * XXX: This might break already used memory
- * if the number of workers change between
- * open and attach or between two attach operations.
- */
- if (nchild > 1) {
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "Resetting the shared memory for child %d",
- nchild);
- }
- }
- jk_shmem.hdr->h.data.pos = 0;
- jk_shmem.hdr->h.data.workers = 0;
- }
- JK_INIT_CS(&(jk_shmem.cs), rc);
- if ((rc = do_shm_open_lock(jk_shmem.filename, attached, l))) {
- if (!attached) {
- munmap((void *)jk_shmem.hdr, jk_shmem.size);
- close(jk_shmem.fd);
-#ifdef AS400_UTF8
- wptr = (char *)malloc(strlen(jk_shmem.filename) + 1);
- jk_ascii2ebcdic((char *)jk_shmem.filename, wptr);
- unlink(wptr);
- free(wptr);
-#else
- unlink(jk_shmem.filename);
-#endif
- }
- jk_shmem.hdr = NULL;
- jk_shmem.fd = -1;
- JK_TRACE_EXIT(l);
- return rc;
- }
- JK_TRACE_EXIT(l);
- return 0;
-}
-
-int jk_shm_open(const char *fname, size_t sz, jk_logger_t *l)
-{
- return do_shm_open(fname, 0, sz, l);
-}
-
-int jk_shm_attach(const char *fname, size_t sz, jk_logger_t *l)
-{
- return do_shm_open(fname, 1, sz, l);
-}
-
-void jk_shm_close()
-{
- int rc;
-#ifdef AS400_UTF8
- char *wptr;
-#endif
-
- if (jk_shmem.hdr) {
- --jk_shmem.hdr->h.data.childs;
-
-#ifdef JK_SHM_LOCK_REOPEN
- if (jk_shmem.fd_lock >= 0) {
- close(jk_shmem.fd_lock);
- jk_shmem.fd_lock = -1;
- }
-#endif
- JK_DELETE_CS(&(jk_shmem.cs), rc);
- if (jk_shmem.attached) {
- int p = (int)getpid();
- if (p == jk_shmem.attached) {
- /* In case this is a forked child
- * do not close the shared memory.
- * It will be closed by the parent.
- */
- jk_shmem.size = 0;
- jk_shmem.hdr = NULL;
- jk_shmem.fd = -1;
- return;
- }
- }
- if (jk_shmem.fd >= 0) {
- munmap((void *)jk_shmem.hdr, jk_shmem.size);
- close(jk_shmem.fd);
- }
- if (jk_shmem.fd_lock >= 0)
- close(jk_shmem.fd_lock);
- if (jk_shmem.lockname) {
-#ifdef AS400_UTF8
- wptr = (char *)malloc(strlen(jk_shmem.lockname) + 1);
- jk_ascii2ebcdic((char *)jk_shmem.lockname, wptr);
- unlink(wptr);
- free(wptr);
-#else
- unlink(jk_shmem.lockname);
-#endif
- free(jk_shmem.lockname);
- jk_shmem.lockname = NULL;
- }
- if (jk_shmem.filename) {
-#ifdef AS400_UTF8
- wptr = (char *)malloc(strlen(jk_shmem.filename) + 1);
- jk_ascii2ebcdic((char *)jk_shmem.filename, wptr);
- unlink(wptr);
- free(wptr);
-#else
- unlink(jk_shmem.filename);
-#endif
- free(jk_shmem.filename);
- jk_shmem.filename = NULL;
- }
- }
- jk_shmem.size = 0;
- jk_shmem.hdr = NULL;
- jk_shmem.fd = -1;
- jk_shmem.fd_lock = -1;
-}
-
-
-#endif
-
-void *jk_shm_alloc(jk_pool_t *p, size_t size)
-{
- void *rc = NULL;
-
- if (jk_shmem.hdr) {
- size = JK_SHM_ALIGN(size);
- if ((jk_shmem.hdr->h.data.size - jk_shmem.hdr->h.data.pos) >= size) {
- rc = &(jk_shmem.hdr->buf[jk_shmem.hdr->h.data.pos]);
- jk_shmem.hdr->h.data.pos += size;
- }
- }
- else if (p)
- rc = jk_pool_alloc(p, size);
-
- return rc;
-}
-
-const char *jk_shm_name()
-{
- return jk_shmem.filename;
-}
-
-
-time_t jk_shm_get_workers_time()
-{
- if (jk_shmem.hdr)
- return jk_shmem.hdr->h.data.modified;
- else
- return jk_workers_modified_time;
-}
-
-void jk_shm_set_workers_time(time_t t)
-{
- if (jk_shmem.hdr)
- jk_shmem.hdr->h.data.modified = t;
- else
- jk_workers_modified_time = t;
- jk_workers_access_time = t;
-}
-
-int jk_shm_is_modified()
-{
- time_t m = jk_shm_get_workers_time();
- if (m != jk_workers_access_time)
- return 1;
- else
- return 0;
-}
-
-void jk_shm_sync_access_time()
-{
- jk_workers_access_time = jk_shm_get_workers_time();
-}
-
-int jk_shm_lock()
-{
- int rc;
- JK_ENTER_CS(&(jk_shmem.cs), rc);
-#if defined (WIN32)
- if (rc == JK_TRUE && jk_shm_hlock != NULL) {
- DWORD rv = WaitForSingleObject(jk_shm_hlock, INFINITE);
- if (rv == WAIT_OBJECT_0 || rv == WAIT_ABANDONED)
- rc = JK_TRUE;
- else
- rc = JK_FALSE;
- }
-#else
- if (rc == JK_TRUE && jk_shmem.fd_lock != -1) {
- JK_ENTER_LOCK(jk_shmem.fd_lock, rc);
- }
-#endif
- return rc;
-}
-
-int jk_shm_unlock()
-{
- int rc;
- JK_LEAVE_CS(&(jk_shmem.cs), rc);
-#if defined (WIN32)
- if (rc == JK_TRUE && jk_shm_hlock != NULL) {
- if (!ReleaseMutex(jk_shm_hlock))
- rc = JK_FALSE;
- }
-#else
- if (rc == JK_TRUE && jk_shmem.fd_lock != -1) {
- JK_LEAVE_LOCK(jk_shmem.fd_lock, rc);
- }
-#endif
- return rc;
-}
-
-jk_shm_ajp_worker_t *jk_shm_alloc_ajp_worker(jk_pool_t *p)
-{
- jk_shm_ajp_worker_t *w = (jk_shm_ajp_worker_t *)jk_shm_alloc(p, JK_SHM_AJP_WORKER_SIZE);
- if (w) {
- memset(w, 0, JK_SHM_AJP_WORKER_SIZE);
- if (jk_shmem.hdr) {
- jk_shmem.hdr->h.data.workers++;
- w->h.id = jk_shmem.hdr->h.data.workers;
- w->h.type = JK_AJP13_WORKER_TYPE;
- }
- else
- w->h.id = -1;
- }
- return w;
-}
-
-jk_shm_lb_sub_worker_t *jk_shm_alloc_lb_sub_worker(jk_pool_t *p)
-{
- jk_shm_lb_sub_worker_t *w = (jk_shm_lb_sub_worker_t *)jk_shm_alloc(p, JK_SHM_LB_SUB_WORKER_SIZE);
- if (w) {
- memset(w, 0, JK_SHM_LB_SUB_WORKER_SIZE);
- if (jk_shmem.hdr) {
- jk_shmem.hdr->h.data.workers++;
- w->h.id = jk_shmem.hdr->h.data.workers;
- w->h.type = JK_LB_SUB_WORKER_TYPE;
- }
- else
- w->h.id = -1;
- }
- return w;
-}
-
-jk_shm_lb_worker_t *jk_shm_alloc_lb_worker(jk_pool_t *p)
-{
- jk_shm_lb_worker_t *w = (jk_shm_lb_worker_t *)jk_shm_alloc(p, JK_SHM_LB_WORKER_SIZE);
- if (w) {
- memset(w, 0, JK_SHM_LB_WORKER_SIZE);
- if (jk_shmem.hdr) {
- jk_shmem.hdr->h.data.workers++;
- w->h.id = jk_shmem.hdr->h.data.workers;
- w->h.type = JK_LB_WORKER_TYPE;
- }
- else
- w->h.id = -1;
- }
- return w;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.h
deleted file mode 100644
index f8d54a45..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Shared Memory object header file *
- * Author: Mladen Turk <mturk@jboss.com> *
- * Author: Rainer Jung <rjung@apache.org> *
- * Version: $Revision: 893253 $ *
- ***************************************************************************/
-#ifndef _JK_SHM_H
-#define _JK_SHM_H
-
-#include "jk_global.h"
-#include "jk_pool.h"
-#include "jk_util.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/**
- * @file jk_shm.h
- * @brief Jk shared memory management
- *
- *
- */
-
-#define JK_SHM_MAJOR '1'
-#define JK_SHM_MINOR '3'
-#define JK_SHM_STR_SIZ 63
-#define JK_SHM_URI_SIZ 127
-#define JK_SHM_DYNAMIC 16
-#define JK_SHM_MAGIC '!', 'J', 'K', 'S', 'H', 'M', JK_SHM_MAJOR, JK_SHM_MINOR
-#define JK_SHM_MAGIC_SIZ 8
-
-/* Really huge numbers, but 64 workers should be enough */
-#define JK_SHM_MAX_WORKERS 64
-#define JK_SHM_ALIGNMENT 64
-#define JK_SHM_ALIGN(x) JK_ALIGN((x), JK_SHM_ALIGNMENT)
-#define JK_SHM_AJP_WORKER_SIZE JK_SHM_ALIGN(sizeof(jk_shm_ajp_worker_t))
-#define JK_SHM_LB_SUB_WORKER_SIZE JK_SHM_ALIGN(sizeof(jk_shm_lb_sub_worker_t))
-#define JK_SHM_LB_WORKER_SIZE JK_SHM_ALIGN(sizeof(jk_shm_lb_worker_t))
-#define JK_SHM_AJP_SIZE(x) ((x) * JK_SHM_AJP_WORKER_SIZE)
-#define JK_SHM_LB_SUB_SIZE(x) ((x) * JK_SHM_LB_SUB_WORKER_SIZE)
-#define JK_SHM_LB_SIZE(x) ((x) * JK_SHM_LB_WORKER_SIZE)
-#define JK_SHM_DEF_SIZE JK_SHM_AJP_SIZE(JK_SHM_MAX_WORKERS) + JK_SHM_LB_SUB_SIZE(JK_SHM_MAX_WORKERS) + JK_SHM_LB_SIZE(JK_SHM_MAX_WORKERS)
-
-/** jk shm generic worker record structure */
-struct jk_shm_worker_header
-{
- int id;
- int type;
- /* worker name */
- char name[JK_SHM_STR_SIZ+1];
- /* Sequence counter starting at 0 and increasing
- * every time we change the config
- */
- volatile unsigned int sequence;
-};
-typedef struct jk_shm_worker_header jk_shm_worker_header_t;
-
-/** jk shm ajp13/ajp14 worker record structure */
-struct jk_shm_ajp_worker
-{
- jk_shm_worker_header_t h;
- char host[JK_SHM_STR_SIZ+1];
- int port;
- volatile int addr_sequence;
-
- /* Configuration data mirrored from ajp_worker */
- int cache_timeout;
- int connect_timeout;
- int ping_timeout;
- int reply_timeout;
- int prepost_timeout;
- unsigned int recovery_opts;
- int retries;
- int retry_interval;
- unsigned int max_packet_size;
- /* current error state (runtime) of the worker */
- volatile int state;
- /* Statistical data */
- /* Number of currently connected channels */
- volatile int connected;
- /* Number of currently busy channels */
- volatile int busy;
- /* Maximum number of busy channels */
- volatile int max_busy;
- volatile time_t error_time;
- /* Number of bytes read from remote */
- volatile jk_uint64_t readed;
- /* Number of bytes transferred to remote */
- volatile jk_uint64_t transferred;
- /* Number of times the worker was used */
- volatile jk_uint64_t used;
- /* Number of times the worker was used - snapshot during maintenance */
- volatile jk_uint64_t used_snapshot;
- /* Number of non 200 responses */
- volatile jk_uint32_t errors;
- /* Decayed number of reply_timeout errors */
- volatile jk_uint32_t reply_timeouts;
- /* Number of client errors */
- volatile jk_uint32_t client_errors;
- /* Last reset time */
- volatile time_t last_reset;
- volatile time_t last_maintain_time;
-};
-typedef struct jk_shm_ajp_worker jk_shm_ajp_worker_t;
-
-/** jk shm lb sub worker record structure */
-struct jk_shm_lb_sub_worker
-{
- jk_shm_worker_header_t h;
-
- /* route */
- char route[JK_SHM_STR_SIZ+1];
- /* worker domain */
- char domain[JK_SHM_STR_SIZ+1];
- /* worker redirect route */
- char redirect[JK_SHM_STR_SIZ+1];
- /* Number of currently busy channels */
- volatile int busy;
- /* worker distance */
- volatile int distance;
- /* current activation state (config) of the worker */
- volatile int activation;
- /* current error state (runtime) of the worker */
- volatile int state;
- /* Current lb factor */
- volatile int lb_factor;
- /* Current lb reciprocal factor */
- volatile jk_uint64_t lb_mult;
- /* Current lb value */
- volatile jk_uint64_t lb_value;
- /* Statistical data */
- volatile time_t error_time;
- /* Number of times the worker was elected - snapshot during maintenance */
- volatile jk_uint64_t elected_snapshot;
- /* Number of non 200 responses */
- volatile jk_uint32_t errors;
-};
-typedef struct jk_shm_lb_sub_worker jk_shm_lb_sub_worker_t;
-
-/** jk shm lb worker record structure */
-struct jk_shm_lb_worker
-{
- jk_shm_worker_header_t h;
-
- /* Number of currently busy channels */
- volatile int busy;
- /* Maximum number of busy channels */
- volatile int max_busy;
- int sticky_session;
- int sticky_session_force;
- int recover_wait_time;
- int error_escalation_time;
- int max_reply_timeouts;
- int retries;
- int retry_interval;
- int lbmethod;
- int lblock;
- unsigned int max_packet_size;
- /* Last reset time */
- volatile time_t last_reset;
- volatile time_t last_maintain_time;
- /* Session cookie */
- char session_cookie[JK_SHM_STR_SIZ+1];
- /* Session path */
- char session_path[JK_SHM_STR_SIZ+1];
-
-};
-typedef struct jk_shm_lb_worker jk_shm_lb_worker_t;
-
-const char *jk_shm_name(void);
-
-/* Calculate needed shm size */
-size_t jk_shm_calculate_size(jk_map_t *init_data, jk_logger_t *l);
-
-/* Open the shared memory creating file if needed
- */
-int jk_shm_open(const char *fname, size_t sz, jk_logger_t *l);
-
-/* Close the shared memory
- */
-void jk_shm_close(void);
-
-/* Attach the shared memory in child process.
- * File has to be opened in parent.
- */
-int jk_shm_attach(const char *fname, size_t sz, jk_logger_t *l);
-
-/* allocate shm memory
- * If there is no shm present the pool will be used instead
- */
-void *jk_shm_alloc(jk_pool_t *p, size_t size);
-
-/* allocate shm ajp worker record
- * If there is no shm present the pool will be used instead
- */
-jk_shm_ajp_worker_t *jk_shm_alloc_ajp_worker(jk_pool_t *p);
-
-/* allocate shm lb sub worker record
- * If there is no shm present the pool will be used instead
- */
-jk_shm_lb_sub_worker_t *jk_shm_alloc_lb_sub_worker(jk_pool_t *p);
-
-/* allocate shm lb worker record
- * If there is no shm present the pool will be used instead
- */
-jk_shm_lb_worker_t *jk_shm_alloc_lb_worker(jk_pool_t *p);
-
-/* Return workers.properties last modified time
- */
-time_t jk_shm_get_workers_time(void);
-
-/* Set workers.properties last modified time
- */
-void jk_shm_set_workers_time(time_t t);
-
-/* Check if the shared memory has been modified
- * by some other process.
- */
-int jk_shm_is_modified(void);
-
-/* Synchronize access and modification time.
- * This function should be called when the shared memory
- * is modified and after we update the config acording
- * to the current shared memory data.
- */
-void jk_shm_sync_access_time(void);
-
-
-/* Lock shared memory for thread safe access */
-int jk_shm_lock(void);
-
-/* Unlock shared memory for thread safe access */
-int jk_shm_unlock(void);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* _JK_SHM_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.lo
deleted file mode 100644
index 44e59ec0..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_shm.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_shm.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_shm.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.o
deleted file mode 100644
index 8f02d766..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_shm.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.c
deleted file mode 100644
index da956258..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Simple buffer object to handle buffered socket IO *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-#include "jk_global.h"
-#include "jk_sockbuf.h"
-
-static int fill_buffer(jk_sockbuf_t *sb);
-
-int jk_sb_open(jk_sockbuf_t *sb, jk_sock_t sd)
-{
- if (sb && sd >= 0) {
- sb->end = 0;
- sb->start = 0;
- sb->sd = sd;
- return JK_TRUE;
- }
-
- return JK_FALSE;
-}
-
-int jk_sb_write(jk_sockbuf_t *sb, const void *buf, unsigned sz)
-{
- if (sb && buf && sz) {
- if ((SOCKBUF_SIZE - sb->end) >= sz) {
- memcpy(sb->buf + sb->end, buf, sz);
- sb->end += sz;
- }
- else {
- if (!jk_sb_flush(sb)) {
- return JK_FALSE;
- }
- if (sz > SOCKBUF_SIZE) {
- return (send(sb->sd, (char *)buf, sz, 0) == (int)sz);
- }
-
- memcpy(sb->buf + sb->end, buf, sz);
- sb->end += sz;
- }
-
- return JK_TRUE;
- }
-
- return JK_FALSE;
-}
-
-int jk_sb_flush(jk_sockbuf_t *sb)
-{
- if (sb) {
- int save_out = sb->end;
- sb->end = sb->start = 0;
- if (save_out) {
- return send(sb->sd, sb->buf, save_out, 0) == save_out;
- }
- return JK_TRUE;
- }
-
- return JK_FALSE;
-}
-
-
-int jk_sb_read(jk_sockbuf_t *sb, char **buf, unsigned sz, unsigned *ac)
-{
- if (sb && buf && ac) {
- unsigned avail;
-
- *ac = 0;
- *buf = NULL;
-
- if (sb->end == sb->start) {
- sb->end = sb->start = 0;
- if (fill_buffer(sb) < 0) {
- return JK_FALSE;
- }
- }
-
- *buf = sb->buf + sb->start;
- avail = sb->end - sb->start;
- if (avail > sz) {
- *ac = sz;
- }
- else {
- *ac = avail;
- }
- sb->start += *ac;
-
- return JK_TRUE;
- }
-
- return JK_FALSE;
-}
-
-int jk_sb_gets(jk_sockbuf_t *sb, char **ps)
-{
- int ret;
- if (sb) {
- while (1) {
- unsigned i;
- for (i = sb->start; i < sb->end; i++) {
- if (JK_LF == sb->buf[i]) {
- if (i > sb->start && JK_CR == sb->buf[i - 1]) {
- sb->buf[i - 1] = '\0';
- }
- else {
- sb->buf[i] = '\0';
- }
- *ps = sb->buf + sb->start;
- sb->start = (i + 1);
- return JK_TRUE;
- }
- }
- if ((ret = fill_buffer(sb)) < 0) {
- return JK_FALSE;
- }
- else if (ret == 0) {
- *ps = sb->buf + sb->start;
- if ((SOCKBUF_SIZE - sb->end) > 0) {
- sb->buf[sb->end] = '\0';
- }
- else {
- sb->buf[sb->end - 1] = '\0';
- }
- return JK_TRUE;
- }
- }
- }
-
- return JK_FALSE;
-}
-
-/*
- * Read data from the socket into the associated buffer, and update the
- * start and end indices. May move the data currently in the buffer. If
- * new data is read into the buffer (or if it is already full), returns 1.
- * If EOF is received on the socket, returns 0. In case of error returns
- * -1.
- */
-static int fill_buffer(jk_sockbuf_t *sb)
-{
- int ret;
-
- /*
- * First move the current data to the beginning of the buffer
- */
- if (sb->start < sb->end) {
- if (sb->start > 0) {
- unsigned to_copy = sb->end - sb->start;
- memmove(sb->buf, sb->buf + sb->start, to_copy);
- sb->start = 0;
- sb->end = to_copy;
- }
- }
- else {
- sb->start = sb->end = 0;
- }
-
- /*
- * In the unlikely case where the buffer is already full, we won't be
- * reading anything and we'd be calling recv with a 0 count.
- */
- if ((SOCKBUF_SIZE - sb->end) > 0) {
- /*
- * Now, read more data
- */
- ret = recv(sb->sd, sb->buf + sb->end, SOCKBUF_SIZE - sb->end, 0);
-
- /* 0 is EOF/SHUTDOWN, -1 is SOCK_ERROR */
- if (ret <= 0) {
- return ret;
- }
-
- sb->end += ret;
- }
-
- return 1;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.h
deleted file mode 100644
index 4ed75141..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Socket buffer header file *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-#include "jk_global.h"
-
-#define SOCKBUF_SIZE (8*1024)
-
-struct jk_sockbuf
-{
- char buf[SOCKBUF_SIZE];
- unsigned int start;
- unsigned int end;
- jk_sock_t sd;
-};
-typedef struct jk_sockbuf jk_sockbuf_t;
-
-int jk_sb_open(jk_sockbuf_t *sb, jk_sock_t sd);
-
-int jk_sb_write(jk_sockbuf_t *sb, const void *buf, unsigned sz);
-
-int jk_sb_read(jk_sockbuf_t *sb, char **buf, unsigned sz, unsigned *ac);
-
-int jk_sb_flush(jk_sockbuf_t *sb);
-
-int jk_sb_gets(jk_sockbuf_t *sb, char **ps);
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.lo
deleted file mode 100644
index 81ac7e40..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_sockbuf.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_sockbuf.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_sockbuf.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.o
deleted file mode 100644
index 53350c5d..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_sockbuf.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.c
deleted file mode 100644
index d9c0a6ad..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.c
+++ /dev/null
@@ -1,5200 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Status worker, display and manages JK workers *
- * Author: Mladen Turk <mturk@jboss.com> *
- * Author: Rainer Jung <rjung@apache.org> *
- * Version: $Revision: 1054603 $ *
- ***************************************************************************/
-
-#include "jk_pool.h"
-#include "jk_service.h"
-#include "jk_util.h"
-#include "jk_worker.h"
-#include "jk_status.h"
-#include "jk_mt.h"
-#include "jk_shm.h"
-#include "jk_ajp_common.h"
-#include "jk_lb_worker.h"
-#include "jk_ajp13_worker.h"
-#include "jk_ajp14_worker.h"
-#include "jk_connect.h"
-#include "jk_uri_worker_map.h"
-
-#define HUGE_BUFFER_SIZE (8*1024)
-
-/**
- * Command line reference:
- * cmd=list (default) display configuration
- * cmd=show display detailed configuration
- * cmd=edit form to change configuration
- * cmd=update commit update configuration
- * cmd=reset reset lb runtime states, or lb member runtime states
- * cmd=version show only software version
- * Query arguments:
- * re=n (refresh time in seconds, n=0: disabled)
- * w=worker (cmd should be executed for worker "worker")
- * sw=sub_worker (cmd should be executed for "sub_worker" of worker "worker")
- * from=lastcmd (the last viewing command was "lastcmd")
- * opt=option (changes meaning of edit and list/show)
- */
-
-#define JK_STATUS_ARG_CMD "cmd"
-#define JK_STATUS_ARG_MIME "mime"
-#define JK_STATUS_ARG_FROM "from"
-#define JK_STATUS_ARG_REFRESH "re"
-#define JK_STATUS_ARG_WORKER "w"
-#define JK_STATUS_ARG_SUB_WORKER "sw"
-#define JK_STATUS_ARG_PREV_SUB_WORKER "psw"
-#define JK_STATUS_ARG_ATTRIBUTE "att"
-#define JK_STATUS_ARG_MULT_VALUE_BASE "val"
-#define JK_STATUS_ARG_OPTIONS "opt"
-
-#define JK_STATUS_ARG_OPTION_NO_MEMBERS 0x0001
-#define JK_STATUS_ARG_OPTION_NO_MAPS 0x0002
-#define JK_STATUS_ARG_OPTION_NO_LEGEND 0x0004
-#define JK_STATUS_ARG_OPTION_NO_LB 0x0008
-#define JK_STATUS_ARG_OPTION_NO_AJP 0x0010
-#define JK_STATUS_ARG_OPTION_READ_ONLY 0x0020
-#define JK_STATUS_ARG_OPTION_NO_LB_CONF 0x0040
-#define JK_STATUS_ARG_OPTION_NO_LB_SUMMARY 0x0080
-#define JK_STATUS_ARG_OPTION_NO_AJP_CONF 0x0100
-
-#define JK_STATUS_ARG_LB_RETRIES ("vlr")
-#define JK_STATUS_ARG_LB_RETRY_INT ("vlri")
-#define JK_STATUS_ARG_LB_RECOVER_TIME ("vlt")
-#define JK_STATUS_ARG_LB_ERROR_ESCALATION_TIME ("vlee")
-#define JK_STATUS_ARG_LB_MAX_REPLY_TIMEOUTS ("vlx")
-#define JK_STATUS_ARG_LB_STICKY ("vls")
-#define JK_STATUS_ARG_LB_STICKY_FORCE ("vlf")
-#define JK_STATUS_ARG_LB_METHOD ("vlm")
-#define JK_STATUS_ARG_LB_LOCK ("vll")
-
-#define JK_STATUS_ARG_LB_TEXT_RETRIES "Retries"
-#define JK_STATUS_ARG_LB_TEXT_RETRY_INT "Retry Interval"
-#define JK_STATUS_ARG_LB_TEXT_RECOVER_TIME "Recover Wait Time"
-#define JK_STATUS_ARG_LB_TEXT_ERROR_ESCALATION_TIME "Error Escalation Time"
-#define JK_STATUS_ARG_LB_TEXT_MAX_REPLY_TIMEOUTS "Max Reply Timeouts"
-#define JK_STATUS_ARG_LB_TEXT_STICKY "Sticky Sessions"
-#define JK_STATUS_ARG_LB_TEXT_STICKY_FORCE "Force Sticky Sessions"
-#define JK_STATUS_ARG_LB_TEXT_METHOD "LB Method"
-#define JK_STATUS_ARG_LB_TEXT_LOCK "Locking"
-
-#define JK_STATUS_ARG_LBM_ACTIVATION ("vwa")
-#define JK_STATUS_ARG_LBM_FACTOR ("vwf")
-#define JK_STATUS_ARG_LBM_ROUTE ("vwn")
-#define JK_STATUS_ARG_LBM_REDIRECT ("vwr")
-#define JK_STATUS_ARG_LBM_DOMAIN ("vwc")
-#define JK_STATUS_ARG_LBM_DISTANCE ("vwd")
-
-#define JK_STATUS_ARG_LBM_TEXT_ACTIVATION "Activation"
-#define JK_STATUS_ARG_LBM_TEXT_FACTOR "LB Factor"
-#define JK_STATUS_ARG_LBM_TEXT_ROUTE "Route"
-#define JK_STATUS_ARG_LBM_TEXT_REDIRECT "Redirect Route"
-#define JK_STATUS_ARG_LBM_TEXT_DOMAIN "Cluster Domain"
-#define JK_STATUS_ARG_LBM_TEXT_DISTANCE "Distance"
-
-#define JK_STATUS_ARG_AJP_CACHE_TO "vacpt"
-#define JK_STATUS_ARG_AJP_PING_TO "vapng"
-#define JK_STATUS_ARG_AJP_CONNECT_TO "vact"
-#define JK_STATUS_ARG_AJP_PREPOST_TO "vapt"
-#define JK_STATUS_ARG_AJP_REPLY_TO "vart"
-#define JK_STATUS_ARG_AJP_RETRIES "var"
-#define JK_STATUS_ARG_AJP_RETRY_INT "vari"
-#define JK_STATUS_ARG_AJP_REC_OPTS "varo"
-#define JK_STATUS_ARG_AJP_MAX_PK_SZ "vamps"
-#define JK_STATUS_ARG_AJP_CPING_INT "vacpi"
-#define JK_STATUS_ARG_AJP_HOST_STR "vahst"
-#define JK_STATUS_ARG_AJP_PORT "vaprt"
-
-#define JK_STATUS_ARG_AJP_TEXT_CACHE_TO "Connection Pool Timeout"
-#define JK_STATUS_ARG_AJP_TEXT_PING_TO "Ping Timeout"
-#define JK_STATUS_ARG_AJP_TEXT_CONNECT_TO "Connect Timeout"
-#define JK_STATUS_ARG_AJP_TEXT_PREPOST_TO "Prepost Timeout"
-#define JK_STATUS_ARG_AJP_TEXT_REPLY_TO "Reply Timeout"
-#define JK_STATUS_ARG_AJP_TEXT_RETRIES "Retries"
-#define JK_STATUS_ARG_AJP_TEXT_RETRY_INT "Retry Interval"
-#define JK_STATUS_ARG_AJP_TEXT_REC_OPTS "Recovery Options"
-#define JK_STATUS_ARG_AJP_TEXT_MAX_PK_SZ "Max Packet Size"
-#define JK_STATUS_ARG_AJP_TEXT_CPING_INT "Connection Ping Interval"
-#define JK_STATUS_ARG_AJP_TEXT_HOST_STR "Hostname"
-#define JK_STATUS_ARG_AJP_TEXT_PORT "Port"
-#define JK_STATUS_ARG_AJP_TEXT_ADDR_STR "Address:Port"
-
-#define JK_STATUS_CMD_UNKNOWN (0)
-#define JK_STATUS_CMD_LIST (1)
-#define JK_STATUS_CMD_SHOW (2)
-#define JK_STATUS_CMD_EDIT (3)
-#define JK_STATUS_CMD_UPDATE (4)
-#define JK_STATUS_CMD_RESET (5)
-#define JK_STATUS_CMD_VERSION (6)
-#define JK_STATUS_CMD_RECOVER (7)
-#define JK_STATUS_CMD_DUMP (8)
-#define JK_STATUS_CMD_DEF (JK_STATUS_CMD_LIST)
-#define JK_STATUS_CMD_MAX (JK_STATUS_CMD_DUMP)
-#define JK_STATUS_CMD_TEXT_UNKNOWN ("unknown")
-#define JK_STATUS_CMD_TEXT_LIST ("list")
-#define JK_STATUS_CMD_TEXT_SHOW ("show")
-#define JK_STATUS_CMD_TEXT_EDIT ("edit")
-#define JK_STATUS_CMD_TEXT_UPDATE ("update")
-#define JK_STATUS_CMD_TEXT_RESET ("reset")
-#define JK_STATUS_CMD_TEXT_VERSION ("version")
-#define JK_STATUS_CMD_TEXT_RECOVER ("recover")
-#define JK_STATUS_CMD_TEXT_DUMP ("dump")
-#define JK_STATUS_CMD_TEXT_DEF (JK_STATUS_CMD_TEXT_LIST)
-
-#define JK_STATUS_CMD_PROP_CHECK_WORKER 0x00000001
-#define JK_STATUS_CMD_PROP_READONLY 0x00000002
-#define JK_STATUS_CMD_PROP_HEAD 0x00000004
-#define JK_STATUS_CMD_PROP_REFRESH 0x00000008
-#define JK_STATUS_CMD_PROP_BACK_LINK 0x00000010
-#define JK_STATUS_CMD_PROP_BACK_LIST 0x00000020
-#define JK_STATUS_CMD_PROP_FMT 0x00000040
-#define JK_STATUS_CMD_PROP_SWITCH_RO 0x00000080
-#define JK_STATUS_CMD_PROP_DUMP_LINK 0x00000100
-#define JK_STATUS_CMD_PROP_LINK_HELP 0x00000200
-#define JK_STATUS_CMD_PROP_LEGEND 0x00000400
-#define JK_STATUS_CMD_PROP_WILDCARD 0x00000800
-
-#define JK_STATUS_MIME_UNKNOWN (0)
-#define JK_STATUS_MIME_HTML (1)
-#define JK_STATUS_MIME_XML (2)
-#define JK_STATUS_MIME_TXT (3)
-#define JK_STATUS_MIME_PROP (4)
-#define JK_STATUS_MIME_DEF (JK_STATUS_MIME_HTML)
-#define JK_STATUS_MIME_MAX (JK_STATUS_MIME_PROP)
-#define JK_STATUS_MIME_TEXT_UNKNOWN ("unknown")
-#define JK_STATUS_MIME_TEXT_HTML ("html")
-#define JK_STATUS_MIME_TEXT_XML ("xml")
-#define JK_STATUS_MIME_TEXT_TXT ("txt")
-#define JK_STATUS_MIME_TEXT_PROP ("prop")
-#define JK_STATUS_MIME_TEXT_DEF (JK_STATUS_MIME_TEXT_HTML)
-
-#define JK_STATUS_MASK_ACTIVE 0x000000FF
-#define JK_STATUS_MASK_DISABLED 0x0000FF00
-#define JK_STATUS_MASK_STOPPED 0x00FF0000
-#define JK_STATUS_MASK_OK 0x00010101
-#define JK_STATUS_MASK_IDLE 0x00020202
-#define JK_STATUS_MASK_BUSY 0x00040404
-#define JK_STATUS_MASK_RECOVER 0x00080808
-#define JK_STATUS_MASK_ERROR 0x00101010
-#define JK_STATUS_MASK_GOOD_DEF 0x0000000F
-#define JK_STATUS_MASK_BAD_DEF 0x00FF1010
-
-#define JK_STATUS_NEEDS_PUSH 0x00000001
-#define JK_STATUS_NEEDS_RESET_LB_VALUES 0x00000002
-#define JK_STATUS_NEEDS_UPDATE_MULT 0x00000004
-#define JK_STATUS_NEEDS_ADDR_PUSH 0x00000008
-
-#define JK_STATUS_WAIT_AFTER_UPDATE "3"
-#define JK_STATUS_REFRESH_DEF "10"
-#define JK_STATUS_ESC_CHARS ("<>?\"")
-#define JK_STATUS_TIME_FMT_HTML "%a, %d %b %Y %X %Z"
-#define JK_STATUS_TIME_FMT_TEXT "%Y%m%d%H%M%S"
-#define JK_STATUS_TIME_FMT_TZ "%Z"
-#define JK_STATUS_TIME_BUF_SZ (80)
-
-#define JK_STATUS_HEAD "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" \
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"" \
- " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n" \
- "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">" \
- "<head><title>JK Status Manager</title>"
-
-#define JK_STATUS_COPYRIGHT "Copyright &#169; 1999-2011, The Apache Software Foundation<br />" \
- "Licensed under the <a href=\"http://www.apache.org/licenses/LICENSE-2.0\">" \
- "Apache License, Version 2.0</a>."
-
-#define JK_STATUS_HEND "</head>\n<body>\n"
-#define JK_STATUS_BEND "</body>\n</html>\n"
-
-#define JK_STATUS_XMLH "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
-
-#define JK_STATUS_NS_DEF "jk:"
-#define JK_STATUS_XMLNS_DEF "xmlns:jk=\"http://tomcat.apache.org\""
-#define JK_STATUS_PREFIX_DEF "worker"
-
-#define JK_STATUS_FORM_START "<form method=\"%s\" action=\"%s\">\n"
-#define JK_STATUS_FORM_HIDDEN_INT "<input type=\"hidden\" name=\"%s\" value=\"%d\"/>\n"
-#define JK_STATUS_FORM_HIDDEN_STRING "<input type=\"hidden\" name=\"%s\" value=\"%s\"/>\n"
-#define JK_STATUS_URI_MAP_TABLE_HEAD "<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n"
-#define JK_STATUS_URI_MAP_TABLE_ROW "<tr><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%d</td></tr>\n"
-#define JK_STATUS_URI_MAP_TABLE_HEAD2 "<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n"
-#define JK_STATUS_URI_MAP_TABLE_ROW2 "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%d</td></tr>\n"
-#define JK_STATUS_SHOW_AJP_CONF_HEAD "<tr>" \
- "<th>Type</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_HOST_STR "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_ADDR_STR "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_CACHE_TO "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_CONNECT_TO "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_PREPOST_TO "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_REPLY_TO "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_RETRIES "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_REC_OPTS "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_MAX_PK_SZ "</th>" \
- "<th>\n"
-#define JK_STATUS_SHOW_AJP_CONF_ROW "<tr>" \
- "<td>%s</td>" \
- "<td>%s</td>" \
- "<td>%s</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td>%u</td>" \
- "<td>%u</td>" \
- "<td></td>" \
- "</tr>\n"
-#define JK_STATUS_SHOW_AJP_HEAD "<tr>" \
- "<th>State</th>" \
- "<th>Acc</th>" \
- "<th>Err</th><th>CE</th><th>RE</th>" \
- "<th>Wr</th><th>Rd</th><th>Busy</th><th>Max</th><th>Con</th><th>LR</th><th>LE</th>" \
- "</tr>\n"
-#define JK_STATUS_SHOW_AJP_ROW "<tr>" \
- "<td>%s</td>" \
- "<td>%" JK_UINT64_T_FMT " (%d/sec)</td>" \
- "<td>%" JK_UINT32_T_FMT "</td>" \
- "<td>%" JK_UINT32_T_FMT "</td>" \
- "<td>%" JK_UINT32_T_FMT "</td>" \
- "<td>%s (%s/sec)</td>" \
- "<td>%s (%s/sec)</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td>%s</td>" \
- "</tr>\n"
-#define JK_STATUS_SHOW_LB_HEAD "<tr>" \
- "<th>Type</th>" \
- "<th>" JK_STATUS_ARG_LB_TEXT_STICKY "</th>" \
- "<th>" JK_STATUS_ARG_LB_TEXT_STICKY_FORCE "</th>" \
- "<th>" JK_STATUS_ARG_LB_TEXT_RETRIES "</th>" \
- "<th>" JK_STATUS_ARG_LB_TEXT_METHOD "</th>" \
- "<th>" JK_STATUS_ARG_LB_TEXT_LOCK "</th>" \
- "<th>" JK_STATUS_ARG_LB_TEXT_RECOVER_TIME "</th>" \
- "<th>" JK_STATUS_ARG_LB_TEXT_ERROR_ESCALATION_TIME "</th>" \
- "<th>" JK_STATUS_ARG_LB_TEXT_MAX_REPLY_TIMEOUTS "</th>" \
- "<th>\n"
-#define JK_STATUS_SHOW_LB_ROW "<tr>" \
- "<td>%s</td>" \
- "<td>%s</td>" \
- "<td>%s</td>" \
- "<td>%d</td>" \
- "<td>%s</td>" \
- "<td>%s</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td></td>" \
- "</tr>\n"
-#define JK_STATUS_SHOW_MEMBER_HEAD "<tr>" \
- "<th>&nbsp;</th><th>Name</th>" \
- "<th>Act</th><th>State</th>" \
- "<th>D</th><th>F</th><th>M</th>" \
- "<th>V</th><th>Acc</th>" \
- "<th>Err</th><th>CE</th><th>RE</th>" \
- "<th>Wr</th><th>Rd</th><th>Busy</th><th>Max</th><th>Con</th>" \
- "<th>" JK_STATUS_ARG_LBM_TEXT_ROUTE "</th>" \
- "<th>RR</th><th>Cd</th><th>Rs</th><th>LR</th><th>LE</th>" \
- "</tr>\n"
-#define JK_STATUS_SHOW_MEMBER_ROW "<td>%s</td>" \
- "<td>%s</td>" \
- "<td>%s</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td>%" JK_UINT64_T_FMT "</td>" \
- "<td>%" JK_UINT64_T_FMT "</td>" \
- "<td>%" JK_UINT64_T_FMT " (%d/sec)</td>" \
- "<td>%" JK_UINT32_T_FMT "</td>" \
- "<td>%" JK_UINT32_T_FMT "</td>" \
- "<td>%" JK_UINT32_T_FMT "</td>" \
- "<td>%s (%s/sec)</td>" \
- "<td>%s (%s/sec)</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td>%s</td>" \
- "<td>%s</td>" \
- "<td>%s</td>" \
- "<td>%d/%d</td>" \
- "<td>%d</td>" \
- "<td>%s</td>" \
- "</tr>\n"
-#define JK_STATUS_SHOW_MEMBER_CONF_HEAD "<tr>" \
- "<th>Name</th><th>Type</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_HOST_STR "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_ADDR_STR "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_CACHE_TO "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_CONNECT_TO "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_PREPOST_TO "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_REPLY_TO "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_RETRIES "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_REC_OPTS "</th>" \
- "<th>" JK_STATUS_ARG_AJP_TEXT_MAX_PK_SZ "</th>" \
- "<th>\n"
-#define JK_STATUS_SHOW_MEMBER_CONF_ROW "<tr>" \
- "<td>%s</td>" \
- "<td>%s</td>" \
- "<td>%s</td>" \
- "<td>%s</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td>%d</td>" \
- "<td>%u</td>" \
- "<td>%u</td>" \
- "<td></td>" \
- "</tr>\n"
-
-typedef struct status_worker status_worker_t;
-
-struct status_endpoint
-{
- status_worker_t *worker;
-
- char *query_string;
- jk_map_t *req_params;
- char *msg;
-
- jk_endpoint_t endpoint;
-
-};
-
-typedef struct status_endpoint status_endpoint_t;
-
-struct status_worker
-{
- jk_pool_t p;
- jk_pool_atom_t buf[TINY_POOL_SIZE];
- const char *name;
- const char *css;
- const char *ns;
- const char *xmlns;
- const char *doctype;
- const char *prefix;
- int read_only;
- char **user_names;
- unsigned int num_of_users;
- int user_case_insensitive;
- jk_uint32_t good_mask;
- jk_uint32_t bad_mask;
- jk_worker_t worker;
- jk_worker_env_t *we;
-};
-
-static const char *worker_type[] = {
- "unknown",
- "ajp12",
- "ajp13",
- "ajp14",
- "jni",
- "lb",
- "status",
- NULL
-};
-
-static const char *headers_names[] = {
- "Content-Type",
- "Cache-Control",
- "Pragma",
- NULL
-};
-
-static const char *cmd_type[] = {
- JK_STATUS_CMD_TEXT_UNKNOWN,
- JK_STATUS_CMD_TEXT_LIST,
- JK_STATUS_CMD_TEXT_SHOW,
- JK_STATUS_CMD_TEXT_EDIT,
- JK_STATUS_CMD_TEXT_UPDATE,
- JK_STATUS_CMD_TEXT_RESET,
- JK_STATUS_CMD_TEXT_VERSION,
- JK_STATUS_CMD_TEXT_RECOVER,
- JK_STATUS_CMD_TEXT_DUMP,
- NULL
-};
-
-static const char *mime_type[] = {
- JK_STATUS_MIME_TEXT_UNKNOWN,
- JK_STATUS_MIME_TEXT_HTML,
- JK_STATUS_MIME_TEXT_XML,
- JK_STATUS_MIME_TEXT_TXT,
- JK_STATUS_MIME_TEXT_PROP,
- NULL
-};
-
-#define HEADERS_NO_CACHE "no-cache", "no-cache", NULL
-
-static const char *headers_vhtml[] = {
- "text/html",
- HEADERS_NO_CACHE
-};
-
-static const char *headers_vxml[] = {
- "text/xml",
- HEADERS_NO_CACHE
-};
-
-static const char *headers_vtxt[] = {
- "text/plain",
- HEADERS_NO_CACHE
-};
-
-static void jk_puts(jk_ws_service_t *s, const char *str)
-{
- if (str)
- s->write(s, str, (unsigned int)strlen(str));
- else
- s->write(s, "(null)", 6);
-}
-
-static void jk_putv(jk_ws_service_t *s, ...)
-{
- va_list va;
- const char *str;
-
- va_start(va, s);
- while (1) {
- str = va_arg(va, const char *);
- if (str == NULL)
- break;
- s->write(s, str, (unsigned int)strlen(str));
- }
- va_end(va);
-}
-
-static int jk_printf(jk_ws_service_t *s, const char *fmt, ...)
-{
- int rc = 0;
- va_list args;
-#ifdef NETWARE
-/* On NetWare, this can get called on a thread that has a limited stack so */
-/* we will allocate and free the temporary buffer in this function */
- char *buf;
-#else
- char buf[HUGE_BUFFER_SIZE];
-#endif
-
- if (!s || !fmt) {
- return -1;
- }
- va_start(args, fmt);
-
-#ifdef NETWARE
- buf = (char *)malloc(HUGE_BUFFER_SIZE);
- if (NULL == buf)
- return -1;
-#endif
- rc = vsnprintf(buf, HUGE_BUFFER_SIZE, fmt, args);
- va_end(args);
- if (rc > 0)
- s->write(s, buf, rc);
-#ifdef NETWARE
- free(buf);
-#endif
- return rc;
-}
-
-static void jk_print_xml_start_elt(jk_ws_service_t *s, status_worker_t *w,
- int indentation, int close_tag,
- const char *name)
-{
- if (close_tag) {
- jk_printf(s, "%*s<%s%s>\n", indentation, "", w->ns, name);
- }
- else {
- jk_printf(s, "%*s<%s%s\n", indentation, "", w->ns, name);
- }
-}
-
-static void jk_print_xml_close_elt(jk_ws_service_t *s, status_worker_t *w,
- int indentation,
- const char *name)
-{
- jk_printf(s, "%*s</%s%s>\n", indentation, "", w->ns, name);
-}
-
-static void jk_print_xml_stop_elt(jk_ws_service_t *s,
- int indentation, int close_tag)
-{
- if (close_tag) {
- jk_printf(s, "%*s/>\n", indentation, "");
- }
- else {
- jk_printf(s, "%*s>\n", indentation, "");
- }
-}
-
-static void jk_print_xml_att_string(jk_ws_service_t *s,
- int indentation,
- const char *key, const char *value)
-{
- jk_printf(s, "%*s%s=\"%s\"\n", indentation, "", key, value ? value : "");
-}
-
-static void jk_print_xml_att_int(jk_ws_service_t *s,
- int indentation,
- const char *key, int value)
-{
- jk_printf(s, "%*s%s=\"%d\"\n", indentation, "", key, value);
-}
-
-static void jk_print_xml_att_uint(jk_ws_service_t *s,
- int indentation,
- const char *key, unsigned int value)
-{
- jk_printf(s, "%*s%s=\"%u\"\n", indentation, "", key, value);
-}
-
-static void jk_print_xml_att_long(jk_ws_service_t *s,
- int indentation,
- const char *key, long value)
-{
- jk_printf(s, "%*s%s=\"%ld\"\n", indentation, "", key, value);
-}
-
-static void jk_print_xml_att_uint32(jk_ws_service_t *s,
- int indentation,
- const char *key, jk_uint32_t value)
-{
- jk_printf(s, "%*s%s=\"%" JK_UINT32_T_FMT "\"\n", indentation, "", key, value);
-}
-
-static void jk_print_xml_att_uint64(jk_ws_service_t *s,
- int indentation,
- const char *key, jk_uint64_t value)
-{
- jk_printf(s, "%*s%s=\"%" JK_UINT64_T_FMT "\"\n", indentation, "", key, value);
-}
-
-static void jk_print_prop_att_string(jk_ws_service_t *s, status_worker_t *w,
- const char *name,
- const char *key, const char *value)
-{
- if (name) {
- jk_printf(s, "%s.%s.%s=%s\n", w->prefix, name, key, value ? value : "");
- }
- else {
- jk_printf(s, "%s.%s=%s\n", w->prefix, key, value ? value : "");
- }
-}
-
-static void jk_print_prop_att_int(jk_ws_service_t *s, status_worker_t *w,
- const char *name,
- const char *key, int value)
-{
- if (name) {
- jk_printf(s, "%s.%s.%s=%d\n", w->prefix, name, key, value);
- }
- else {
- jk_printf(s, "%s.%s=%d\n", w->prefix, key, value);
- }
-}
-
-static void jk_print_prop_att_uint(jk_ws_service_t *s, status_worker_t *w,
- const char *name,
- const char *key, unsigned int value)
-{
- if (name) {
- jk_printf(s, "%s.%s.%s=%u\n", w->prefix, name, key, value);
- }
- else {
- jk_printf(s, "%s.%s=%u\n", w->prefix, key, value);
- }
-}
-
-static void jk_print_prop_att_long(jk_ws_service_t *s, status_worker_t *w,
- const char *name,
- const char *key, long value)
-{
- if (name) {
- jk_printf(s, "%s.%s.%s=%ld\n", w->prefix, name, key, value);
- }
- else {
- jk_printf(s, "%s.%s=%ld\n", w->prefix, key, value);
- }
-}
-
-static void jk_print_prop_att_uint32(jk_ws_service_t *s, status_worker_t *w,
- const char *name,
- const char *key, jk_uint32_t value)
-{
- if (name) {
- jk_printf(s, "%s.%s.%s=%" JK_UINT32_T_FMT "\n", w->prefix, name, key, value);
- }
- else {
- jk_printf(s, "%s.%s=%" JK_UINT32_T_FMT "\n", w->prefix, key, value);
- }
-}
-
-static void jk_print_prop_att_uint64(jk_ws_service_t *s, status_worker_t *w,
- const char *name,
- const char *key, jk_uint64_t value)
-{
- if (name) {
- jk_printf(s, "%s.%s.%s=%" JK_UINT64_T_FMT "\n", w->prefix, name, key, value);
- }
- else {
- jk_printf(s, "%s.%s=%" JK_UINT64_T_FMT "\n", w->prefix, key, value);
- }
-}
-
-static void jk_print_prop_item_int(jk_ws_service_t *s, status_worker_t *w,
- const char *name, const char *list, int num,
- const char *key, int value)
-{
- if (name) {
- jk_printf(s, "%s.%s.%s.%d.%s=%d\n", w->prefix, name, list, num, key, value);
- }
- else {
- jk_printf(s, "%s.%s.%d.%s=%d\n", w->prefix, list, num, key, value);
- }
-}
-
-static void jk_print_prop_item_string(jk_ws_service_t *s, status_worker_t *w,
- const char *name, const char *list, int num,
- const char *key, const char *value)
-{
- if (name) {
- jk_printf(s, "%s.%s.%s.%d.%s=%s\n", w->prefix, name, list, num, key, value ? value : "");
- }
- else {
- jk_printf(s, "%s.%s.%d.%s=%s\n", w->prefix, list, num, key, value ? value : "");
- }
-}
-
-/* Actually APR's apr_strfsize */
-static char *status_strfsize(jk_uint64_t size, char *buf)
-{
- const char ord[] = "KMGTPE";
- const char *o = ord;
- unsigned int remain, siz;
-
- if (size < 973) {
- if (sprintf(buf, "%d ", (int) size) < 0)
- return strcpy(buf, "****");
- return buf;
- }
- do {
- remain = (unsigned int)(size & 0x03FF);
- size >>= 10;
- if (size >= 973) {
- ++o;
- continue;
- }
- siz = (unsigned int)(size & 0xFFFF);
- if (siz < 9 || (siz == 9 && remain < 973)) {
- if ((remain = ((remain * 5) + 256) / 512) >= 10)
- ++siz, remain = 0;
- if (sprintf(buf, "%d.%d%c", siz, remain, *o) < 0)
- return strcpy(buf, "****");
- return buf;
- }
- if (remain >= 512)
- ++siz;
- if (sprintf(buf, "%d%c", siz, *o) < 0)
- return strcpy(buf, "****");
- return buf;
- } while (1);
-}
-
-static int status_strftime(time_t clock, int mime, char *buf_time, char *buf_tz,
- jk_logger_t *l)
-{
- size_t rc_time;
-#ifdef _MT_CODE_PTHREAD
- struct tm res;
- struct tm *tms = localtime_r(&clock, &res);
-#else
- struct tm *tms = localtime(&clock);
-#endif
-
- JK_TRACE_ENTER(l);
-
- if (mime == JK_STATUS_MIME_HTML)
- rc_time = strftime(buf_time, JK_STATUS_TIME_BUF_SZ, JK_STATUS_TIME_FMT_HTML, tms);
- else {
- rc_time = strftime(buf_time, JK_STATUS_TIME_BUF_SZ, JK_STATUS_TIME_FMT_TEXT, tms);
- }
- strftime(buf_tz, JK_STATUS_TIME_BUF_SZ, JK_STATUS_TIME_FMT_TZ, tms);
-
- JK_TRACE_EXIT(l);
- return (int)rc_time;
-
-}
-
-static int status_rate(lb_sub_worker_t *wr, status_worker_t *w,
- jk_logger_t *l)
-{
- jk_uint32_t mask = 0;
- int activation = wr->activation;
- int state = wr->s->state;
- jk_uint32_t good = w->good_mask;
- jk_uint32_t bad = w->bad_mask;
- int rv = 0;
-
- switch (activation)
- {
- case JK_LB_ACTIVATION_ACTIVE:
- mask = JK_STATUS_MASK_ACTIVE;
- break;
- case JK_LB_ACTIVATION_DISABLED:
- mask = JK_STATUS_MASK_DISABLED;
- break;
- case JK_LB_ACTIVATION_STOPPED:
- mask = JK_STATUS_MASK_STOPPED;
- break;
- default:
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' unknown activation type '%d'",
- w->name, activation);
- }
- switch (state)
- {
- case JK_LB_STATE_IDLE:
- mask &= JK_STATUS_MASK_IDLE;
- break;
- case JK_LB_STATE_OK:
- mask &= JK_STATUS_MASK_OK;
- break;
- case JK_LB_STATE_RECOVER:
- mask &= JK_STATUS_MASK_RECOVER;
- break;
- case JK_LB_STATE_FORCE:
- mask &= JK_STATUS_MASK_RECOVER;
- break;
- case JK_LB_STATE_BUSY:
- mask &= JK_STATUS_MASK_BUSY;
- break;
- case JK_LB_STATE_ERROR:
- mask &= JK_STATUS_MASK_ERROR;
- break;
- case JK_LB_STATE_PROBE:
- mask &= JK_STATUS_MASK_RECOVER;
- break;
- default:
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' unknown state type '%d'",
- w->name, state);
- }
- if (mask&bad)
- rv = -1;
- else if (mask&good)
- rv = 1;
- else
- rv = 0;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' rating of activation '%s' and state '%s' for good '%08" JK_UINT32_T_HEX_FMT
- "' and bad '%08" JK_UINT32_T_HEX_FMT "' is %d",
- w->name, jk_lb_get_activation(wr, l), jk_lb_get_state(wr, l),
- good, bad, rv);
- return rv;
-}
-
-static jk_uint32_t status_get_single_rating(const char rating, jk_logger_t *l)
-{
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "rating retrieval for '%c'",
- rating);
- switch (rating)
- {
- case 'A':
- case 'a':
- return JK_STATUS_MASK_ACTIVE;
- case 'D':
- case 'd':
- return JK_STATUS_MASK_DISABLED;
- case 'S':
- case 's':
- return JK_STATUS_MASK_STOPPED;
- case 'O':
- case 'o':
- return JK_STATUS_MASK_OK;
- case 'I':
- case 'i':
- case 'N':
- case 'n':
- return JK_STATUS_MASK_IDLE;
- case 'B':
- case 'b':
- return JK_STATUS_MASK_BUSY;
- case 'R':
- case 'r':
- return JK_STATUS_MASK_RECOVER;
- case 'E':
- case 'e':
- return JK_STATUS_MASK_ERROR;
- default:
- jk_log(l, JK_LOG_WARNING,
- "Unknown rating type '%c'",
- rating);
- return 0;
- }
-}
-
-static jk_uint32_t status_get_rating(const char *rating,
- jk_logger_t *l)
-{
- int off = 0;
- jk_uint32_t mask = 0;
-
- while (rating[off] == ' ' || rating[off] == '\t' || rating[off] == '.') {
- off++;
- }
- mask = status_get_single_rating(rating[off], l);
- while (rating[off] != '\0' && rating[off] != '.') {
- off++;
- }
- if (rating[off] == '.') {
- off++;
- }
- if (rating[off] != '\0') {
- mask &= status_get_single_rating(rating[off], l);
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "rating for '%s' is '%08" JK_UINT32_T_HEX_FMT "'",
- rating, mask);
- return mask;
-}
-
-static const char *status_worker_type(int t)
-{
- if (t < 0 || t > 6)
- t = 0;
- return worker_type[t];
-}
-
-
-static int status_get_string(status_endpoint_t *p,
- const char *param,
- const char *def,
- const char **result,
- jk_logger_t *l)
-{
- int rv;
-
- *result = jk_map_get_string(p->req_params,
- param, NULL);
- if (*result) {
- rv = JK_TRUE;
- }
- else {
- *result = def;
- rv = JK_FALSE;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "retrieved string arg '%s' as '%s'%s",
- param, *result ? *result : "(null)",
- rv == JK_FALSE ? " (default)" : "");
- return rv;
-}
-
-static int status_get_int(status_endpoint_t *p,
- const char *param,
- int def,
- jk_logger_t *l)
-{
- const char *arg;
- int rv = def;
-
- if (status_get_string(p, param, NULL, &arg, l) == JK_TRUE) {
- rv = atoi(arg);
- }
- return rv;
-}
-
-static int status_get_bool(status_endpoint_t *p,
- const char *param,
- int def,
- jk_logger_t *l)
-{
- const char *arg;
-
- if (status_get_string(p, param, NULL, &arg, l) == JK_TRUE) {
- return jk_get_bool_code(arg, def);
- }
- return def;
-}
-
-static const char *status_cmd_text(int cmd)
-{
- return cmd_type[cmd];
-}
-
-static int status_cmd_int(const char *cmd)
-{
- if (!cmd)
- return JK_STATUS_CMD_DEF;
- if (!strcmp(cmd, JK_STATUS_CMD_TEXT_LIST))
- return JK_STATUS_CMD_LIST;
- else if (!strcmp(cmd, JK_STATUS_CMD_TEXT_SHOW))
- return JK_STATUS_CMD_SHOW;
- else if (!strcmp(cmd, JK_STATUS_CMD_TEXT_EDIT))
- return JK_STATUS_CMD_EDIT;
- else if (!strcmp(cmd, JK_STATUS_CMD_TEXT_UPDATE))
- return JK_STATUS_CMD_UPDATE;
- else if (!strcmp(cmd, JK_STATUS_CMD_TEXT_RESET))
- return JK_STATUS_CMD_RESET;
- else if (!strcmp(cmd, JK_STATUS_CMD_TEXT_VERSION))
- return JK_STATUS_CMD_VERSION;
- else if (!strcmp(cmd, JK_STATUS_CMD_TEXT_RECOVER))
- return JK_STATUS_CMD_RECOVER;
- else if (!strcmp(cmd, JK_STATUS_CMD_TEXT_DUMP))
- return JK_STATUS_CMD_DUMP;
- return JK_STATUS_CMD_UNKNOWN;
-}
-
-static const char *status_mime_text(int mime)
-{
- return mime_type[mime];
-}
-
-static int status_mime_int(const char *mime)
-{
- if (!mime)
- return JK_STATUS_MIME_DEF;
- if (!strcmp(mime, JK_STATUS_MIME_TEXT_HTML))
- return JK_STATUS_MIME_HTML;
- else if (!strcmp(mime, JK_STATUS_MIME_TEXT_XML))
- return JK_STATUS_MIME_XML;
- else if (!strcmp(mime, JK_STATUS_MIME_TEXT_TXT))
- return JK_STATUS_MIME_TXT;
- else if (!strcmp(mime, JK_STATUS_MIME_TEXT_PROP))
- return JK_STATUS_MIME_PROP;
- return JK_STATUS_MIME_UNKNOWN;
-}
-
-static jk_uint32_t status_cmd_props(int cmd)
-{
- jk_uint32_t props = 0;
-
- if (cmd == JK_STATUS_CMD_LIST ||
- cmd == JK_STATUS_CMD_SHOW)
- props |= JK_STATUS_CMD_PROP_REFRESH |
- JK_STATUS_CMD_PROP_SWITCH_RO |
- JK_STATUS_CMD_PROP_LINK_HELP |
- JK_STATUS_CMD_PROP_LEGEND;
- if (cmd == JK_STATUS_CMD_LIST ||
- cmd == JK_STATUS_CMD_SHOW ||
- cmd == JK_STATUS_CMD_VERSION)
- props |= JK_STATUS_CMD_PROP_DUMP_LINK;
- if (cmd == JK_STATUS_CMD_LIST ||
- cmd == JK_STATUS_CMD_SHOW ||
- cmd == JK_STATUS_CMD_VERSION ||
- cmd == JK_STATUS_CMD_DUMP)
- props |= JK_STATUS_CMD_PROP_HEAD |
- JK_STATUS_CMD_PROP_FMT;
- if (cmd == JK_STATUS_CMD_SHOW ||
- cmd == JK_STATUS_CMD_VERSION ||
- cmd == JK_STATUS_CMD_DUMP)
- props |= JK_STATUS_CMD_PROP_BACK_LIST;
- if (cmd == JK_STATUS_CMD_SHOW ||
- cmd == JK_STATUS_CMD_EDIT ||
- cmd == JK_STATUS_CMD_VERSION ||
- cmd == JK_STATUS_CMD_DUMP)
- props |= JK_STATUS_CMD_PROP_BACK_LINK;
- if (cmd == JK_STATUS_CMD_UPDATE)
- props |= JK_STATUS_CMD_PROP_WILDCARD;
- if (cmd != JK_STATUS_CMD_EDIT &&
- cmd != JK_STATUS_CMD_UPDATE &&
- cmd != JK_STATUS_CMD_RESET &&
- cmd != JK_STATUS_CMD_RECOVER)
- props |= JK_STATUS_CMD_PROP_READONLY;
- if (cmd != JK_STATUS_CMD_LIST &&
- cmd != JK_STATUS_CMD_VERSION &&
- cmd != JK_STATUS_CMD_DUMP)
- props |= JK_STATUS_CMD_PROP_CHECK_WORKER;
-
- return props;
-}
-
-static void status_start_form(jk_ws_service_t *s,
- status_endpoint_t *p,
- const char *method,
- int cmd,
- const char *overwrite,
- jk_logger_t *l)
-{
-
- int i;
- int sz;
- jk_map_t *m = p->req_params;
-
- if (method)
- jk_printf(s, JK_STATUS_FORM_START, method, s->req_uri);
- else
- return;
- if (cmd != JK_STATUS_CMD_UNKNOWN) {
- jk_printf(s, JK_STATUS_FORM_HIDDEN_STRING,
- JK_STATUS_ARG_CMD, status_cmd_text(cmd));
- }
-
- sz = jk_map_size(m);
- for (i = 0; i < sz; i++) {
- const char *k = jk_map_name_at(m, i);
- const char *v = jk_map_value_at(m, i);
- if ((strcmp(k, JK_STATUS_ARG_CMD) ||
- cmd == JK_STATUS_CMD_UNKNOWN) &&
- (!overwrite ||
- strcmp(k, overwrite))) {
- jk_printf(s, JK_STATUS_FORM_HIDDEN_STRING, k, v);
- }
- }
-}
-
-static void status_write_uri(jk_ws_service_t *s,
- status_endpoint_t *p,
- const char *text,
- int cmd, int mime,
- const char *worker, const char *sub_worker,
- unsigned int add_options, unsigned int rm_options,
- const char *attribute,
- jk_logger_t *l)
-{
- int i;
- int sz;
- int started = 0;
- int from;
- int restore_sub_worker = JK_FALSE;
- int save_sub_worker = JK_FALSE;
- int prev;
- unsigned int opt = 0;
- const char *arg;
- jk_map_t *m = p->req_params;
-
- if (text)
- jk_puts(s, "<a href=\"");
- jk_puts(s, s->req_uri);
- status_get_string(p, JK_STATUS_ARG_FROM, NULL, &arg, l);
- from = status_cmd_int(arg);
- status_get_string(p, JK_STATUS_ARG_CMD, NULL, &arg, l);
- prev = status_cmd_int(arg);
- if (cmd == JK_STATUS_CMD_SHOW && prev == JK_STATUS_CMD_EDIT) {
- restore_sub_worker = JK_TRUE;
- }
- if (cmd == JK_STATUS_CMD_UNKNOWN) {
- if (prev == JK_STATUS_CMD_UPDATE ||
- prev == JK_STATUS_CMD_RESET ||
- prev == JK_STATUS_CMD_RECOVER) {
- cmd = from;
- restore_sub_worker = JK_TRUE;
- }
- }
- if (cmd != JK_STATUS_CMD_UNKNOWN) {
- jk_printf(s, "%s%s=%s", started ? "&amp;" : "?",
- JK_STATUS_ARG_CMD, status_cmd_text(cmd));
- if (cmd == JK_STATUS_CMD_EDIT ||
- cmd == JK_STATUS_CMD_RESET ||
- cmd == JK_STATUS_CMD_RECOVER) {
- jk_printf(s, "%s%s=%s", "&amp;",
- JK_STATUS_ARG_FROM, status_cmd_text(prev));
- save_sub_worker = JK_TRUE;
- }
- started=1;
- }
- if (mime != JK_STATUS_MIME_UNKNOWN) {
- jk_printf(s, "%s%s=%s", started ? "&amp;" : "?",
- JK_STATUS_ARG_MIME, status_mime_text(mime));
- started=1;
- }
- if (worker && worker[0]) {
- jk_printf(s, "%s%s=%s", started ? "&amp;" : "?",
- JK_STATUS_ARG_WORKER, worker);
- started=1;
- }
- if (sub_worker && sub_worker[0] && cmd != JK_STATUS_CMD_LIST) {
- jk_printf(s, "%s%s=%s", started ? "&amp;" : "?",
- JK_STATUS_ARG_SUB_WORKER, sub_worker);
- started=1;
- }
- if (attribute && attribute[0]) {
- jk_printf(s, "%s%s=%s", started ? "&amp;" : "?",
- JK_STATUS_ARG_ATTRIBUTE, attribute);
- started=1;
- }
-
- sz = jk_map_size(m);
- for (i = 0; i < sz; i++) {
- const char *k = jk_map_name_at(m, i);
- const char *v = jk_map_value_at(m, i);
- if (!strcmp(k, JK_STATUS_ARG_CMD) && cmd != JK_STATUS_CMD_UNKNOWN) {
- continue;
- }
- if (!strcmp(k, JK_STATUS_ARG_MIME) && mime != JK_STATUS_MIME_UNKNOWN) {
- continue;
- }
- if (!strcmp(k, JK_STATUS_ARG_FROM)) {
- continue;
- }
- if (!strcmp(k, JK_STATUS_ARG_WORKER) && worker) {
- continue;
- }
- if (!strcmp(k, JK_STATUS_ARG_SUB_WORKER)) {
- if (save_sub_worker == JK_TRUE) {
- jk_printf(s, "%s%s=%s", started ? "&amp;" : "?",
- JK_STATUS_ARG_PREV_SUB_WORKER, v);
- started=1;
- continue;
- }
- else if (sub_worker || cmd == JK_STATUS_CMD_LIST) {
- continue;
- }
- else if (restore_sub_worker == JK_TRUE) {
- continue;
- }
- }
- if (!strcmp(k, JK_STATUS_ARG_PREV_SUB_WORKER) && restore_sub_worker == JK_TRUE && cmd != JK_STATUS_CMD_LIST) {
- jk_printf(s, "%s%s=%s", started ? "&amp;" : "?",
- JK_STATUS_ARG_SUB_WORKER, v);
- started=1;
- continue;
- }
- if (!strcmp(k, JK_STATUS_ARG_ATTRIBUTE) && attribute) {
- continue;
- }
- if (!strcmp(k, JK_STATUS_ARG_ATTRIBUTE) && cmd != JK_STATUS_CMD_UPDATE && cmd != JK_STATUS_CMD_EDIT) {
- continue;
- }
- if (!strncmp(k, JK_STATUS_ARG_MULT_VALUE_BASE, 3) && cmd != JK_STATUS_CMD_UPDATE) {
- continue;
- }
- if (k[0] == 'v' && cmd != JK_STATUS_CMD_UPDATE) {
- continue;
- }
- if (!strcmp(k, JK_STATUS_ARG_OPTIONS)) {
- opt = atoi(v);
- continue;
- }
- jk_printf(s, "%s%s=%s", started ? "&amp;" : "?", k, v);
- started=1;
- }
- if (opt | add_options | rm_options)
- jk_printf(s, "%s%s=%u", started ? "&amp;" : "?",
- JK_STATUS_ARG_OPTIONS, (opt | add_options) & ~rm_options);
- if (text)
- jk_putv(s, "\">", text, "</a>", NULL);
-}
-
-static int status_parse_uri(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_logger_t *l)
-{
- jk_map_t *m;
- status_worker_t *w = p->worker;
-#ifdef _MT_CODE_PTHREAD
- char *lasts;
-#endif
- char *param;
- char *query;
-
- JK_TRACE_ENTER(l);
-
- if (!s->query_string) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' query string is empty",
- w->name);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
-
- p->query_string = jk_pool_strdup(s->pool, s->query_string);
- if (!p->query_string) {
- jk_log(l, JK_LOG_ERROR,
- "Status worker '%s' could not copy query string",
- w->name);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- /* XXX We simply mask special chars n the query string with '@' to prevent cross site scripting */
- query = p->query_string;
- while ((query = strpbrk(query, JK_STATUS_ESC_CHARS)))
- query[0] = '@';
-
- if (!jk_map_alloc(&(p->req_params))) {
- jk_log(l, JK_LOG_ERROR,
- "Status worker '%s' could not alloc map for request parameters",
- w->name);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- m = p->req_params;
-
- query = jk_pool_strdup(s->pool, p->query_string);
- if (!query) {
- jk_log(l, JK_LOG_ERROR,
- "Status worker '%s' could not copy query string",
- w->name);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
-#ifdef _MT_CODE_PTHREAD
- for (param = strtok_r(query, "&", &lasts);
- param; param = strtok_r(NULL, "&", &lasts)) {
-#else
- for (param = strtok(query, "&"); param; param = strtok(NULL, "&")) {
-#endif
- char *key = jk_pool_strdup(s->pool, param);
- char *value;
- if (!key) {
- jk_log(l, JK_LOG_ERROR,
- "Status worker '%s' could not copy string",
- w->name);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- value = strchr(key, '=');
- if (value) {
- *value = '\0';
- value++;
- /* XXX Depending on the params values, we might need to trim and decode */
- if (strlen(key)) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' adding request param '%s' with value '%s'",
- w->name, key, value);
- jk_map_put(m, key, value, NULL);
- }
- }
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static void write_html_refresh_response(jk_ws_service_t *s,
- status_endpoint_t *p,
- const char *err,
- jk_logger_t *l)
-{
- if (!err) {
- jk_puts(s, "\n<meta http-equiv=\"Refresh\" content=\""
- JK_STATUS_WAIT_AFTER_UPDATE ";url=");
- status_write_uri(s, p, NULL, JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, 0, NULL, l);
- jk_puts(s, "\">");
- jk_putv(s, "<p><b>Result: OK - You will be redirected in "
- JK_STATUS_WAIT_AFTER_UPDATE " seconds.</b><p/>", NULL);
- }
-}
-
-static int fetch_worker_and_sub_worker(status_endpoint_t *p,
- const char *operation,
- const char **worker,
- const char **sub_worker,
- jk_logger_t *l)
-{
- status_worker_t *w = p->worker;
-
- JK_TRACE_ENTER(l);
- status_get_string(p, JK_STATUS_ARG_WORKER, NULL, worker, l);
- status_get_string(p, JK_STATUS_ARG_SUB_WORKER, NULL, sub_worker, l);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' %s worker '%s' sub worker '%s'",
- w->name, operation,
- *worker ? *worker : "(null)", *sub_worker ? *sub_worker : "(null)");
- if (!*worker || !(*worker)[0]) {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' NULL or EMPTY worker param",
- w->name);
- p->msg = "NULL or EMPTY worker param";
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if (*sub_worker && !(*sub_worker)[0]) {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' EMPTY sub worker param",
- w->name);
- p->msg = "EMPTY sub worker param";
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static int check_valid_lb(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_worker_t *jw,
- const char *worker,
- lb_worker_t **lbp,
- int implemented,
- jk_logger_t *l)
-{
- status_worker_t *w = p->worker;
-
- JK_TRACE_ENTER(l);
- if (jw->type != JK_LB_WORKER_TYPE) {
- if (implemented) {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' worker type of worker '%s' has no sub workers",
- w->name, worker);
- p->msg = "worker type has no sub workers";
- }
- else {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' worker type of worker '%s' not implemented",
- w->name, worker);
- p->msg = "worker type not implemented";
- }
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- *lbp = (lb_worker_t *)jw->worker_private;
- if (!*lbp) {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' lb structure of worker '%s' is (null)",
- w->name, worker);
- p->msg = "lb structure is (null)";
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- p->msg = "OK";
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static int search_worker(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_worker_t **jwp,
- const char *worker,
- jk_logger_t *l)
-{
- status_worker_t *w = p->worker;
-
- JK_TRACE_ENTER(l);
- *jwp = NULL;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' searching worker '%s'",
- w->name, worker ? worker : "(null)");
- if (!worker || !worker[0]) {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' NULL or EMPTY worker param",
- w->name);
- p->msg = "NULL or EMPTY worker param";
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- *jwp = wc_get_worker_for_name(worker, l);
- if (!*jwp) {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' could not find worker '%s'",
- w->name, worker);
- p->msg = "Could not find given worker";
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- p->msg = "OK";
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static int search_sub_worker(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_worker_t *jw,
- const char *worker,
- lb_sub_worker_t **wrp,
- const char *sub_worker,
- unsigned int *idx,
- jk_logger_t *l)
-{
- lb_worker_t *lb = NULL;
- lb_sub_worker_t *wr = NULL;
- status_worker_t *w = p->worker;
- unsigned int i = 0;
-
- JK_TRACE_ENTER(l);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' searching sub worker '%s' of worker '%s'",
- w->name, sub_worker ? sub_worker : "(null)",
- worker ? worker : "(null)");
- if (!sub_worker || !sub_worker[0]) {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' NULL or EMPTY sub_worker param",
- w->name);
- p->msg = "NULL or EMPTY sub_worker param";
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if (check_valid_lb(s, p, jw, worker, &lb, 1, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if (idx)
- i = *idx;
- for (; i < lb->num_of_workers; i++) {
- wr = &(lb->lb_workers[i]);
- if (idx) {
- if (jk_wildchar_match(wr->name, sub_worker, 0) == 0) {
- *idx = i + 1;
- break;
- }
- }
- else if (strcmp(sub_worker, wr->name) == 0)
- break;
- }
- *wrp = wr;
- if (!wr || i == lb->num_of_workers) {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' could not find sub worker '%s' of worker '%s'",
- w->name, sub_worker, worker ? worker : "(null)");
- p->msg = "could not find sub worker";
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- p->msg = "OK";
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static int count_map(jk_uri_worker_map_t *uw_map,
- const char *worker,
- jk_logger_t *l)
-{
- unsigned int i;
- int count=0;
-
- JK_TRACE_ENTER(l);
- if (uw_map) {
- for (i = 0; i < uw_map->size[uw_map->index]; i++) {
- uri_worker_record_t *uwr = uw_map->maps[uw_map->index][i];
- if (strcmp(uwr->worker_name, worker) &&
- strcmp(uwr->worker_name, "*")) {
- continue;
- }
- count++;
- }
- }
- JK_TRACE_EXIT(l);
- return count;
-}
-
-static int count_maps(jk_ws_service_t *s,
- const char *worker,
- jk_logger_t *l)
-{
- int count=0;
-
- JK_TRACE_ENTER(l);
- if (s->next_vhost) {
- void *srv;
- for (srv = s->next_vhost(NULL); srv; srv = s->next_vhost(srv)) {
- count += count_map(s->vhost_to_uw_map(srv), worker, l);
- }
- }
- else if (s->uw_map)
- count = count_map(s->uw_map, worker, l);
- JK_TRACE_EXIT(l);
- return count;
-}
-
-static void display_map(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_uri_worker_map_t *uw_map,
- const char *worker,
- const char *server_name,
- int *count_ptr,
- int mime,
- jk_logger_t *l)
-{
- char buf[64];
- unsigned int i;
- int count;
- status_worker_t *w = p->worker;
-
- JK_TRACE_ENTER(l);
-
- if (uw_map->fname) {
- uri_worker_map_update(uw_map, 1, l);
- }
- for (i = 0; i < uw_map->size[uw_map->index]; i++) {
- uri_worker_record_t *uwr = uw_map->maps[uw_map->index][i];
-
- if (strcmp(uwr->worker_name, worker) &&
- strcmp(uwr->worker_name, "*")) {
- continue;
- }
- (*count_ptr)++;
- count = *count_ptr;
-
- if (mime == JK_STATUS_MIME_HTML) {
- if (server_name)
- jk_printf(s, JK_STATUS_URI_MAP_TABLE_ROW2,
- server_name,
- uwr->uri,
- uri_worker_map_get_match(uwr, buf, l),
- uri_worker_map_get_source(uwr, l),
- uwr->extensions.reply_timeout,
- uwr->extensions.fail_on_status_str ? uwr->extensions.fail_on_status_str : "-",
- uwr->extensions.active ? uwr->extensions.active : "-",
- uwr->extensions.disabled ? uwr->extensions.disabled : "-",
- uwr->extensions.stopped ? uwr->extensions.stopped : "-",
- uwr->extensions.use_server_error_pages);
- else
- jk_printf(s, JK_STATUS_URI_MAP_TABLE_ROW,
- uwr->uri,
- uri_worker_map_get_match(uwr, buf, l),
- uri_worker_map_get_source(uwr, l),
- uwr->extensions.reply_timeout,
- uwr->extensions.fail_on_status_str ? uwr->extensions.fail_on_status_str : "-",
- uwr->extensions.active ? uwr->extensions.active : "-",
- uwr->extensions.disabled ? uwr->extensions.disabled : "-",
- uwr->extensions.stopped ? uwr->extensions.stopped : "-",
- uwr->extensions.use_server_error_pages);
- }
- else if (mime == JK_STATUS_MIME_XML) {
- jk_print_xml_start_elt(s, w, 6, 0, "map");
- jk_print_xml_att_int(s, 8, "id", count);
- if (server_name)
- jk_print_xml_att_string(s, 8, "server", server_name);
- jk_print_xml_att_string(s, 8, "uri", uwr->uri);
- jk_print_xml_att_string(s, 8, "type", uri_worker_map_get_match(uwr, buf, l));
- jk_print_xml_att_string(s, 8, "source", uri_worker_map_get_source(uwr, l));
- jk_print_xml_att_int(s, 8, "reply_timeout", uwr->extensions.reply_timeout);
- jk_print_xml_att_string(s, 8, "fail_on_status", uwr->extensions.fail_on_status_str);
- jk_print_xml_att_string(s, 8, "active", uwr->extensions.active);
- jk_print_xml_att_string(s, 8, "disabled", uwr->extensions.disabled);
- jk_print_xml_att_string(s, 8, "stopped", uwr->extensions.stopped);
- jk_print_xml_att_int(s, 8, "use_server_errors", uwr->extensions.use_server_error_pages);
- jk_print_xml_stop_elt(s, 6, 1);
- }
- else if (mime == JK_STATUS_MIME_TXT) {
- jk_puts(s, "Map:");
- jk_printf(s, " id=%d", count);
- if (server_name)
- jk_printf(s, " server=\"%s\"", server_name);
- jk_printf(s, " uri=\"%s\"", uwr->uri);
- jk_printf(s, " type=\"%s\"", uri_worker_map_get_match(uwr, buf, l));
- jk_printf(s, " source=\"%s\"", uri_worker_map_get_source(uwr, l));
- jk_printf(s, " reply_timeout=\"%d\"", uwr->extensions.reply_timeout);
- jk_printf(s, " fail_on_status=\"%s\"", uwr->extensions.fail_on_status_str ? uwr->extensions.fail_on_status_str : "");
- jk_printf(s, " active=\"%s\"", uwr->extensions.active ? uwr->extensions.active : "");
- jk_printf(s, " disabled=\"%s\"", uwr->extensions.disabled ? uwr->extensions.disabled : "");
- jk_printf(s, " stopped=\"%s\"", uwr->extensions.stopped ? uwr->extensions.stopped : "");
- jk_printf(s, " use_server_errors=\"%d\"", uwr->extensions.use_server_error_pages);
- jk_puts(s, "\n");
- }
- else if (mime == JK_STATUS_MIME_PROP) {
- if (server_name)
- jk_print_prop_item_string(s, w, worker, "map", count, "server", server_name);
- jk_print_prop_item_string(s, w, worker, "map", count, "uri", uwr->uri);
- jk_print_prop_item_string(s, w, worker, "map", count, "type", uri_worker_map_get_match(uwr, buf, l));
- jk_print_prop_item_string(s, w, worker, "map", count, "source", uri_worker_map_get_source(uwr, l));
- jk_print_prop_item_int(s, w, worker, "map", count, "reply_timeout", uwr->extensions.reply_timeout);
- jk_print_prop_item_string(s, w, worker, "map", count, "fail_on_status", uwr->extensions.fail_on_status_str);
- jk_print_prop_item_string(s, w, worker, "map", count, "active", uwr->extensions.active);
- jk_print_prop_item_string(s, w, worker, "map", count, "disabled", uwr->extensions.disabled);
- jk_print_prop_item_string(s, w, worker, "map", count, "stopped", uwr->extensions.stopped);
- jk_print_prop_item_int(s, w, worker, "map", count, "use_server_errors", uwr->extensions.use_server_error_pages);
- }
- }
- JK_TRACE_EXIT(l);
-}
-
-static void display_maps(jk_ws_service_t *s,
- status_endpoint_t *p,
- const char *worker,
- jk_logger_t *l)
-{
- int mime;
- unsigned int hide;
- int has_server_iterator = 0;
- int count=0;
- const char *arg;
- status_worker_t *w = p->worker;
- jk_uri_worker_map_t *uw_map;
- char server_name[80];
- void *srv;
-
- JK_TRACE_ENTER(l);
- status_get_string(p, JK_STATUS_ARG_MIME, NULL, &arg, l);
- mime = status_mime_int(arg);
- hide = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
- JK_STATUS_ARG_OPTION_NO_MAPS;
- if (s->next_vhost)
- has_server_iterator = 1;
-
- count = count_maps(s, worker, l);
-
- if (hide) {
- if (count && mime == JK_STATUS_MIME_HTML) {
- jk_puts(s, "<p>\n");
- status_write_uri(s, p, "Show URI Mappings", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_MAPS, NULL, l);
- jk_puts(s, "</p>\n");
- }
- JK_TRACE_EXIT(l);
- return;
- }
-
- if (count) {
- if (mime == JK_STATUS_MIME_HTML) {
- jk_printf(s, "<hr/><h3>URI Mappings for %s (%d maps) [", worker, count);
- status_write_uri(s, p, "Hide", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, JK_STATUS_ARG_OPTION_NO_MAPS, 0, NULL, l);
- jk_puts(s, "]</h3><table>\n");
- if (has_server_iterator)
- jk_printf(s, JK_STATUS_URI_MAP_TABLE_HEAD2,
- "Server", "URI", "Match Type", "Source", "Reply Timeout", "Fail on Status", "Active", "Disabled", "Stopped", "Use Server Errors");
- else
- jk_printf(s, JK_STATUS_URI_MAP_TABLE_HEAD,
- "URI", "Match Type", "Source", "Reply Timeout", "Fail on Status", "Active", "Disabled", "Stopped", "Use Server Errors");
- }
- count = 0;
- if (has_server_iterator) {
- for (srv = s->next_vhost(NULL); srv; srv = s->next_vhost(srv)) {
- uw_map = s->vhost_to_uw_map(srv);
- if (uw_map) {
- s->vhost_to_text(srv, server_name, 80);
- display_map(s, p, uw_map, worker, server_name, &count, mime, l);
- }
- }
- }
- else {
- uw_map = s->uw_map;
- if (uw_map) {
- display_map(s, p, uw_map, worker, NULL, &count, mime, l);
- }
- }
- if (mime == JK_STATUS_MIME_HTML) {
- jk_puts(s, "</table>\n");
- }
- }
- else {
- if (mime == JK_STATUS_MIME_HTML) {
- jk_putv(s, "<hr/><h3>Warning: No URI Mappings defined for ",
- worker, " !</h3>\n", NULL);
- }
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' displayed %d maps for worker '%s'",
- w->name, count, worker);
- JK_TRACE_EXIT(l);
-}
-
-static const char *dump_ajp_addr(ajp_worker_t *aw, char *buf)
-{
- if (aw->port > 0)
- return jk_dump_hinfo(&aw->worker_inet_addr, buf);
- else {
- if (aw->addr_sequence != aw->s->addr_sequence)
- return "unresolved";
- else
- return "invalid";
- }
-}
-
-static void display_worker_ajp_conf_details(jk_ws_service_t *s,
- status_endpoint_t *p,
- ajp_worker_t *aw,
- int is_member,
- int type,
- jk_logger_t *l)
-{
- char buf[32];
-
- JK_TRACE_ENTER(l);
-
- if (is_member)
- jk_printf(s, JK_STATUS_SHOW_MEMBER_CONF_ROW,
- aw->name,
- status_worker_type(type),
- aw->host,
- dump_ajp_addr(aw, buf),
- aw->cache_timeout,
- aw->connect_timeout,
- aw->prepost_timeout,
- aw->reply_timeout,
- aw->retries,
- aw->recovery_opts,
- aw->max_packet_size);
- else
- jk_printf(s, JK_STATUS_SHOW_AJP_CONF_ROW,
- status_worker_type(type),
- aw->host,
- dump_ajp_addr(aw, buf),
- aw->cache_timeout,
- aw->connect_timeout,
- aw->prepost_timeout,
- aw->reply_timeout,
- aw->retries,
- aw->recovery_opts,
- aw->max_packet_size);
- JK_TRACE_EXIT(l);
-
-}
-
-static void display_worker_ajp_details(jk_ws_service_t *s,
- status_endpoint_t *p,
- ajp_worker_t *aw,
- lb_sub_worker_t *wr,
- lb_worker_t *lb,
- int ms_min,
- int ms_max,
- int map_count,
- jk_logger_t *l)
-{
- char buf[32];
- char buf_rd[32];
- char buf_rd_sec[32];
- char buf_wr[32];
- char buf_wr_sec[32];
- int mime;
- const char *arg;
- time_t now = time(NULL);
- const char *name = NULL;
- const char *sub_name = NULL;
- const char *ajp_name = NULL;
- status_worker_t *w = p->worker;
- int rs_min = 0;
- int rs_max = 0;
- int delta_reset = (int)difftime(now, aw->s->last_reset);
- int delta_error = -1;
- char buf_time[JK_STATUS_TIME_BUF_SZ];
- char buf_tz[JK_STATUS_TIME_BUF_SZ];
- time_t error_time = 0;
- int rc_time = -1;
-
- JK_TRACE_ENTER(l);
-
- status_get_string(p, JK_STATUS_ARG_MIME, NULL, &arg, l);
- mime = status_mime_int(arg);
-
- if (lb) {
- name = lb->name;
- sub_name = wr->name;
- ajp_name = wr->name;
- error_time = wr->s->error_time;
- if (wr->s->state == JK_LB_STATE_ERROR) {
- rs_min = lb->recover_wait_time - (int)difftime(now, wr->s->error_time);
- if (rs_min < 0) {
- rs_min = 0;
- }
- rs_max = rs_min + lb->maintain_time;
- if (rs_min < ms_min) {
- rs_min = ms_min;
- }
- }
- }
- else {
- name = aw->name;
- sub_name = NULL;
- ajp_name = aw->name;
- error_time = aw->s->error_time;
- }
-
- if (error_time > 0) {
- delta_error = (int)difftime(now, error_time);
- rc_time = status_strftime(error_time, mime, buf_time, buf_tz, l);
- }
-
- if (mime == JK_STATUS_MIME_HTML) {
-
- if (lb)
- jk_printf(s, JK_STATUS_SHOW_MEMBER_ROW,
- sub_name,
- jk_lb_get_activation(wr, l),
- jk_lb_get_state(wr, l),
- wr->distance,
- wr->lb_factor,
- wr->lb_mult,
- wr->s->lb_value,
- aw->s->used,
- delta_reset > 0 ? (int)(aw->s->used / delta_reset) : -1,
- wr->s->errors,
- aw->s->client_errors,
- aw->s->reply_timeouts,
- status_strfsize(aw->s->transferred, buf_wr),
- delta_reset > 0 ? status_strfsize(aw->s->transferred / delta_reset, buf_wr_sec) : "-",
- status_strfsize(aw->s->readed, buf_rd),
- delta_reset > 0 ? status_strfsize(aw->s->readed / delta_reset , buf_rd_sec) : "-",
- aw->s->busy,
- aw->s->max_busy,
- aw->s->connected,
- wr->route,
- wr->redirect ? (*wr->redirect ? wr->redirect : "&nbsp;") : "&nbsp",
- wr->domain ? (*wr->domain ? wr->domain : "&nbsp;") : "&nbsp",
- rs_min,
- rs_max,
- delta_reset,
- rc_time > 0 ? buf_time : "&nbsp;");
- else {
- jk_printf(s, JK_STATUS_SHOW_AJP_ROW,
- jk_ajp_get_state(aw, l),
- aw->s->used,
- delta_reset > 0 ? (int)(aw->s->used / delta_reset) : -1,
- aw->s->errors,
- aw->s->client_errors,
- aw->s->reply_timeouts,
- status_strfsize(aw->s->transferred, buf_wr),
- delta_reset > 0 ? status_strfsize(aw->s->transferred / delta_reset, buf_wr_sec) : "-",
- status_strfsize(aw->s->readed, buf_rd),
- delta_reset > 0 ? status_strfsize(aw->s->readed / delta_reset , buf_rd_sec) : "-",
- aw->s->busy,
- aw->s->max_busy,
- aw->s->connected,
- delta_reset,
- rc_time > 0 ? buf_time : "&nbsp;");
- }
-
- }
- else if (mime == JK_STATUS_MIME_XML) {
-
- int off = 2;
- if (lb)
- off = 6;
- if (lb) {
- jk_print_xml_start_elt(s, w, off, 0, "member");
- jk_print_xml_att_string(s, off+2, "name", sub_name);
- jk_print_xml_att_string(s, off+2, "type", status_worker_type(wr->worker->type));
- }
- else {
- jk_print_xml_start_elt(s, w, off, 0, "ajp");
- jk_print_xml_att_string(s, off+2, "name", ajp_name);
- jk_print_xml_att_string(s, off+2, "type", status_worker_type(aw->worker.type));
- }
- jk_print_xml_att_string(s, off+2, "host", aw->host);
- jk_print_xml_att_int(s, off+2, "port", aw->port);
- jk_print_xml_att_string(s, off+2, "address", dump_ajp_addr(aw, buf));
- jk_print_xml_att_int(s, off+2, "connection_pool_timeout", aw->cache_timeout);
- jk_print_xml_att_int(s, off+2, "ping_timeout", aw->ping_timeout);
- jk_print_xml_att_int(s, off+2, "connect_timeout", aw->connect_timeout);
- jk_print_xml_att_int(s, off+2, "prepost_timeout", aw->prepost_timeout);
- jk_print_xml_att_int(s, off+2, "reply_timeout", aw->reply_timeout);
- jk_print_xml_att_int(s, off+2, "connection_ping_interval", aw->conn_ping_interval);
- jk_print_xml_att_int(s, off+2, "retries", aw->retries);
- jk_print_xml_att_uint(s, off+2, "recovery_options", aw->recovery_opts);
- jk_print_xml_att_uint(s, off+2, "max_packet_size", aw->max_packet_size);
- if (lb) {
- jk_print_xml_att_string(s, off+2, "activation", jk_lb_get_activation(wr, l));
- jk_print_xml_att_int(s, off+2, "lbfactor", wr->lb_factor);
- jk_print_xml_att_string(s, off+2, "route", wr->route);
- jk_print_xml_att_string(s, off+2, "redirect", wr->redirect);
- jk_print_xml_att_string(s, off+2, "domain", wr->domain);
- jk_print_xml_att_int(s, off+2, "distance", wr->distance);
- jk_print_xml_att_string(s, off+2, "state", jk_lb_get_state(wr, l));
- jk_print_xml_att_uint64(s, off+2, "lbmult", wr->lb_mult);
- jk_print_xml_att_uint64(s, off+2, "lbvalue", wr->s->lb_value);
- jk_print_xml_att_uint64(s, off+2, "elected", aw->s->used);
- jk_print_xml_att_uint32(s, off+2, "errors", wr->s->errors);
- }
- else {
- jk_print_xml_att_uint64(s, off+2, "used", aw->s->used);
- jk_print_xml_att_uint32(s, off+2, "errors", aw->s->errors);
- }
- jk_print_xml_att_uint32(s, off+2, "client_errors", aw->s->client_errors);
- jk_print_xml_att_uint32(s, off+2, "reply_timeouts", aw->s->reply_timeouts);
- jk_print_xml_att_uint64(s, off+2, "transferred", aw->s->transferred);
- jk_print_xml_att_uint64(s, off+2, "read", aw->s->readed);
- jk_print_xml_att_int(s, off+2, "busy", aw->s->busy);
- jk_print_xml_att_int(s, off+2, "max_busy", aw->s->max_busy);
- jk_print_xml_att_int(s, off+2, "connected", aw->s->connected);
- if (lb) {
- jk_print_xml_att_int(s, off+2, "time_to_recover_min", rs_min);
- jk_print_xml_att_int(s, off+2, "time_to_recover_max", rs_max);
- }
- else
- jk_print_xml_att_int(s, off+2, "map_count", map_count);
- jk_print_xml_att_long(s, off+2, "last_reset_at", (long)aw->s->last_reset);
- jk_print_xml_att_int(s, off+2, "last_reset_ago", delta_reset);
- if (rc_time > 0 ) {
- jk_print_xml_att_string(s, off+2, "error_time_datetime", buf_time);
- jk_print_xml_att_string(s, off+2, "error_time_tz", buf_tz);
- jk_print_xml_att_int(s, off+2, "error_time_unix_seconds", (int)error_time);
- jk_print_xml_att_int(s, off+2, "error_time_ago", delta_error);
- }
- /* Terminate the tag */
- jk_print_xml_stop_elt(s, off, 1);
-
- }
- else if (mime == JK_STATUS_MIME_TXT) {
-
- if (lb) {
- jk_puts(s, "Member:");
- jk_printf(s, " name=%s", sub_name);
- jk_printf(s, " type=%s", status_worker_type(wr->worker->type));
- }
- else {
- jk_puts(s, "AJP Worker:");
- jk_printf(s, " name=%s", ajp_name);
- jk_printf(s, " type=%s", status_worker_type(aw->worker.type));
- }
- jk_printf(s, " host=%s", aw->host);
- jk_printf(s, " port=%d", aw->port);
- jk_printf(s, " address=%s", dump_ajp_addr(aw, buf));
- jk_printf(s, " connection_pool_timeout=%d", aw->cache_timeout);
- jk_printf(s, " ping_timeout=%d", aw->ping_timeout);
- jk_printf(s, " connect_timeout=%d", aw->connect_timeout);
- jk_printf(s, " prepost_timeout=%d", aw->prepost_timeout);
- jk_printf(s, " reply_timeout=%d", aw->reply_timeout);
- jk_printf(s, " retries=%d", aw->retries);
- jk_printf(s, " connection_ping_interval=%d", aw->conn_ping_interval);
- jk_printf(s, " recovery_options=%u", aw->recovery_opts);
- jk_printf(s, " max_packet_size=%u", aw->max_packet_size);
- if (lb) {
- jk_printf(s, " activation=%s", jk_lb_get_activation(wr, l));
- jk_printf(s, " lbfactor=%d", wr->lb_factor);
- jk_printf(s, " route=\"%s\"", wr->route ? wr->route : "");
- jk_printf(s, " redirect=\"%s\"", wr->redirect ? wr->redirect : "");
- jk_printf(s, " domain=\"%s\"", wr->domain ? wr->domain : "");
- jk_printf(s, " distance=%d", wr->distance);
- jk_printf(s, " state=%s", jk_lb_get_state(wr, l));
- jk_printf(s, " lbmult=%" JK_UINT64_T_FMT, wr->lb_mult);
- jk_printf(s, " lbvalue=%" JK_UINT64_T_FMT, wr->s->lb_value);
- jk_printf(s, " elected=%" JK_UINT64_T_FMT, aw->s->used);
- jk_printf(s, " errors=%" JK_UINT32_T_FMT, wr->s->errors);
- }
- else {
- jk_printf(s, " used=%" JK_UINT64_T_FMT, aw->s->used);
- jk_printf(s, " errors=%" JK_UINT32_T_FMT, aw->s->errors);
- }
- jk_printf(s, " client_errors=%" JK_UINT32_T_FMT, aw->s->client_errors);
- jk_printf(s, " reply_timeouts=%" JK_UINT32_T_FMT, aw->s->reply_timeouts);
- jk_printf(s, " transferred=%" JK_UINT64_T_FMT, aw->s->transferred);
- jk_printf(s, " read=%" JK_UINT64_T_FMT, aw->s->readed);
- jk_printf(s, " busy=%d", aw->s->busy);
- jk_printf(s, " max_busy=%d", aw->s->max_busy);
- jk_printf(s, " connected=%d", aw->s->connected);
- if (lb) {
- jk_printf(s, " time_to_recover_min=%d", rs_min);
- jk_printf(s, " time_to_recover_max=%d", rs_max);
- }
- else
- jk_printf(s, " map_count=%d", map_count);
- jk_printf(s, " last_reset_at=%ld", (long)aw->s->last_reset);
- jk_printf(s, " last_reset_ago=%d", delta_reset);
- if (rc_time > 0) {
- jk_printf(s, " error_time_datetime=%s", buf_time);
- jk_printf(s, " error_time_tz=%s", buf_tz);
- jk_printf(s, " error_time_unix_seconds=%d", error_time);
- jk_printf(s, " error_time_ago=%d", delta_error);
- }
- jk_puts(s, "\n");
-
- }
- else if (mime == JK_STATUS_MIME_PROP) {
-
- if (lb) {
- jk_print_prop_att_string(s, w, name, "balance_workers", sub_name);
- jk_print_prop_att_string(s, w, ajp_name, "type", status_worker_type(wr->worker->type));
- }
- else {
- jk_print_prop_att_string(s, w, name, "list", ajp_name);
- jk_print_prop_att_string(s, w, ajp_name, "type", status_worker_type(aw->worker.type));
- }
- jk_print_prop_att_string(s, w, ajp_name, "host", aw->host);
- jk_print_prop_att_int(s, w, ajp_name, "port", aw->port);
- jk_print_prop_att_string(s, w, ajp_name, "address", dump_ajp_addr(aw, buf));
- jk_print_prop_att_int(s, w, ajp_name, "connection_pool_timeout", aw->cache_timeout);
- jk_print_prop_att_int(s, w, ajp_name, "ping_timeout", aw->ping_timeout);
- jk_print_prop_att_int(s, w, ajp_name, "connect_timeout", aw->connect_timeout);
- jk_print_prop_att_int(s, w, ajp_name, "prepost_timeout", aw->prepost_timeout);
- jk_print_prop_att_int(s, w, ajp_name, "reply_timeout", aw->reply_timeout);
- jk_print_prop_att_int(s, w, ajp_name, "retries", aw->retries);
- jk_print_prop_att_int(s, w, ajp_name, "connection_ping_interval", aw->conn_ping_interval);
- jk_print_prop_att_uint(s, w, ajp_name, "recovery_options", aw->recovery_opts);
- jk_print_prop_att_uint(s, w, ajp_name, "max_packet_size", aw->max_packet_size);
- if (lb) {
- jk_print_prop_att_string(s, w, ajp_name, "activation", jk_lb_get_activation(wr, l));
- jk_print_prop_att_int(s, w, ajp_name, "lbfactor", wr->lb_factor);
- jk_print_prop_att_string(s, w, ajp_name, "route", wr->route);
- jk_print_prop_att_string(s, w, ajp_name, "redirect", wr->redirect);
- jk_print_prop_att_string(s, w, ajp_name, "domain", wr->domain);
- jk_print_prop_att_int(s, w, ajp_name, "distance", wr->distance);
- jk_print_prop_att_string(s, w, ajp_name, "state", jk_lb_get_state(wr, l));
- jk_print_prop_att_uint64(s, w, ajp_name, "lbmult", wr->lb_mult);
- jk_print_prop_att_uint64(s, w, ajp_name, "lbvalue", wr->s->lb_value);
- jk_print_prop_att_uint64(s, w, ajp_name, "elected", aw->s->used);
- jk_print_prop_att_uint32(s, w, ajp_name, "errors", wr->s->errors);
- }
- else {
- jk_print_prop_att_uint64(s, w, ajp_name, "used", aw->s->used);
- jk_print_prop_att_uint32(s, w, ajp_name, "errors", aw->s->errors);
- }
- jk_print_prop_att_uint32(s, w, ajp_name, "client_errors", aw->s->client_errors);
- jk_print_prop_att_uint32(s, w, ajp_name, "reply_timeouts", aw->s->reply_timeouts);
- jk_print_prop_att_uint64(s, w, ajp_name, "transferred", aw->s->transferred);
- jk_print_prop_att_uint64(s, w, ajp_name, "read", aw->s->readed);
- jk_print_prop_att_int(s, w, ajp_name, "busy", aw->s->busy);
- jk_print_prop_att_int(s, w, ajp_name, "max_busy", aw->s->max_busy);
- jk_print_prop_att_int(s, w, ajp_name, "connected", aw->s->connected);
- if (lb) {
- jk_print_prop_att_int(s, w, ajp_name, "time_to_recover_min", rs_min);
- jk_print_prop_att_int(s, w, ajp_name, "time_to_recover_max", rs_max);
- }
- else
- jk_print_prop_att_int(s, w, name, "map_count", map_count);
- jk_print_prop_att_long(s, w, name, "last_reset_at", (long)aw->s->last_reset);
- jk_print_prop_att_int(s, w, name, "last_reset_ago", delta_reset);
- if (rc_time > 0) {
- jk_print_prop_att_string(s, w, name, "error_time_datetime", buf_time);
- jk_print_prop_att_string(s, w, name, "error_time_tz", buf_tz);
- jk_print_prop_att_int(s, w, name, "error_time_unix seconds", (int)error_time);
- jk_print_prop_att_int(s, w, name, "error_time_ago seconds", delta_error);
- }
-
- }
- JK_TRACE_EXIT(l);
-
-}
-
-static void display_worker_lb(jk_ws_service_t *s,
- status_endpoint_t *p,
- lb_worker_t *lb,
- lb_sub_worker_t *swr,
- jk_logger_t *l)
-{
- int cmd;
- int mime;
- int read_only = 0;
- int single = 0;
- unsigned int hide_members;
- unsigned int hide_lb_conf;
- unsigned int hide_lb_summary;
- unsigned int hide_ajp_conf;
- const char *arg;
- time_t now = time(NULL);
- unsigned int good = 0;
- unsigned int degraded = 0;
- unsigned int bad = 0;
- int map_count;
- int ms_min;
- int ms_max;
- unsigned int j;
- int pstart = JK_FALSE;
- const char *name = lb->name;
- status_worker_t *w = p->worker;
-
- JK_TRACE_ENTER(l);
- status_get_string(p, JK_STATUS_ARG_CMD, NULL, &arg, l);
- cmd = status_cmd_int(arg);
- status_get_string(p, JK_STATUS_ARG_MIME, NULL, &arg, l);
- mime = status_mime_int(arg);
- hide_members = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
- JK_STATUS_ARG_OPTION_NO_MEMBERS;
- hide_lb_conf = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
- JK_STATUS_ARG_OPTION_NO_LB_CONF;
- hide_lb_summary = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
- JK_STATUS_ARG_OPTION_NO_LB_SUMMARY;
- hide_ajp_conf = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
- JK_STATUS_ARG_OPTION_NO_AJP_CONF;
- if (w->read_only) {
- read_only = 1;
- }
- else {
- read_only = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
- JK_STATUS_ARG_OPTION_READ_ONLY;
- }
- if (cmd == JK_STATUS_CMD_SHOW) {
- single = 1;
- }
-
- if (lb->sequence != lb->s->h.sequence)
- jk_lb_pull(lb, JK_FALSE, l);
-
- for (j = 0; j < lb->num_of_workers; j++) {
- lb_sub_worker_t *wr = &(lb->lb_workers[j]);
- int rate;
- rate = status_rate(wr, w, l);
- if (rate > 0 )
- good++;
- else if (rate < 0 )
- bad++;
- else
- degraded++;
- }
-
- map_count = count_maps(s, name, l);
- ms_min = lb->maintain_time - (int)difftime(now, lb->s->last_maintain_time);
- ms_max = ms_min + lb->maintain_time;
- ms_min -= JK_LB_MAINTAIN_TOLERANCE;
- if (ms_min < 0) {
- ms_min = 0;
- }
- if (ms_max < 0) {
- ms_max = 0;
- }
-
- if (mime == JK_STATUS_MIME_HTML) {
-
- jk_puts(s, "<hr/><h3>[");
- if (single) {
- jk_puts(s, "S");
- }
- else {
- status_write_uri(s, p, "S", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
- name, "", 0, 0, "", l);
- }
- if (!read_only) {
- jk_puts(s, "|");
- status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
- name, "", 0, 0, "", l);
- jk_puts(s, "|");
- status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN,
- name, "", 0, 0, "", l);
- }
- jk_puts(s, "]&nbsp;&nbsp;");
- jk_putv(s, "Worker Status for ", name, "</h3>\n", NULL);
- if (hide_lb_conf) {
- pstart = JK_TRUE;
- jk_puts(s, "<p>\n");
- if (single) {
- status_write_uri(s, p, "Show LB Configuration", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_LB_CONF, "", l);
- }
- else {
- status_write_uri(s, p, "Show LB Configuration", JK_STATUS_CMD_LIST, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_LB_CONF, "", l);
- }
- }
- if (hide_lb_summary) {
- if (pstart == JK_FALSE)
- jk_puts(s, "<p>\n");
- else
- jk_puts(s, "&nbsp;&nbsp;|&nbsp;&nbsp;");
- pstart = JK_TRUE;
- if (single) {
- status_write_uri(s, p, "Show LB Summary", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_LB_SUMMARY, "", l);
- }
- else {
- status_write_uri(s, p, "Show LB Summary", JK_STATUS_CMD_LIST, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_LB_SUMMARY, "", l);
- }
- }
- if (!hide_members && hide_ajp_conf) {
- if (pstart == JK_FALSE)
- jk_puts(s, "<p>\n");
- else
- jk_puts(s, "&nbsp;&nbsp;|&nbsp;&nbsp;");
- pstart = JK_TRUE;
- if (single) {
- status_write_uri(s, p, "Show AJP Configuration", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_AJP_CONF, "", l);
- }
- else {
- status_write_uri(s, p, "Show AJP Configuration", JK_STATUS_CMD_LIST, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_AJP_CONF, "", l);
- }
- }
- if (hide_members) {
- if (pstart == JK_FALSE)
- jk_puts(s, "<p>\n");
- else
- jk_puts(s, "&nbsp;&nbsp;|&nbsp;&nbsp;");
- pstart = JK_TRUE;
- if (single) {
- status_write_uri(s, p, "Show Balancer Members", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_MEMBERS, "", l);
- }
- else {
- status_write_uri(s, p, "Show Balancer Members", JK_STATUS_CMD_LIST, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_MEMBERS, "", l);
- }
- }
- if (pstart == JK_TRUE)
- jk_puts(s, "</p>\n");
-
- if (!hide_lb_conf) {
- jk_puts(s, "<table>" JK_STATUS_SHOW_LB_HEAD);
- jk_puts(s, "[");
- status_write_uri(s, p, "Hide", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, JK_STATUS_ARG_OPTION_NO_LB_CONF, 0, NULL, l);
- jk_puts(s, "]</th></tr>");
- jk_printf(s, JK_STATUS_SHOW_LB_ROW,
- status_worker_type(JK_LB_WORKER_TYPE),
- jk_get_bool(lb->sticky_session),
- jk_get_bool(lb->sticky_session_force),
- lb->retries,
- jk_lb_get_method(lb, l),
- jk_lb_get_lock(lb, l),
- lb->recover_wait_time,
- lb->error_escalation_time,
- lb->max_reply_timeouts);
- jk_puts(s, "</table>\n<br/>\n");
- }
-
- if (!hide_lb_summary) {
- jk_puts(s, "<table><tr>"
- "<th>Good</th><th>Degraded</th><th>Bad/Stopped</th><th>Busy</th><th>Max Busy</th><th>Next Maintenance</th><th>Last Reset</th><th>[");
- status_write_uri(s, p, "Hide", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, JK_STATUS_ARG_OPTION_NO_LB_SUMMARY, 0, NULL, l);
- jk_puts(s, "]</th></tr>\n<tr>");
- jk_printf(s, "<td>%d</td>", good);
- jk_printf(s, "<td>%d</td>", degraded);
- jk_printf(s, "<td>%d</td>", bad);
- jk_printf(s, "<td>%d</td>", lb->s->busy);
- jk_printf(s, "<td>%d</td>", lb->s->max_busy);
- jk_printf(s, "<td>%d/%d</td>", ms_min, ms_max);
- jk_printf(s, "<td>%d</td>", (int)difftime(now, lb->s->last_reset));
- jk_puts(s, "<td></td></tr>\n</table>\n\n");
- }
- }
- else if (mime == JK_STATUS_MIME_XML) {
-
- jk_print_xml_start_elt(s, w, 2, 0, "balancer");
- jk_print_xml_att_string(s, 4, "name", name);
- jk_print_xml_att_string(s, 4, "type", status_worker_type(JK_LB_WORKER_TYPE));
- jk_print_xml_att_string(s, 4, "sticky_session", jk_get_bool(lb->sticky_session));
- jk_print_xml_att_string(s, 4, "sticky_session_force", jk_get_bool(lb->sticky_session_force));
- jk_print_xml_att_int(s, 4, "retries", lb->retries);
- jk_print_xml_att_int(s, 4, "recover_time", lb->recover_wait_time);
- jk_print_xml_att_int(s, 4, "error_escalation_time", lb->error_escalation_time);
- jk_print_xml_att_int(s, 4, "max_reply_timeouts", lb->max_reply_timeouts);
- jk_print_xml_att_string(s, 4, "method", jk_lb_get_method(lb, l));
- jk_print_xml_att_string(s, 4, "lock", jk_lb_get_lock(lb, l));
- jk_print_xml_att_int(s, 4, "member_count", lb->num_of_workers);
- jk_print_xml_att_int(s, 4, "good", good);
- jk_print_xml_att_int(s, 4, "degraded", degraded);
- jk_print_xml_att_int(s, 4, "bad", bad);
- jk_print_xml_att_int(s, 4, "busy", lb->s->busy);
- jk_print_xml_att_int(s, 4, "max_busy", lb->s->max_busy);
- jk_print_xml_att_int(s, 4, "map_count", map_count);
- jk_print_xml_att_int(s, 4, "time_to_maintenance_min", ms_min);
- jk_print_xml_att_int(s, 4, "time_to_maintenance_max", ms_max);
- jk_print_xml_att_long(s, 4, "last_reset_at", (long)lb->s->last_reset);
- jk_print_xml_att_int(s, 4, "last_reset_ago", (int)difftime(now, lb->s->last_reset));
- jk_print_xml_stop_elt(s, 2, 0);
-
- }
- else if (mime == JK_STATUS_MIME_TXT) {
-
- jk_puts(s, "Balancer Worker:");
- jk_printf(s, " name=%s", name);
- jk_printf(s, " type=%s", status_worker_type(JK_LB_WORKER_TYPE));
- jk_printf(s, " sticky_session=%s", jk_get_bool(lb->sticky_session));
- jk_printf(s, " sticky_session_force=%s", jk_get_bool(lb->sticky_session_force));
- jk_printf(s, " retries=%d", lb->retries);
- jk_printf(s, " recover_time=%d", lb->recover_wait_time);
- jk_printf(s, " error_escalation_time=%d", lb->error_escalation_time);
- jk_printf(s, " max_reply_timeouts=%d", lb->max_reply_timeouts);
- jk_printf(s, " method=%s", jk_lb_get_method(lb, l));
- jk_printf(s, " lock=%s", jk_lb_get_lock(lb, l));
- jk_printf(s, " member_count=%d", lb->num_of_workers);
- jk_printf(s, " good=%d", good);
- jk_printf(s, " degraded=%d", degraded);
- jk_printf(s, " bad=%d", bad);
- jk_printf(s, " busy=%d", lb->s->busy);
- jk_printf(s, " max_busy=%d", lb->s->max_busy);
- jk_printf(s, " map_count=%d", map_count);
- jk_printf(s, " time_to_maintenance_min=%d", ms_min);
- jk_printf(s, " time_to_maintenance_max=%d", ms_max);
- jk_printf(s, " last_reset_at=%ld", (long)lb->s->last_reset);
- jk_printf(s, " last_reset_ago=%d", (int)difftime(now, lb->s->last_reset));
- jk_puts(s, "\n");
-
- }
- else if (mime == JK_STATUS_MIME_PROP) {
-
- jk_print_prop_att_string(s, w, NULL, "list", name);
- jk_print_prop_att_string(s, w, name, "type", status_worker_type(JK_LB_WORKER_TYPE));
- jk_print_prop_att_string(s, w, name, "sticky_session", jk_get_bool(lb->sticky_session));
- jk_print_prop_att_string(s, w, name, "sticky_session_force", jk_get_bool(lb->sticky_session_force));
- jk_print_prop_att_int(s, w, name, "retries", lb->retries);
- jk_print_prop_att_int(s, w, name, "recover_time", lb->recover_wait_time);
- jk_print_prop_att_int(s, w, name, "error_escalation_time", lb->error_escalation_time);
- jk_print_prop_att_int(s, w, name, "max_reply_timeouts", lb->max_reply_timeouts);
- jk_print_prop_att_string(s, w, name, "method", jk_lb_get_method(lb, l));
- jk_print_prop_att_string(s, w, name, "lock", jk_lb_get_lock(lb, l));
- jk_print_prop_att_int(s, w, name, "member_count", lb->num_of_workers);
- jk_print_prop_att_int(s, w, name, "good", good);
- jk_print_prop_att_int(s, w, name, "degraded", degraded);
- jk_print_prop_att_int(s, w, name, "bad", bad);
- jk_print_prop_att_int(s, w, name, "busy", lb->s->busy);
- jk_print_prop_att_int(s, w, name, "max_busy", lb->s->max_busy);
- jk_print_prop_att_int(s, w, name, "map_count", map_count);
- jk_print_prop_att_int(s, w, name, "time_to_maintenance_min", ms_min);
- jk_print_prop_att_int(s, w, name, "time_to_maintenance_max", ms_max);
- jk_print_prop_att_long(s, w, name, "last_reset_at", (long)lb->s->last_reset);
- jk_print_prop_att_int(s, w, name, "last_reset_ago", (int)difftime(now, lb->s->last_reset));
-
- }
-
- if (!hide_members) {
-
- if (mime == JK_STATUS_MIME_HTML) {
-
- jk_puts(s, "<h4>Balancer Members [");
- if (swr) {
- status_write_uri(s, p, "Show All Members", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
- name, "", 0, 0, "", l);
- jk_puts(s, "]&nbsp;&nbsp;[");
- }
- if (single) {
- status_write_uri(s, p, "Hide", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, JK_STATUS_ARG_OPTION_NO_MEMBERS, 0, "", l);
- }
- else {
- status_write_uri(s, p, "Hide", JK_STATUS_CMD_LIST, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, JK_STATUS_ARG_OPTION_NO_MEMBERS, 0, "", l);
- }
- jk_puts(s, "]</h4>\n");
- if (!hide_ajp_conf) {
- jk_puts(s, "<table>" JK_STATUS_SHOW_MEMBER_CONF_HEAD);
- jk_puts(s, "[");
- status_write_uri(s, p, "Hide", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, JK_STATUS_ARG_OPTION_NO_AJP_CONF, 0, NULL, l);
- jk_puts(s, "]</td></tr>");
- if (swr) {
- jk_worker_t *jw = (jk_worker_t *)swr->worker;
- ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;
- display_worker_ajp_conf_details(s, p, aw, 1, jw->type, l);
- }
- else
- for (j = 0; j < lb->num_of_workers; j++) {
- lb_sub_worker_t *wr = &(lb->lb_workers[j]);
- jk_worker_t *jw = (jk_worker_t *)wr->worker;
- ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;
- display_worker_ajp_conf_details(s, p, aw, 1, jw->type, l);
- }
- jk_puts(s, "</table>\n<br/>\n");
- }
- jk_puts(s, "<table>" JK_STATUS_SHOW_MEMBER_HEAD);
-
- }
-
- if (swr) {
- const char *sub_name = swr->name;
- ajp_worker_t *aw = (ajp_worker_t *)swr->worker->worker_private;
-
- if (mime == JK_STATUS_MIME_HTML) {
- jk_puts(s, "<tr>\n<td>[");
- jk_puts(s, "S");
- if (!read_only) {
- jk_puts(s, "|");
- status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
- name, sub_name, 0, 0, "", l);
- jk_puts(s, "|");
- status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN,
- name, sub_name, 0, 0, "", l);
- if (swr->s->state == JK_LB_STATE_ERROR) {
- jk_puts(s, "|");
- status_write_uri(s, p, "T", JK_STATUS_CMD_RECOVER, JK_STATUS_MIME_UNKNOWN,
- name, sub_name, 0, 0, "", l);
- }
- }
- jk_puts(s, "]");
- jk_puts(s, "&nbsp;</td>");
- }
- display_worker_ajp_details(s, p, aw, swr, lb, ms_min, ms_max, 0, l);
- } else
- for (j = 0; j < lb->num_of_workers; j++) {
- lb_sub_worker_t *wr = &(lb->lb_workers[j]);
- const char *sub_name = wr->name;
- ajp_worker_t *aw = (ajp_worker_t *)wr->worker->worker_private;
-
- if (mime == JK_STATUS_MIME_HTML) {
- jk_puts(s, "<tr>\n<td>[");
- status_write_uri(s, p, "S", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
- name, sub_name, 0, 0, "", l);
- if (!read_only) {
- jk_puts(s, "|");
- status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
- name, sub_name, 0, 0, "", l);
- jk_puts(s, "|");
- status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN,
- name, sub_name, 0, 0, "", l);
- if (wr->s->state == JK_LB_STATE_ERROR) {
- jk_puts(s, "|");
- status_write_uri(s, p, "T", JK_STATUS_CMD_RECOVER, JK_STATUS_MIME_UNKNOWN,
- name, sub_name, 0, 0, "", l);
- }
- }
- jk_puts(s, "]");
- jk_puts(s, "&nbsp;</td>");
- }
- display_worker_ajp_details(s, p, aw, wr, lb, ms_min, ms_max, 0, l);
- }
-
- if (mime == JK_STATUS_MIME_HTML) {
-
- jk_puts(s, "</table><br/>\n");
- if (!read_only) {
- const char *arg;
- status_get_string(p, JK_STATUS_ARG_CMD, NULL, &arg, l);
- status_start_form(s, p, "get", JK_STATUS_CMD_EDIT, NULL, l);
- jk_printf(s, JK_STATUS_FORM_HIDDEN_STRING, JK_STATUS_ARG_WORKER, name);
- if (arg)
- jk_printf(s, JK_STATUS_FORM_HIDDEN_STRING, JK_STATUS_ARG_FROM, arg);
- jk_puts(s, "<table><tr><td><b>E</b>dit this attribute for all members:</td><td>");
- jk_putv(s, "<select name=\"", JK_STATUS_ARG_ATTRIBUTE,
- "\" size=\"1\">\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_LBM_ACTIVATION, "\">", JK_STATUS_ARG_LBM_TEXT_ACTIVATION, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_LBM_FACTOR, "\">", JK_STATUS_ARG_LBM_TEXT_FACTOR, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_LBM_ROUTE, "\">", JK_STATUS_ARG_LBM_TEXT_ROUTE, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_LBM_REDIRECT, "\">", JK_STATUS_ARG_LBM_TEXT_REDIRECT, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_LBM_DOMAIN, "\">", JK_STATUS_ARG_LBM_TEXT_DOMAIN, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_LBM_DISTANCE, "\">", JK_STATUS_ARG_LBM_TEXT_DISTANCE, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_CACHE_TO, "\">", JK_STATUS_ARG_AJP_TEXT_CACHE_TO, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_PING_TO, "\">", JK_STATUS_ARG_AJP_TEXT_PING_TO, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_CONNECT_TO, "\">", JK_STATUS_ARG_AJP_TEXT_CONNECT_TO, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_PREPOST_TO, "\">", JK_STATUS_ARG_AJP_TEXT_PREPOST_TO, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_REPLY_TO, "\">", JK_STATUS_ARG_AJP_TEXT_REPLY_TO, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_RETRIES, "\">", JK_STATUS_ARG_AJP_TEXT_RETRIES, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_RETRY_INT, "\">", JK_STATUS_ARG_AJP_TEXT_RETRY_INT, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_CPING_INT, "\">", JK_STATUS_ARG_AJP_TEXT_CPING_INT, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_REC_OPTS, "\">", JK_STATUS_ARG_AJP_TEXT_REC_OPTS, "</option>\n", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_ARG_AJP_MAX_PK_SZ, "\">", JK_STATUS_ARG_AJP_TEXT_MAX_PK_SZ, "</option>\n", NULL);
- jk_puts(s, "</select></td><td><input type=\"submit\" value=\"Go\"/></tr></table></form>\n");
- }
-
- }
-
- }
-
- if (name)
- display_maps(s, p, name, l);
-
- if (mime == JK_STATUS_MIME_XML) {
- jk_print_xml_close_elt(s, w, 2, "balancer");
- }
-
- JK_TRACE_EXIT(l);
-}
-
-static void display_worker_ajp(jk_ws_service_t *s,
- status_endpoint_t *p,
- ajp_worker_t *aw,
- int type,
- jk_logger_t *l)
-{
- int cmd;
- int mime;
- int read_only = 0;
- int single = 0;
- unsigned int hide_ajp_conf;
- const char *arg;
- int map_count;
- const char *name = aw->name;
- status_worker_t *w = p->worker;
-
- JK_TRACE_ENTER(l);
- status_get_string(p, JK_STATUS_ARG_CMD, NULL, &arg, l);
- cmd = status_cmd_int(arg);
- status_get_string(p, JK_STATUS_ARG_MIME, NULL, &arg, l);
- mime = status_mime_int(arg);
- hide_ajp_conf = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
- JK_STATUS_ARG_OPTION_NO_AJP_CONF;
- if (w->read_only) {
- read_only = 1;
- }
- else {
- read_only = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
- JK_STATUS_ARG_OPTION_READ_ONLY;
- }
- if (cmd == JK_STATUS_CMD_SHOW) {
- single = 1;
- }
-
- if (aw->sequence != aw->s->h.sequence)
- jk_ajp_pull(aw, JK_FALSE, l);
-
- map_count = count_maps(s, name, l);
-
- if (mime == JK_STATUS_MIME_HTML) {
-
- jk_puts(s, "<hr/><h3>[");
- if (single)
- jk_puts(s, "S");
- else
- status_write_uri(s, p, "S", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
- name, "", 0, 0, "", l);
- if (!read_only) {
- jk_puts(s, "|");
- status_write_uri(s, p, "E", JK_STATUS_CMD_EDIT, JK_STATUS_MIME_UNKNOWN,
- name, "", 0, 0, "", l);
- jk_puts(s, "|");
- status_write_uri(s, p, "R", JK_STATUS_CMD_RESET, JK_STATUS_MIME_UNKNOWN,
- name, "", 0, 0, "", l);
- }
- jk_puts(s, "]&nbsp;&nbsp;");
- jk_putv(s, "Worker Status for ", name, "</h3>\n", NULL);
- if (!hide_ajp_conf) {
- jk_puts(s, "<table>" JK_STATUS_SHOW_AJP_CONF_HEAD);
- jk_puts(s, "[");
- status_write_uri(s, p, "Hide", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, JK_STATUS_ARG_OPTION_NO_AJP_CONF, 0, NULL, l);
- jk_puts(s, "]</td></tr>");
- display_worker_ajp_conf_details(s, p, aw, 0, type, l);
- jk_puts(s, "</table>\n<br/>\n");
- }
- else {
- jk_puts(s, "<p>\n");
- if (single) {
- status_write_uri(s, p, "Show AJP Configuration", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_AJP_CONF, "", l);
- }
- else {
- status_write_uri(s, p, "Show AJP Configuration", JK_STATUS_CMD_LIST, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_AJP_CONF, "", l);
- }
- jk_puts(s, "</p>\n");
- }
- jk_puts(s, "<table>" JK_STATUS_SHOW_AJP_HEAD);
- }
- display_worker_ajp_details(s, p, aw, NULL, NULL, 0, 0, map_count, l);
-
- if (mime == JK_STATUS_MIME_HTML) {
- jk_puts(s, "</table>\n");
- }
- if (name)
- display_maps(s, p, name, l);
-
- JK_TRACE_EXIT(l);
-}
-
-static void display_worker(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_worker_t *jw,
- lb_sub_worker_t *swr,
- jk_logger_t *l)
-{
- status_worker_t *w = p->worker;
-
- JK_TRACE_ENTER(l);
- if (jw->type == JK_LB_WORKER_TYPE) {
- lb_worker_t *lb = (lb_worker_t *)jw->worker_private;
- if (lb) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' %s lb worker '%s'",
- w->name, "displaying", lb->name);
- display_worker_lb(s, p, lb, swr, l);
- }
- else {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' lb worker is (null)",
- w->name);
- }
- }
- else if (jw->type == JK_AJP13_WORKER_TYPE ||
- jw->type == JK_AJP14_WORKER_TYPE) {
- ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;
- if (aw) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' %s ajp worker '%s'",
- w->name, "displaying", aw->name);
- display_worker_ajp(s, p, aw, jw->type, l);
- }
- else {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' aw worker is (null)",
- w->name);
- }
- }
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' worker type not implemented",
- w->name);
- JK_TRACE_EXIT(l);
- return;
- }
-}
-
-static void form_worker(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_worker_t *jw,
- jk_logger_t *l)
-{
- const char *name = NULL;
- lb_worker_t *lb = NULL;
- status_worker_t *w = p->worker;
-
- JK_TRACE_ENTER(l);
- if (jw->type == JK_LB_WORKER_TYPE) {
- lb = (lb_worker_t *)jw->worker_private;
- name = lb->name;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' producing edit form for lb worker '%s'",
- w->name, name);
- }
- else {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' worker type not implemented",
- w->name);
- JK_TRACE_EXIT(l);
- return;
- }
-
- if (!lb) {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' lb structure is (null)",
- w->name);
- JK_TRACE_EXIT(l);
- return;
- }
-
- jk_putv(s, "<hr/><h3>Edit load balancer settings for ",
- name, "</h3>\n", NULL);
-
- status_start_form(s, p, "get", JK_STATUS_CMD_UPDATE, NULL, l);
-
- jk_putv(s, "<table>\n<tr><td>", JK_STATUS_ARG_LB_TEXT_RETRIES,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_LB_RETRIES, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", lb->retries);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_LB_TEXT_RETRY_INT,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_LB_RETRY_INT, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", lb->retry_interval);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_LB_TEXT_RECOVER_TIME,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_LB_RECOVER_TIME, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", lb->recover_wait_time);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_LB_TEXT_ERROR_ESCALATION_TIME,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_LB_ERROR_ESCALATION_TIME, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", lb->error_escalation_time);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_LB_TEXT_MAX_REPLY_TIMEOUTS,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_LB_MAX_REPLY_TIMEOUTS, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", lb->max_reply_timeouts);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_LB_TEXT_STICKY,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_LB_STICKY, "\" type=\"checkbox\"", NULL);
- if (lb->sticky_session)
- jk_puts(s, " checked=\"checked\"");
- jk_puts(s, "/></td></tr>\n");
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_LB_TEXT_STICKY_FORCE,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_LB_STICKY_FORCE, "\" type=\"checkbox\"", NULL);
- if (lb->sticky_session_force)
- jk_puts(s, " checked=\"checked\"");
- jk_puts(s, "/></td></tr>\n");
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_LB_TEXT_METHOD,
- ":</td><td></td></tr>\n", NULL);
- jk_putv(s, "<tr><td>&nbsp;&nbsp;Requests</td><td><input name=\"",
- JK_STATUS_ARG_LB_METHOD, "\" type=\"radio\"", NULL);
- jk_printf(s, " value=\"%d\"", JK_LB_METHOD_REQUESTS);
- if (lb->lbmethod == JK_LB_METHOD_REQUESTS)
- jk_puts(s, " checked=\"checked\"");
- jk_puts(s, "/></td></tr>\n");
- jk_putv(s, "<tr><td>&nbsp;&nbsp;Traffic</td><td><input name=\"",
- JK_STATUS_ARG_LB_METHOD, "\" type=\"radio\"", NULL);
- jk_printf(s, " value=\"%d\"", JK_LB_METHOD_TRAFFIC);
- if (lb->lbmethod == JK_LB_METHOD_TRAFFIC)
- jk_puts(s, " checked=\"checked\"");
- jk_puts(s, "/></td></tr>\n");
- jk_putv(s, "<tr><td>&nbsp;&nbsp;Busyness</td><td><input name=\"",
- JK_STATUS_ARG_LB_METHOD, "\" type=\"radio\"", NULL);
- jk_printf(s, " value=\"%d\"", JK_LB_METHOD_BUSYNESS);
- if (lb->lbmethod == JK_LB_METHOD_BUSYNESS)
- jk_puts(s, " checked=\"checked\"");
- jk_puts(s, "/></td></tr>\n");
- jk_putv(s, "<tr><td>&nbsp;&nbsp;Sessions</td><td><input name=\"",
- JK_STATUS_ARG_LB_METHOD, "\" type=\"radio\"", NULL);
- jk_printf(s, " value=\"%d\"", JK_LB_METHOD_SESSIONS);
- if (lb->lbmethod == JK_LB_METHOD_SESSIONS)
- jk_puts(s, " checked=\"checked\"");
- jk_puts(s, "/></td></tr>\n");
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_LB_TEXT_LOCK,
- ":</td><td></td></tr>\n", NULL);
- jk_putv(s, "<tr><td>&nbsp;&nbsp;Optimistic</td><td><input name=\"",
- JK_STATUS_ARG_LB_LOCK, "\" type=\"radio\"", NULL);
- jk_printf(s, " value=\"%d\"", JK_LB_LOCK_OPTIMISTIC);
- if (lb->lblock == JK_LB_LOCK_OPTIMISTIC)
- jk_puts(s, " checked=\"checked\"");
- jk_puts(s, "/></td></tr>\n");
- jk_putv(s, "<tr><td>&nbsp;&nbsp;Pessimistic</td><td><input name=\"",
- JK_STATUS_ARG_LB_LOCK, "\" type=\"radio\"", NULL);
- jk_printf(s, " value=\"%d\"", JK_LB_LOCK_PESSIMISTIC);
- if (lb->lblock == JK_LB_LOCK_PESSIMISTIC)
- jk_puts(s, " checked=\"checked\"");
- jk_puts(s, "/></td></tr>\n");
- jk_puts(s, "</table>\n");
- jk_puts(s, "<br/><input type=\"submit\" value=\"Update Balancer\"/></form>\n");
-
- JK_TRACE_EXIT(l);
-}
-
-static void form_member(jk_ws_service_t *s,
- status_endpoint_t *p,
- lb_sub_worker_t *wr,
- ajp_worker_t *aw,
- const char *lb_name,
- jk_logger_t *l)
-{
- status_worker_t *w = p->worker;
-
- JK_TRACE_ENTER(l);
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' producing edit form for sub worker '%s' of lb worker '%s'",
- w->name, wr? wr->name : aw->name, lb_name);
-
- jk_putv(s, "<hr/><h3>Edit worker settings for ",
- wr? wr->name : aw->name, "</h3>\n", NULL);
- status_start_form(s, p, "get", JK_STATUS_CMD_UPDATE, NULL, l);
-
- if (wr) {
- jk_puts(s, "<table><tbody valign=\"baseline\"><tr><th>Balancing related settings</th>\n");
- jk_puts(s, "<th>&nbsp;&nbsp;</th><th>AJP settings</th>\n");
- jk_puts(s, "</tr>\n");
- jk_puts(s, "<tr><td><table>\n");
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_LBM_TEXT_ACTIVATION,
- ":</td><td></td></tr>\n", NULL);
- jk_putv(s, "<tr><td>&nbsp;&nbsp;Active</td><td><input name=\"",
- JK_STATUS_ARG_LBM_ACTIVATION, "\" type=\"radio\"", NULL);
- jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_ACTIVE);
- if (wr->activation == JK_LB_ACTIVATION_ACTIVE)
- jk_puts(s, " checked=\"checked\"");
- jk_puts(s, "/></td></tr>\n");
- jk_putv(s, "<tr><td>&nbsp;&nbsp;Disabled</td><td><input name=\"",
- JK_STATUS_ARG_LBM_ACTIVATION, "\" type=\"radio\"", NULL);
- jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_DISABLED);
- if (wr->activation == JK_LB_ACTIVATION_DISABLED)
- jk_puts(s, " checked=\"checked\"");
- jk_puts(s, "/></td></tr>\n");
- jk_putv(s, "<tr><td>&nbsp;&nbsp;Stopped</td><td><input name=\"",
- JK_STATUS_ARG_LBM_ACTIVATION, "\" type=\"radio\"", NULL);
- jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_STOPPED);
- if (wr->activation == JK_LB_ACTIVATION_STOPPED)
- jk_puts(s, " checked=\"checked\"");
- jk_puts(s, "/></td></tr>\n");
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_LBM_TEXT_FACTOR,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_LBM_FACTOR, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", wr->lb_factor);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_LBM_TEXT_ROUTE,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_LBM_ROUTE, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%s\"/></td></tr>\n", wr->route);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_LBM_TEXT_REDIRECT,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_LBM_REDIRECT, "\" type=\"text\" ", NULL);
- jk_putv(s, "value=\"", wr->redirect, NULL);
- jk_puts(s, "\"/></td></tr>\n");
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_LBM_TEXT_DOMAIN,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_LBM_DOMAIN, "\" type=\"text\" ", NULL);
- jk_putv(s, "value=\"", wr->domain, NULL);
- jk_puts(s, "\"/></td></tr>\n");
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_LBM_TEXT_DISTANCE,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_LBM_DISTANCE, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", wr->distance);
- jk_puts(s, "</table>\n");
- jk_puts(s, "</td><td></td><td>\n");
- }
-
- jk_puts(s, "<table>\n");
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_HOST_STR,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_AJP_HOST_STR, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%s\"/></td></tr>\n", aw->host);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_PORT,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_AJP_PORT, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->port);
-
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_CACHE_TO,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_AJP_CACHE_TO, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->cache_timeout);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_PING_TO,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_AJP_PING_TO, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->ping_timeout);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_CONNECT_TO,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_AJP_CONNECT_TO, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->connect_timeout);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_PREPOST_TO,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_AJP_PREPOST_TO, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->prepost_timeout);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_REPLY_TO,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_AJP_REPLY_TO, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->reply_timeout);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_RETRIES,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_AJP_RETRIES, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->retries);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_RETRY_INT,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_AJP_RETRY_INT, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->retry_interval);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_CPING_INT,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_AJP_CPING_INT, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->conn_ping_interval);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_REC_OPTS,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_AJP_REC_OPTS, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->recovery_opts);
- jk_putv(s, "<tr><td>", JK_STATUS_ARG_AJP_TEXT_MAX_PK_SZ,
- ":</td><td><input name=\"",
- JK_STATUS_ARG_AJP_MAX_PK_SZ, "\" type=\"text\" ", NULL);
- jk_printf(s, "value=\"%d\"/></td></tr>\n", aw->max_packet_size);
- jk_puts(s, "</table>\n");
- if (wr)
- jk_puts(s, "</td></tr></table>\n");
- jk_puts(s, "<br/><input type=\"submit\" value=\"Update Worker\"/>\n</form>\n");
- JK_TRACE_EXIT(l);
-}
-
-static void form_all_members(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_worker_t *jw,
- const char *attribute,
- jk_logger_t *l)
-{
- const char *name = NULL;
- lb_worker_t *lb = NULL;
- status_worker_t *w = p->worker;
- const char *aname;
- unsigned int i;
-
- JK_TRACE_ENTER(l);
- if (!attribute) {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' missing request parameter '%s'",
- w->name, JK_STATUS_ARG_ATTRIBUTE);
- JK_TRACE_EXIT(l);
- return;
- }
- else {
- if (!strcmp(attribute, JK_STATUS_ARG_LBM_ACTIVATION))
- aname=JK_STATUS_ARG_LBM_TEXT_ACTIVATION;
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_FACTOR))
- aname=JK_STATUS_ARG_LBM_TEXT_FACTOR;
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_ROUTE))
- aname=JK_STATUS_ARG_LBM_TEXT_ROUTE;
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_REDIRECT))
- aname=JK_STATUS_ARG_LBM_TEXT_REDIRECT;
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DOMAIN))
- aname=JK_STATUS_ARG_LBM_TEXT_DOMAIN;
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DISTANCE))
- aname=JK_STATUS_ARG_LBM_TEXT_DISTANCE;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CACHE_TO))
- aname=JK_STATUS_ARG_AJP_TEXT_CACHE_TO;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_PING_TO))
- aname=JK_STATUS_ARG_AJP_TEXT_PING_TO;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CONNECT_TO))
- aname=JK_STATUS_ARG_AJP_TEXT_CONNECT_TO;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_PREPOST_TO))
- aname=JK_STATUS_ARG_AJP_TEXT_PREPOST_TO;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REPLY_TO))
- aname=JK_STATUS_ARG_AJP_TEXT_REPLY_TO;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_RETRIES))
- aname=JK_STATUS_ARG_AJP_TEXT_RETRIES;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_RETRY_INT))
- aname=JK_STATUS_ARG_AJP_TEXT_RETRY_INT;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CPING_INT))
- aname=JK_STATUS_ARG_AJP_TEXT_CPING_INT;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REC_OPTS))
- aname=JK_STATUS_ARG_AJP_TEXT_REC_OPTS;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_MAX_PK_SZ))
- aname=JK_STATUS_ARG_AJP_TEXT_MAX_PK_SZ;
- else {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' unknown attribute '%s'",
- w->name, attribute);
- JK_TRACE_EXIT(l);
- return;
- }
- }
- if (jw->type == JK_LB_WORKER_TYPE) {
- lb = (lb_worker_t *)jw->worker_private;
- name = lb->name;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' producing edit form for attribute '%s' [%s] of all members of lb worker '%s'",
- w->name, attribute, aname, name);
- }
- else {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' worker type not implemented",
- w->name);
- JK_TRACE_EXIT(l);
- return;
- }
-
- if (lb) {
- jk_putv(s, "<hr/><h3>Edit attribute '", aname,
- "' for all members of load balancer ",
- name, "</h3>\n", NULL);
-
- status_start_form(s, p, "get", JK_STATUS_CMD_UPDATE, NULL, l);
-
- jk_putv(s, "<table><tr>"
- "<th>Balanced Worker</th><th>", aname, "</th>"
- "</tr>", NULL);
-
- for (i = 0; i < lb->num_of_workers; i++) {
- lb_sub_worker_t *wr = &(lb->lb_workers[i]);
- jk_worker_t *jw = wr->worker;
- ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;;
-
- jk_putv(s, "<tr><td>", wr->name, "</td><td>\n", NULL);
-
- if (!strcmp(attribute, JK_STATUS_ARG_LBM_ACTIVATION)) {
-
- jk_printf(s, "Active:&nbsp;<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"radio\"", i);
- jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_ACTIVE);
- if (wr->activation == JK_LB_ACTIVATION_ACTIVE)
- jk_puts(s, " checked=\"checked\"");
- jk_puts(s, "/>&nbsp;|&nbsp;\n");
- jk_printf(s, "Disabled:&nbsp;<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"radio\"", i);
- jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_DISABLED);
- if (wr->activation == JK_LB_ACTIVATION_DISABLED)
- jk_puts(s, " checked=\"checked\"");
- jk_puts(s, "/>&nbsp;|&nbsp;\n");
- jk_printf(s, "Stopped:&nbsp;<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"radio\"", i);
- jk_printf(s, " value=\"%d\"", JK_LB_ACTIVATION_STOPPED);
- if (wr->activation == JK_LB_ACTIVATION_STOPPED)
- jk_puts(s, " checked=\"checked\"");
- jk_puts(s, "/>\n");
-
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_FACTOR)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_printf(s, "value=\"%d\"/>\n", wr->lb_factor);
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_ROUTE)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_putv(s, "value=\"", wr->route, "\"/>\n", NULL);
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_REDIRECT)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_putv(s, "value=\"", wr->redirect, "\"/>\n", NULL);
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DOMAIN)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_putv(s, "value=\"", wr->domain, "\"/>\n", NULL);
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DISTANCE)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_printf(s, "value=\"%d\"/>\n", wr->distance);
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CACHE_TO)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_printf(s, "value=\"%d\"/>\n", aw->cache_timeout);
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_PING_TO)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_printf(s, "value=\"%d\"/>\n", aw->ping_timeout);
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CONNECT_TO)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_printf(s, "value=\"%d\"/>\n", aw->connect_timeout);
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_PREPOST_TO)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_printf(s, "value=\"%d\"/>\n", aw->prepost_timeout);
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REPLY_TO)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_printf(s, "value=\"%d\"/>\n", aw->reply_timeout);
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_RETRIES)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_printf(s, "value=\"%d\"/>\n", aw->retries);
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_RETRY_INT)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_printf(s, "value=\"%d\"/>\n", aw->retry_interval);
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CPING_INT)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_printf(s, "value=\"%d\"/>\n", aw->conn_ping_interval);
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REC_OPTS)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_printf(s, "value=\"%d\"/>\n", aw->recovery_opts);
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_MAX_PK_SZ)) {
- jk_printf(s, "<input name=\"" JK_STATUS_ARG_MULT_VALUE_BASE "%d\" type=\"text\"", i);
- jk_printf(s, "value=\"%d\"/>\n", aw->max_packet_size);
- }
-
- jk_puts(s, "</td></tr>");
- }
-
- jk_puts(s, "</table>\n");
- jk_puts(s, "<br/><input type=\"submit\" value=\"Update Balancer\"/></form>\n");
- }
- JK_TRACE_EXIT(l);
-}
-
-static void commit_worker(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_worker_t *jw,
- jk_logger_t *l)
-{
- const char *name = NULL;
- lb_worker_t *lb = NULL;
- status_worker_t *w = p->worker;
- const char *arg;
- int sync_needed = JK_FALSE;
- int i;
-
- JK_TRACE_ENTER(l);
- if (jw->type == JK_LB_WORKER_TYPE) {
- lb = (lb_worker_t *)jw->worker_private;
- name = lb->name;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' committing changes for lb worker '%s'",
- w->name, name);
- }
- else {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' worker type not implemented",
- w->name);
- JK_TRACE_EXIT(l);
- return;
- }
-
- if (!lb) {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' lb structure is (null)",
- w->name);
- JK_TRACE_EXIT(l);
- return;
- }
-
- i = status_get_int(p, JK_STATUS_ARG_LB_RETRIES,
- lb->retries, l);
- if (i != lb->retries && i > 0) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'retries' for lb worker '%s' to '%i'",
- w->name, name, i);
- lb->retries = i;
- sync_needed = JK_TRUE;
- }
- i = status_get_int(p, JK_STATUS_ARG_LB_RETRY_INT,
- lb->retry_interval, l);
- if (i != lb->retry_interval && i > 0) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'retry_interval' for lb worker '%s' to '%i'",
- w->name, name, i);
- lb->retry_interval = i;
- sync_needed = JK_TRUE;
- }
- i = status_get_int(p, JK_STATUS_ARG_LB_RECOVER_TIME,
- lb->recover_wait_time, l);
- if (i != lb->recover_wait_time && i > 0) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'recover_time' for lb worker '%s' to '%i'",
- w->name, name, i);
- lb->recover_wait_time = i;
- sync_needed = JK_TRUE;
- }
- i = status_get_int(p, JK_STATUS_ARG_LB_ERROR_ESCALATION_TIME,
- lb->error_escalation_time, l);
- if (i != lb->error_escalation_time && i > 0) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'error_escalation_time' for lb worker '%s' to '%i'",
- w->name, name, i);
- lb->error_escalation_time = i;
- sync_needed = JK_TRUE;
- }
- i = status_get_int(p, JK_STATUS_ARG_LB_MAX_REPLY_TIMEOUTS,
- lb->max_reply_timeouts, l);
- if (i != lb->max_reply_timeouts && i >= 0) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'max_reply_timeouts' for lb worker '%s' to '%i'",
- w->name, name, i);
- lb->max_reply_timeouts = i;
- sync_needed = JK_TRUE;
- }
- i = status_get_bool(p, JK_STATUS_ARG_LB_STICKY, lb->sticky_session, l);
- if (i != lb->sticky_session) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'sticky_session' for lb worker '%s' to '%i'",
- w->name, name, i);
- lb->sticky_session = i;
- sync_needed = JK_TRUE;
- }
- i = status_get_bool(p, JK_STATUS_ARG_LB_STICKY_FORCE, lb->sticky_session_force, l);
- if (i != lb->sticky_session_force) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'sticky_session_force' for lb worker '%s' to '%i'",
- w->name, name, i);
- lb->sticky_session_force = i;
- sync_needed = JK_TRUE;
- }
- if (status_get_string(p, JK_STATUS_ARG_LB_METHOD, NULL, &arg, l) == JK_TRUE) {
- i = jk_lb_get_method_code(arg);
- if (i != lb->lbmethod && i >= 0 && i <= JK_LB_METHOD_MAX) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'method' for lb worker '%s' to '%s'",
- w->name, name, jk_lb_get_method(lb, l));
- lb->lbmethod = i;
- sync_needed = JK_TRUE;
- }
- }
- if (status_get_string(p, JK_STATUS_ARG_LB_LOCK, NULL, &arg, l) == JK_TRUE) {
- i = jk_lb_get_lock_code(arg);
- if (i != lb->lblock && i >= 0 && i <= JK_LB_LOCK_MAX) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'lock' for lb worker '%s' to '%s'",
- w->name, name, jk_lb_get_lock(lb, l));
- lb->lblock = i;
- sync_needed = JK_TRUE;
- }
- }
- if (sync_needed == JK_TRUE) {
- lb->sequence++;
- jk_lb_push(lb, JK_TRUE, l);
- }
-}
-
-static int set_int_if_changed(status_endpoint_t *p,
- const char *name,
- const char *att,
- const char *arg,
- int min,
- int max,
- int *param,
- const char *lb_name,
- jk_logger_t *l)
-{
- int i;
- status_worker_t *w = p->worker;
- i = status_get_int(p, arg, *param, l);
- if (i != *param && i >= min && i <= max) {
- if (lb_name)
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting '%s' for sub worker '%s' of lb worker '%s' to '%i'",
- w->name, att, name, lb_name, i);
- else
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting '%s' for ajp worker '%s' to '%i'",
- w->name, att, name, i);
- *param = i;
- return JK_TRUE;
- }
- return JK_FALSE;
-}
-
-static int set_uint_if_changed(status_endpoint_t *p,
- const char *name,
- const char *att,
- const char *arg,
- unsigned int min,
- unsigned int max,
- unsigned int *param,
- const char *lb_name,
- jk_logger_t *l)
-{
- unsigned i;
- status_worker_t *w = p->worker;
- i = (unsigned)status_get_int(p, arg, *param, l);
- if (i != *param && i >= min && i <= max) {
- if (lb_name)
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting '%s' for sub worker '%s' of lb worker '%s' to '%u'",
- w->name, att, name, lb_name, i);
- else
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting '%s' for ajp worker '%s' to '%u'",
- w->name, att, name, i);
- *param = i;
- return JK_TRUE;
- }
- return JK_FALSE;
-}
-
-static int commit_member(jk_ws_service_t *s,
- status_endpoint_t *p,
- lb_worker_t *lb,
- lb_sub_worker_t *wr,
- ajp_worker_t *aw,
- int *side_effect,
- jk_logger_t *l)
-{
- const char *arg;
- const char *lb_name = NULL;
- status_worker_t *w = p->worker;
- int rc = JK_TRUE;
- int rv;
- int i;
- int old;
- int resolve = JK_FALSE;
- char host[JK_SHM_STR_SIZ+1];
- int port = 0;
-
- JK_TRACE_ENTER(l);
- if (lb) {
- lb_name = lb->name;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' committing changes for sub worker '%s' of lb worker '%s'",
- w->name, wr->name, lb_name);
- }
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' committing changes for ajp worker '%s'",
- w->name, aw->name);
- }
-
- if (lb) {
- if (status_get_string(p, JK_STATUS_ARG_LBM_ACTIVATION, NULL, &arg, l) == JK_TRUE) {
- i = jk_lb_get_activation_code(arg);
- if (i != wr->activation && i >= 0 && i <= JK_LB_ACTIVATION_MAX) {
- wr->activation = i;
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'activation' for sub worker '%s' of lb worker '%s' to '%s'",
- w->name, wr->name, lb_name, jk_lb_get_activation(wr, l));
- *side_effect |= JK_STATUS_NEEDS_RESET_LB_VALUES | JK_STATUS_NEEDS_PUSH;
- }
- }
- if (set_int_if_changed(p, wr->name, "lbfactor", JK_STATUS_ARG_LBM_FACTOR,
- 1, INT_MAX, &wr->lb_factor, lb_name, l))
- /* Recalculate the load multiplicators wrt. lb_factor */
- *side_effect |= JK_STATUS_NEEDS_UPDATE_MULT | JK_STATUS_NEEDS_PUSH;
- if ((rv = status_get_string(p, JK_STATUS_ARG_LBM_ROUTE,
- NULL, &arg, l)) == JK_TRUE) {
- if (strncmp(wr->route, arg, JK_SHM_STR_SIZ)) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'route' for sub worker '%s' of lb worker '%s' to '%s'",
- w->name, wr->name, lb_name, arg);
- strncpy(wr->route, arg, JK_SHM_STR_SIZ);
- *side_effect |= JK_STATUS_NEEDS_PUSH;
- if (!wr->domain[0]) {
- char * id_domain = strchr(wr->route, '.');
- if (id_domain) {
- *id_domain = '\0';
- strcpy(wr->domain, wr->route);
- *id_domain = '.';
- }
- }
- }
- }
- if ((rv = status_get_string(p, JK_STATUS_ARG_LBM_REDIRECT,
- NULL, &arg, l)) == JK_TRUE) {
- if (strncmp(wr->redirect, arg, JK_SHM_STR_SIZ)) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'redirect' for sub worker '%s' of lb worker '%s' to '%s'",
- w->name, wr->name, lb_name, arg);
- strncpy(wr->redirect, arg, JK_SHM_STR_SIZ);
- *side_effect |= JK_STATUS_NEEDS_PUSH;
- }
- }
- if ((rv = status_get_string(p, JK_STATUS_ARG_LBM_DOMAIN,
- NULL, &arg, l)) == JK_TRUE) {
- if (strncmp(wr->domain, arg, JK_SHM_STR_SIZ)) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'domain' for sub worker '%s' of lb worker '%s' to '%s'",
- w->name, wr->name, lb_name, arg);
- strncpy(wr->domain, arg, JK_SHM_STR_SIZ);
- *side_effect |= JK_STATUS_NEEDS_PUSH;
- }
- }
- if (set_int_if_changed(p, wr->name, "distance", JK_STATUS_ARG_LBM_DISTANCE,
- 0, INT_MAX, &wr->distance, lb_name, l))
- *side_effect |= JK_STATUS_NEEDS_PUSH;
- }
- old = aw->cache_timeout;
- if (set_int_if_changed(p, aw->name, "connection_pool_timeout", JK_STATUS_ARG_AJP_CACHE_TO,
- 0, INT_MAX, &aw->cache_timeout, lb_name, l)) {
- *side_effect |= JK_STATUS_NEEDS_PUSH;
- if (old == 0) {
- unsigned int i;
- for (i = 0; i < aw->ep_cache_sz; i++) {
- ajp_endpoint_t *ae = (ajp_endpoint_t *) aw->ep_cache[i];
- if (ae)
- ae->last_access = time(NULL);
- }
- }
- }
- port = aw->port;
- if (set_int_if_changed(p, aw->name, "port", JK_STATUS_ARG_AJP_PORT,
- 0, INT_MAX, &port, lb_name, l)) {
- strncpy(host, aw->host, JK_SHM_STR_SIZ);
- resolve = JK_TRUE;
- }
- if ((rv = status_get_string(p, JK_STATUS_ARG_AJP_HOST_STR,
- NULL, &arg, l)) == JK_TRUE) {
- if (strncmp(aw->host, arg, JK_SHM_STR_SIZ)) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'host' for sub worker '%s' to '%s'",
- w->name, aw->name, arg);
- strncpy(host, arg, JK_SHM_STR_SIZ);
- resolve = JK_TRUE;
- }
- }
- if (resolve == JK_TRUE) {
- struct sockaddr_in inet_addr;
- if (!jk_resolve(host, port, &inet_addr,
- aw->worker.we->pool, l)) {
- const char *msg = "Update failed (at least partially): could not resolve address '%s:%d' for sub worker '%s'.";
- size_t size = strlen(msg) + strlen(host) + strlen(aw->name) + 10 + 1;
- p->msg = jk_pool_alloc(s->pool, size);
- snprintf(p->msg, size, msg, host, port, aw->name);
- jk_log(l, JK_LOG_ERROR,
- "Status worker '%s' failed resolving address '%s:%d' for sub worker '%s'.",
- w->name, host, port, aw->name);
- rc = JK_FALSE;
- }
- else {
- /* This is not atomic and not thread safe */
- aw->port = port;
- strncpy(aw->host, host, JK_SHM_STR_SIZ);
- memcpy(&(aw->worker_inet_addr), &inet_addr, sizeof(inet_addr));
- *side_effect |= JK_STATUS_NEEDS_PUSH | JK_STATUS_NEEDS_ADDR_PUSH;
- }
- }
- if (set_int_if_changed(p, aw->name, "ping_timeout", JK_STATUS_ARG_AJP_PING_TO,
- 0, INT_MAX, &aw->ping_timeout, lb_name, l))
- *side_effect |= JK_STATUS_NEEDS_PUSH;
- if (set_int_if_changed(p, aw->name, "connect_timeout", JK_STATUS_ARG_AJP_CONNECT_TO,
- 0, INT_MAX, &aw->connect_timeout, lb_name, l))
- *side_effect |= JK_STATUS_NEEDS_PUSH;
- if (set_int_if_changed(p, aw->name, "prepost_timeout", JK_STATUS_ARG_AJP_PREPOST_TO,
- 0, INT_MAX, &aw->prepost_timeout, lb_name, l))
- *side_effect |= JK_STATUS_NEEDS_PUSH;
- if (set_int_if_changed(p, aw->name, "reply_timeout", JK_STATUS_ARG_AJP_REPLY_TO,
- 0, INT_MAX, &aw->reply_timeout, lb_name, l))
- *side_effect |= JK_STATUS_NEEDS_PUSH;
- if (set_int_if_changed(p, aw->name, "retries", JK_STATUS_ARG_AJP_RETRIES,
- 1, INT_MAX, &aw->retries, lb_name, l))
- *side_effect |= JK_STATUS_NEEDS_PUSH;
- if (set_int_if_changed(p, aw->name, "retry_interval", JK_STATUS_ARG_AJP_RETRY_INT,
- 1, INT_MAX, &aw->retry_interval, lb_name, l))
- *side_effect |= JK_STATUS_NEEDS_PUSH;
- if (set_int_if_changed(p, aw->name, "connection_ping_interval", JK_STATUS_ARG_AJP_CPING_INT,
- 1, INT_MAX, &aw->conn_ping_interval, lb_name, l))
- *side_effect |= JK_STATUS_NEEDS_PUSH;
- if (set_uint_if_changed(p, aw->name, "recovery_options", JK_STATUS_ARG_AJP_REC_OPTS,
- 0, INT_MAX, &aw->recovery_opts, lb_name, l))
- *side_effect |= JK_STATUS_NEEDS_PUSH;
- if (set_uint_if_changed(p, aw->name, "max_packet_size", JK_STATUS_ARG_AJP_MAX_PK_SZ,
- 8*1024, 64*1024, &aw->max_packet_size, lb_name, l)) {
- *side_effect |= JK_STATUS_NEEDS_PUSH;
- if (aw->max_packet_size > lb->max_packet_size) {
- lb->max_packet_size = aw->max_packet_size;
- }
- }
- return rc;
-}
-
-static void commit_all_members(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_worker_t *jw,
- const char *attribute,
- jk_logger_t *l)
-{
- const char *arg;
- char vname[32];
- const char *name = NULL;
- lb_worker_t *lb = NULL;
- status_worker_t *w = p->worker;
- const char *aname;
- int i;
- int rc = 0;
- unsigned int j;
-
- JK_TRACE_ENTER(l);
- if (!attribute) {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' missing request parameter '%s'",
- w->name, JK_STATUS_ARG_ATTRIBUTE);
- JK_TRACE_EXIT(l);
- return;
- }
- else {
- if (!strcmp(attribute, JK_STATUS_ARG_LBM_ACTIVATION))
- aname=JK_STATUS_ARG_LBM_TEXT_ACTIVATION;
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_FACTOR))
- aname=JK_STATUS_ARG_LBM_TEXT_FACTOR;
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_ROUTE))
- aname=JK_STATUS_ARG_LBM_TEXT_ROUTE;
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_REDIRECT))
- aname=JK_STATUS_ARG_LBM_TEXT_REDIRECT;
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DOMAIN))
- aname=JK_STATUS_ARG_LBM_TEXT_DOMAIN;
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DISTANCE))
- aname=JK_STATUS_ARG_LBM_TEXT_DISTANCE;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CACHE_TO))
- aname=JK_STATUS_ARG_AJP_TEXT_CACHE_TO;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_PING_TO))
- aname=JK_STATUS_ARG_AJP_TEXT_PING_TO;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CONNECT_TO))
- aname=JK_STATUS_ARG_AJP_TEXT_CONNECT_TO;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_PREPOST_TO))
- aname=JK_STATUS_ARG_AJP_TEXT_PREPOST_TO;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REPLY_TO))
- aname=JK_STATUS_ARG_AJP_TEXT_REPLY_TO;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_RETRIES))
- aname=JK_STATUS_ARG_AJP_TEXT_RETRIES;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_RETRY_INT))
- aname=JK_STATUS_ARG_AJP_TEXT_RETRY_INT;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CPING_INT))
- aname=JK_STATUS_ARG_AJP_TEXT_CPING_INT;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REC_OPTS))
- aname=JK_STATUS_ARG_AJP_TEXT_REC_OPTS;
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_MAX_PK_SZ))
- aname=JK_STATUS_ARG_AJP_TEXT_MAX_PK_SZ;
- else {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' unknown attribute '%s'",
- w->name, attribute);
- JK_TRACE_EXIT(l);
- return;
- }
- }
- if (jw->type == JK_LB_WORKER_TYPE) {
- lb = (lb_worker_t *)jw->worker_private;
- name = lb->name;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' committing changes for attribute '%s' [%s] of all members of lb worker '%s'",
- w->name, attribute, aname, name);
- }
- else {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' worker type not implemented",
- w->name);
- JK_TRACE_EXIT(l);
- return;
- }
-
- if (lb) {
- for (j = 0; j < lb->num_of_workers; j++) {
- int sync_needed = JK_FALSE;
- lb_sub_worker_t *wr = &(lb->lb_workers[j]);
- jk_worker_t *jw = wr->worker;
- ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;;
- snprintf(vname, 32-1, "" JK_STATUS_ARG_MULT_VALUE_BASE "%d", j);
-
- if (!strcmp(attribute, JK_STATUS_ARG_LBM_FACTOR)) {
- if (set_int_if_changed(p, wr->name, "lbfactor", vname,
- 1, INT_MAX, &wr->lb_factor, name, l)) {
- rc = 2;
- sync_needed = JK_TRUE;
- }
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DISTANCE)) {
- if (set_int_if_changed(p, wr->name, "distance", vname,
- 0, INT_MAX, &wr->distance, name, l))
- sync_needed = JK_TRUE;
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CACHE_TO)) {
- int old = aw->cache_timeout;
- if (set_int_if_changed(p, aw->name, "connection_pool_timeout", vname,
- 0, INT_MAX, &aw->cache_timeout, name, l)) {
- sync_needed = JK_TRUE;
- if (old == 0) {
- unsigned int i;
- for (i = 0; i < aw->ep_cache_sz; i++) {
- ajp_endpoint_t *ae = (ajp_endpoint_t *) aw->ep_cache[i];
- if (ae)
- ae->last_access = time(NULL);
- }
- }
- }
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_PING_TO)) {
- if (set_int_if_changed(p, aw->name, "ping_timeout", vname,
- 0, INT_MAX, &aw->ping_timeout, name, l))
- sync_needed = JK_TRUE;
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CONNECT_TO)) {
- if (set_int_if_changed(p, aw->name, "connect_timeout", vname,
- 0, INT_MAX, &aw->connect_timeout, name, l))
- sync_needed = JK_TRUE;
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_PREPOST_TO)) {
- if (set_int_if_changed(p, aw->name, "prepost_timeout", vname,
- 0, INT_MAX, &aw->prepost_timeout, name, l))
- sync_needed = JK_TRUE;
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REPLY_TO)) {
- if (set_int_if_changed(p, aw->name, "reply_timeout", vname,
- 0, INT_MAX, &aw->reply_timeout, name, l))
- sync_needed = JK_TRUE;
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_RETRIES)) {
- if (set_int_if_changed(p, aw->name, "retries", vname,
- 1, INT_MAX, &aw->retries, name, l))
- sync_needed = JK_TRUE;
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_RETRY_INT)) {
- if (set_int_if_changed(p, aw->name, "retry_interval", vname,
- 1, INT_MAX, &aw->retry_interval, name, l))
- sync_needed = JK_TRUE;
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_CPING_INT)) {
- if (set_int_if_changed(p, aw->name, "connection_ping_interval", vname,
- 1, INT_MAX, &aw->conn_ping_interval, name, l))
- sync_needed = JK_TRUE;
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_REC_OPTS)) {
- if (set_uint_if_changed(p, aw->name, "recovery_options", vname,
- 0, INT_MAX, &aw->recovery_opts, name, l))
- sync_needed = JK_TRUE;
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_AJP_MAX_PK_SZ)) {
- if (set_uint_if_changed(p, aw->name, "max_packet_size", vname,
- 8*1024, 64*1024, &aw->max_packet_size, name, l)) {
- sync_needed = JK_TRUE;
- if (aw->max_packet_size > lb->max_packet_size) {
- lb->max_packet_size = aw->max_packet_size;
- }
- }
- }
- else {
- int rv = status_get_string(p, vname, NULL, &arg, l);
- if (!strcmp(attribute, JK_STATUS_ARG_LBM_ACTIVATION)) {
- if (rv == JK_TRUE) {
- i = jk_lb_get_activation_code(arg);
- if (i != wr->activation && i >= 0 && i <= JK_LB_ACTIVATION_MAX) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'activation' for sub worker '%s' of lb worker '%s' to '%s'",
- w->name, wr->name, name, jk_lb_get_activation(wr, l));
- wr->activation = i;
- rc = 1;
- sync_needed = JK_TRUE;
- }
- }
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_ROUTE)) {
- if (rv == JK_TRUE) {
- if (strncmp(wr->route, arg, JK_SHM_STR_SIZ)) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'route' for sub worker '%s' of lb worker '%s' to '%s'",
- w->name, wr->name, name, arg);
- strncpy(wr->route, arg, JK_SHM_STR_SIZ);
- sync_needed = JK_TRUE;
- if (!wr->domain[0]) {
- char * id_domain = strchr(wr->route, '.');
- if (id_domain) {
- *id_domain = '\0';
- strcpy(wr->domain, wr->route);
- *id_domain = '.';
- }
- }
- }
- }
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_REDIRECT)) {
- if (rv == JK_TRUE) {
- if (strncmp(wr->redirect, arg, JK_SHM_STR_SIZ)) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'redirect' for sub worker '%s' of lb worker '%s' to '%s'",
- w->name, wr->name, name, arg);
- strncpy(wr->redirect, arg, JK_SHM_STR_SIZ);
- sync_needed = JK_TRUE;
- }
- }
- }
- else if (!strcmp(attribute, JK_STATUS_ARG_LBM_DOMAIN)) {
- if (rv == JK_TRUE) {
- if (strncmp(wr->domain, arg, JK_SHM_STR_SIZ)) {
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' setting 'domain' for sub worker '%s' of lb worker '%s' to '%s'",
- w->name, wr->name, name, arg);
- strncpy(wr->domain, arg, JK_SHM_STR_SIZ);
- sync_needed = JK_TRUE;
- }
- }
- }
- }
- if (sync_needed == JK_TRUE) {
- wr->sequence++;
- if (!rc)
- rc = 3;
- }
- }
- if (rc == 1)
- reset_lb_values(lb, l);
- else if (rc == 2)
- /* Recalculate the load multiplicators wrt. lb_factor */
- update_mult(lb, l);
- if (rc) {
- lb->sequence++;
- jk_lb_push(lb, JK_TRUE, l);
- }
- }
- JK_TRACE_EXIT(l);
-}
-
-static void display_legend(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_logger_t *l)
-{
-
- int mime;
- const char *arg;
- unsigned int hide_legend;
-
- JK_TRACE_ENTER(l);
- status_get_string(p, JK_STATUS_ARG_MIME, NULL, &arg, l);
- mime = status_mime_int(arg);
- if (mime != JK_STATUS_MIME_HTML) {
- JK_TRACE_EXIT(l);
- return;
- }
- hide_legend = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
- JK_STATUS_ARG_OPTION_NO_LEGEND;
- if (hide_legend) {
- jk_puts(s, "<p>\n");
- status_write_uri(s, p, "Show Legend", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_LEGEND, NULL, l);
- jk_puts(s, "</p>\n");
- }
- else {
- jk_puts(s, "<h2>Legend [");
- status_write_uri(s, p, "Hide", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, JK_STATUS_ARG_OPTION_NO_LEGEND, 0, NULL, l);
- jk_puts(s, "]</h2>\n");
-
- jk_puts(s, "<table>\n"
- "<tbody valign=\"baseline\">\n"
- "<tr><th>Name</th><td>Worker name</td></tr>\n"
- "<tr><th>Type</th><td>Worker type</td></tr>\n"
- "<tr><th>Route</th><td>Worker route</td></tr>\n"
- "<tr><th>Act</th><td>Worker activation configuration<br/>\n"
- "ACT=Active, DIS=Disabled, STP=Stopped</td></tr>\n"
- "<tr><th>State</th><td>Worker error status<br/>\n"
- "OK=OK, ERR=Error with substates<br/>\n"
- "IDLE=No requests handled, BUSY=All connections busy,<br/>\n"
- "REC=Recovering, PRB=Probing, FRC=Forced Recovery</td></tr>\n"
- "<tr><th>D</th><td>Worker distance</td></tr>\n"
- "<tr><th>F</th><td>Load Balancer factor</td></tr>\n"
- "<tr><th>M</th><td>Load Balancer multiplicity</td></tr>\n"
- "<tr><th>V</th><td>Load Balancer value</td></tr>\n"
- "<tr><th>Acc</th><td>Number of requests</td></tr>\n"
- "<tr><th>Err</th><td>Number of failed requests</td></tr>\n"
- "<tr><th>CE</th><td>Number of client errors</td></tr>\n"
- "<tr><th>RE</th><td>Number of reply timeouts (decayed)</td></tr>\n"
- "<tr><th>Wr</th><td>Number of bytes transferred</td></tr>\n"
- "<tr><th>Rd</th><td>Number of bytes read</td></tr>\n"
- "<tr><th>Busy</th><td>Current number of busy connections</td></tr>\n"
- "<tr><th>Max</th><td>Maximum number of busy connections</td></tr>\n"
- "<tr><th>Con</th><td>Current number of backend connections</td></tr>\n"
- "<tr><th>RR</th><td>Route redirect</td></tr>\n"
- "<tr><th>Cd</th><td>Cluster domain</td></tr>\n"
- "<tr><th>Rs</th><td>Recovery scheduled in app. min/max seconds</td></tr>\n"
- "<tr><th>LR</th><td>Seconds since last reset of statistics counters</td></tr>\n"
- "<tr><th>LE</th><td>Timestamp of the last error</td></tr>\n"
- "</tbody>\n"
- "</table>\n");
- }
-
- JK_TRACE_EXIT(l);
-}
-
-static int check_worker(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_uint32_t allow_wildchars,
- jk_logger_t *l)
-{
- const char *worker;
- const char *sub_worker;
- status_worker_t *w = p->worker;
- jk_worker_t *jw = NULL;
- lb_sub_worker_t *wr = NULL;
-
- JK_TRACE_ENTER(l);
- if (fetch_worker_and_sub_worker(p, "checking", &worker, &sub_worker, l) == JK_FALSE ||
- search_worker(s, p, &jw, worker, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (sub_worker && sub_worker[0]) {
- unsigned int idx = 0;
- unsigned int *wi = NULL;
- if (strchr(sub_worker, '*') || strchr(sub_worker, '?')) {
- /* We have a wildchar matching rule */
- if (!allow_wildchars) {
- jk_log(l, JK_LOG_ERROR,
- "Status worker '%s' wildcards in sub worker '%s' of worker '%s' not allowed for this command",
- w->name, sub_worker, worker ? worker : "(null)");
- p->msg = "wildcard not allowed in sub worker for this command";
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- else {
- wi = &idx;
- }
- }
- if (search_sub_worker(s, p, jw, worker, &wr, sub_worker,
- wi, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static void count_workers(jk_ws_service_t *s,
- status_endpoint_t *p,
- int *lb_cnt, int *ajp_cnt,
- jk_logger_t *l)
-{
- unsigned int i;
- jk_worker_t *jw = NULL;
- status_worker_t *w = p->worker;
-
- JK_TRACE_ENTER(l);
- *lb_cnt = 0;
- *ajp_cnt = 0;
- for (i = 0; i < w->we->num_of_workers; i++) {
- jw = wc_get_worker_for_name(w->we->worker_list[i], l);
- if (!jw) {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' could not find worker '%s'",
- w->name, w->we->worker_list[i]);
- continue;
- }
- if (jw->type == JK_LB_WORKER_TYPE) {
- (*lb_cnt)++;
- }
- else if (jw->type == JK_AJP13_WORKER_TYPE ||
- jw->type == JK_AJP14_WORKER_TYPE) {
- (*ajp_cnt)++;
- }
- }
- JK_TRACE_EXIT(l);
-}
-
-static void list_workers_type(jk_ws_service_t *s,
- status_endpoint_t *p,
- int list_lb, int count,
- jk_logger_t *l)
-{
-
- const char *arg;
- unsigned int i;
- int mime;
- unsigned int hide;
- jk_worker_t *jw = NULL;
- status_worker_t *w = p->worker;
-
- JK_TRACE_ENTER(l);
-
- status_get_string(p, JK_STATUS_ARG_MIME, NULL, &arg, l);
- mime = status_mime_int(arg);
- if (list_lb) {
- hide = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
- JK_STATUS_ARG_OPTION_NO_LB;
- if (hide) {
- if (mime == JK_STATUS_MIME_HTML) {
- jk_puts(s, "<p>\n");
- status_write_uri(s, p, "Show Load Balancing Workers", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_LB, NULL, l);
- jk_puts(s, "</p>\n");
- }
- }
- else {
- if (mime == JK_STATUS_MIME_XML) {
- jk_print_xml_start_elt(s, w, 0, 0, "balancers");
- jk_print_xml_att_int(s, 2, "count", count);
- jk_print_xml_stop_elt(s, 0, 0);
- }
- else if (mime == JK_STATUS_MIME_TXT) {
- jk_printf(s, "Balancer Workers: count=%d\n", count);
- }
- else if (mime == JK_STATUS_MIME_PROP) {
- jk_print_prop_att_int(s, w, NULL, "lb_count", count);
- }
- else {
- jk_printf(s, "<hr/><h2>Listing Load Balancing Worker%s (%d Worker%s) [",
- count>1 ? "s" : "", count, count>1 ? "s" : "");
- status_write_uri(s, p, "Hide", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, JK_STATUS_ARG_OPTION_NO_LB, 0, NULL, l);
- jk_puts(s, "]</h2>\n");
- }
- }
- }
- else {
- hide = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
- JK_STATUS_ARG_OPTION_NO_AJP;
- if (hide) {
- if (mime == JK_STATUS_MIME_HTML) {
- jk_puts(s, "<p>\n");
- status_write_uri(s, p, "Show AJP Workers", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_NO_AJP, NULL, l);
- jk_puts(s, "</p>\n");
- }
- }
- else {
- if (mime == JK_STATUS_MIME_XML) {
- jk_print_xml_start_elt(s, w, 0, 0, "ajp_workers");
- jk_print_xml_att_int(s, 2, "count", count);
- jk_print_xml_stop_elt(s, 0, 0);
- }
- else if (mime == JK_STATUS_MIME_TXT) {
- jk_printf(s, "AJP Workers: count=%d\n", count);
- }
- else if (mime == JK_STATUS_MIME_PROP) {
- jk_print_prop_att_int(s, w, NULL, "ajp_count", count);
- }
- else {
- jk_printf(s, "<hr/><h2>Listing AJP Worker%s (%d Worker%s) [",
- count>1 ? "s" : "", count, count>1 ? "s" : "");
- status_write_uri(s, p, "Hide", JK_STATUS_CMD_UNKNOWN, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, JK_STATUS_ARG_OPTION_NO_AJP, 0, NULL, l);
- jk_puts(s, "]</h2>\n");
- }
- }
- }
-
- if (hide) {
- JK_TRACE_EXIT(l);
- return;
- }
-
- for (i = 0; i < w->we->num_of_workers; i++) {
- jw = wc_get_worker_for_name(w->we->worker_list[i], l);
- if (!jw) {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' could not find worker '%s'",
- w->name, w->we->worker_list[i]);
- continue;
- }
- if ((list_lb && jw->type == JK_LB_WORKER_TYPE) ||
- (!list_lb && jw->type != JK_LB_WORKER_TYPE)) {
- display_worker(s, p, jw, NULL, l);
- }
- }
-
- if (list_lb) {
- if (mime == JK_STATUS_MIME_XML) {
- jk_print_xml_close_elt(s, w, 0, "balancers");
- }
- else if (mime == JK_STATUS_MIME_TXT) {
- }
- else if (mime == JK_STATUS_MIME_PROP) {
- }
- else if (mime == JK_STATUS_MIME_HTML) {
- }
- }
- else {
- if (mime == JK_STATUS_MIME_XML) {
- jk_print_xml_close_elt(s, w, 0, "ajp_workers");
- }
- else if (mime == JK_STATUS_MIME_TXT) {
- }
- else if (mime == JK_STATUS_MIME_PROP) {
- }
- else if (mime == JK_STATUS_MIME_HTML) {
- }
- }
-
- JK_TRACE_EXIT(l);
-}
-
-static int list_workers(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_logger_t *l)
-{
- int lb_cnt = 0;
- int ajp_cnt = 0;
-
- JK_TRACE_ENTER(l);
- count_workers(s, p, &lb_cnt, &ajp_cnt, l);
-
- if (lb_cnt) {
- list_workers_type(s, p, 1, lb_cnt, l);
- }
-
- if (ajp_cnt) {
- list_workers_type(s, p, 0, ajp_cnt, l);
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static int show_worker(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_logger_t *l)
-{
- const char *worker;
- const char *sub_worker;
- jk_worker_t *jw = NULL;
- lb_sub_worker_t *wr = NULL;
-
- JK_TRACE_ENTER(l);
- if (fetch_worker_and_sub_worker(p, "showing", &worker, &sub_worker, l) == JK_FALSE ||
- search_worker(s, p, &jw, worker, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if (sub_worker && sub_worker[0]) {
- if (search_sub_worker(s, p, jw, worker, &wr, sub_worker,
- NULL, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- display_worker(s, p, jw, wr, l);
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static int edit_worker(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_logger_t *l)
-{
- const char *worker;
- const char *sub_worker;
- status_worker_t *w = p->worker;
- jk_worker_t *jw = NULL;
- lb_worker_t *lb = NULL;
- lb_sub_worker_t *wr = NULL;
- ajp_worker_t *aw = NULL;
-
- JK_TRACE_ENTER(l);
- if (fetch_worker_and_sub_worker(p, "editing", &worker, &sub_worker, l) == JK_FALSE ||
- search_worker(s, p, &jw, worker, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (jw->type == JK_LB_WORKER_TYPE) {
- if (check_valid_lb(s, p, jw, worker, &lb, 0, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (lb->sequence != lb->s->h.sequence)
- jk_lb_pull(lb, JK_FALSE, l);
- if (!sub_worker || !sub_worker[0]) {
- const char *arg;
- if (status_get_string(p, JK_STATUS_ARG_ATTRIBUTE,
- NULL, &arg, l) == JK_TRUE) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' %s lb worker '%s' with all sub workers",
- w->name, "editing", lb->name);
- form_all_members(s, p, jw, arg, l);
- }
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' %s lb worker '%s'",
- w->name, "editing", lb->name);
- form_worker(s, p, jw, l);
- }
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else {
- if (search_sub_worker(s, p, jw, worker, &wr, sub_worker,
- NULL, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' %s lb worker '%s' sub worker '%s'",
- w->name, "editing", lb->name, wr->name);
- aw = (ajp_worker_t *)wr->worker->worker_private;
- form_member(s, p, wr, aw, worker, l);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- }
- else if (jw->type == JK_AJP13_WORKER_TYPE ||
- jw->type == JK_AJP14_WORKER_TYPE) {
- ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;
- if (aw) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' %s ajp worker '%s'",
- w->name, "editing", aw->name);
- if (aw->sequence != aw->s->h.sequence)
- jk_ajp_pull(aw, JK_FALSE, l);
- form_member(s, p, NULL, aw, worker, l);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' aw worker is (null)",
- w->name);
- }
- }
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' worker type not implemented",
- w->name);
- }
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-static int update_worker(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_logger_t *l)
-{
- const char *worker;
- const char *sub_worker;
- status_worker_t *w = p->worker;
- jk_worker_t *jw = NULL;
- lb_worker_t *lb = NULL;
- lb_sub_worker_t *wr = NULL;
- ajp_worker_t *aw = NULL;
- int rc = JK_TRUE;
- int rv;
-
- JK_TRACE_ENTER(l);
- if (fetch_worker_and_sub_worker(p, "updating", &worker, &sub_worker, l) == JK_FALSE ||
- search_worker(s, p, &jw, worker, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (jw->type == JK_LB_WORKER_TYPE) {
- if (check_valid_lb(s, p, jw, worker, &lb, 0, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (lb->sequence != lb->s->h.sequence)
- jk_lb_pull(lb, JK_TRUE, l);
- if (!sub_worker || !sub_worker[0]) {
- const char *arg;
- if (status_get_string(p, JK_STATUS_ARG_ATTRIBUTE,
- NULL, &arg, l) == JK_TRUE) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' %s lb worker '%s' with all sub workers",
- w->name, "updating", lb->name);
- commit_all_members(s, p, jw, arg, l);
- }
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' %s lb worker '%s'",
- w->name, "updating", lb->name);
- commit_worker(s, p, jw, l);
- }
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else {
- unsigned int idx = 0;
- unsigned int *wi = NULL;
- int is_wildchar = JK_FALSE;
-
- if (strchr(sub_worker, '*') || strchr(sub_worker, '?')) {
- /* We have a wildchar matching rule */
- wi = &idx;
- is_wildchar = JK_TRUE;
- }
- for (;;) {
- if (search_sub_worker(s, p, jw, worker, &wr, sub_worker,
- wi, l) == JK_FALSE) {
- if (!idx) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- else {
- /* We have found at least one match previously */
- p->msg = "OK";
- break;
- }
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' %s lb worker '%s' sub worker '%s'",
- w->name, "updating", lb->name, wr->name);
- aw = (ajp_worker_t *)wr->worker->worker_private;
- rv = 0;
- rc = commit_member(s, p, lb, wr, aw, &rv, l);
- if (rv & JK_STATUS_NEEDS_ADDR_PUSH) {
- aw->addr_sequence++;
- }
- if (rv & (JK_STATUS_NEEDS_PUSH | JK_STATUS_NEEDS_ADDR_PUSH)) {
- wr->sequence++;
- lb->sequence++;
- jk_lb_push(lb, JK_TRUE, l);
- }
- if (rv & JK_STATUS_NEEDS_RESET_LB_VALUES)
- reset_lb_values(lb, l);
- if (rv & JK_STATUS_NEEDS_UPDATE_MULT)
- /* Recalculate the load multiplicators wrt. lb_factor */
- update_mult(lb, l);
- if (rc == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "Status worker '%s' failed updating sub worker '%s' (at least partially).%s",
- w->name, aw->name, (is_wildchar == JK_TRUE) ? " Aborting further wildcard updates." : "");
- if (!strncmp("OK", p->msg, 3)) {
- const char *msg = "Update failed (at least partially) for sub worker '%s'";
- size_t size = strlen(msg) + strlen(aw->name) + 1;
- p->msg = jk_pool_alloc(s->pool, size);
- snprintf(p->msg, size, msg, aw->name);
- }
- if (is_wildchar == JK_TRUE) {
- const char *msg = " Aborting further wildcard updates.";
- size_t size = strlen(msg) + strlen(p->msg) + 1;
- p->msg = jk_pool_realloc(s->pool, size, p->msg, strlen(p->msg) + 1);
- strcat(p->msg, msg);
- }
- break;
- }
- if (!wi)
- break;
- }
- JK_TRACE_EXIT(l);
- return rc;
- }
- }
- else if (jw->type == JK_AJP13_WORKER_TYPE ||
- jw->type == JK_AJP14_WORKER_TYPE) {
- ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;
- if (aw) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' %s ajp worker '%s'",
- w->name, "updating", aw->name);
- if (aw->sequence != aw->s->h.sequence)
- jk_ajp_pull(aw, JK_TRUE, l);
- rv = 0;
- rc = commit_member(s, p, NULL, NULL, aw, &rv, l);
- if (rv & JK_STATUS_NEEDS_ADDR_PUSH) {
- aw->addr_sequence++;
- }
- if (rv & (JK_STATUS_NEEDS_PUSH | JK_STATUS_NEEDS_ADDR_PUSH)) {
- aw->sequence++;
- jk_ajp_push(aw, JK_TRUE, l);
- }
- if (rc == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "Status worker '%s' failed updating worker '%s' (at least partially).",
- w->name, aw->name);
- if (!strncmp("OK", p->msg, 3)) {
- const char *msg = "Update failed (at least partially) for worker '%s'";
- size_t size = strlen(msg) + strlen(aw->name) + 1;
- p->msg = jk_pool_alloc(s->pool, size);
- snprintf(p->msg, size, msg, aw->name);
- }
- }
- JK_TRACE_EXIT(l);
- return rc;
- }
- else {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' aw worker is (null)",
- w->name);
- }
- }
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' worker type not implemented",
- w->name);
- }
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-static int reset_worker(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_logger_t *l)
-{
- unsigned int i;
- const char *worker;
- const char *sub_worker;
- status_worker_t *w = p->worker;
- jk_worker_t *jw = NULL;
- lb_worker_t *lb = NULL;
- lb_sub_worker_t *wr = NULL;
- ajp_worker_t *aw = NULL;
- time_t now = 0;
-
- JK_TRACE_ENTER(l);
- if (fetch_worker_and_sub_worker(p, "resetting", &worker, &sub_worker, l) == JK_FALSE ||
- search_worker(s, p, &jw, worker, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- now = time(NULL);
- if (jw->type == JK_LB_WORKER_TYPE) {
- if (check_valid_lb(s, p, jw, worker, &lb, 0, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (!sub_worker || !sub_worker[0]) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' %s lb worker '%s' with all sub workers",
- w->name, "resetting", lb->name);
- lb->s->max_busy = 0;
- lb->s->last_reset = now;
- for (i = 0; i < lb->num_of_workers; i++) {
- wr = &(lb->lb_workers[i]);
- aw = (ajp_worker_t *)wr->worker->worker_private;
- wr->s->state = JK_LB_STATE_IDLE;
- wr->s->elected_snapshot = 0;
- wr->s->error_time = 0;
- wr->s->errors = 0;
- wr->s->lb_value = 0;
- aw->s->used = 0;
- aw->s->client_errors = 0;
- aw->s->reply_timeouts = 0;
- aw->s->transferred = 0;
- aw->s->readed = 0;
- aw->s->max_busy = 0;
- aw->s->last_reset = now;
- }
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else {
- if (search_sub_worker(s, p, jw, worker, &wr, sub_worker,
- NULL, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' %s lb worker '%s' sub worker '%s'",
- w->name, "resetting", lb->name, wr->name);
- aw = (ajp_worker_t *)wr->worker->worker_private;
- wr->s->state = JK_LB_STATE_IDLE;
- wr->s->elected_snapshot = 0;
- wr->s->error_time = 0;
- wr->s->errors = 0;
- wr->s->lb_value = 0;
- aw->s->used = 0;
- aw->s->client_errors = 0;
- aw->s->reply_timeouts = 0;
- aw->s->transferred = 0;
- aw->s->readed = 0;
- aw->s->max_busy = 0;
- aw->s->last_reset = now;
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- }
- else if (jw->type == JK_AJP13_WORKER_TYPE ||
- jw->type == JK_AJP14_WORKER_TYPE) {
- ajp_worker_t *aw = (ajp_worker_t *)jw->worker_private;
- if (aw) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' %s ajp worker '%s'",
- w->name, "resetting", aw->name);
- aw->s->errors = 0;
- aw->s->used = 0;
- aw->s->client_errors = 0;
- aw->s->reply_timeouts = 0;
- aw->s->transferred = 0;
- aw->s->readed = 0;
- aw->s->max_busy = 0;
- aw->s->last_reset = now;
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else {
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' aw worker is (null)",
- w->name);
- }
- }
- else {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' worker type not implemented",
- w->name);
- }
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-static int recover_worker(jk_ws_service_t *s,
- status_endpoint_t *p,
- jk_logger_t *l)
-{
- const char *worker;
- const char *sub_worker;
- jk_worker_t *jw = NULL;
- lb_sub_worker_t *wr = NULL;
- ajp_worker_t *aw = NULL;
- status_worker_t *w = p->worker;
-
- JK_TRACE_ENTER(l);
- if (fetch_worker_and_sub_worker(p, "recovering", &worker, &sub_worker, l) == JK_FALSE ||
- search_worker(s, p, &jw, worker, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (search_sub_worker(s, p, jw, worker, &wr, sub_worker,
- NULL, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- aw = (ajp_worker_t *)wr->worker->worker_private;
- if (wr->s->state == JK_LB_STATE_ERROR) {
- lb_worker_t *lb = NULL;
-
- /* We need an lb to correct the lb_value */
- if (check_valid_lb(s, p, jw, worker, &lb, 0, l) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (lb->lbmethod != JK_LB_METHOD_BUSYNESS) {
- unsigned int i;
- jk_uint64_t curmax = 0;
-
- for (i = 0; i < lb->num_of_workers; i++) {
- if (lb->lb_workers[i].s->lb_value > curmax) {
- curmax = lb->lb_workers[i].s->lb_value;
- }
- }
- wr->s->lb_value = curmax;
- }
-
- aw->s->reply_timeouts = 0;
- wr->s->state = JK_LB_STATE_RECOVER;
- jk_log(l, JK_LOG_INFO,
- "Status worker '%s' marked worker '%s' sub worker '%s' for recovery",
- w->name, worker ? worker : "(null)", sub_worker ? sub_worker : "(null)");
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' could not mark worker '%s' sub worker '%s' for recovery - state %s is not an error state",
- w->name, worker ? worker : "(null)", sub_worker ? sub_worker : "(null)",
- jk_lb_get_state(wr, l));
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-static int dump_config(jk_ws_service_t *s,
- status_endpoint_t *p,
- int mime, jk_logger_t *l)
-{
- status_worker_t *w = p->worker;
- jk_worker_env_t *we = w->we;
- jk_map_t *init_data = we->init_data;
-
- JK_TRACE_ENTER(l);
-
- if (init_data) {
- int l = jk_map_size(init_data);
- int i;
- if (mime == JK_STATUS_MIME_HTML) {
- jk_puts(s, "<hr/><h2>Configuration Data</h2><hr/>\n");
- jk_puts(s, "This dump does not include any changes applied by the status worker\n");
- jk_puts(s, "to the configuration after the initial startup\n");
- jk_puts(s, "<PRE>\n");
- }
- else if (mime == JK_STATUS_MIME_XML) {
- jk_print_xml_start_elt(s, w, 2, 0, "configuration");
- }
- else if (mime == JK_STATUS_MIME_TXT) {
- jk_puts(s, "Configuration:\n");
- }
- for (i=0;i<l;i++) {
- const char *name = jk_map_name_at(init_data, i);
- if (name) {
- const char *value;
- size_t nl = strlen(name);
- if (nl > sizeof(".secret") &&
- strcmp(name + nl - 7, ".secret") == 0) {
- continue;
- }
- value = jk_map_value_at(init_data, i);
- if (!value)
- value = "(null)";
- if (mime == JK_STATUS_MIME_HTML ||
- mime == JK_STATUS_MIME_PROP ||
- mime == JK_STATUS_MIME_TXT) {
- jk_putv(s, name, "=", value, "\n", NULL);
- }
- else if (mime == JK_STATUS_MIME_XML) {
- jk_print_xml_att_string(s, 4, name, value);
- }
- }
- }
- if (mime == JK_STATUS_MIME_HTML) {
- jk_puts(s, "</PRE>\n");
- }
- else if (mime == JK_STATUS_MIME_XML) {
- jk_print_xml_stop_elt(s, 2, 1);
- }
- }
- else {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-/*
- * Return values of service() method for status worker:
- * return value is_error reason
- * JK_FALSE JK_HTTP_SERVER_ERROR Invalid parameters (null values)
- * JK_TRUE JK_HTTP_OK All other cases
- */
-static int JK_METHOD service(jk_endpoint_t *e,
- jk_ws_service_t *s,
- jk_logger_t *l, int *is_error)
-{
- int cmd;
- jk_uint32_t cmd_props;
- int mime;
- int refresh;
- int read_only = 0;
- const char *arg;
- char *err = NULL;
- status_endpoint_t *p;
- status_worker_t *w;
- int denied = 0;
-
- JK_TRACE_ENTER(l);
-
- if (!e || !e->endpoint_private || !s || !is_error) {
- JK_LOG_NULL_PARAMS(l);
- if (is_error)
- *is_error = JK_HTTP_SERVER_ERROR;
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- p = e->endpoint_private;
- w = p->worker;
-
- /* Set returned error to OK */
- *is_error = JK_HTTP_OK;
-
- if (w->num_of_users) {
- if (s->remote_user) {
- unsigned int i;
- denied = 1;
- for (i = 0; i < w->num_of_users; i++) {
- if (w->user_case_insensitive) {
- if (!strcasecmp(s->remote_user, w->user_names[i])) {
- denied = 0;
- break;
- }
- }
- else {
- if (!strcmp(s->remote_user, w->user_names[i])) {
- denied = 0;
- break;
- }
- }
- }
- }
- else {
- denied = 2;
- }
- }
-
- /* Step 1: Process GET params and update configuration */
- if (status_parse_uri(s, p, l) != JK_TRUE) {
- err = "Error during parsing of URI";
- }
- status_get_string(p, JK_STATUS_ARG_CMD, NULL, &arg, l);
- cmd = status_cmd_int(arg);
- cmd_props = status_cmd_props(cmd);
- status_get_string(p, JK_STATUS_ARG_MIME, NULL, &arg, l);
- mime = status_mime_int(arg);
- refresh = status_get_int(p, JK_STATUS_ARG_REFRESH, 0, l);
- if (w->read_only) {
- read_only = 1;
- }
- else {
- read_only = status_get_int(p, JK_STATUS_ARG_OPTIONS, 0, l) &
- JK_STATUS_ARG_OPTION_READ_ONLY;
- }
-
- if (mime == JK_STATUS_MIME_HTML) {
- s->start_response(s, 200, "OK", headers_names, headers_vhtml, 3);
- jk_puts(s, JK_STATUS_HEAD);
- }
- else if (mime == JK_STATUS_MIME_XML) {
- s->start_response(s, 200, "OK", headers_names, headers_vxml, 3);
- jk_puts(s, JK_STATUS_XMLH);
- if (w->doctype) {
- jk_putv(s, w->doctype, "\n", NULL);
- }
- jk_print_xml_start_elt(s, w, 0, 0, "status");
- if (w->xmlns && strlen(w->xmlns))
- jk_putv(s, " ", w->xmlns, NULL);
- jk_print_xml_stop_elt(s, 0, 0);
- }
- else {
- s->start_response(s, 200, "OK", headers_names, headers_vtxt, 3);
- }
-
- if (denied == 0) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' service allowed for user '%s' [%s] from %s [%s]",
- w->name,
- s->remote_user ? s->remote_user : "(null)",
- s->auth_type ? s->auth_type : "(null)",
- s->remote_addr ? s->remote_addr : "(null)",
- s->remote_host ? s->remote_host : "(null)");
- }
- else if (denied == 1) {
- err = "Access denied.";
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' service denied for user '%s' [%s] from %s [%s]",
- w->name,
- s->remote_user ? s->remote_user : "(null)",
- s->auth_type ? s->auth_type : "(null)",
- s->remote_addr ? s->remote_addr : "(null)",
- s->remote_host ? s->remote_host : "(null)");
- }
- else if (denied == 2) {
- err = "Access denied.";
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' service denied (no user) [%s] from %s [%s]",
- w->name,
- s->remote_user ? s->remote_user : "(null)",
- s->auth_type ? s->auth_type : "(null)",
- s->remote_addr ? s->remote_addr : "(null)",
- s->remote_host ? s->remote_host : "(null)");
- }
- else {
- err = "Access denied.";
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' service denied (unknown reason) for user '%s' [%s] from %s [%s]",
- w->name,
- s->remote_user ? s->remote_user : "(null)",
- s->auth_type ? s->auth_type : "(null)",
- s->remote_addr ? s->remote_addr : "(null)",
- s->remote_host ? s->remote_host : "(null)");
- }
-
- if (!err) {
- if (read_only && !(cmd_props & JK_STATUS_CMD_PROP_READONLY)) {
- err = "This command is not allowed in read only mode.";
- }
- }
-
- if (!err) {
- if (cmd == JK_STATUS_CMD_UNKNOWN) {
- err = "Invalid command.";
- }
- else if (mime == JK_STATUS_MIME_UNKNOWN) {
- err = "Invalid mime type.";
- }
- else if (cmd_props & JK_STATUS_CMD_PROP_CHECK_WORKER &&
- (check_worker(s, p, cmd_props & JK_STATUS_CMD_PROP_WILDCARD, l) != JK_TRUE)) {
- err = p->msg;
- }
- }
-
- if (!err) {
- char buf_time[JK_STATUS_TIME_BUF_SZ];
- char buf_tz[JK_STATUS_TIME_BUF_SZ];
- time_t clock = time(NULL);
- long unix_seconds = (long)clock;
- int rc_time = status_strftime(clock, mime, buf_time, buf_tz, l);
- if (cmd == JK_STATUS_CMD_UPDATE) {
- /* lock shared memory */
- jk_shm_lock();
- if (update_worker(s, p, l) == JK_FALSE) {
- if (strncmp("OK", p->msg, 3))
- err = p->msg;
- else
- err = "Update failed";
- }
- /* unlock the shared memory */
- jk_shm_unlock();
- if (mime == JK_STATUS_MIME_HTML) {
- write_html_refresh_response(s, p, err, l);
- }
- }
- else if (cmd == JK_STATUS_CMD_RESET) {
- /* lock shared memory */
- jk_shm_lock();
- if (reset_worker(s, p, l) == JK_FALSE) {
- err = "Reset failed";
- }
- /* unlock the shared memory */
- jk_shm_unlock();
- if (mime == JK_STATUS_MIME_HTML) {
- write_html_refresh_response(s, p, err, l);
- }
- }
- else if (cmd == JK_STATUS_CMD_RECOVER) {
- /* lock shared memory */
- jk_shm_lock();
- if (recover_worker(s, p, l) == JK_FALSE) {
- err = "Marking worker for recovery failed";
- }
- /* unlock the shared memory */
- jk_shm_unlock();
- if (mime == JK_STATUS_MIME_HTML) {
- write_html_refresh_response(s, p, err, l);
- }
- }
- else {
- if (mime == JK_STATUS_MIME_XML) {
- jk_print_xml_start_elt(s, w, 0, 0, "server");
- jk_print_xml_att_string(s, 2, "name", s->server_name);
- jk_print_xml_att_int(s, 2, "port", s->server_port);
- jk_print_xml_stop_elt(s, 0, 1);
- if (cmd_props & JK_STATUS_CMD_PROP_HEAD) {
- if (rc_time > 0 ) {
- jk_print_xml_start_elt(s, w, 0, 0, "time");
- jk_print_xml_att_string(s, 2, "datetime", buf_time);
- jk_print_xml_att_string(s, 2, "tz", buf_tz);
- jk_print_xml_att_long(s, 2, "unix", unix_seconds);
- jk_print_xml_stop_elt(s, 0, 1);
- }
- jk_print_xml_start_elt(s, w, 0, 0, "software");
- jk_print_xml_att_string(s, 2, "web_server", s->server_software);
- jk_print_xml_att_string(s, 2, "jk_version", JK_FULL_EXPOSED_VERSION);
- jk_print_xml_stop_elt(s, 0, 1);
- }
- if (cmd == JK_STATUS_CMD_LIST) {
- /* Step 2: Display configuration */
- if (list_workers(s, p, l) != JK_TRUE) {
- err = "Error in listing the workers.";
- }
- }
- else if (cmd == JK_STATUS_CMD_SHOW) {
- /* Step 2: Display detailed configuration */
- if (show_worker(s, p, l) != JK_TRUE) {
- err = "Error in showing this worker.";
- }
- }
- }
- else if (mime == JK_STATUS_MIME_TXT) {
- jk_puts(s, "Server:");
- jk_printf(s, " name=%s", s->server_name);
- jk_printf(s, " port=%d", s->server_port);
- jk_puts(s, "\n");
- if (cmd_props & JK_STATUS_CMD_PROP_HEAD) {
- if (rc_time > 0) {
- jk_puts(s, "Time:");
- jk_printf(s, " datetime=%s", buf_time);
- jk_printf(s, " tz=%s", buf_tz);
- jk_printf(s, " unix=%ld", unix_seconds);
- jk_puts(s, "\n");
- }
- jk_puts(s, "Software:");
- jk_printf(s, " web_server=\"%s\"", s->server_software);
- jk_printf(s, " jk_version=%s", JK_FULL_EXPOSED_VERSION);
- jk_puts(s, "\n");
- }
- if (cmd == JK_STATUS_CMD_LIST) {
- /* Step 2: Display configuration */
- if (list_workers(s, p, l) != JK_TRUE) {
- err = "Error in listing the workers.";
- }
- }
- else if (cmd == JK_STATUS_CMD_SHOW) {
- /* Step 2: Display detailed configuration */
- if (show_worker(s, p, l) != JK_TRUE) {
- err = "Error in showing this worker.";
- }
- }
- }
- else if (mime == JK_STATUS_MIME_PROP) {
- jk_print_prop_att_string(s, w, NULL, "server_name", s->server_name);
- jk_print_prop_att_int(s, w, NULL, "server_port", s->server_port);
- if (cmd_props & JK_STATUS_CMD_PROP_HEAD) {
- if (rc_time > 0) {
- jk_print_prop_att_string(s, w, NULL, "time_datetime", buf_time);
- jk_print_prop_att_string(s, w, NULL, "time_tz", buf_tz);
- jk_print_prop_att_long(s, w, NULL, "time_unix", unix_seconds);
- }
- jk_print_prop_att_string(s, w, NULL, "web_server", s->server_software);
- jk_print_prop_att_string(s, w, NULL, "jk_version", JK_FULL_EXPOSED_VERSION);
- }
- if (cmd == JK_STATUS_CMD_LIST) {
- /* Step 2: Display configuration */
- if (list_workers(s, p, l) != JK_TRUE) {
- err = "Error in listing the workers.";
- }
- }
- else if (cmd == JK_STATUS_CMD_SHOW) {
- /* Step 2: Display detailed configuration */
- if (show_worker(s, p, l) != JK_TRUE) {
- err = "Error in showing this worker.";
- }
- }
- }
- else if (mime == JK_STATUS_MIME_HTML) {
- if (cmd_props & JK_STATUS_CMD_PROP_REFRESH &&
- refresh > 0) {
- jk_printf(s, "\n<meta http-equiv=\"Refresh\" content=\"%d;url=%s?%s\">",
- refresh, s->req_uri, p->query_string);
- }
- if (w->css) {
- jk_putv(s, "\n<link rel=\"stylesheet\" type=\"text/css\" href=\"",
- w->css, "\" />\n", NULL);
- }
- jk_puts(s, JK_STATUS_HEND);
- jk_puts(s, "<h1>JK Status Manager for ");
- jk_puts(s, s->server_name);
- jk_printf(s, ":%d", s->server_port);
- if (read_only) {
- jk_puts(s, " (read only)");
- }
- jk_puts(s, "</h1>\n\n");
- if (cmd_props & JK_STATUS_CMD_PROP_HEAD) {
- jk_putv(s, "<table><tr><td>Server Version:</td><td>",
- s->server_software, "</td><td>&nbsp;&nbsp;&nbsp;</td><td>", NULL);
- if (rc_time > 0) {
- jk_putv(s, "Server Time:</td><td>", buf_time, NULL);
- }
- jk_puts(s, "</td></tr>\n");
- jk_putv(s, "<tr><td>JK Version:</td><td>",
- JK_FULL_EXPOSED_VERSION, "</td><td></td><td>", NULL);
- jk_printf(s, "Unix Seconds:</td><td>%d", unix_seconds);
- jk_puts(s, "</td></tr></table>\n<hr/>\n");
- }
- jk_puts(s, "<table><tbody valign=\"baseline\"><tr>\n");
- if (cmd_props & JK_STATUS_CMD_PROP_REFRESH) {
- jk_puts(s, "<td>");
- if (refresh > 0) {
- const char *str = p->query_string;
- char *buf = jk_pool_alloc(s->pool, sizeof(char *) * (strlen(str)+1));
- int result = 0;
- size_t scan = 0;
- size_t len = strlen(JK_STATUS_ARG_REFRESH);
-
- while (str[scan] != '\0') {
- if (strncmp(&str[scan], JK_STATUS_ARG_REFRESH, len) == 0 &&
- str[scan+len] == '=') {
- scan += len + 1;
- while (str[scan] != '\0' && str[scan] != '&')
- scan++;
- if (str[scan] == '&')
- scan++;
- }
- else {
- if (result > 0 && str[scan] != '\0' && str[scan] != '&') {
- buf[result] = '&';
- result++;
- }
- while (str[scan] != '\0' && str[scan] != '&') {
- buf[result] = str[scan];
- result++;
- scan++;
- }
- if (str[scan] == '&')
- scan++;
- }
- }
- buf[result] = '\0';
-
- jk_putv(s, "[<a href=\"", s->req_uri, NULL);
- if (buf && buf[0])
- jk_putv(s, "?", buf, NULL);
- jk_puts(s, "\">Stop auto refresh</a>]");
- }
- else {
- status_start_form(s, p, "get", JK_STATUS_CMD_UNKNOWN, JK_STATUS_ARG_REFRESH, l);
- jk_puts(s, "<input type=\"submit\" value=\"Start auto refresh\"/>\n");
- jk_putv(s, "(every ",
- "<input name=\"", JK_STATUS_ARG_REFRESH,
- "\" type=\"text\" size=\"3\" value=\"",
- JK_STATUS_REFRESH_DEF "\"/> ",
- "seconds)", NULL);
- jk_puts(s, "</form>\n");
- }
- jk_puts(s, "</td><td>&nbsp;&nbsp;|&nbsp;&nbsp;</td>\n");
- }
- if (cmd_props & JK_STATUS_CMD_PROP_FMT) {
- jk_puts(s, "<td>\n");
- status_start_form(s, p, "get", JK_STATUS_CMD_UNKNOWN, JK_STATUS_ARG_MIME, l);
- jk_puts(s, "<input type=\"submit\" value=\"Change format\"/>\n");
- jk_putv(s, "<select name=\"", JK_STATUS_ARG_MIME, "\" size=\"1\">", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_MIME_TEXT_XML, "\">XML</option>", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_MIME_TEXT_PROP, "\">Properties</option>", NULL);
- jk_putv(s, "<option value=\"", JK_STATUS_MIME_TEXT_TXT, "\">Text</option>", NULL);
- jk_puts(s, "</select></form>\n");
- jk_puts(s, "</td>\n");
- }
- jk_puts(s, "</tr></table>\n");
- jk_puts(s, "<table><tbody valign=\"baseline\"><tr>\n");
- if (cmd_props & JK_STATUS_CMD_PROP_BACK_LINK) {
- int from;
- jk_puts(s, "<td>\n");
- status_get_string(p, JK_STATUS_ARG_FROM, NULL, &arg, l);
- from = status_cmd_int(arg);
- jk_puts(s, "[");
- if (cmd_props & JK_STATUS_CMD_PROP_BACK_LIST ||
- from == JK_STATUS_CMD_LIST) {
- status_write_uri(s, p, "Back to worker list", JK_STATUS_CMD_LIST, JK_STATUS_MIME_UNKNOWN,
- "", "", 0, 0, "", l);
- }
- else {
- status_write_uri(s, p, "Back to worker view", JK_STATUS_CMD_SHOW, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, 0, "", l);
- }
- jk_puts(s, "]&nbsp;&nbsp;");
- jk_puts(s, "</td>\n");
- }
- if (cmd_props & JK_STATUS_CMD_PROP_SWITCH_RO) {
- jk_puts(s, "<td>\n");
- if (!w->read_only) {
- jk_puts(s, "[");
- if (read_only) {
- status_write_uri(s, p, "Read/Write", 0, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, JK_STATUS_ARG_OPTION_READ_ONLY, NULL, l);
- }
- else {
- status_write_uri(s, p, "Read Only", 0, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, JK_STATUS_ARG_OPTION_READ_ONLY, 0, NULL, l);
- }
- jk_puts(s, "]&nbsp;&nbsp;\n");
- }
- jk_puts(s, "</td>\n");
- }
- if (cmd_props & JK_STATUS_CMD_PROP_DUMP_LINK) {
- jk_puts(s, "<td>\n");
- jk_puts(s, "[");
- status_write_uri(s, p, "Dump", JK_STATUS_CMD_DUMP, JK_STATUS_MIME_UNKNOWN,
- NULL, NULL, 0, 0, NULL, l);
- jk_puts(s, "]&nbsp;&nbsp;\n");
- jk_puts(s, "</td>\n");
- }
- if (cmd_props & JK_STATUS_CMD_PROP_LINK_HELP &&
- (cmd == JK_STATUS_CMD_LIST || !read_only)) {
- jk_puts(s, "<td>\n");
- jk_puts(s, "[");
- if (cmd == JK_STATUS_CMD_LIST) {
- jk_puts(s, "<b>S</b>=Show only this worker, ");
- }
- jk_puts(s, "<b>E</b>=Edit worker, <b>R</b>=Reset worker state, <b>T</b>=Try worker recovery");
- jk_puts(s, "]<br/>\n");
- jk_puts(s, "</td>\n");
- }
- jk_puts(s, "</tr></table>\n");
- if (cmd == JK_STATUS_CMD_LIST) {
- /* Step 2: Display configuration */
- if (list_workers(s, p, l) != JK_TRUE) {
- err = "Error in listing the workers.";
- }
- }
- else if (cmd == JK_STATUS_CMD_SHOW) {
- /* Step 2: Display detailed configuration */
- if (show_worker(s, p, l) != JK_TRUE) {
- err = "Error in showing this worker.";
- }
- }
- else if (cmd == JK_STATUS_CMD_EDIT) {
- /* Step 2: Display edit form */
- if (edit_worker(s, p, l) != JK_TRUE) {
- err = "Error in generating this worker's configuration form.";
- }
- }
- }
- if (cmd == JK_STATUS_CMD_DUMP) {
- if (dump_config(s, p, mime, l) == JK_FALSE) {
- err = "Dumping configuration failed";
- }
- }
- if (cmd_props & JK_STATUS_CMD_PROP_LEGEND) {
- display_legend(s, p, l);
- }
- }
- }
- if (err) {
- jk_log(l, JK_LOG_WARNING, "Status worker '%s': %s", w->name, err);
- if (mime == JK_STATUS_MIME_HTML) {
- jk_putv(s, "<p><b>Result: ERROR - ", err, "</b><br/>", NULL);
- jk_putv(s, "<a href=\"", s->req_uri, "\">JK Status Manager Start Page</a></p>", NULL);
- }
- else if (mime == JK_STATUS_MIME_XML) {
- jk_print_xml_start_elt(s, w, 2, 0, "result");
- jk_print_xml_att_string(s, 4, "type", "ERROR");
- jk_print_xml_att_string(s, 4, "message", err);
- jk_print_xml_stop_elt(s, 2, 1);
- }
- else if (mime == JK_STATUS_MIME_TXT) {
- jk_puts(s, "Result:");
- jk_printf(s, " type=%s", "ERROR");
- jk_printf(s, " message=\"%s\"", err);
- jk_puts(s, "\n");
- }
- else {
- jk_print_prop_att_string(s, w, "result", "type", "ERROR");
- jk_print_prop_att_string(s, w, "result", "message", err);
- }
- }
- else {
- if (mime == JK_STATUS_MIME_HTML) {
- jk_putv(s, "<p><a href=\"", s->req_uri, "\">JK Status Manager Start Page</a></p>", NULL);
- }
- else if (mime == JK_STATUS_MIME_XML) {
- jk_print_xml_start_elt(s, w, 2, 0, "result");
- jk_print_xml_att_string(s, 4, "type", "OK");
- jk_print_xml_att_string(s, 4, "message", "Action finished");
- jk_print_xml_stop_elt(s, 2, 1);
- }
- else if (mime == JK_STATUS_MIME_TXT) {
- jk_puts(s, "Result:");
- jk_printf(s, " type=%s", "OK");
- jk_printf(s, " message=\"%s\"", "Action finished");
- jk_puts(s, "\n");
- }
- else {
- jk_print_prop_att_string(s, w, "result", "type", "OK");
- jk_print_prop_att_string(s, w, "result", "message", "Action finished");
- }
- }
- if (mime == JK_STATUS_MIME_HTML) {
- if (w->css) {
- jk_putv(s, "<hr/><div class=\"footer\">", JK_STATUS_COPYRIGHT,
- "</div>\n", NULL);
- }
- else {
- jk_putv(s, "<hr/><p align=\"center\"><small>", JK_STATUS_COPYRIGHT,
- "</small></p>\n", NULL);
- }
- jk_puts(s, JK_STATUS_BEND);
- }
- else if (mime == JK_STATUS_MIME_XML) {
- jk_print_xml_close_elt(s, w, 0, "status");
- }
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static int JK_METHOD done(jk_endpoint_t **e, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (e && *e && (*e)->endpoint_private) {
- status_endpoint_t *p = (*e)->endpoint_private;
-
- jk_map_free(&(p->req_params));
- free(p);
- *e = NULL;
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
-
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-static int JK_METHOD validate(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (pThis && pThis->worker_private) {
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
-
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-static int JK_METHOD init(jk_worker_t *pThis,
- jk_map_t *props,
- jk_worker_env_t *we, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
- if (pThis && pThis->worker_private) {
- status_worker_t *p = pThis->worker_private;
- char **good_rating;
- unsigned int num_of_good;
- char **bad_rating;
- unsigned int num_of_bad;
- unsigned int i;
- p->we = we;
- p->css = jk_get_worker_style_sheet(props, p->name, NULL);
- p->prefix = jk_get_worker_prop_prefix(props, p->name, JK_STATUS_PREFIX_DEF);
- p->ns = jk_get_worker_name_space(props, p->name, JK_STATUS_NS_DEF);
- p->xmlns = jk_get_worker_xmlns(props, p->name, JK_STATUS_XMLNS_DEF);
- p->doctype = jk_get_worker_xml_doctype(props, p->name, NULL);
- p->read_only = jk_get_is_read_only(props, p->name);
- p->user_case_insensitive = jk_get_worker_user_case_insensitive(props, p->name);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' is %s and has css '%s', prefix '%s', name space '%s', xml name space '%s', document type '%s'",
- p->name,
- p->read_only ? "read-only" : "read/write",
- p->css ? p->css : "(null)",
- p->prefix ? p->prefix : "(null)",
- p->ns ? p->ns : "(null)",
- p->xmlns ? p->xmlns : "(null)",
- p->doctype ? p->doctype : "(null)");
- if (jk_get_worker_user_list(props, p->name,
- &(p->user_names),
- &(p->num_of_users)) && p->num_of_users) {
- for (i = 0; i < p->num_of_users; i++) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' restricting access to user '%s' case %s",
- p->name, p->user_names[i],
- p->user_case_insensitive ? "insensitive" : "sensitive");
- }
- }
- if (jk_get_worker_good_rating(props, p->name,
- &good_rating,
- &num_of_good) && num_of_good) {
- p->good_mask = 0;
- for (i = 0; i < num_of_good; i++) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' rating as good: '%s'",
- p->name, good_rating[i]);
- p->good_mask |= status_get_rating(good_rating[i], l);
- }
- }
- else {
- p->good_mask = JK_STATUS_MASK_GOOD_DEF;
- }
- if (jk_get_worker_bad_rating(props, p->name,
- &bad_rating,
- &num_of_bad) && num_of_bad) {
- p->bad_mask = 0;
- for (i = 0; i < num_of_bad; i++) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' rating as bad: '%s'",
- p->name, bad_rating[i]);
- p->bad_mask |= status_get_rating(bad_rating[i], l);
- }
- }
- else {
- p->bad_mask = JK_STATUS_MASK_BAD_DEF;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Status worker '%s' has good rating for '%08" JK_UINT32_T_HEX_FMT
- "' and bad rating for '%08" JK_UINT32_T_HEX_FMT "'",
- p->name,
- p->good_mask,
- p->bad_mask);
- if (p->good_mask & p->bad_mask)
- jk_log(l, JK_LOG_WARNING,
- "Status worker '%s' has non empty intersection '%08" JK_UINT32_T_HEX_FMT
- "' between good rating for '%08" JK_UINT32_T_HEX_FMT
- "' and bad rating for '%08" JK_UINT32_T_HEX_FMT "'",
- p->name,
- p->good_mask & p->bad_mask,
- p->good_mask,
- p->bad_mask);
- }
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static int JK_METHOD get_endpoint(jk_worker_t *pThis,
- jk_endpoint_t **pend, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (pThis && pThis->worker_private && pend) {
- status_endpoint_t *p = (status_endpoint_t *) malloc(sizeof(status_endpoint_t));
- p->worker = pThis->worker_private;
- p->endpoint.endpoint_private = p;
- p->endpoint.service = service;
- p->endpoint.done = done;
- p->req_params = NULL;
- p->msg = NULL;
- *pend = &p->endpoint;
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else {
- JK_LOG_NULL_PARAMS(l);
- }
-
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-static int JK_METHOD destroy(jk_worker_t **pThis, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (pThis && *pThis && (*pThis)->worker_private) {
- status_worker_t *private_data = (*pThis)->worker_private;
-
- jk_close_pool(&private_data->p);
- free(private_data);
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
-
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-int JK_METHOD status_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (NULL != name && NULL != w) {
- status_worker_t *private_data =
- (status_worker_t *) calloc(1, sizeof(status_worker_t));
-
- jk_open_pool(&private_data->p,
- private_data->buf,
- sizeof(jk_pool_atom_t) * TINY_POOL_SIZE);
-
- private_data->name = name;
-
- private_data->worker.worker_private = private_data;
- private_data->worker.validate = validate;
- private_data->worker.init = init;
- private_data->worker.get_endpoint = get_endpoint;
- private_data->worker.destroy = destroy;
-
- *w = &private_data->worker;
- JK_TRACE_EXIT(l);
- return JK_STATUS_WORKER_TYPE;
- }
- else {
- JK_LOG_NULL_PARAMS(l);
- }
-
- JK_TRACE_EXIT(l);
- return 0;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.h
deleted file mode 100644
index 59eb1260..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Status worker header file *
- * Author: Mladen Turk <mturk@jboss.com> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-#ifndef JK_STATUS_H
-#define JK_STATUS_H
-
-#include "jk_logger.h"
-#include "jk_service.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#define JK_STATUS_WORKER_NAME ("status")
-#define JK_STATUS_WORKER_TYPE (6)
-
-int JK_METHOD status_worker_factory(jk_worker_t **w,
- const char *name, jk_logger_t *l);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* JK_STATUS_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.lo
deleted file mode 100644
index 0185386d..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_status.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_status.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_status.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.o
deleted file mode 100644
index 3db458bf..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_status.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_types.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_types.h
deleted file mode 100644
index e8029377..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_types.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Platform specific, auto-detected types. *
- * Author: Rainer Jung <rjung@apache.org> *
- * Version: $Revision: 915199 $ *
- ***************************************************************************/
-
-#ifndef JK_TYPES_H
-#define JK_TYPES_H
-
-/* GENERATED FILE WARNING! DO NOT EDIT jk_types.h
- *
- * You must modify jk_types.h.in instead.
- *
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/* jk_uint32_t defines a four byte word */
-typedef unsigned int jk_uint32_t;
-
-/* And JK_UINT32_T_FMT */
-#define JK_UINT32_T_FMT "u"
-
-/* And JK_UINT32_T_HEX_FMT */
-#define JK_UINT32_T_HEX_FMT "x"
-
-/* jk_uint64_t defines a eight byte word */
-typedef unsigned long jk_uint64_t;
-
-/* And JK_UINT64_T_FMT */
-#define JK_UINT64_T_FMT "lu"
-
-/* And JK_UINT64_T_HEX_FMT */
-#define JK_UINT64_T_HEX_FMT "lx"
-
-/* And JK_PID_T_FMT */
-#define JK_PID_T_FMT "d"
-
-/* jk_pthread_t defines a eight byte word */
-typedef unsigned long jk_pthread_t;
-
-/* And JK_PTHREAD_T_FMT */
-#define JK_PTHREAD_T_FMT "lu"
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* JK_TYPES_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_types.h.in b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_types.h.in
deleted file mode 100644
index 6301b240..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_types.h.in
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Platform specific, auto-detected types. *
- * Author: Rainer Jung <rjung@apache.org> *
- * Version: $Revision: 915199 $ *
- ***************************************************************************/
-
-#ifndef JK_TYPES_H
-#define JK_TYPES_H
-
-/* GENERATED FILE WARNING! DO NOT EDIT jk_types.h
- *
- * You must modify jk_types.h.in instead.
- *
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/* jk_uint32_t defines a four byte word */
-typedef unsigned @int32_value@ jk_uint32_t;
-
-/* And JK_UINT32_T_FMT */
-@uint32_t_fmt@
-
-/* And JK_UINT32_T_HEX_FMT */
-@uint32_t_hex_fmt@
-
-/* jk_uint64_t defines a eight byte word */
-typedef unsigned @int64_value@ jk_uint64_t;
-
-/* And JK_UINT64_T_FMT */
-@uint64_t_fmt@
-
-/* And JK_UINT64_T_HEX_FMT */
-@uint64_t_hex_fmt@
-
-/* And JK_PID_T_FMT */
-@pid_t_fmt@
-
-/* jk_pthread_t defines a eight byte word */
-typedef unsigned @pthread_t_value@ jk_pthread_t;
-
-/* And JK_PTHREAD_T_FMT */
-@pthread_t_fmt@
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* JK_TYPES_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.c
deleted file mode 100644
index d652f769..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.c
+++ /dev/null
@@ -1,1191 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: URI to worker map object. *
- * *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Author: Mladen Turk <mturk@apache.org> *
- * Version: $Revision: 890739 $ *
- ***************************************************************************/
-
-#include "jk_pool.h"
-#include "jk_util.h"
-#include "jk_map.h"
-#include "jk_mt.h"
-#include "jk_uri_worker_map.h"
-#include "jk_worker.h"
-#include "jk_lb_worker.h"
-
-#ifdef WIN32
-#define JK_STRCMP strcasecmp
-#define JK_STRNCMP strnicmp
-#else
-#define JK_STRCMP strcmp
-#define JK_STRNCMP strncmp
-#endif
-
-#define JK_UWMAP_EXTENSION_REPLY_TIMEOUT "reply_timeout="
-#define JK_UWMAP_EXTENSION_ACTIVE "active="
-#define JK_UWMAP_EXTENSION_DISABLED "disabled="
-#define JK_UWMAP_EXTENSION_STOPPED "stopped="
-#define JK_UWMAP_EXTENSION_FAIL_ON_STATUS "fail_on_status="
-#define JK_UWMAP_EXTENSION_USE_SRV_ERRORS "use_server_errors="
-
-#define IND_SWITCH(x) (((x)+1) % 2)
-#define IND_THIS(x) ((x)[uw_map->index])
-#define IND_NEXT(x) ((x)[IND_SWITCH(uw_map->index)])
-
-#define STRNULL_FOR_NULL(x) ((x) ? (x) : "(null)")
-
-static const char *uri_worker_map_source_type[] = {
- "unknown",
- SOURCE_TYPE_TEXT_WORKERDEF,
- SOURCE_TYPE_TEXT_JKMOUNT,
- SOURCE_TYPE_TEXT_URIMAP,
- SOURCE_TYPE_TEXT_DISCOVER,
- NULL
-};
-
-
-/* Return the string representation of the uwr source */
-const char *uri_worker_map_get_source(uri_worker_record_t *uwr, jk_logger_t *l)
-{
- return uri_worker_map_source_type[uwr->source_type];
-}
-
-/* Return the string representation of the uwr match type */
-char *uri_worker_map_get_match(uri_worker_record_t *uwr, char *buf, jk_logger_t *l)
-{
- unsigned int match;
-
- buf[0] = '\0';
- match = uwr->match_type;
-
- if (match & MATCH_TYPE_DISABLED)
- strcat(buf, "Disabled ");
-/* deprecated
- if (match & MATCH_TYPE_STOPPED)
- strcat(buf, "Stopped ");
- */
- if (match & MATCH_TYPE_NO_MATCH)
- strcat(buf, "Unmount ");
- if (match & MATCH_TYPE_EXACT)
- strcat(buf, "Exact");
- else if (match & MATCH_TYPE_WILDCHAR_PATH)
- strcat(buf, "Wildchar");
-/* deprecated
- else if (match & MATCH_TYPE_CONTEXT)
- strcat(buf, "Context");
- else if (match & MATCH_TYPE_CONTEXT_PATH)
- strcat(buf, "Context Path");
- else if (match & MATCH_TYPE_SUFFIX)
- strcat(buf, "Suffix");
- else if (match & MATCH_TYPE_GENERAL_SUFFIX)
- return "General Suffix";
- */
- else
- strcat(buf, "Unknown");
- return buf;
-}
-
-/*
- * Given context uri, count the number of path tokens.
- *
- * Servlet specification 2.4, SRV.11.1 says
-
- * The container will recursively try tomatch the longest
- * path-prefix. This is done by stepping down the path tree a
- * directory at a time, using the / character as a path
- * separator. The longest match determines the servlet selected.
- *
- * The implication seems to be `most uri path elements is most exact'.
- * This is a little helper function to count uri tokens, so we can
- * keep the worker map sorted with most specific first.
- */
-static int worker_count_context_uri_tokens(const char * context)
-{
- const char * c = context;
- int count = 0;
- while (c && *c) {
- if ('/' == *c++)
- count++;
- }
- return count;
-}
-
-static int worker_compare(const void *elem1, const void *elem2)
-{
- uri_worker_record_t *e1 = *(uri_worker_record_t **)elem1;
- uri_worker_record_t *e2 = *(uri_worker_record_t **)elem2;
- int e1_tokens = 0;
- int e2_tokens = 0;
-
- e1_tokens = worker_count_context_uri_tokens(e1->context);
- e2_tokens = worker_count_context_uri_tokens(e2->context);
-
- if (e1_tokens != e2_tokens) {
- return (e2_tokens - e1_tokens);
- }
- /* given the same number of URI tokens, use character
- * length as a tie breaker
- */
- if(e2->context_len != e1->context_len)
- return ((int)e2->context_len - (int)e1->context_len);
-
- return ((int)e2->source_type - (int)e1->source_type);
-}
-
-static void worker_qsort(jk_uri_worker_map_t *uw_map)
-{
-
- /* Sort remaining args using Quicksort algorithm: */
- qsort((void *)IND_NEXT(uw_map->maps), IND_NEXT(uw_map->size),
- sizeof(uri_worker_record_t *), worker_compare );
-
-}
-
-/* Dump the map contents - only call if debug log is active. */
-static void uri_worker_map_dump(jk_uri_worker_map_t *uw_map,
- const char *reason, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
- if (uw_map) {
- int i, off, k;
- uri_worker_record_t *uwr = NULL;
- char buf[32];
- jk_log(l, JK_LOG_DEBUG, "uri map dump %s: index=%d file='%s' reject_unsafe=%d "
- "reload=%d modified=%d checked=%d",
- reason, uw_map->index, STRNULL_FOR_NULL(uw_map->fname), uw_map->reject_unsafe,
- uw_map->reload, uw_map->modified, uw_map->checked);
- for(i=0;i<=1;i++) {
- jk_log(l, JK_LOG_DEBUG, "generation %d: size=%d nosize=%d capacity=%d",
- i, uw_map->size[i], uw_map->nosize[i], uw_map->capacity[i], uw_map->maps[i]);
- }
-
- off = uw_map->index;
- for(i=0;i<=1;i++) {
- unsigned int j;
- k = (i + off) % 2;
- for (j = 0; j < uw_map->size[k]; j++) {
- uwr = uw_map->maps[k][j];
- jk_log(l, JK_LOG_DEBUG, "%s (%d) map #%d: uri=%s worker=%s context=%s "
- "source=%s type=%s len=%d",
- i ? "NEXT" : "THIS", i, j,
- STRNULL_FOR_NULL(uwr->uri), STRNULL_FOR_NULL(uwr->worker_name),
- STRNULL_FOR_NULL(uwr->context), STRNULL_FOR_NULL(uri_worker_map_get_source(uwr,l)),
- STRNULL_FOR_NULL(uri_worker_map_get_match(uwr,buf,l)), uwr->context_len);
- }
- }
- }
- JK_TRACE_EXIT(l);
-}
-
-
-int uri_worker_map_alloc(jk_uri_worker_map_t **uw_map_p,
- jk_map_t *init_data, jk_logger_t *l)
-{
- int i;
-
- JK_TRACE_ENTER(l);
-
- if (uw_map_p) {
- int rc;
- jk_uri_worker_map_t *uw_map;
- *uw_map_p = (jk_uri_worker_map_t *)calloc(1, sizeof(jk_uri_worker_map_t));
- uw_map = *uw_map_p;
-
- JK_INIT_CS(&(uw_map->cs), rc);
- if (rc == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "creating thread lock (errno=%d)",
- errno);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- jk_open_pool(&(uw_map->p),
- uw_map->buf, sizeof(jk_pool_atom_t) * BIG_POOL_SIZE);
- for(i=0;i<=1;i++) {
- jk_open_pool(&(uw_map->p_dyn[i]),
- uw_map->buf_dyn[i], sizeof(jk_pool_atom_t) * BIG_POOL_SIZE);
- uw_map->size[i] = 0;
- uw_map->nosize[i] = 0;
- uw_map->capacity[i] = 0;
- uw_map->maps[i] = NULL;
- }
- uw_map->index = 0;
- uw_map->fname = NULL;
- uw_map->reject_unsafe = 0;
- uw_map->reload = JK_URIMAP_DEF_RELOAD;
- uw_map->modified = 0;
- uw_map->checked = 0;
-
- if (init_data)
- rc = uri_worker_map_open(uw_map, init_data, l);
- JK_TRACE_EXIT(l);
- return rc;
- }
-
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
-
- return JK_FALSE;
-}
-
-static int uri_worker_map_close(jk_uri_worker_map_t *uw_map, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (uw_map) {
- int i;
- JK_DELETE_CS(&(uw_map->cs), i);
- jk_close_pool(&uw_map->p_dyn[0]);
- jk_close_pool(&uw_map->p_dyn[1]);
- jk_close_pool(&uw_map->p);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
-
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-int uri_worker_map_free(jk_uri_worker_map_t **uw_map, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (uw_map && *uw_map) {
- uri_worker_map_close(*uw_map, l);
- free(*uw_map);
- *uw_map = NULL;
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- else
- JK_LOG_NULL_PARAMS(l);
-
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-/*
- * Ensure there will be memory in context info to store Context Bases
- */
-
-#define UW_INC_SIZE 4 /* 4 URI->WORKER STEP */
-
-static int uri_worker_map_realloc(jk_uri_worker_map_t *uw_map)
-{
- if (IND_NEXT(uw_map->size) == IND_NEXT(uw_map->capacity)) {
- uri_worker_record_t **uwr;
- int capacity = IND_NEXT(uw_map->capacity) + UW_INC_SIZE;
-
- uwr =
- (uri_worker_record_t **) jk_pool_alloc(&IND_NEXT(uw_map->p_dyn),
- sizeof(uri_worker_record_t
- *) * capacity);
-
- if (!uwr)
- return JK_FALSE;
-
- if (IND_NEXT(uw_map->capacity) && IND_NEXT(uw_map->maps))
- memcpy(uwr, IND_NEXT(uw_map->maps),
- sizeof(uri_worker_record_t *) * IND_NEXT(uw_map->capacity));
-
- IND_NEXT(uw_map->maps) = uwr;
- IND_NEXT(uw_map->capacity) = capacity;
- }
-
- return JK_TRUE;
-}
-
-
-/*
- * Delete all entries of a given source type
- */
-
-static int uri_worker_map_clear(jk_uri_worker_map_t *uw_map,
- jk_logger_t *l)
-{
- uri_worker_record_t *uwr = NULL;
- unsigned int i;
- unsigned int new_size = 0;
- unsigned int new_nosize = 0;
-
- JK_TRACE_ENTER(l);
-
- IND_NEXT(uw_map->maps) =
- (uri_worker_record_t **) jk_pool_alloc(&(IND_NEXT(uw_map->p_dyn)),
- sizeof(uri_worker_record_t
- *) * IND_THIS(uw_map->size));
- IND_NEXT(uw_map->capacity) = IND_THIS(uw_map->size);
- IND_NEXT(uw_map->size) = 0;
- IND_NEXT(uw_map->nosize) = 0;
- for (i = 0; i < IND_THIS(uw_map->size); i++) {
- uwr = IND_THIS(uw_map->maps)[i];
- if (uwr->source_type == SOURCE_TYPE_URIMAP) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "deleting map rule '%s=%s' source '%s'",
- uwr->context, uwr->worker_name, uri_worker_map_get_source(uwr, l));
- }
- else {
- IND_NEXT(uw_map->maps)[new_size] = uwr;
- new_size++;
- if (uwr->match_type & MATCH_TYPE_NO_MATCH)
- new_nosize++;
- }
- }
- IND_NEXT(uw_map->size) = new_size;
- IND_NEXT(uw_map->nosize) = new_nosize;
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static void extract_activation(jk_uri_worker_map_t *uw_map,
- uri_worker_record_t *uwr,
- lb_worker_t *lb,
- int *activations,
- char *workers,
- int activation,
- jk_logger_t *l)
-{
- unsigned int i;
- jk_pool_t *p;
- char *worker;
-#ifdef _MT_CODE_PTHREAD
- char *lasts;
-#endif
-
- JK_TRACE_ENTER(l);
-
- if (uwr->source_type == SOURCE_TYPE_URIMAP)
- p = &IND_NEXT(uw_map->p_dyn);
- else
- p = &uw_map->p;
- worker = jk_pool_strdup(p, workers);
-
-#ifdef _MT_CODE_PTHREAD
- for (worker = strtok_r(worker, ", ", &lasts);
- worker; worker = strtok_r(NULL, ", ", &lasts)) {
-#else
- for (worker = strtok(worker, ", "); worker; worker = strtok(NULL, ", ")) {
-#endif
- for (i=0; i<lb->num_of_workers; i++) {
- if (!strcmp(worker, lb->lb_workers[i].name)) {
- if (activations[i] != JK_LB_ACTIVATION_UNSET)
- jk_log(l, JK_LOG_WARNING,
- "inconsistent activation overwrite for member %s "
- "of load balancer %s: '%s' replaced by '%s'",
- worker, lb->name,
- jk_lb_get_activation_direct(activations[i], l),
- jk_lb_get_activation_direct(activation, l));
- activations[i] = activation;
- break;
- }
- }
- if (i >= lb->num_of_workers)
- jk_log(l, JK_LOG_WARNING,
- "could not find member %s of load balancer %s",
- worker, lb->name);
- }
-
- JK_TRACE_EXIT(l);
-
-}
-
-static void extract_fail_on_status(jk_uri_worker_map_t *uw_map,
- uri_worker_record_t *uwr,
- jk_logger_t *l)
-{
- unsigned int i;
- int j;
- int cnt = 1;
- jk_pool_t *p;
- char *status;
-#ifdef _MT_CODE_PTHREAD
- char *lasts;
-#endif
-
- JK_TRACE_ENTER(l);
-
- for (i=0; i<strlen(uwr->extensions.fail_on_status_str); i++) {
- if (uwr->extensions.fail_on_status_str[i] == ',' ||
- uwr->extensions.fail_on_status_str[i] == ' ')
- cnt++;
- }
- uwr->extensions.fail_on_status_size = cnt;
-
- if (uwr->source_type == SOURCE_TYPE_URIMAP)
- p = &IND_NEXT(uw_map->p_dyn);
- else
- p = &uw_map->p;
- status = jk_pool_strdup(p, uwr->extensions.fail_on_status_str);
- uwr->extensions.fail_on_status = (int *)jk_pool_alloc(p,
- uwr->extensions.fail_on_status_size * sizeof(int));
- if (!uwr->extensions.fail_on_status) {
- jk_log(l, JK_LOG_ERROR,
- "can't alloc extensions fail_on_status list");
- JK_TRACE_EXIT(l);
- return;
- } else if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Allocated fail_on_status array of size %d for worker %s",
- uwr->extensions.fail_on_status_size, uwr->worker_name);
-
-
- for (j=0; j<uwr->extensions.fail_on_status_size; j++) {
- uwr->extensions.fail_on_status[j] = 0;
- }
-
- cnt = 0;
-#ifdef _MT_CODE_PTHREAD
- for (status = strtok_r(status, ", ", &lasts);
- status; status = strtok_r(NULL, ", ", &lasts)) {
-#else
- for (status = strtok(status, ", "); status; status = strtok(NULL, ", ")) {
-#endif
- uwr->extensions.fail_on_status[cnt] = atoi(status);
- cnt++;
- }
-
- JK_TRACE_EXIT(l);
-
-}
-
-void uri_worker_map_switch(jk_uri_worker_map_t *uw_map, jk_logger_t *l)
-{
- int new_index;
-
- JK_TRACE_ENTER(l);
-
- if (uw_map) {
- new_index = IND_SWITCH(uw_map->index);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Switching uri worker map from index %d to index %d",
- uw_map->index, new_index);
- uw_map->index = new_index;
- jk_reset_pool(&(IND_NEXT(uw_map->p_dyn)));
- }
-
- JK_TRACE_EXIT(l);
-
-}
-
-void uri_worker_map_ext(jk_uri_worker_map_t *uw_map, jk_logger_t *l)
-{
- unsigned int i;
-
- JK_TRACE_ENTER(l);
-
- for (i = 0; i < IND_NEXT(uw_map->size); i++) {
- uri_worker_record_t *uwr = IND_NEXT(uw_map->maps)[i];
- jk_worker_t *jw;
- if(uwr->match_type & MATCH_TYPE_NO_MATCH)
- continue;
- jw = wc_get_worker_for_name(uwr->worker_name, l);
- if(!jw) {
- jk_log(l, JK_LOG_ERROR,
- "Could not find worker with name '%s' in uri map post processing.",
- uwr->worker_name);
- continue;
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Checking extension for worker %d: %s of type %s (%d)",
- i, uwr->worker_name, wc_get_name_for_type(jw->type,l), jw->type);
-
- if (jw->type == JK_LB_WORKER_TYPE &&
- (uwr->extensions.active || uwr->extensions.disabled || uwr->extensions.stopped)) {
- int j;
- lb_worker_t *lb = (lb_worker_t *)jw->worker_private;
- jk_pool_t *p;
- if (!uwr->extensions.activation) {
- uwr->extensions.activation_size = lb->num_of_workers;
- if (uwr->source_type == SOURCE_TYPE_URIMAP)
- p = &IND_NEXT(uw_map->p_dyn);
- else
- p = &uw_map->p;
- uwr->extensions.activation = (int *)jk_pool_alloc(p,
- uwr->extensions.activation_size * sizeof(int));
- if (!uwr->extensions.activation) {
- jk_log(l, JK_LOG_ERROR,
- "can't alloc extensions activation list");
- continue;
- } else if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Allocated activations array of size %d for lb worker %s",
- uwr->extensions.activation_size, uwr->worker_name);
- for (j=0; j<uwr->extensions.activation_size; j++) {
- uwr->extensions.activation[j] = JK_LB_ACTIVATION_UNSET;
- }
- }
- if (uwr->extensions.active)
- extract_activation(uw_map, uwr, lb, uwr->extensions.activation,
- uwr->extensions.active, JK_LB_ACTIVATION_ACTIVE, l);
- if (uwr->extensions.disabled)
- extract_activation(uw_map, uwr, lb, uwr->extensions.activation,
- uwr->extensions.disabled, JK_LB_ACTIVATION_DISABLED, l);
- if (uwr->extensions.stopped)
- extract_activation(uw_map, uwr, lb, uwr->extensions.activation,
- uwr->extensions.stopped, JK_LB_ACTIVATION_STOPPED, l);
- }
- else if (uwr->extensions.active) {
- jk_log(l, JK_LOG_WARNING,
- "Worker %s is not of type lb, activation extension "
- JK_UWMAP_EXTENSION_ACTIVE " for %s ignored",
- uwr->worker_name, uwr->extensions.active);
- }
- else if (uwr->extensions.disabled) {
- jk_log(l, JK_LOG_WARNING,
- "Worker %s is not of type lb, activation extension "
- JK_UWMAP_EXTENSION_DISABLED " for %s ignored",
- uwr->worker_name, uwr->extensions.disabled);
- }
- else if (uwr->extensions.stopped) {
- jk_log(l, JK_LOG_WARNING,
- "Worker %s is not of type lb, activation extension "
- JK_UWMAP_EXTENSION_STOPPED " for %s ignored",
- uwr->worker_name, uwr->extensions.stopped);
- }
- if (uwr->extensions.fail_on_status_str) {
- extract_fail_on_status(uw_map, uwr, l);
- }
- }
- if (JK_IS_DEBUG_LEVEL(l))
- uri_worker_map_dump(uw_map, "after extension stripping", l);
-
- JK_TRACE_EXIT(l);
- return;
-
-}
-
-/* Add new entry to NEXT generation */
-int uri_worker_map_add(jk_uri_worker_map_t *uw_map,
- const char *puri, const char *worker,
- unsigned int source_type, jk_logger_t *l)
-{
- uri_worker_record_t *uwr = NULL;
- char *uri;
- jk_pool_t *p;
- unsigned int match_type = 0;
-
- JK_TRACE_ENTER(l);
-
- if (*puri == '-') {
- /* Disable urimap.
- * This way you can disable already mounted
- * context.
- */
- match_type = MATCH_TYPE_DISABLED;
- puri++;
- }
- if (*puri == '!') {
- match_type |= MATCH_TYPE_NO_MATCH;
- puri++;
- }
-
- if (uri_worker_map_realloc(uw_map) == JK_FALSE) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if (source_type == SOURCE_TYPE_URIMAP)
- p = &IND_NEXT(uw_map->p_dyn);
- else
- p = &uw_map->p;
-
- uwr = (uri_worker_record_t *)jk_pool_alloc(p, sizeof(uri_worker_record_t));
- if (!uwr) {
- jk_log(l, JK_LOG_ERROR,
- "can't alloc map entry");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- uri = jk_pool_strdup(p, puri);
- if (!uri || !worker) {
- jk_log(l, JK_LOG_ERROR,
- "can't alloc uri/worker strings");
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (*uri == '/') {
- char *w;
- char *param;
-#ifdef _MT_CODE_PTHREAD
- char *lasts = NULL;
-#endif
-
- w = jk_pool_strdup(p, worker);
- uwr->extensions.reply_timeout = -1;
- uwr->extensions.active = NULL;
- uwr->extensions.disabled = NULL;
- uwr->extensions.stopped = NULL;
- uwr->extensions.activation_size = 0;
- uwr->extensions.activation = NULL;
- uwr->extensions.fail_on_status_size = 0;
- uwr->extensions.fail_on_status = NULL;
- uwr->extensions.fail_on_status_str = NULL;
- uwr->extensions.use_server_error_pages = 0;
-
-#ifdef _MT_CODE_PTHREAD
- param = strtok_r(w, ";", &lasts);
-#else
- param = strtok(w, ";");
-#endif
- if (param) {
-#ifdef _MT_CODE_PTHREAD
- for (param = strtok_r(NULL, ";", &lasts); param; param = strtok_r(NULL, ";", &lasts)) {
-#else
- for (param = strtok(NULL, ";"); param; param = strtok(NULL, ";")) {
-#endif
- if (!strncmp(param, JK_UWMAP_EXTENSION_REPLY_TIMEOUT, strlen(JK_UWMAP_EXTENSION_REPLY_TIMEOUT))) {
- uwr->extensions.reply_timeout = atoi(param + strlen(JK_UWMAP_EXTENSION_REPLY_TIMEOUT));
- }
- else if (!strncmp(param, JK_UWMAP_EXTENSION_USE_SRV_ERRORS, strlen(JK_UWMAP_EXTENSION_USE_SRV_ERRORS))) {
- uwr->extensions.use_server_error_pages = atoi(param + strlen(JK_UWMAP_EXTENSION_USE_SRV_ERRORS));
- }
- else if (!strncmp(param, JK_UWMAP_EXTENSION_ACTIVE, strlen(JK_UWMAP_EXTENSION_ACTIVE))) {
- if (uwr->extensions.active)
- jk_log(l, JK_LOG_WARNING,
- "extension '%s' in uri worker map only allowed once",
- JK_UWMAP_EXTENSION_ACTIVE);
- else
- uwr->extensions.active = param + strlen(JK_UWMAP_EXTENSION_ACTIVE);
- }
- else if (!strncmp(param, JK_UWMAP_EXTENSION_DISABLED, strlen(JK_UWMAP_EXTENSION_DISABLED))) {
- if (uwr->extensions.disabled)
- jk_log(l, JK_LOG_WARNING,
- "extension '%s' in uri worker map only allowed once",
- JK_UWMAP_EXTENSION_DISABLED);
- else
- uwr->extensions.disabled = param + strlen(JK_UWMAP_EXTENSION_DISABLED);
- }
- else if (!strncmp(param, JK_UWMAP_EXTENSION_STOPPED, strlen(JK_UWMAP_EXTENSION_STOPPED))) {
- if (uwr->extensions.stopped)
- jk_log(l, JK_LOG_WARNING,
- "extension '%s' in uri worker map only allowed once",
- JK_UWMAP_EXTENSION_STOPPED);
- else
- uwr->extensions.stopped = param + strlen(JK_UWMAP_EXTENSION_STOPPED);
- }
- else if (!strncmp(param, JK_UWMAP_EXTENSION_FAIL_ON_STATUS, strlen(JK_UWMAP_EXTENSION_FAIL_ON_STATUS))) {
- if (uwr->extensions.fail_on_status_str)
- jk_log(l, JK_LOG_WARNING,
- "extension '%s' in uri worker map only allowed once",
- JK_UWMAP_EXTENSION_FAIL_ON_STATUS);
- else
- uwr->extensions.fail_on_status_str = param + strlen(JK_UWMAP_EXTENSION_FAIL_ON_STATUS);
- }
- else {
- jk_log(l, JK_LOG_WARNING,
- "unknown extension '%s' in uri worker map",
- param);
- }
- }
- }
-
- uwr->source_type = source_type;
- uwr->worker_name = w;
- uwr->uri = uri;
- uwr->context = uri;
- uwr->context_len = strlen(uwr->context);
- if (strchr(uri, '*') ||
- strchr(uri, '?')) {
- /* Something like
- * /context/ * /user/ *
- * /context/ *.suffix
- */
- match_type |= MATCH_TYPE_WILDCHAR_PATH;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "wildchar rule '%s=%s' source '%s' was added",
- uwr->context, uwr->worker_name, uri_worker_map_get_source(uwr, l));
-
- }
- else {
- /* Something like: JkMount /login/j_security_check ajp13 */
- match_type |= MATCH_TYPE_EXACT;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "exact rule '%s=%s' source '%s' was added",
- uwr->context, uwr->worker_name, uri_worker_map_get_source(uwr, l));
- }
- }
- else {
- /*
- * JFC: please check...
- * Not sure what to do, but I try to prevent problems.
- * I have fixed jk_mount_context() in apaches/mod_jk.c so we should
- * not arrive here when using Apache.
- */
- jk_log(l, JK_LOG_ERROR,
- "invalid context '%s': does not begin with '/'",
- uri);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- uwr->match_type = match_type;
- IND_NEXT(uw_map->maps)[IND_NEXT(uw_map->size)] = uwr;
- IND_NEXT(uw_map->size)++;
- if (match_type & MATCH_TYPE_NO_MATCH) {
- /* If we split the mappings this one will be calculated */
- IND_NEXT(uw_map->nosize)++;
- }
- worker_qsort(uw_map);
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-int uri_worker_map_open(jk_uri_worker_map_t *uw_map,
- jk_map_t *init_data, jk_logger_t *l)
-{
- int rc = JK_TRUE;
-
- JK_TRACE_ENTER(l);
-
- if (uw_map) {
- int sz = jk_map_size(init_data);
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "rule map size is %d",
- sz);
-
- if (sz > 0) {
- int i;
- for (i = 0; i < sz; i++) {
- const char *u = jk_map_name_at(init_data, i);
- const char *w = jk_map_value_at(init_data, i);
- /* Multiple mappings like :
- * /servlets-examples|/ *
- * will create two mappings:
- * /servlets-examples
- * and:
- * /servlets-examples/ *
- */
- if (strchr(u, '|')) {
- char *s, *r = strdup(u);
- s = strchr(r, '|');
- *(s++) = '\0';
- /* Add first mapping */
- if (!uri_worker_map_add(uw_map, r, w, SOURCE_TYPE_JKMOUNT, l)) {
- jk_log(l, JK_LOG_ERROR,
- "invalid mapping rule %s->%s", r, w);
- rc = JK_FALSE;
- }
- for (; *s; s++)
- *(s - 1) = *s;
- *(s - 1) = '\0';
- /* add second mapping */
- if (!uri_worker_map_add(uw_map, r, w, SOURCE_TYPE_JKMOUNT, l)) {
- jk_log(l, JK_LOG_ERROR,
- "invalid mapping rule %s->%s", r, w);
- rc = JK_FALSE;
- }
- free(r);
- }
- else if (!uri_worker_map_add(uw_map, u, w, SOURCE_TYPE_JKMOUNT, l)) {
- jk_log(l, JK_LOG_ERROR,
- "invalid mapping rule %s->%s",
- u, w);
- rc = JK_FALSE;
- break;
- }
- if (rc == JK_FALSE)
- break;
- }
- }
-
- if (rc == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "there was an error, freeing buf");
- jk_close_pool(&uw_map->p_dyn[0]);
- jk_close_pool(&uw_map->p_dyn[1]);
- jk_close_pool(&uw_map->p);
- }
- else if (JK_IS_DEBUG_LEVEL(l))
- uri_worker_map_dump(uw_map, "after map open", l);
- }
-
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-static int find_match(jk_uri_worker_map_t *uw_map,
- const char *url, jk_logger_t *l)
-{
- unsigned int i;
-
- JK_TRACE_ENTER(l);
-
- for (i = 0; i < IND_THIS(uw_map->size); i++) {
- uri_worker_record_t *uwr = IND_THIS(uw_map->maps)[i];
-
- /* Check for match types */
- if ((uwr->match_type & MATCH_TYPE_DISABLED) ||
- (uwr->match_type & MATCH_TYPE_NO_MATCH))
- continue;
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG, "Attempting to map context URI '%s=%s' source '%s'",
- uwr->context, uwr->worker_name, uri_worker_map_get_source(uwr, l));
-
- if (uwr->match_type & MATCH_TYPE_WILDCHAR_PATH) {
- /* Map is already sorted by context_len */
- if (jk_wildchar_match(url, uwr->context,
-#ifdef WIN32
- 0
-#else
- 0
-#endif
- ) == 0) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Found a wildchar match '%s=%s'",
- uwr->context, uwr->worker_name);
- JK_TRACE_EXIT(l);
- return i;
- }
- }
- else if (JK_STRNCMP(uwr->context, url, uwr->context_len) == 0) {
- if (strlen(url) == uwr->context_len) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Found an exact match '%s=%s'",
- uwr->context, uwr->worker_name);
- JK_TRACE_EXIT(l);
- return i;
- }
- }
- }
-
- JK_TRACE_EXIT(l);
- return -1;
-}
-
-static int is_nomatch(jk_uri_worker_map_t *uw_map,
- const char *uri, int match,
- jk_logger_t *l)
-{
- unsigned int i;
- const char *worker = IND_THIS(uw_map->maps)[match]->worker_name;
-
- JK_TRACE_ENTER(l);
-
- for (i = 0; i < IND_THIS(uw_map->size); i++) {
- uri_worker_record_t *uwr = IND_THIS(uw_map->maps)[i];
-
- /* Check only nomatch mappings */
- if (!(uwr->match_type & MATCH_TYPE_NO_MATCH) ||
- (uwr->match_type & MATCH_TYPE_DISABLED))
- continue;
- /* Check only matching workers */
- if (strcmp(uwr->worker_name, worker) &&
- strcmp(uwr->worker_name, "*"))
- continue;
- if (uwr->match_type & MATCH_TYPE_WILDCHAR_PATH) {
- /* Map is already sorted by context_len */
- if (jk_wildchar_match(uri, uwr->context,
-#ifdef WIN32
- 0
-#else
- 0
-#endif
- ) == 0) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Found a wildchar no match '%s=%s' source '%s'",
- uwr->context, uwr->worker_name, uri_worker_map_get_source(uwr, l));
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- }
- else if (JK_STRNCMP(uwr->context, uri, uwr->context_len) == 0) {
- if (strlen(uri) == uwr->context_len) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Found an exact no match '%s=%s' source '%s'",
- uwr->context, uwr->worker_name, uri_worker_map_get_source(uwr, l));
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
- }
- }
-
- JK_TRACE_EXIT(l);
- return JK_FALSE;
-}
-
-const char *map_uri_to_worker_ext(jk_uri_worker_map_t *uw_map,
- const char *uri, const char *vhost,
- rule_extension_t **extensions,
- int *index,
- jk_logger_t *l)
-{
- unsigned int i;
- unsigned int vhost_len;
- int reject_unsafe;
- int rv = -1;
- char url[JK_MAX_URI_LEN+1];
-
- JK_TRACE_ENTER(l);
-
- if (!uw_map || !uri || !extensions) {
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return NULL;
- }
- *extensions = NULL;
- if (index)
- *index = -1;
- if (*uri != '/') {
- jk_log(l, JK_LOG_WARNING,
- "Uri %s is invalid. Uri must start with /", uri);
- JK_TRACE_EXIT(l);
- return NULL;
- }
- if (uw_map->fname) {
- uri_worker_map_update(uw_map, 0, l);
- if (!IND_THIS(uw_map->size)) {
- jk_log(l, JK_LOG_INFO,
- "No worker maps defined for %s.",
- uw_map->fname);
- JK_TRACE_EXIT(l);
- return NULL;
- }
- }
- /* Make the copy of the provided uri and strip
- * everything after the first ';' char.
- */
- reject_unsafe = uw_map->reject_unsafe;
- vhost_len = 0;
- /*
- * In case we got a vhost, we prepend a slash
- * and the vhost to the url in order to enable
- * vhost mapping rules especially for IIS.
- */
- if (vhost) {
- int off = 0;
- /* Add leading '/' if necessary */
- if (vhost[0] != '/') {
- url[0] = '/';
- off = 1;
- }
- /* Size including leading slash. */
- vhost_len = strlen(vhost);
- if (vhost_len + off >= JK_MAX_URI_LEN) {
- vhost_len = 0;
- jk_log(l, JK_LOG_WARNING,
- "Host prefix %s for URI %s is invalid and will be ignored."
- " It must be smaller than %d chars",
- vhost, JK_MAX_URI_LEN - off);
- }
- else {
- strncpy(&url[off], vhost, vhost_len + 1);
- }
- vhost_len += off;
- }
- for (i = 0; i < strlen(uri); i++) {
- if (i == JK_MAX_URI_LEN) {
- jk_log(l, JK_LOG_WARNING,
- "URI %s is invalid. URI must be smaller than %d chars",
- uri, JK_MAX_URI_LEN);
- JK_TRACE_EXIT(l);
- return NULL;
- }
- if (uri[i] == ';')
- break;
- else {
- url[i + vhost_len] = uri[i];
- if (reject_unsafe && (uri[i] == '%' || uri[i] == '\\')) {
- jk_log(l, JK_LOG_INFO, "Potentially unsafe request url '%s' rejected", uri);
- JK_TRACE_EXIT(l);
- return NULL;
- }
- }
- }
- url[i + vhost_len] = '\0';
-
- if (JK_IS_DEBUG_LEVEL(l)) {
- char *url_rewrite = strstr(uri, JK_PATH_SESSION_IDENTIFIER);
- if (url_rewrite)
- jk_log(l, JK_LOG_DEBUG, "Found session identifier '%s' in url '%s'",
- url_rewrite, uri);
- }
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG, "Attempting to map URI '%s' from %d maps",
- url, IND_THIS(uw_map->size));
- rv = find_match(uw_map, url, l);
- /* If this doesn't find a match, try without the vhost. */
- if (rv < 0 && vhost_len) {
- rv = find_match(uw_map, &url[vhost_len], l);
- }
-
- /* In case we found a match, check for the unmounts. */
- if (rv >= 0 && IND_THIS(uw_map->nosize)) {
- /* Again first including vhost. */
- int rc = is_nomatch(uw_map, url, rv, l);
- /* If no unmount was find, try without vhost. */
- if (!rc && vhost_len)
- rc = is_nomatch(uw_map, &url[vhost_len], rv, l);
- if (rc) {
- if (JK_IS_DEBUG_LEVEL(l)) {
- jk_log(l, JK_LOG_DEBUG,
- "Denying match for worker %s by nomatch rule",
- IND_THIS(uw_map->maps)[rv]->worker_name);
- }
- rv = -1;
- }
- }
-
- if (rv >= 0) {
- *extensions = &(IND_THIS(uw_map->maps)[rv]->extensions);
- if (index)
- *index = rv;
- JK_TRACE_EXIT(l);
- return IND_THIS(uw_map->maps)[rv]->worker_name;
- }
- JK_TRACE_EXIT(l);
- return NULL;
-}
-
-rule_extension_t *get_uri_to_worker_ext(jk_uri_worker_map_t *uw_map,
- int index)
-{
- if (index >= 0) {
- return &(IND_THIS(uw_map->maps)[index]->extensions);
- }
- else {
- return NULL;
- }
-}
-
-const char *map_uri_to_worker(jk_uri_worker_map_t *uw_map,
- const char *uri, const char *vhost,
- jk_logger_t *l)
-{
- rule_extension_t *ext;
- return map_uri_to_worker_ext(uw_map, uri, vhost, &ext, NULL, l);
-}
-
-int uri_worker_map_load(jk_uri_worker_map_t *uw_map,
- jk_logger_t *l)
-{
- int rc = JK_FALSE;
- jk_map_t *map;
-
- jk_map_alloc(&map);
- if (jk_map_read_properties(map, NULL, uw_map->fname, &uw_map->modified,
- JK_MAP_HANDLE_NORMAL, l)) {
- int i;
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Loading urimaps from %s with reload check interval %d seconds",
- uw_map->fname, uw_map->reload);
- uri_worker_map_clear(uw_map, l);
- for (i = 0; i < jk_map_size(map); i++) {
- const char *u = jk_map_name_at(map, i);
- const char *w = jk_map_value_at(map, i);
- /* Multiple mappings like :
- * /servlets-examples|/ *
- * will create two mappings:
- * /servlets-examples
- * and:
- * /servlets-examples/ *
- */
- if (strchr(u, '|')) {
- char *s, *r = strdup(u);
- s = strchr(r, '|');
- *(s++) = '\0';
- /* Add first mapping */
- if (!uri_worker_map_add(uw_map, r, w, SOURCE_TYPE_URIMAP, l)) {
- jk_log(l, JK_LOG_ERROR,
- "invalid mapping rule %s->%s", r, w);
- }
- for (; *s; s++)
- *(s - 1) = *s;
- *(s - 1) = '\0';
- /* add second mapping */
- if (!uri_worker_map_add(uw_map, r, w, SOURCE_TYPE_URIMAP, l)) {
- jk_log(l, JK_LOG_ERROR,
- "invalid mapping rule %s->%s", r, w);
- }
- free(r);
- }
- else if (!uri_worker_map_add(uw_map, u, w, SOURCE_TYPE_URIMAP, l)) {
- jk_log(l, JK_LOG_ERROR,
- "invalid mapping rule %s->%s",
- u, w);
- }
- }
- uw_map->checked = time(NULL);
- if (JK_IS_DEBUG_LEVEL(l))
- uri_worker_map_dump(uw_map, "after file load", l);
- rc = JK_TRUE;
- }
- jk_map_free(&map);
- return rc;
-}
-
-int uri_worker_map_update(jk_uri_worker_map_t *uw_map,
- int force, jk_logger_t *l)
-{
- int rc = JK_TRUE;
- time_t now = time(NULL);
-
- if (force || (uw_map->reload > 0 && difftime(now, uw_map->checked) >
- uw_map->reload)) {
- struct stat statbuf;
- uw_map->checked = now;
- if ((rc = jk_stat(uw_map->fname, &statbuf)) == -1) {
- jk_log(l, JK_LOG_ERROR,
- "Unable to stat the %s (errno=%d)",
- uw_map->fname, errno);
- return JK_FALSE;
- }
- if (statbuf.st_mtime == uw_map->modified) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "File %s is not modified",
- uw_map->fname);
- return JK_TRUE;
- }
- JK_ENTER_CS(&(uw_map->cs), rc);
- /* Check if some other thread updated status */
- if (statbuf.st_mtime == uw_map->modified) {
- JK_LEAVE_CS(&(uw_map->cs), rc);
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "File %s is not modified",
- uw_map->fname);
- return JK_TRUE;
- }
- rc = uri_worker_map_load(uw_map, l);
- uri_worker_map_ext(uw_map, l);
- uri_worker_map_switch(uw_map, l);
- JK_LEAVE_CS(&(uw_map->cs), rc);
- jk_log(l, JK_LOG_INFO,
- "Reloaded urimaps from %s", uw_map->fname);
- }
- return JK_TRUE;
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.h
deleted file mode 100644
index 30091dc4..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: URI to worker mapper header file *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 705283 $ *
- ***************************************************************************/
-
-#ifndef JK_URI_WORKER_MAP_H
-#define JK_URI_WORKER_MAP_H
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#include "jk_global.h"
-#include "jk_map.h"
-#include "jk_logger.h"
-#include "jk_mt.h"
-
-#define MATCH_TYPE_EXACT 0x0001
-/* deprecated
-#define MATCH_TYPE_CONTEXT 0x0002
- */
-/* match all context path URIs with a path component suffix */
-/* deprecated
-#define MATCH_TYPE_CONTEXT_PATH 0x0004
- */
-/* deprecated
-#define MATCH_TYPE_SUFFIX 0x0010
- */
-/* match all URIs of the form *ext */
-/* deprecated
-#define MATCH_TYPE_GENERAL_SUFFIX 0x0020
- */
-/* match multiple wild characters (*) and (?) */
-#define MATCH_TYPE_WILDCHAR_PATH 0x0040
-#define MATCH_TYPE_NO_MATCH 0x1000
-#define MATCH_TYPE_DISABLED 0x2000
-/* deprecated
-#define MATCH_TYPE_STOPPED 0x4000
- */
-
-#define SOURCE_TYPE_WORKERDEF 0x0001
-#define SOURCE_TYPE_JKMOUNT 0x0002
-#define SOURCE_TYPE_URIMAP 0x0003
-#define SOURCE_TYPE_DISCOVER 0x0004
-#define SOURCE_TYPE_TEXT_WORKERDEF ("worker definition")
-#define SOURCE_TYPE_TEXT_JKMOUNT ("JkMount")
-#define SOURCE_TYPE_TEXT_URIMAP ("uriworkermap")
-#define SOURCE_TYPE_TEXT_DISCOVER ("ajp14")
-
-#define JK_MAX_URI_LEN 4095
-
-struct rule_extension
-{
- /* reply_timeout overwrite */
- int reply_timeout;
- /* activation state overwrites for load balancers */
- /* Number of elements in the array activations. */
- int activation_size;
- /* Dynamically allocated array with one entry per lb member. */
- int *activation;
- /* Temporary storage for the original extension strings. */
- char *active;
- char *disabled;
- char *stopped;
- /* fail_on_status overwrites */
- /* Number of elements in the array fail_on_status. */
- int fail_on_status_size;
- /* Dynamically allocated array with one entry per status. */
- int *fail_on_status;
- /* Temporary storage for the original extension strings. */
- char *fail_on_status_str;
- /* Use server error pages for responses >= 400. */
- int use_server_error_pages;
-};
-typedef struct rule_extension rule_extension_t;
-
-struct uri_worker_record
-{
- /* Original uri for logging */
- char *uri;
-
- /* Name of worker mapped */
- const char *worker_name;
-
- /* Base context */
- const char *context;
-
- /* Match type */
- unsigned int match_type;
-
- /* Definition source type */
- unsigned int source_type;
-
- /* char length of the context */
- size_t context_len;
-
- /* extended mapping properties */
- rule_extension_t extensions;
-};
-typedef struct uri_worker_record uri_worker_record_t;
-
-struct jk_uri_worker_map
-{
- /* Memory Pool */
- jk_pool_t p;
- jk_pool_atom_t buf[BIG_POOL_SIZE];
-
- /* Index 0 or 1, which map instance do we use */
- /* Needed to make map reload more atomically */
- int index;
-
- /* Memory Pool - cleared when doing reload */
- /* Use this pool to allocate objects, that are deleted */
- /* when the map gets dynamically reloaded from uriworkermap.properties. */
- jk_pool_t p_dyn[2];
- jk_pool_atom_t buf_dyn[2][BIG_POOL_SIZE];
-
- /* map URI->WORKER */
- uri_worker_record_t **maps[2];
-
- /* Map Number */
- unsigned int size[2];
-
- /* Map Capacity */
- unsigned int capacity[2];
-
- /* NoMap Number */
- unsigned int nosize[2];
-
- /* Dynamic config support */
-
- JK_CRIT_SEC cs;
- /* should we forward potentially unsafe URLs */
- int reject_unsafe;
- /* uriworkermap filename */
- const char *fname;
- /* uriworkermap reload check interval */
- int reload;
- /* Last modified time */
- time_t modified;
- /* Last checked time */
- time_t checked;
-};
-typedef struct jk_uri_worker_map jk_uri_worker_map_t;
-
-const char *uri_worker_map_get_source(uri_worker_record_t *uwr, jk_logger_t *l);
-
-char *uri_worker_map_get_match(uri_worker_record_t *uwr, char *buf, jk_logger_t *l);
-
-int uri_worker_map_alloc(jk_uri_worker_map_t **uw_map,
- jk_map_t *init_data, jk_logger_t *l);
-
-int uri_worker_map_free(jk_uri_worker_map_t **uw_map, jk_logger_t *l);
-
-int uri_worker_map_open(jk_uri_worker_map_t *uw_map,
- jk_map_t *init_data, jk_logger_t *l);
-
-void uri_worker_map_switch(jk_uri_worker_map_t *uw_map, jk_logger_t *l);
-
-void uri_worker_map_ext(jk_uri_worker_map_t *uw_map, jk_logger_t *l);
-
-int uri_worker_map_add(jk_uri_worker_map_t *uw_map,
- const char *puri, const char *worker,
- unsigned int source_type, jk_logger_t *l);
-
-const char *map_uri_to_worker(jk_uri_worker_map_t *uw_map,
- const char *uri, const char *vhost,
- jk_logger_t *l);
-
-const char *map_uri_to_worker_ext(jk_uri_worker_map_t *uw_map,
- const char *uri, const char *vhost,
- rule_extension_t **extensions,
- int *index,
- jk_logger_t *l);
-
-rule_extension_t *get_uri_to_worker_ext(jk_uri_worker_map_t *uw_map,
- int index);
-
-int uri_worker_map_load(jk_uri_worker_map_t *uw_map,
- jk_logger_t *l);
-
-int uri_worker_map_update(jk_uri_worker_map_t *uw_map,
- int force, jk_logger_t *l);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* JK_URI_WORKER_MAP_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.lo
deleted file mode 100644
index 3d3b423a..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_uri_worker_map.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_uri_worker_map.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_uri_worker_map.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.o
deleted file mode 100644
index c402e1fc..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_uri_worker_map.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.c
deleted file mode 100644
index 884f01d0..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: URL manipulation subroutines. (ported from mod_proxy). *
- * Version: $Revision: 531816 $ *
- ***************************************************************************/
-
-#include "jk_global.h"
-#include "jk_url.h"
-
-#ifdef HAVE_APR
-#define JK_ISXDIGIT(x) apr_isxdigit((x))
-#define JK_ISDIGIT(x) apr_isdigit((x))
-#define JK_ISUPPER(x) apr_isupper((x))
-#define JK_ISALNUM(x) apr_isalnum((x))
-#else
-#define JK_ISXDIGIT(x) isxdigit((int)(unsigned char)((x)))
-#define JK_ISDIGIT(x) isdigit((int)(unsigned char)((x)))
-#define JK_ISUPPER(x) isupper((int)(unsigned char)((x)))
-#define JK_ISALNUM(x) isalnum((int)(unsigned char)((x)))
-#endif
-
-static void jk_c2hex(int ch, char *x)
-{
-#if !CHARSET_EBCDIC
- int i;
-
- x[0] = '%';
- i = (ch & 0xF0) >> 4;
- if (i >= 10) {
- x[1] = ('A' - 10) + i;
- }
- else {
- x[1] = '0' + i;
- }
-
- i = ch & 0x0F;
- if (i >= 10) {
- x[2] = ('A' - 10) + i;
- }
- else {
- x[2] = '0' + i;
- }
-#else /*CHARSET_EBCDIC*/
- static const char ntoa[] = { "0123456789ABCDEF" };
- char buf[1];
-
- ch &= 0xFF;
-
- buf[0] = ch;
- jk_xlate_to_ascii(buf, 1);
-
- x[0] = '%';
- x[1] = ntoa[(buf[0] >> 4) & 0x0F];
- x[2] = ntoa[buf[0] & 0x0F];
- x[3] = '\0';
-#endif /*CHARSET_EBCDIC*/
-}
-
-/*
- * Convert a URL-encoded string to canonical form.
- * It encodes those which must be encoded, and does not touch
- * those which must not be touched.
- * String x must be '\0'-terminated.
- * String y must be pre-allocated with len maxlen
- * (including the terminating '\0').
- */
-int jk_canonenc(const char *x, char *y, int maxlen)
-{
- int i, j;
- int ch = x[0];
- char *allowed; /* characters which should not be encoded */
- char *reserved; /* characters which much not be en/de-coded */
-
-/*
- * N.B. in addition to :@&=, this allows ';' in an http path
- * and '?' in an ftp path -- this may be revised
- */
- allowed = "~$-_.+!*'(),;:@&=";
- reserved = "/";
-
- for (i = 0, j = 0; ch != '\0' && j < maxlen; i++, j++, ch=x[i]) {
-/* always handle '/' first */
- if (strchr(reserved, ch)) {
- y[j] = ch;
- continue;
- }
-/* recode it, if necessary */
- if (!JK_ISALNUM(ch) && !strchr(allowed, ch)) {
- if (j+2<maxlen) {
- jk_c2hex(ch, &y[j]);
- j += 2;
- }
- else {
- return JK_FALSE;
- }
- }
- else {
- y[j] = ch;
- }
- }
- if (j<maxlen) {
- y[j] = '\0';
- return JK_TRUE;
- }
- else {
- return JK_FALSE;
- }
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.h
deleted file mode 100644
index a7f332e2..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: URL manipulation subroutines header file. (mod_proxy) *
- * Version: $Revision: 500534 $ *
- ***************************************************************************/
-#ifndef _JK_URL_H
-#define _JK_URL_H
-
-#include "jk_global.h"
-#include "jk_pool.h"
-#include "jk_util.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/*
- * Do a canonical encoding of the url x.
- * String y contains the result and is pre-allocated
- * for at least maxlen bytes, including a '\0' terminator.
- */
-int jk_canonenc(const char *x, char *y, int maxlen);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* _JK_URL_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.lo
deleted file mode 100644
index 8b3fcdd8..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_url.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_url.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_url.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.o
deleted file mode 100644
index fd792890..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_url.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.c
deleted file mode 100644
index c7a16c46..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.c
+++ /dev/null
@@ -1,2253 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Utility functions (mainly configuration) *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Author: Rainer Jung <rjung@apache.org> *
- * Version: $Revision: 1078846 $ *
- ***************************************************************************/
-
-
-#include "jk_util.h"
-#include "jk_ajp12_worker.h"
-#include "jk_ajp13_worker.h"
-#include "jk_ajp14_worker.h"
-#include "jk_lb_worker.h"
-#include "jk_mt.h"
-
-#define SYSPROPS_OF_WORKER ("sysprops")
-#define STDERR_OF_WORKER ("stderr")
-#define STDOUT_OF_WORKER ("stdout")
-#define SECRET_OF_WORKER ("secret")
-#define MX_OF_WORKER ("mx")
-#define MS_OF_WORKER ("ms")
-#define CP_OF_WORKER ("class_path")
-#define BRIDGE_OF_WORKER ("bridge")
-#define JVM_OF_WORKER ("jvm_lib")
-#define LIBPATH_OF_WORKER ("ld_path")
-#define CMD_LINE_OF_WORKER ("cmd_line")
-#define NATIVE_LIB_OF_WORKER ("native_lib")
-#define REFERENCE_OF_WORKER ("reference")
-#define HOST_OF_WORKER ("host")
-#define PORT_OF_WORKER ("port")
-#define TYPE_OF_WORKER ("type")
-#define CACHE_OF_WORKER_DEPRECATED ("cachesize")
-#define CACHE_OF_WORKER ("connection_pool_size")
-#define CACHE_OF_WORKER_MIN ("connection_pool_minsize")
-#define CACHE_TIMEOUT_DEPRECATED ("cache_timeout")
-#define CACHE_TIMEOUT_OF_WORKER ("connection_pool_timeout")
-#define CACHE_ACQUIRE_OF_WORKER ("connection_acquire_timeout")
-#define RECOVERY_OPTS_OF_WORKER ("recovery_options")
-#define CONNECT_TIMEOUT_OF_WORKER ("connect_timeout")
-#define PREPOST_TIMEOUT_OF_WORKER ("prepost_timeout")
-#define REPLY_TIMEOUT_OF_WORKER ("reply_timeout")
-#define SOCKET_TIMEOUT_OF_WORKER ("socket_timeout")
-#define SOCKET_CONNECT_TIMEOUT_OF_WORKER ("socket_connect_timeout")
-#define PING_TIMEOUT_OF_WORKER ("ping_timeout")
-#define PING_MODE_OF_WORKER ("ping_mode")
-#define SOCKET_BUFFER_OF_WORKER ("socket_buffer")
-#define SOCKET_KEEPALIVE_OF_WORKER ("socket_keepalive")
-#define CONN_PING_INTERVAL_OF_WORKER ("connection_ping_interval")
-#define RECYCLE_TIMEOUT_DEPRECATED ("recycle_timeout")
-#define LOAD_FACTOR_OF_WORKER ("lbfactor")
-#define DISTANCE_OF_WORKER ("distance")
-#define BALANCED_WORKERS_DEPRECATED ("balanced_workers")
-#define BALANCE_WORKERS ("balance_workers")
-#define STICKY_SESSION ("sticky_session")
-#define STICKY_SESSION_FORCE ("sticky_session_force")
-#define SESSION_COOKIE_OF_WORKER ("session_cookie")
-#define SESSION_PATH_OF_WORKER ("session_path")
-
-#define LOCAL_WORKER_DEPRECATED ("local_worker")
-#define LOCAL_WORKER_ONLY_DEPRECATED ("local_worker_only")
-#define JVM_ROUTE_OF_WORKER_DEPRECATED ("jvm_route")
-#define ROUTE_OF_WORKER ("route")
-#define DOMAIN_OF_WORKER ("domain")
-#define REDIRECT_OF_WORKER ("redirect")
-#define MOUNT_OF_WORKER ("mount")
-#define METHOD_OF_WORKER ("method")
-#define LOCK_OF_WORKER ("lock")
-#define IS_WORKER_DISABLED_DEPRECATED ("disabled")
-#define IS_WORKER_STOPPED_DEPRECATED ("stopped")
-#define ACTIVATION_OF_WORKER ("activation")
-#define WORKER_RECOVER_TIME ("recover_time")
-#define WORKER_ERROR_ESCALATION_TIME ("error_escalation_time")
-#define MAX_REPLY_TIMEOUTS_OF_WORKER ("max_reply_timeouts")
-#define RETRY_INTERVAL_OF_WORKER ("retry_interval")
-#define WORKER_MAX_PACKET_SIZE ("max_packet_size")
-#define STYLE_SHEET_OF_WORKER ("css")
-#define NAMESPACE_OF_WORKER ("ns")
-#define XML_NAMESPACE_OF_WORKER ("xmlns")
-#define XML_DOCTYPE_OF_WORKER ("doctype")
-#define PROP_PREFIX_OF_WORKER ("prefix")
-
-#define READ_ONLY_OF_WORKER ("read_only")
-#define USER_OF_WORKER ("user")
-#define USER_CASE_OF_WORKER ("user_case_insensitive")
-#define GOOD_RATING_OF_WORKER ("good")
-#define BAD_RATING_OF_WORKER ("bad")
-
-#define DEFAULT_WORKER_TYPE JK_AJP13_WORKER_NAME
-#define SECRET_KEY_OF_WORKER ("secretkey")
-#define RETRIES_OF_WORKER ("retries")
-#define STATUS_FAIL_OF_WORKER ("fail_on_status")
-
-#define DEFAULT_WORKER JK_AJP13_WORKER_NAME
-#define WORKER_LIST_PROPERTY_NAME ("worker.list")
-#define LIST_PROPERTY_NAME ("list")
-#define WORKER_MAINTAIN_PROPERTY_NAME ("worker.maintain")
-#define MAINTAIN_PROPERTY_NAME ("maintain")
-#define DEFAULT_MAINTAIN_TIME (60)
-#define DEFAULT_LB_FACTOR (1)
-#define DEFAULT_DISTANCE (0)
-
-#define TOMCAT32_BRIDGE_NAME ("tomcat32")
-#define TOMCAT33_BRIDGE_NAME ("tomcat33")
-#define TOMCAT40_BRIDGE_NAME ("tomcat40")
-#define TOMCAT41_BRIDGE_NAME ("tomcat41")
-#define TOMCAT50_BRIDGE_NAME ("tomcat5")
-
-#define HUGE_BUFFER_SIZE (8*1024)
-
-#define MAKE_WORKER_PARAM(P) \
- strcpy(buf, "worker."); \
- strcat(buf, wname); \
- strcat(buf, "."); \
- strcat(buf, P)
-
-/*
- * define the log format, we're using by default the one from error.log
- *
- * [Mon Mar 26 19:44:48.123 2001] [jk_uri_worker_map.c (155)]: Into jk_uri_worker_map_t::uri_worker_map_alloc
- * log format used by apache in error.log
- */
-#define JK_TIME_CONV_MILLI "%Q"
-#define JK_TIME_CONV_MICRO "%q"
-#define JK_TIME_PATTERN_MILLI "000"
-#define JK_TIME_PATTERN_MICRO "000000"
-#define JK_TIME_FORMAT_NONE "[%a %b %d %H:%M:%S %Y] "
-#define JK_TIME_FORMAT_MILLI "[%a %b %d %H:%M:%S." JK_TIME_CONV_MILLI " %Y] "
-#define JK_TIME_FORMAT_MICRO "[%a %b %d %H:%M:%S." JK_TIME_CONV_MICRO " %Y] "
-#define JK_TIME_SUBSEC_NONE (0)
-#define JK_TIME_SUBSEC_MILLI (1)
-#define JK_TIME_SUBSEC_MICRO (2)
-
-/* Visual C++ Toolkit 2003 support */
-#if defined (_MSC_VER) && (_MSC_VER == 1310)
- extern long _ftol(double); /* defined by VC6 C libs */
- extern long _ftol2(double dblSource) { return _ftol(dblSource); }
-#endif
-
-static const char *list_properties[] = {
- BALANCE_WORKERS,
- MOUNT_OF_WORKER,
- USER_OF_WORKER,
- GOOD_RATING_OF_WORKER,
- BAD_RATING_OF_WORKER,
- STATUS_FAIL_OF_WORKER,
- "list",
- NULL
-};
-
-static const char *unique_properties[] = {
- SECRET_OF_WORKER,
- REFERENCE_OF_WORKER,
- HOST_OF_WORKER,
- PORT_OF_WORKER,
- TYPE_OF_WORKER,
- CACHE_OF_WORKER_DEPRECATED,
- CACHE_OF_WORKER,
- CACHE_OF_WORKER_MIN,
- CACHE_TIMEOUT_DEPRECATED,
- CACHE_TIMEOUT_OF_WORKER,
- CACHE_ACQUIRE_OF_WORKER,
- RECOVERY_OPTS_OF_WORKER,
- CONNECT_TIMEOUT_OF_WORKER,
- PREPOST_TIMEOUT_OF_WORKER,
- PING_TIMEOUT_OF_WORKER,
- PING_MODE_OF_WORKER,
- REPLY_TIMEOUT_OF_WORKER,
- SOCKET_TIMEOUT_OF_WORKER,
- SOCKET_CONNECT_TIMEOUT_OF_WORKER,
- SOCKET_BUFFER_OF_WORKER,
- SOCKET_KEEPALIVE_OF_WORKER,
- CONN_PING_INTERVAL_OF_WORKER,
- RECYCLE_TIMEOUT_DEPRECATED,
- LOAD_FACTOR_OF_WORKER,
- STICKY_SESSION,
- STICKY_SESSION_FORCE,
- SESSION_COOKIE_OF_WORKER,
- SESSION_PATH_OF_WORKER,
- LOCAL_WORKER_DEPRECATED,
- LOCAL_WORKER_ONLY_DEPRECATED,
- JVM_ROUTE_OF_WORKER_DEPRECATED,
- ROUTE_OF_WORKER,
- DOMAIN_OF_WORKER,
- REDIRECT_OF_WORKER,
- METHOD_OF_WORKER,
- LOCK_OF_WORKER,
- IS_WORKER_DISABLED_DEPRECATED,
- IS_WORKER_STOPPED_DEPRECATED,
- ACTIVATION_OF_WORKER,
- WORKER_RECOVER_TIME,
- WORKER_ERROR_ESCALATION_TIME,
- MAX_REPLY_TIMEOUTS_OF_WORKER,
- RETRY_INTERVAL_OF_WORKER,
- WORKER_MAX_PACKET_SIZE,
- STYLE_SHEET_OF_WORKER,
- READ_ONLY_OF_WORKER,
- RETRIES_OF_WORKER,
- WORKER_MAINTAIN_PROPERTY_NAME,
- NAMESPACE_OF_WORKER,
- XML_NAMESPACE_OF_WORKER,
- XML_DOCTYPE_OF_WORKER,
- PROP_PREFIX_OF_WORKER,
- USER_CASE_OF_WORKER,
- NULL
-};
-
-static const char *deprecated_properties[] = {
- SYSPROPS_OF_WORKER,
- STDERR_OF_WORKER,
- STDOUT_OF_WORKER,
- MX_OF_WORKER,
- MS_OF_WORKER,
- CP_OF_WORKER,
- BRIDGE_OF_WORKER,
- JVM_OF_WORKER,
- LIBPATH_OF_WORKER,
- CMD_LINE_OF_WORKER,
- NATIVE_LIB_OF_WORKER,
- CACHE_OF_WORKER_DEPRECATED,
- CACHE_TIMEOUT_DEPRECATED,
- RECYCLE_TIMEOUT_DEPRECATED,
- BALANCED_WORKERS_DEPRECATED,
- JVM_ROUTE_OF_WORKER_DEPRECATED,
- LOCAL_WORKER_DEPRECATED,
- LOCAL_WORKER_ONLY_DEPRECATED,
- IS_WORKER_DISABLED_DEPRECATED,
- IS_WORKER_STOPPED_DEPRECATED,
- NULL
-};
-
-static const char *supported_properties[] = {
- SYSPROPS_OF_WORKER,
- STDERR_OF_WORKER,
- STDOUT_OF_WORKER,
- SECRET_OF_WORKER,
- MX_OF_WORKER,
- MS_OF_WORKER,
- CP_OF_WORKER,
- BRIDGE_OF_WORKER,
- JVM_OF_WORKER,
- LIBPATH_OF_WORKER,
- CMD_LINE_OF_WORKER,
- NATIVE_LIB_OF_WORKER,
- REFERENCE_OF_WORKER,
- HOST_OF_WORKER,
- PORT_OF_WORKER,
- TYPE_OF_WORKER,
- CACHE_OF_WORKER_DEPRECATED,
- CACHE_OF_WORKER,
- CACHE_OF_WORKER_MIN,
- CACHE_TIMEOUT_DEPRECATED,
- CACHE_TIMEOUT_OF_WORKER,
- CACHE_ACQUIRE_OF_WORKER,
- RECOVERY_OPTS_OF_WORKER,
- CONNECT_TIMEOUT_OF_WORKER,
- PREPOST_TIMEOUT_OF_WORKER,
- PING_TIMEOUT_OF_WORKER,
- PING_MODE_OF_WORKER,
- REPLY_TIMEOUT_OF_WORKER,
- SOCKET_TIMEOUT_OF_WORKER,
- SOCKET_CONNECT_TIMEOUT_OF_WORKER,
- SOCKET_BUFFER_OF_WORKER,
- SOCKET_KEEPALIVE_OF_WORKER,
- CONN_PING_INTERVAL_OF_WORKER,
- RECYCLE_TIMEOUT_DEPRECATED,
- LOAD_FACTOR_OF_WORKER,
- DISTANCE_OF_WORKER,
- BALANCED_WORKERS_DEPRECATED,
- BALANCE_WORKERS,
- STICKY_SESSION,
- STICKY_SESSION_FORCE,
- SESSION_COOKIE_OF_WORKER,
- SESSION_PATH_OF_WORKER,
- LOCAL_WORKER_DEPRECATED,
- LOCAL_WORKER_ONLY_DEPRECATED,
- JVM_ROUTE_OF_WORKER_DEPRECATED,
- ROUTE_OF_WORKER,
- DOMAIN_OF_WORKER,
- REDIRECT_OF_WORKER,
- MOUNT_OF_WORKER,
- METHOD_OF_WORKER,
- LOCK_OF_WORKER,
- IS_WORKER_DISABLED_DEPRECATED,
- IS_WORKER_STOPPED_DEPRECATED,
- ACTIVATION_OF_WORKER,
- WORKER_RECOVER_TIME,
- WORKER_ERROR_ESCALATION_TIME,
- MAX_REPLY_TIMEOUTS_OF_WORKER,
- RETRY_INTERVAL_OF_WORKER,
- WORKER_MAX_PACKET_SIZE,
- STYLE_SHEET_OF_WORKER,
- NAMESPACE_OF_WORKER,
- XML_NAMESPACE_OF_WORKER,
- XML_DOCTYPE_OF_WORKER,
- PROP_PREFIX_OF_WORKER,
- READ_ONLY_OF_WORKER,
- USER_OF_WORKER,
- USER_CASE_OF_WORKER,
- GOOD_RATING_OF_WORKER,
- BAD_RATING_OF_WORKER,
- SECRET_KEY_OF_WORKER,
- RETRIES_OF_WORKER,
- STATUS_FAIL_OF_WORKER,
- LIST_PROPERTY_NAME,
- MAINTAIN_PROPERTY_NAME,
- NULL
-};
-
-static const char *jk_level_verbs[] = {
- "[" JK_LOG_TRACE_VERB "] ",
- "[" JK_LOG_DEBUG_VERB "] ",
- "[" JK_LOG_INFO_VERB "] ",
- "[" JK_LOG_WARN_VERB "] ",
- "[" JK_LOG_ERROR_VERB "] ",
- "[" JK_LOG_EMERG_VERB "] ",
- NULL
-};
-
-const char *jk_get_bool(int v)
-{
- if (v == 0)
- return "False";
- else
- return "True";
-}
-
-int jk_get_bool_code(const char *v, int def)
-{
- if (!v) {
- return def;
- }
- else if (!strcasecmp(v, "off") ||
- *v == 'F' || *v == 'f' ||
- *v == 'N' || *v == 'n' ||
- (*v == '0' && *(v + 1) == '\0')) {
- return 0;
- }
- else if (!strcasecmp(v, "on") ||
- *v == 'T' || *v == 't' ||
- *v == 'Y' || *v == 'y' ||
- (*v == '1' && *(v + 1) == '\0')) {
- return 1;
- }
- return def;
-}
-
-/* Sleep for 100ms */
-void jk_sleep(int ms)
-{
-#ifdef OS2
- DosSleep(ms);
-#elif defined(BEOS)
- snooze(ms * 1000);
-#elif defined(NETWARE)
- delay(ms);
-#elif defined(WIN32)
- Sleep(ms);
-#else
- struct timeval tv;
- tv.tv_usec = (ms % 1000) * 1000;
- tv.tv_sec = ms / 1000;
- select(0, NULL, NULL, NULL, &tv);
-#endif
-}
-
-/* Replace the first occurence of a sub second time format character
- * by a series of zero digits with the right precision.
- * We format our timestamp with strftime, but this can not handle
- * sub second timestamps.
- * So we first patch the milliseconds or microseconds literally into
- * the format string, and then pass it on the strftime.
- * In order to do that efficiently, we prepare a format string, that
- * already has placeholder digits for the sub second time stamp
- * and we save the position and time precision of this placeholder.
- */
-void jk_set_time_fmt(jk_logger_t *l, const char *jk_log_fmt)
-{
- if (l) {
- char *s;
-
- if (!jk_log_fmt) {
-#ifndef NO_GETTIMEOFDAY
- jk_log_fmt = JK_TIME_FORMAT_MILLI;
-#else
- jk_log_fmt = JK_TIME_FORMAT_NONE;
-#endif
- }
- l->log_fmt_type = JK_TIME_SUBSEC_NONE;
- l->log_fmt_offset = 0;
- l->log_fmt_size = 0;
- l->log_fmt = jk_log_fmt;
-
-/* Look for the first occurence of JK_TIME_CONV_MILLI */
- if ((s = strstr(jk_log_fmt, JK_TIME_CONV_MILLI))) {
- size_t offset = s - jk_log_fmt;
- size_t len = strlen(JK_TIME_PATTERN_MILLI);
-
-/* If we don't have enough space in our fixed-length char array,
- * we simply stick to the default format, ignoring JK_TIME_CONV_MILLI.
- * Otherwise we replace the first occurence of JK_TIME_CONV_MILLI by JK_TIME_PATTERN_MILLI.
- */
- if (offset + len < JK_TIME_MAX_SIZE) {
- l->log_fmt_type = JK_TIME_SUBSEC_MILLI;
- l->log_fmt_offset = offset;
- strncpy(l->log_fmt_subsec, jk_log_fmt, offset);
- strncpy(l->log_fmt_subsec + offset, JK_TIME_PATTERN_MILLI, len);
- strncpy(l->log_fmt_subsec + offset + len,
- s + strlen(JK_TIME_CONV_MILLI),
- JK_TIME_MAX_SIZE - offset - len - 1);
-/* Now we put a stop mark into the string to make it's length at most JK_TIME_MAX_SIZE-1
- * plus terminating '\0'.
- */
- l->log_fmt_subsec[JK_TIME_MAX_SIZE-1] = '\0';
- l->log_fmt_size = strlen(l->log_fmt_subsec);
- }
-/* Look for the first occurence of JK_TIME_CONV_MICRO */
- }
- else if ((s = strstr(jk_log_fmt, JK_TIME_CONV_MICRO))) {
- size_t offset = s - jk_log_fmt;
- size_t len = strlen(JK_TIME_PATTERN_MICRO);
-
-/* If we don't have enough space in our fixed-length char array,
- * we simply stick to the default format, ignoring JK_TIME_CONV_MICRO.
- * Otherwise we replace the first occurence of JK_TIME_CONV_MICRO by JK_TIME_PATTERN_MICRO.
- */
- if (offset + len < JK_TIME_MAX_SIZE) {
- l->log_fmt_type = JK_TIME_SUBSEC_MICRO;
- l->log_fmt_offset = offset;
- strncpy(l->log_fmt_subsec, jk_log_fmt, offset);
- strncpy(l->log_fmt_subsec + offset, JK_TIME_PATTERN_MICRO, len);
- strncpy(l->log_fmt_subsec + offset + len,
- s + strlen(JK_TIME_CONV_MICRO),
- JK_TIME_MAX_SIZE - offset - len - 1);
-/* Now we put a stop mark into the string to make it's length at most JK_TIME_MAX_SIZE-1
- * plus terminating '\0'.
- */
- l->log_fmt_subsec[JK_TIME_MAX_SIZE-1] = '\0';
- l->log_fmt_size = strlen(l->log_fmt_subsec);
- }
- }
- jk_log(l, JK_LOG_DEBUG, "Pre-processed log time stamp format is '%s'",
- l->log_fmt_type == JK_TIME_SUBSEC_NONE ? l->log_fmt : l->log_fmt_subsec);
- }
-}
-
-static int set_time_str(char *str, int len, jk_logger_t *l)
-{
- time_t t;
- struct tm *tms;
-#ifdef _MT_CODE_PTHREAD
- struct tm res;
-#endif
- int done;
-/* We want to use a fixed maximum size buffer here.
- * If we would dynamically adjust it to the real format
- * string length, we could support longer format strings,
- * but we would have to allocate and free for each log line.
- */
- char log_fmt[JK_TIME_MAX_SIZE];
-
- if (!l || !l->log_fmt) {
- return 0;
- }
-
- log_fmt[0] = '\0';
-
-#ifndef NO_GETTIMEOFDAY
- if ( l->log_fmt_type != JK_TIME_SUBSEC_NONE ) {
- struct timeval tv;
- int rc = 0;
-
-#ifdef WIN32
- gettimeofday(&tv, NULL);
-#else
- rc = gettimeofday(&tv, NULL);
-#endif
- if (rc == 0) {
-/* We need this subsec buffer, because we convert
- * the integer with sprintf(), but we don't
- * want to write the terminating '\0' into our
- * final log format string.
- */
- char subsec[7];
- t = tv.tv_sec;
- strncpy(log_fmt, l->log_fmt_subsec, l->log_fmt_size + 1);
- if (l->log_fmt_type == JK_TIME_SUBSEC_MILLI) {
- sprintf(subsec, "%03d", (int)(tv.tv_usec/1000));
- strncpy(log_fmt + l->log_fmt_offset, subsec, 3);
- }
- else if (l->log_fmt_type == JK_TIME_SUBSEC_MICRO) {
- sprintf(subsec, "%06d", (int)(tv.tv_usec));
- strncpy(log_fmt + l->log_fmt_offset, subsec, 6);
- }
- }
- else {
- t = time(NULL);
- }
- }
- else {
- t = time(NULL);
- }
-#else
- t = time(NULL);
-#endif
-#ifdef _MT_CODE_PTHREAD
- tms = localtime_r(&t, &res);
-#else
- tms = localtime(&t);
-#endif
- if (log_fmt[0])
- done = (int)strftime(str, len, log_fmt, tms);
- else
- done = (int)strftime(str, len, l->log_fmt, tms);
- return done;
-
-}
-
-static int JK_METHOD log_to_file(jk_logger_t *l, int level, int used, char *what)
-{
- if (l &&
- (l->level <= level || level == JK_LOG_REQUEST_LEVEL) &&
- l->logger_private && what) {
- jk_file_logger_t *p = l->logger_private;
- if (p->logfile) {
- what[used++] = '\n';
- what[used] = '\0';
-#if defined(JK_LOG_LOCKING)
-#if defined(WIN32) && defined(_MSC_VER)
- LockFile((HANDLE)_get_osfhandle(_fileno(p->logfile)),
- 0, 0, 1, 0);
-#endif
-#endif
- fputs(what, p->logfile);
- /* [V] Flush the dam' thing! */
- fflush(p->logfile);
-#if defined(JK_LOG_LOCKING)
-#if defined(WIN32) && defined(_MSC_VER)
- UnlockFile((HANDLE)_get_osfhandle(_fileno(p->logfile)),
- 0, 0, 1, 0);
-#endif
-#endif
- }
- return JK_TRUE;
- }
- return JK_FALSE;
-}
-
-int jk_parse_log_level(const char *level)
-{
- if (0 == strcasecmp(level, JK_LOG_TRACE_VERB)) {
- return JK_LOG_TRACE_LEVEL;
- }
-
- if (0 == strcasecmp(level, JK_LOG_DEBUG_VERB)) {
- return JK_LOG_DEBUG_LEVEL;
- }
-
- if (0 == strcasecmp(level, JK_LOG_INFO_VERB)) {
- return JK_LOG_INFO_LEVEL;
- }
-
- if (0 == strcasecmp(level, JK_LOG_WARN_VERB)) {
- return JK_LOG_WARNING_LEVEL;
- }
-
- if (0 == strcasecmp(level, JK_LOG_ERROR_VERB)) {
- return JK_LOG_ERROR_LEVEL;
- }
-
- if (0 == strcasecmp(level, JK_LOG_EMERG_VERB)) {
- return JK_LOG_EMERG_LEVEL;
- }
-
- return JK_LOG_DEF_LEVEL;
-}
-
-int jk_open_file_logger(jk_logger_t **l, const char *file, int level)
-{
- if (l && file) {
-
- jk_logger_t *rc = (jk_logger_t *)malloc(sizeof(jk_logger_t));
- jk_file_logger_t *p = (jk_file_logger_t *) malloc(sizeof(jk_file_logger_t));
- if (rc && p) {
- rc->log = log_to_file;
- rc->level = level;
- rc->logger_private = p;
-#if defined(AS400) && !defined(AS400_UTF8)
- p->logfile = fopen(file, "a+, o_ccsid=0");
-#elif defined(WIN32) && defined(_MSC_VER)
- p->logfile = fopen(file, "a+c");
-#else
- p->logfile = fopen(file, "a+");
-#endif
- if (p->logfile) {
- *l = rc;
- jk_set_time_fmt(rc, NULL);
- return JK_TRUE;
- }
- }
- if (rc) {
- free(rc);
- }
- if (p) {
- free(p);
- }
-
- *l = NULL;
- }
- return JK_FALSE;
-}
-
-int jk_attach_file_logger(jk_logger_t **l, int fd, int level)
-{
- if (l && fd >= 0) {
-
- jk_logger_t *rc = (jk_logger_t *)malloc(sizeof(jk_logger_t));
- jk_file_logger_t *p = (jk_file_logger_t *) malloc(sizeof(jk_file_logger_t));
- if (rc && p) {
- rc->log = log_to_file;
- rc->level = level;
- rc->logger_private = p;
-#if defined(AS400) && !defined(AS400_UTF8)
- p->logfile = fdopen(fd, "a+, o_ccsid=0");
-#elif defined(WIN32) && defined(_MSC_VER)
- p->logfile = fdopen(fd, "a+c");
-#else
- p->logfile = fdopen(fd, "a+");
-#endif
- if (p->logfile) {
- *l = rc;
- jk_set_time_fmt(rc, NULL);
- return JK_TRUE;
- }
- }
- if (rc) {
- free(rc);
- }
- if (p) {
- free(p);
- }
-
- *l = NULL;
- }
- return JK_FALSE;
-}
-
-int jk_close_file_logger(jk_logger_t **l)
-{
- if (l && *l) {
- jk_file_logger_t *p = (*l)->logger_private;
- if (p) {
- fflush(p->logfile);
- fclose(p->logfile);
- free(p);
- }
- free(*l);
- *l = NULL;
-
- return JK_TRUE;
- }
- return JK_FALSE;
-}
-
-int jk_log(jk_logger_t *l,
- const char *file, int line, const char *funcname, int level,
- const char *fmt, ...)
-{
- int rc = 0;
- /*
- * Need to reserve space for terminating zero byte
- * and platform specific line endings added during the call
- * to the output routing.
- */
- static int usable_size = HUGE_BUFFER_SIZE - 3;
- if (!l || !file || !fmt) {
- return -1;
- }
-
- if ((l->level <= level) || (level == JK_LOG_REQUEST_LEVEL)) {
-#ifdef NETWARE
- /* On NetWare, this can get called on a thread that has a limited stack so */
- /* we will allocate and free the temporary buffer in this function */
- char *buf;
-#else
- char buf[HUGE_BUFFER_SIZE];
-#endif
- char *f = (char *)(file + strlen(file) - 1);
- va_list args;
- int used = 0;
-
- while (f != file && '\\' != *f && '/' != *f) {
- f--;
- }
- if (f != file) {
- f++;
- }
-
-#ifdef NETWARE
- buf = (char *)malloc(HUGE_BUFFER_SIZE);
- if (NULL == buf)
- return -1;
-#endif
- used = set_time_str(buf, usable_size, l);
-
- if (line) { /* line==0 only used for request log item */
- /* Log [pid:threadid] for all levels except REQUEST. */
- /* This information helps to correlate lines from different logs. */
- /* Performance is no issue, because with production log levels */
- /* we only call it often, if we have a lot of errors */
- rc = snprintf(buf + used, usable_size - used,
- "[%" JK_PID_T_FMT ":%" JK_PTHREAD_T_FMT "] ", getpid(), jk_gettid());
- used += rc;
- if (rc < 0 ) {
- return 0;
- }
-
- rc = (int)strlen(jk_level_verbs[level]);
- if (usable_size - used >= rc) {
- strncpy(buf + used, jk_level_verbs[level], rc);
- used += rc;
- }
- else {
- return 0; /* [V] not sure what to return... */
- }
-
- if (funcname) {
- rc = (int)strlen(funcname);
- if (usable_size - used >= rc + 2) {
- strncpy(buf + used, funcname, rc);
- used += rc;
- strncpy(buf + used, "::", 2);
- used += 2;
- }
- else {
- return 0; /* [V] not sure what to return... */
- }
- }
-
- rc = (int)strlen(f);
- if (usable_size - used >= rc) {
- strncpy(buf + used, f, rc);
- used += rc;
- }
- else {
- return 0; /* [V] not sure what to return... */
- }
-
- rc = snprintf(buf + used, usable_size - used,
- " (%d): ", line);
- used += rc;
- if (rc < 0 || usable_size - used < 0) {
- return 0; /* [V] not sure what to return... */
- }
- }
-
- va_start(args, fmt);
- rc = vsnprintf(buf + used, usable_size - used, fmt, args);
- va_end(args);
- if ( rc <= usable_size - used ) {
- used += rc;
- } else {
- used = usable_size;
- }
- l->log(l, level, used, buf);
-
-#ifdef NETWARE
- free(buf);
-#endif
- }
-
- return rc;
-}
-
-const char *jk_get_worker_type(jk_map_t *m, const char *wname)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return NULL;
- }
- MAKE_WORKER_PARAM(TYPE_OF_WORKER);
- return jk_map_get_string(m, buf, DEFAULT_WORKER_TYPE);
-}
-
-const char *jk_get_worker_route(jk_map_t *m, const char *wname, const char *def)
-{
- char buf[1024];
- const char *v;
- if (!m || !wname) {
- return NULL;
- }
- MAKE_WORKER_PARAM(ROUTE_OF_WORKER);
- v = jk_map_get_string(m, buf, NULL);
- if (v) {
- return v;
- }
- /* Try old jvm_route directive */
- MAKE_WORKER_PARAM(JVM_ROUTE_OF_WORKER_DEPRECATED);
- return jk_map_get_string(m, buf, def);
-}
-
-const char *jk_get_worker_domain(jk_map_t *m, const char *wname, const char *def)
-{
- char buf[1024];
- if (!m || !wname) {
- return NULL;
- }
- MAKE_WORKER_PARAM(DOMAIN_OF_WORKER);
- return jk_map_get_string(m, buf, def);
-}
-
-const char *jk_get_worker_redirect(jk_map_t *m, const char *wname, const char *def)
-{
- char buf[1024];
- if (!m || !wname) {
- return NULL;
- }
- MAKE_WORKER_PARAM(REDIRECT_OF_WORKER);
- return jk_map_get_string(m, buf, def);
-}
-
-const char *jk_get_worker_secret(jk_map_t *m, const char *wname)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return NULL;
- }
-
- MAKE_WORKER_PARAM(SECRET_OF_WORKER);
-
- return jk_map_get_string(m, buf, NULL);
-}
-
-/* [V] I suggest that the following general purpose functions be used. */
-/* More should be added (double etc.), but now these were enough for me. */
-/* Functions that can be simulated with these should be "deprecated". */
-
-int jk_get_worker_str_prop(jk_map_t *m,
- const char *wname, const char *pname, const char **prop)
-{
- char buf[1024];
-
- if (m && prop && wname && pname) {
- MAKE_WORKER_PARAM(pname);
- *prop = jk_map_get_string(m, buf, NULL);
- if (*prop) {
- return JK_TRUE;
- }
- }
- return JK_FALSE;
-}
-
-int jk_get_worker_int_prop(jk_map_t *m,
- const char *wname, const char *pname, int *prop)
-{
- char buf[1024];
-
- if (m && prop && wname && pname) {
- int i;
- MAKE_WORKER_PARAM(pname);
- i = jk_map_get_int(m, buf, -1);
- if (-1 != i) {
- *prop = i;
- return JK_TRUE;
- }
- }
- return JK_FALSE;
-}
-
-const char *jk_get_worker_host(jk_map_t *m, const char *wname, const char *def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return NULL;
- }
-
- MAKE_WORKER_PARAM(HOST_OF_WORKER);
-
- return jk_map_get_string(m, buf, def);
-}
-
-int jk_get_worker_port(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(PORT_OF_WORKER);
-
- return jk_map_get_int(m, buf, def);
-}
-
-static int def_cache_size = -1;
-int jk_get_worker_def_cache_size(int protocol)
-{
- if (def_cache_size < 1) {
- if (protocol == AJP14_PROTO)
- def_cache_size = AJP14_DEF_CACHE_SZ;
- else
- def_cache_size = AJP13_DEF_CACHE_SZ;
- }
- return def_cache_size;
-}
-
-void jk_set_worker_def_cache_size(int sz)
-{
- def_cache_size = sz;
-}
-
-int jk_get_worker_cache_size(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
- int rv;
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(CACHE_OF_WORKER);
- if ((rv = jk_map_get_int(m, buf, -1)) >= 0)
- return rv;
- MAKE_WORKER_PARAM(CACHE_OF_WORKER_DEPRECATED);
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_cache_size_min(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(CACHE_OF_WORKER_MIN);
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_cache_acquire_timeout(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(CACHE_ACQUIRE_OF_WORKER);
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_socket_timeout(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(SOCKET_TIMEOUT_OF_WORKER);
-
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_socket_connect_timeout(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(SOCKET_CONNECT_TIMEOUT_OF_WORKER);
-
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_recover_timeout(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(WORKER_RECOVER_TIME);
-
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_error_escalation_time(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(WORKER_ERROR_ESCALATION_TIME);
-
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_max_reply_timeouts(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(MAX_REPLY_TIMEOUTS_OF_WORKER);
-
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_retry_interval(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(RETRY_INTERVAL_OF_WORKER);
-
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_socket_buffer(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
- int i;
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(SOCKET_BUFFER_OF_WORKER);
-
- i = jk_map_get_int(m, buf, 0);
- if (i > 0 && i < def)
- i = def;
- return i;
-}
-
-int jk_get_worker_socket_keepalive(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(SOCKET_KEEPALIVE_OF_WORKER);
-
- return jk_map_get_bool(m, buf, def);
-}
-
-int jk_get_worker_conn_ping_interval(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(CONN_PING_INTERVAL_OF_WORKER);
-
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_cache_timeout(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
- int rv;
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(CACHE_TIMEOUT_OF_WORKER);
- if ((rv = jk_map_get_int(m, buf, -1)) >= 0)
- return rv;
- MAKE_WORKER_PARAM(CACHE_TIMEOUT_DEPRECATED);
-
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_connect_timeout(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(CONNECT_TIMEOUT_OF_WORKER);
-
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_prepost_timeout(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(PREPOST_TIMEOUT_OF_WORKER);
-
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_ping_timeout(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(PING_TIMEOUT_OF_WORKER);
-
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_ping_mode(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
- const char *v;
-
- if (!m || !wname) {
- return def;
- }
-
- MAKE_WORKER_PARAM(PING_MODE_OF_WORKER);
-
- v = jk_map_get_string(m, buf, NULL);
- return jk_ajp_get_cping_mode(v, def);
-}
-
-int jk_get_worker_reply_timeout(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return -1;
- }
-
- MAKE_WORKER_PARAM(REPLY_TIMEOUT_OF_WORKER);
-
- return jk_map_get_int(m, buf, def);
-}
-
-int jk_get_worker_recycle_timeout(jk_map_t *m, const char *wname, int def)
-{
- return def;
-}
-
-int jk_get_worker_retries(jk_map_t *m, const char *wname, int def)
-{
- char buf[1024];
- 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_workers)
-{
- if (m && list && num_of_workers) {
- char **ar = jk_map_get_string_list(m,
- WORKER_LIST_PROPERTY_NAME,
- num_of_workers,
- DEFAULT_WORKER);
- if (ar) {
- *list = ar;
- return JK_TRUE;
- }
- *list = NULL;
- *num_of_workers = 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_DEPRECATED);
- 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_DEPRECATED);
- value = jk_map_get_bool(m, buf, 0);
- if (!value)
- rc = JK_FALSE;
- }
- return rc;
-}
-
-int jk_get_worker_activation(jk_map_t *m, const char *wname)
-{
- char buf[1024];
- const char *v;
- if (!m || !wname) {
- return JK_LB_ACTIVATION_ACTIVE;
- }
-
- MAKE_WORKER_PARAM(ACTIVATION_OF_WORKER);
- v = jk_map_get_string(m, buf, NULL);
- if (v) {
- return jk_lb_get_activation_code(v);
- }
- else if (jk_get_is_worker_stopped(m, wname))
- return JK_LB_ACTIVATION_STOPPED;
- else if (jk_get_is_worker_disabled(m, wname))
- return JK_LB_ACTIVATION_DISABLED;
- else
- return JK_LB_ACTIVATION_DEF;
-}
-
-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_distance(jk_map_t *m, const char *wname)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return DEFAULT_DISTANCE;
- }
-
- MAKE_WORKER_PARAM(DISTANCE_OF_WORKER);
-
- return jk_map_get_int(m, buf, DEFAULT_DISTANCE);
-}
-
-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 JK_LB_METHOD_DEF;
- }
-
- MAKE_WORKER_PARAM(METHOD_OF_WORKER);
- v = jk_map_get_string(m, buf, NULL);
- return jk_lb_get_method_code(v);
-}
-
-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_DEF;
- }
-
- MAKE_WORKER_PARAM(LOCK_OF_WORKER);
- v = jk_map_get_string(m, buf, NULL);
- return jk_lb_get_lock_code(v);
-}
-
-int jk_get_max_packet_size(jk_map_t *m, const char *wname)
-{
- char buf[1024];
- int sz;
-
- if (!m || !wname) {
- return DEF_BUFFER_SZ;
- }
-
- MAKE_WORKER_PARAM(WORKER_MAX_PACKET_SIZE);
- sz = jk_map_get_int(m, buf, DEF_BUFFER_SZ);
- sz = JK_ALIGN(sz, 1024);
- if (sz < DEF_BUFFER_SZ)
- sz = DEF_BUFFER_SZ;
- else if (sz > 64*1024)
- sz = 64*1024;
-
- return sz;
-}
-
-int jk_get_worker_fail_on_status(jk_map_t *m, const char *wname,
- int *list, unsigned int list_size)
-{
- char buf[1024];
- if (!m || !wname || !list) {
- return 0;
- }
- MAKE_WORKER_PARAM(STATUS_FAIL_OF_WORKER);
- if (list_size) {
- return jk_map_get_int_list(m, buf,
- list, list_size,
- NULL);
- }
-
- return 0;
-}
-
-int jk_get_worker_user_case_insensitive(jk_map_t *m, const char *wname)
-{
- int rc = JK_FALSE;
- char buf[1024];
- if (m && wname) {
- int value;
- MAKE_WORKER_PARAM(USER_CASE_OF_WORKER);
- value = jk_map_get_bool(m, buf, 0);
- if (value)
- rc = JK_TRUE;
- }
- return rc;
-
-}
-
-const char *jk_get_worker_style_sheet(jk_map_t *m, const char *wname, const char *def)
-{
- char buf[1024];
-
- if (!m || !wname) {
- return NULL;
- }
-
- MAKE_WORKER_PARAM(STYLE_SHEET_OF_WORKER);
-
- return jk_map_get_string(m, buf, def);
-}
-
-const char *jk_get_worker_name_space(jk_map_t *m, const char *wname, const char *def)
-{
- const char *rc;
- char buf[1024];
- if (!m || !wname) {
- return NULL;
- }
- MAKE_WORKER_PARAM(NAMESPACE_OF_WORKER);
- rc = jk_map_get_string(m, buf, def);
- if (*rc == '-')
- return "";
- else
- return rc;
-}
-
-const char *jk_get_worker_xmlns(jk_map_t *m, const char *wname, const char *def)
-{
- const char *rc;
- char buf[1024];
- if (!m || !wname) {
- return NULL;
- }
- MAKE_WORKER_PARAM(XML_NAMESPACE_OF_WORKER);
- rc = jk_map_get_string(m, buf, def);
- if (*rc == '-')
- return "";
- else
- return rc;
-}
-
-const char *jk_get_worker_xml_doctype(jk_map_t *m, const char *wname, const char *def)
-{
- char buf[1024];
- if (!m || !wname) {
- return NULL;
- }
- MAKE_WORKER_PARAM(XML_DOCTYPE_OF_WORKER);
- return jk_map_get_string(m, buf, def);
-}
-
-const char *jk_get_worker_prop_prefix(jk_map_t *m, const char *wname, const char *def)
-{
- char buf[1024];
- if (!m || !wname) {
- return NULL;
- }
- MAKE_WORKER_PARAM(PROP_PREFIX_OF_WORKER);
- return jk_map_get_string(m, buf, def);
-}
-
-int jk_get_is_read_only(jk_map_t *m, const char *wname)
-{
- int rc = JK_FALSE;
- char buf[1024];
- if (m && wname) {
- int value;
- MAKE_WORKER_PARAM(READ_ONLY_OF_WORKER);
- value = jk_map_get_bool(m, buf, 0);
- if (value)
- rc = JK_TRUE;
- }
- return rc;
-}
-
-int jk_get_worker_user_list(jk_map_t *m,
- const char *wname,
- char ***list, unsigned int *num)
-{
- char buf[1024];
-
- if (m && list && num && wname) {
- char **ar = NULL;
-
- MAKE_WORKER_PARAM(USER_OF_WORKER);
- ar = jk_map_get_string_list(m, buf, num, NULL);
- if (ar) {
- *list = ar;
- return JK_TRUE;
- }
- *list = NULL;
- *num = 0;
- }
-
- return JK_FALSE;
-}
-
-int jk_get_worker_good_rating(jk_map_t *m,
- const char *wname,
- char ***list, unsigned int *num)
-{
- char buf[1024];
-
- if (m && list && num && wname) {
- char **ar = NULL;
-
- MAKE_WORKER_PARAM(GOOD_RATING_OF_WORKER);
- ar = jk_map_get_string_list(m, buf, num, NULL);
- if (ar) {
- *list = ar;
- return JK_TRUE;
- }
- *list = NULL;
- *num = 0;
- }
-
- return JK_FALSE;
-}
-
-int jk_get_worker_bad_rating(jk_map_t *m,
- const char *wname,
- char ***list, unsigned int *num)
-{
- char buf[1024];
-
- if (m && list && num && wname) {
- char **ar = NULL;
-
- MAKE_WORKER_PARAM(BAD_RATING_OF_WORKER);
- ar = jk_map_get_string_list(m, buf, num, NULL);
- if (ar) {
- *list = ar;
- return JK_TRUE;
- }
- *list = NULL;
- *num = 0;
- }
-
- return JK_FALSE;
-}
-
-int jk_get_lb_worker_list(jk_map_t *m,
- const char *wname,
- char ***list, unsigned int *num_of_workers)
-{
- char buf[1024];
-
- if (m && list && num_of_workers && wname) {
- char **ar = NULL;
-
- MAKE_WORKER_PARAM(BALANCE_WORKERS);
- ar = jk_map_get_string_list(m, buf, num_of_workers, NULL);
- if (ar) {
- *list = ar;
- return JK_TRUE;
- }
- /* Try old balanced_workers directive */
- MAKE_WORKER_PARAM(BALANCED_WORKERS_DEPRECATED);
- ar = jk_map_get_string_list(m, buf, num_of_workers, NULL);
- if (ar) {
- *list = ar;
- return JK_TRUE;
- }
- *list = NULL;
- *num_of_workers = 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_stat(const char *f, struct stat * statbuf)
-{
- int rc;
-/**
- * i5/OS V5R4 expect filename in ASCII for fopen but required them in EBCDIC for stat()
- */
-#ifdef AS400_UTF8
- char *ptr;
-
- ptr = (char *)malloc(strlen(f) + 1);
- jk_ascii2ebcdic((char *)f, ptr);
- rc = stat(ptr, statbuf);
- free(ptr);
-#else
- rc = stat(f, statbuf);
-#endif
-
- return (rc);
-}
-
-
-int jk_file_exists(const char *f)
-{
- if (f) {
- struct stat st;
-
- if ((0 == jk_stat(f, &st)) && (st.st_mode & S_IFREG))
- return JK_TRUE;
- }
-
- return JK_FALSE;
-}
-
-static int jk_is_some_property(const char *prp_name, const char *suffix, const char *sep)
-{
- char buf[1024];
-
- if (prp_name && suffix) {
- size_t prp_name_len;
- size_t suffix_len;
- strcpy(buf, sep);
- strcat(buf, suffix);
- prp_name_len = strlen(prp_name);
- suffix_len = strlen(buf);
- if (prp_name_len >= suffix_len) {
- const char *prp_suffix = prp_name + prp_name_len - suffix_len;
- if (0 == strcmp(buf, prp_suffix)) {
- return JK_TRUE;
- }
- }
- }
-
- return JK_FALSE;
-}
-
-int jk_is_path_property(const char *prp_name)
-{
- return jk_is_some_property(prp_name, "path", "_");
-}
-
-int jk_is_cmd_line_property(const char *prp_name)
-{
- return jk_is_some_property(prp_name, CMD_LINE_OF_WORKER, ".");
-}
-
-int jk_is_list_property(const char *prp_name)
-{
- const char **props = &list_properties[0];
- while (*props) {
- if (jk_is_some_property(prp_name, *props, "."))
- return JK_TRUE;
- props++;
- }
- return JK_FALSE;
-}
-
-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_is_deprecated_property(const char *prp_name)
-{
- const char **props = &deprecated_properties[0];
- while (*props) {
- if (jk_is_some_property(prp_name, *props, "."))
- return JK_TRUE;
- props++;
- }
- return JK_FALSE;
-}
-/*
- * Check that property is a valid one (to prevent user typos).
- * Only property starting with worker.
- */
-int jk_is_valid_property(const char *prp_name)
-{
- const char **props;
- if (memcmp(prp_name, "worker.", 7))
- return JK_TRUE;
-
- props = &supported_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;
-}
-
-const char *jk_get_lb_session_cookie(jk_map_t *m, const char *wname, const char *def)
-{
- char buf[1024];
- if (!m || !wname) {
- return NULL;
- }
- MAKE_WORKER_PARAM(SESSION_COOKIE_OF_WORKER);
- return jk_map_get_string(m, buf, def);
-}
-
-const char *jk_get_lb_session_path(jk_map_t *m, const char *wname, const char *def)
-{
- char buf[1024];
- if (!m || !wname) {
- return NULL;
- }
- MAKE_WORKER_PARAM(SESSION_PATH_OF_WORKER);
- return jk_map_get_string(m, buf, def);
-}
-
-
-int is_http_status_fail(unsigned int http_status_fail_num,
- int *http_status_fail, int status)
-{
- unsigned int i;
- int soft_status = -1 * status;
- for (i = 0; i < http_status_fail_num; i++) {
- if (http_status_fail[i] == status)
- return 1;
- else if (http_status_fail[i] == soft_status)
- return -1;
- }
- return 0;
-}
-
-char **jk_parse_sysprops(jk_pool_t *p, const char *sysprops)
-{
- char **rc = NULL;
-#ifdef _MT_CODE_PTHREAD
- 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;
-#ifdef _MT_CODE_PTHREAD
- char *tmp = strtok_r(prps, "*", &lasts);
-#else
- char *tmp = strtok(prps, "*");
-#endif
-
- while (tmp && i < num_of_prps) {
- rc[i] = tmp;
-#ifdef _MT_CODE_PTHREAD
- 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_port = 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->ssl_key_size = -1;
- 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->route = NULL;
- s->activation = JK_LB_ACTIVATION_ACTIVE;
- s->secret = NULL;
- s->reco_buf = NULL;
- s->reco_status = RECO_NONE;
- s->flush_packets = JK_FALSE;
- s->flush_header = JK_FALSE;
- s->extension.reply_timeout = -1;
- s->extension.use_server_error_pages = 0;
- s->extension.activation = NULL;
- s->extension.fail_on_status_size = 0;
- s->extension.fail_on_status = NULL;
- s->response_started = JK_FALSE;
- s->response_blocked = JK_FALSE;
- s->http_response_status = JK_HTTP_OK;
- s->uw_map = NULL;
- s->start_response = NULL;
- s->read = NULL;
- s->write = NULL;
- s->flush = NULL;
- s->done = NULL;
- s->disable_reuse = JK_FALSE;
- s->add_log_items = NULL;
- s->next_vhost = NULL;
- s->vhost_to_text = NULL;
- s->vhost_to_uw_map = NULL;
-}
-
-/* Match = 0, NoMatch = 1, Abort = -1
- * Based loosely on sections of wildmat.c by Rich Salz
- */
-int jk_wildchar_match(const char *str, const char *exp, int icase)
-{
- int x, y;
-
- for (x = 0, y = 0; exp[y]; ++y, ++x) {
- if (!str[x] && exp[y] != '*')
- return -1;
- if (exp[y] == '*') {
- while (exp[++y] == '*');
- if (!exp[y])
- return 0;
- while (str[x]) {
- int ret;
- if ((ret = jk_wildchar_match(&str[x++], &exp[y], icase)) != 1)
- return ret;
- }
- return -1;
- }
- else if (exp[y] != '?') {
- if (icase && (tolower(str[x]) != tolower(exp[y])))
- return 1;
- else if (!icase && str[x] != exp[y])
- return 1;
- }
- }
- return (str[x] != '\0');
-}
-
-#ifdef _MT_CODE_PTHREAD
-jk_pthread_t jk_gettid()
-{
- union {
- pthread_t tid;
- jk_uint64_t alignme;
- } u;
-#ifdef AS400
- /* OS400 use 64 bits ThreadId */
- pthread_id_np_t tid;
-#endif /* AS400 */
- u.tid = pthread_self();
-#ifdef AS400
- /* Get only low 32 bits for now */
- pthread_getunique_np(&(u.tid), &tid);
- return ((jk_uint32_t)(tid.intId.lo & 0xFFFFFFFF));
-#else
- return ((jk_pthread_t)u.tid);
-#endif /* AS400 */
-}
-#endif
-
-/***
- * ASCII <-> EBCDIC conversions
- *
- * For now usefull only in i5/OS V5R4 where UTF and EBCDIC mode are mixed
- */
-
-#ifdef AS400_UTF8
-
-/* EBCDIC to ASCII translation table */
-static u_char ebcdic_to_ascii[256] =
-{
- 0x00,0x01,0x02,0x03,0x20,0x09,0x20,0x7f, /* 00-07 */
- 0x20,0x20,0x20,0x0b,0x0c,0x0d,0x0e,0x0f, /* 08-0f */
- 0x10,0x11,0x12,0x13,0x20,0x0a,0x08,0x20, /* 10-17 */
- 0x18,0x19,0x20,0x20,0x20,0x1d,0x1e,0x1f, /* 18-1f */
- 0x20,0x20,0x1c,0x20,0x20,0x0a,0x17,0x1b, /* 20-27 */
- 0x20,0x20,0x20,0x20,0x20,0x05,0x06,0x07, /* 28-2f */
- 0x20,0x20,0x16,0x20,0x20,0x20,0x20,0x04, /* 30-37 */
- 0x20,0x20,0x20,0x20,0x14,0x15,0x20,0x1a, /* 38-3f */
- 0x20,0x20,0x83,0x84,0x85,0xa0,0xc6,0x86, /* 40-47 */
- 0x87,0xa4,0xbd,0x2e,0x3c,0x28,0x2b,0x7c, /* 48-4f */
- 0x26,0x82,0x88,0x89,0x8a,0xa1,0x8c,0x8b, /* 50-57 */
- 0x8d,0xe1,0x21,0x24,0x2a,0x29,0x3b,0xaa, /* 58-5f */
- 0x2d,0x2f,0xb6,0x8e,0xb7,0xb5,0xc7,0x8f, /* 60-67 */
- 0x80,0xa5,0xdd,0x2c,0x25,0x5f,0x3e,0x3f, /* 68-6f */
- 0x9b,0x90,0xd2,0xd3,0xd4,0xd6,0xd7,0xd8, /* 70-77 */
- 0xde,0x60,0x3a,0x23,0x40,0x27,0x3d,0x22, /* 78-7f */
- 0x9d,0x61,0x62,0x63,0x64,0x65,0x66,0x67, /* 80-87 */
- 0x68,0x69,0xae,0xaf,0xd0,0xec,0xe7,0xf1, /* 88-8f */
- 0xf8,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70, /* 90-97 */
- 0x71,0x72,0xa6,0xa7,0x91,0xf7,0x92,0xcf, /* 98-9f */
- 0xe6,0x7e,0x73,0x74,0x75,0x76,0x77,0x78, /* a8-a7 */
- 0x79,0x7a,0xad,0xa8,0xd1,0xed,0xe8,0xa9, /* a8-af */
- 0x5e,0x9c,0xbe,0xfa,0xb8,0x15,0x14,0xac, /* b0-b7 */
- 0xab,0xf3,0x5b,0x5d,0xee,0xf9,0xef,0x9e, /* b8-bf */
- 0x7b,0x41,0x42,0x43,0x44,0x45,0x46,0x47, /* c0-c7 */
- 0x48,0x49,0xf0,0x93,0x94,0x95,0xa2,0xe4, /* c8-cf */
- 0x7d,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50, /* d0-d7 */
- 0x51,0x52,0xfb,0x96,0x81,0x97,0xa3,0x98, /* d8-df */
- 0x5c,0xf6,0x53,0x54,0x55,0x56,0x57,0x58, /* e0-e7 */
- 0x59,0x5a,0xfc,0xe2,0x99,0xe3,0xe0,0xe5, /* e8-ef */
- 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, /* f0-f7 */
- 0x38,0x39,0xfd,0xea,0x9a,0xeb,0xe9,0xff /* f8-ff */
-};
-
-/* ASCII to EBCDIC translation table */
-static u_char ascii_to_ebcdic[256] =
-{
- 0x00,0x01,0x02,0x03,0x37,0x2d,0x2e,0x2f, /* 00-07 */
- 0x16,0x05,0x25,0x0b,0x0c,0x0d,0x0e,0x0f, /* 08-0f */
- 0x10,0x11,0x12,0x13,0x3c,0x3d,0x32,0x26, /* 10-17 */
- 0x18,0x19,0x3f,0x27,0x22,0x1d,0x1e,0x1f, /* 18-1f */
- 0x40,0x5a,0x7f,0x7b,0x5b,0x6c,0x50,0x7d, /* 20-27 */
- 0x4d,0x5d,0x5c,0x4e,0x6b,0x60,0x4b,0x61, /* 28-2f */
- 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7, /* 30-37 */
- 0xf8,0xf9,0x7a,0x5e,0x4c,0x7e,0x6e,0x6f, /* 38-3f */
- 0x7c,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7, /* 40-47 */
- 0xc8,0xc9,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6, /* 48-4f */
- 0xd7,0xd8,0xd9,0xe2,0xe3,0xe4,0xe5,0xe6, /* 50-57 */
- 0xe7,0xe8,0xe9,0xba,0xe0,0xbb,0xb0,0x6d, /* 58-5f */
- 0x79,0x81,0x82,0x83,0x84,0x85,0x86,0x87, /* 60-67 */
- 0x88,0x89,0x91,0x92,0x93,0x94,0x95,0x96, /* 68-6f */
- 0x97,0x98,0x99,0xa2,0xa3,0xa4,0xa5,0xa6, /* 70-77 */
- 0xa7,0xa8,0xa9,0xc0,0x4f,0xd0,0xa1,0x07, /* 78-7f */
- 0x68,0xdc,0x51,0x42,0x43,0x44,0x47,0x48, /* 80-87 */
- 0x52,0x53,0x54,0x57,0x56,0x58,0x63,0x67, /* 88-8f */
- 0x71,0x9c,0x9e,0xcb,0xcc,0xcd,0xdb,0xdd, /* 90-97 */
- 0xdf,0xec,0xfc,0x70,0xb1,0x80,0xbf,0x40, /* 98-9f */
- 0x45,0x55,0xee,0xde,0x49,0x69,0x9a,0x9b, /* a8-a7 */
- 0xab,0xaf,0x5f,0xb8,0xb7,0xaa,0x8a,0x8b, /* a8-af */
- 0x40,0x40,0x40,0x40,0x40,0x65,0x62,0x64, /* b0-b7 */
- 0xb4,0x40,0x40,0x40,0x40,0x4a,0xb2,0x40, /* b8-bf */
- 0x40,0x40,0x40,0x40,0x40,0x40,0x46,0x66, /* c0-c7 */
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x9f, /* c8-cf */
- 0x8c,0xac,0x72,0x73,0x74,0x89,0x75,0x76, /* d0-d7 */
- 0x77,0x40,0x40,0x40,0x40,0x6a,0x78,0x40, /* d8-df */
- 0xee,0x59,0xeb,0xed,0xcf,0xef,0xa0,0x8e, /* e0-e7 */
- 0xae,0xfe,0xfb,0xfd,0x8d,0xad,0xbc,0xbe, /* e8-ef */
- 0xca,0x8f,0x40,0xb9,0xb6,0xb5,0xe1,0x9d, /* f0-f7 */
- 0x90,0xbd,0xb3,0xda,0xea,0xfa,0x40,0x40 /* f8-ff */
-};
-
-void jk_ascii2ebcdic(char *src, char *dst) {
- char c;
-
- while ((c = *src++) != 0) {
- *dst++ = ascii_to_ebcdic[(unsigned int)c];
- }
-
- *dst = 0;
-}
-
-void jk_ebcdic2ascii(char *src, char *dst) {
- char c;
-
- while ((c = *src++) != 0) {
- *dst++ = ebcdic_to_ascii[(unsigned int)c];
- }
-
- *dst = 0;
-}
-
-#endif
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.h
deleted file mode 100644
index b76d0283..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.h
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Various utility functions *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Author: Rainer Jung <rjung@apache.org> *
- * Version: $Revision: 751914 $ *
- ***************************************************************************/
-#ifndef _JK_UTIL_H
-#define _JK_UTIL_H
-
-#include "jk_global.h"
-#include "jk_logger.h"
-#include "jk_map.h"
-#include "jk_pool.h"
-#include "jk_service.h"
-
-#define JK_SLEEP_DEF (100)
-
-const char *jk_get_bool(int v);
-
-int jk_get_bool_code(const char *v, int def);
-
-void jk_sleep(int ms);
-
-void jk_set_time_fmt(jk_logger_t *l, const char *jk_log_fmt);
-
-int jk_parse_log_level(const char *level);
-
-int jk_open_file_logger(jk_logger_t **l, const char *file, int level);
-
-int jk_attach_file_logger(jk_logger_t **l, int fd, int level);
-
-int jk_close_file_logger(jk_logger_t **l);
-
-int jk_log(jk_logger_t *l,
- const char *file, int line, const char *funcname, int level,
- const char *fmt, ...);
-
-/* [V] Two general purpose functions. Should ease the function bloat. */
-int jk_get_worker_str_prop(jk_map_t *m,
- const char *wname, const char *pname, const char **prop);
-
-int jk_get_worker_int_prop(jk_map_t *m,
- const char *wname, const char *pname, int *prop);
-
-const char *jk_get_worker_host(jk_map_t *m, const char *wname, const char *def);
-
-const char *jk_get_worker_type(jk_map_t *m, const char *wname);
-
-int jk_get_worker_port(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_cache_size(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_cache_size_min(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_cache_acquire_timeout(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_socket_timeout(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_socket_connect_timeout(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_socket_buffer(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_socket_keepalive(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_conn_ping_interval(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_cache_timeout(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_recovery_opts(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_connect_timeout(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_reply_timeout(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_prepost_timeout(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_ping_timeout(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_ping_mode(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_recycle_timeout(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_recover_timeout(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_error_escalation_time(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_max_reply_timeouts(jk_map_t *m, const char *wname, int def);
-
-int jk_get_worker_retry_interval(jk_map_t *m, const char *wname, int def);
-
-const char *jk_get_worker_route(jk_map_t *m, const char *wname, const char *def);
-
-const char *jk_get_worker_domain(jk_map_t *m, const char *wname, const char *def);
-
-const char *jk_get_worker_redirect(jk_map_t *m, const char *wname, const char *def);
-
-const char *jk_get_worker_secret_key(jk_map_t *m, const char *wname);
-
-const char *jk_get_lb_session_cookie(jk_map_t *m, const char *wname, const char *def);
-
-const char *jk_get_lb_session_path(jk_map_t *m, const char *wname, const char *def);
-
-int jk_get_worker_retries(jk_map_t *m, const char *wname, int def);
-
-int jk_get_is_worker_disabled(jk_map_t *m, const char *wname);
-
-int jk_get_is_worker_stopped(jk_map_t *m, const char *wname);
-
-int jk_get_worker_activation(jk_map_t *m, const char *wname);
-
-int jk_get_worker_list(jk_map_t *m, char ***list, unsigned *num_of_workers);
-
-int jk_get_lb_factor(jk_map_t *m, const char *wname);
-
-int jk_get_distance(jk_map_t *m, const char *wname);
-
-int jk_get_is_sticky_session(jk_map_t *m, const char *wname);
-
-int jk_get_is_sticky_session_force(jk_map_t *m, const char *wname);
-
-int jk_get_lb_method(jk_map_t *m, const char *wname);
-
-int jk_get_lb_lock(jk_map_t *m, const char *wname);
-
-int jk_get_lb_worker_list(jk_map_t *m,
- const char *lb_wname,
- char ***list, unsigned int *num_of_workers);
-int jk_get_worker_mount_list(jk_map_t *m,
- const char *wname,
- char ***list, unsigned int *num_of_maps);
-const char *jk_get_worker_secret(jk_map_t *m, const char *wname);
-
-int jk_get_worker_mx(jk_map_t *m, const char *wname, unsigned *mx);
-
-int jk_get_worker_ms(jk_map_t *m, const char *wname, unsigned *ms);
-
-int jk_get_worker_classpath(jk_map_t *m, const char *wname, const char **cp);
-
-
-int jk_get_worker_bridge_type(jk_map_t *m, const char *wname, unsigned *bt);
-
-int jk_get_worker_jvm_path(jk_map_t *m, const char *wname, const char **vm_path);
-
-int jk_get_worker_callback_dll(jk_map_t *m,
- const char *wname, const char **cb_path);
-
-int jk_get_worker_cmd_line(jk_map_t *m, const char *wname, const char **cmd_line);
-
-int jk_file_exists(const char *f);
-
-int jk_is_list_property(const char *prp_name);
-
-int jk_is_path_property(const char *prp_name);
-
-int jk_is_cmd_line_property(const char *prp_name);
-
-int jk_is_unique_property(const char *prp_name);
-
-int jk_is_deprecated_property(const char *prp_name);
-
-int jk_is_valid_property(const char *prp_name);
-
-int jk_get_worker_stdout(jk_map_t *m, const char *wname, const char **stdout_name);
-
-int jk_get_worker_stderr(jk_map_t *m, const char *wname, const char **stderr_name);
-
-int jk_get_worker_sysprops(jk_map_t *m, const char *wname, const char **sysprops);
-
-int jk_get_worker_libpath(jk_map_t *m, const char *wname, const char **libpath);
-
-char **jk_parse_sysprops(jk_pool_t *p, const char *sysprops);
-
-
-void jk_append_libpath(jk_pool_t *p, const char *libpath);
-
-void jk_set_worker_def_cache_size(int sz);
-
-int jk_get_worker_def_cache_size(int protocol);
-
-int jk_get_worker_maintain_time(jk_map_t *m);
-
-int jk_get_max_packet_size(jk_map_t *m, const char *wname);
-
-const char *jk_get_worker_style_sheet(jk_map_t *m, const char *wname, const char *def);
-
-int jk_get_is_read_only(jk_map_t *m, const char *wname);
-
-int jk_get_worker_user_list(jk_map_t *m,
- const char *wname,
- char ***list, unsigned int *num);
-
-int jk_get_worker_good_rating(jk_map_t *m,
- const char *wname,
- char ***list, unsigned int *num);
-
-int jk_get_worker_bad_rating(jk_map_t *m,
- const char *wname,
- char ***list, unsigned int *num);
-
-const char *jk_get_worker_name_space(jk_map_t *m, const char *wname, const char *def);
-
-const char *jk_get_worker_xmlns(jk_map_t *m, const char *wname, const char *def);
-
-const char *jk_get_worker_xml_doctype(jk_map_t *m, const char *wname, const char *def);
-
-const char *jk_get_worker_prop_prefix(jk_map_t *m, const char *wname, const char *def);
-
-int jk_get_worker_fail_on_status(jk_map_t *m, const char *wname,
- int *list, unsigned int list_size);
-
-int jk_get_worker_user_case_insensitive(jk_map_t *m, const char *wname);
-
-int is_http_status_fail(unsigned int http_status_fail_num,
- int *http_status_fail, int status);
-
-int jk_wildchar_match(const char *str, const char *exp, int icase);
-
-#define TC32_BRIDGE_TYPE 32
-#define TC33_BRIDGE_TYPE 33
-#define TC40_BRIDGE_TYPE 40
-#define TC41_BRIDGE_TYPE 41
-#define TC50_BRIDGE_TYPE 50
-
-#ifdef AS400
-
-#define S_IFREG _S_IFREG
-
-#ifdef AS400_UTF8
-
-void jk_ascii2ebcdic(char *src, char *dst);
-void jk_ebcdic2ascii(char *src, char *dst);
-
-#endif /* AS400_UTF8 */
-
-#endif
-
-/* i5/OS V5R4 need ASCII-EBCDIC conversion before stat() call */
-/* added a stat() mapper function, jk_stat, for such purpose */
-
-int jk_stat(const char *f, struct stat * statbuf);
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* _JK_UTIL_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.lo
deleted file mode 100644
index a7acb278..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_util.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_util.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_util.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.o
deleted file mode 100644
index 5d343b71..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_util.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_version.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_version.h
deleted file mode 100644
index 9cbba921..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_version.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: JK version header file *
- * Version: $Revision: 1141394 $ *
- ***************************************************************************/
-
-#ifndef __JK_VERSION_H
-#define __JK_VERSION_H
-
-/************** START OF AREA TO MODIFY BEFORE RELEASING *************/
-#define JK_VERMAJOR 1
-#define JK_VERMINOR 2
-#define JK_VERFIX 32
-
-/* set JK_VERISRELEASE to 1 when release (do not forget to commit!) */
-#define JK_VERISRELEASE 1
-/* Beta number */
-#define JK_VERBETA 0
-#define JK_BETASTRING "0"
-/* Release candidate */
-#define JK_VERRC 0
-#define JK_RCSTRING "0"
-/* Source Control Revision as a suffix, e.g. "-r12345" */
-#define JK_REVISION " ()"
-
-/************** END OF AREA TO MODIFY BEFORE RELEASING *************/
-
-#if !defined(PACKAGE)
-#if defined(JK_ISAPI)
-#define PACKAGE "isapi_redirector"
-#define JK_DLL_SUFFIX "dll"
-#elif defined(JK_NSAPI)
-#define PACKAGE "nsapi_redirector"
-#define JK_DLL_SUFFIX "dll"
-#else
-#define PACKAGE "mod_jk"
-#define JK_DLL_SUFFIX "so"
-#endif
-#endif
-
-/* Build JK_EXPOSED_VERSION and JK_VERSION */
-#define JK_EXPOSED_VERSION_INT PACKAGE "/" JK_VERSTRING
-
-#if (JK_VERBETA != 0)
-#define JK_EXPOSED_VERSION JK_EXPOSED_VERSION_INT "-beta-" JK_BETASTRING
-#else
-#undef JK_VERBETA
-#define JK_VERBETA 255
-#if (JK_VERRC != 0)
-#define JK_EXPOSED_VERSION JK_EXPOSED_VERSION_INT "-rc-" JK_RCSTRING
-#elif (JK_VERISRELEASE == 1)
-#define JK_EXPOSED_VERSION JK_EXPOSED_VERSION_INT
-#else
-#define JK_EXPOSED_VERSION JK_EXPOSED_VERSION_INT "-dev" JK_REVISION
-#endif
-#endif
-#define JK_FULL_EXPOSED_VERSION JK_EXPOSED_VERSION JK_REVISION
-
-#define JK_MAKEVERSION(major, minor, fix, beta) \
- (((major) << 24) + ((minor) << 16) + ((fix) << 8) + (beta))
-
-#define JK_VERSION JK_MAKEVERSION(JK_VERMAJOR, JK_VERMINOR, JK_VERFIX, JK_VERBETA)
-
-/** Properly quote a value as a string in the C preprocessor */
-#define JK_STRINGIFY(n) JK_STRINGIFY_HELPER(n)
-/** Helper macro for JK_STRINGIFY */
-#define JK_STRINGIFY_HELPER(n) #n
-#define JK_VERSTRING \
- JK_STRINGIFY(JK_VERMAJOR) "." \
- JK_STRINGIFY(JK_VERMINOR) "." \
- JK_STRINGIFY(JK_VERFIX)
-
-/* macro for Win32 .rc files using numeric csv representation */
-#define JK_VERSIONCSV JK_VERMAJOR ##, \
- ##JK_VERMINOR ##, \
- ##JK_VERFIX
-
-
-#endif /* __JK_VERSION_H */
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.c b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.c
deleted file mode 100644
index b75ae933..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Workers controller *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 708019 $ *
- ***************************************************************************/
-
-#define _PLACE_WORKER_LIST_HERE
-#include "jk_worker_list.h"
-#include "jk_worker.h"
-#include "jk_util.h"
-#include "jk_mt.h"
-
-static void close_workers(jk_logger_t *l);
-
-static worker_factory get_factory_for(const char *type);
-
-static int build_worker_map(jk_map_t *init_data,
- char **worker_list,
- unsigned num_of_workers,
- jk_worker_env_t *we, jk_logger_t *l);
-
-/* Global worker list */
-static jk_map_t *worker_map;
-#if _MT_CODE
-static JK_CRIT_SEC worker_lock;
-#endif
-static int worker_maintain_time = 0;
-
-int wc_open(jk_map_t *init_data, jk_worker_env_t *we, jk_logger_t *l)
-{
- int rc;
- JK_TRACE_ENTER(l);
-
- if (!jk_map_alloc(&worker_map)) {
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- JK_INIT_CS(&worker_lock, rc);
- if (rc == JK_FALSE) {
- jk_log(l, JK_LOG_ERROR,
- "creating thread lock (errno=%d)",
- errno);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- jk_map_dump(init_data, l);
- we->init_data = init_data;
- if (!jk_get_worker_list(init_data, &(we->worker_list),
- &we->num_of_workers)) {
- JK_TRACE_EXIT(l);
- we->num_of_workers = 0;
- we->worker_list = NULL;
- return JK_FALSE;
- }
-
- worker_maintain_time = jk_get_worker_maintain_time(init_data);
- if(worker_maintain_time < 0)
- worker_maintain_time = 0;
-
- if (!build_worker_map(init_data, we->worker_list,
- we->num_of_workers, we, l)) {
- close_workers(l);
- we->num_of_workers = 0;
- we->worker_list = NULL;
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-
-void wc_close(jk_logger_t *l)
-{
- int rc;
- JK_TRACE_ENTER(l);
- JK_DELETE_CS(&worker_lock, rc);
- close_workers(l);
- JK_TRACE_EXIT(l);
-}
-
-jk_worker_t *wc_get_worker_for_name(const char *name, jk_logger_t *l)
-{
- jk_worker_t *rc;
-
- JK_TRACE_ENTER(l);
- if (!name) {
- JK_LOG_NULL_PARAMS(l);
- JK_TRACE_EXIT(l);
- return NULL;
- }
-
- rc = jk_map_get(worker_map, name, NULL);
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG, "%s a worker %s",
- rc ? "found" : "did not find", name);
- JK_TRACE_EXIT(l);
- return rc;
-}
-
-int wc_create_worker(const char *name, int use_map,
- jk_map_t *init_data,
- jk_worker_t **rc, jk_worker_env_t *we, jk_logger_t *l)
-{
- JK_TRACE_ENTER(l);
-
- if (rc) {
- const char *type = jk_get_worker_type(init_data, name);
- worker_factory fac = get_factory_for(type);
- jk_worker_t *w = NULL;
- unsigned int i, num_of_maps;
- char **map_names;
- int wtype;
-
- *rc = NULL;
-
- if (!fac) {
- jk_log(l, JK_LOG_ERROR, "Unknown worker type %s for worker %s",
- type, name);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "about to create instance %s of %s", name,
- type);
-
- if (((wtype = fac(&w, name, l)) == 0) || !w) {
- jk_log(l, JK_LOG_ERROR,
- "factory for %s failed for %s", type,
- name);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "about to validate and init %s", name);
- if (!w->validate(w, init_data, we, l)) {
- w->destroy(&w, l);
- jk_log(l, JK_LOG_ERROR,
- "validate failed for %s", name);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (!w->init(w, init_data, we, l)) {
- w->destroy(&w, l);
- jk_log(l, JK_LOG_ERROR, "init failed for %s",
- name);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- if (use_map &&
- jk_get_worker_mount_list(init_data, name,
- &map_names,
- &num_of_maps) && num_of_maps) {
- for (i = 0; i < num_of_maps; i++) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "mounting %s to worker %s",
- map_names[i], name);
- if (uri_worker_map_add(we->uri_to_worker, map_names[i],
- name, SOURCE_TYPE_WORKERDEF, l) == JK_FALSE) {
- w->destroy(&w, l);
- jk_log(l, JK_LOG_ERROR,
- "mounting %s failed for %s",
- map_names[i], name);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
- }
- w->type = wtype;
- *rc = w;
- JK_TRACE_EXIT(l);
- return JK_TRUE;
- }
-
- JK_LOG_NULL_PARAMS(l);
- return JK_FALSE;
-}
-
-static void close_workers(jk_logger_t *l)
-{
- int sz = jk_map_size(worker_map);
-
- JK_TRACE_ENTER(l);
-
- if (sz > 0) {
- int i;
- for (i = 0; i < sz; i++) {
- jk_worker_t *w = jk_map_value_at(worker_map, i);
- if (w) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "close_workers will destroy worker %s",
- jk_map_name_at(worker_map, i));
- w->destroy(&w, l);
- }
- }
- }
- jk_map_free(&worker_map);
- JK_TRACE_EXIT(l);
-}
-
-static int build_worker_map(jk_map_t *init_data,
- char **worker_list,
- unsigned num_of_workers,
- jk_worker_env_t *we, jk_logger_t *l)
-{
- unsigned i;
-
- JK_TRACE_ENTER(l);
-
- for (i = 0; i < num_of_workers; i++) {
- jk_worker_t *w = NULL;
-
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "creating worker %s", worker_list[i]);
-
- if (wc_create_worker(worker_list[i], 1, init_data, &w, we, l)) {
- jk_worker_t *oldw = NULL;
- if (!jk_map_put(worker_map, worker_list[i], w, (void *)&oldw)) {
- w->destroy(&w, l);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
-
- if (oldw) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "removing old %s worker",
- worker_list[i]);
- oldw->destroy(&oldw, l);
- }
- }
- else {
- jk_log(l, JK_LOG_ERROR,
- "failed to create worker %s",
- worker_list[i]);
- JK_TRACE_EXIT(l);
- return JK_FALSE;
- }
- }
-
- JK_TRACE_EXIT(l);
- return JK_TRUE;
-}
-
-static worker_factory get_factory_for(const char *type)
-{
- worker_factory_record_t *factory = &worker_factories[0];
- while (factory->name) {
- if (0 == strcmp(factory->name, type)) {
- return factory->fac;
- }
-
- factory++;
- }
-
- return NULL;
-}
-
-const char *wc_get_name_for_type(int type, jk_logger_t *l)
-{
- worker_factory_record_t *factory = &worker_factories[0];
- while (factory->name) {
- if (type == factory->type) {
- jk_log(l, JK_LOG_DEBUG,
- "Found worker type '%s'",
- factory->name);
- return factory->name;
- }
-
- factory++;
- }
-
- return NULL;
-}
-
-void wc_maintain(jk_logger_t *l)
-{
- static time_t last_maintain = 0;
- static int running_maintain = 0;
- int sz = jk_map_size(worker_map);
-
- JK_TRACE_ENTER(l);
-
- /* Only proceed if all of the below hold true:
- * - there are workers
- * - maintenance wasn't disabled by configuration
- * - time since last maintenance is big enough
- */
- if (sz > 0 && worker_maintain_time > 0 &&
- difftime(time(NULL), last_maintain) >= worker_maintain_time) {
- int i;
- JK_ENTER_CS(&worker_lock, i);
- if (running_maintain ||
- difftime(time(NULL), last_maintain) < worker_maintain_time) {
- /* Already in maintain */
- JK_LEAVE_CS(&worker_lock, i);
- JK_TRACE_EXIT(l);
- return;
- }
- /* Set the maintain run flag so other threads skip
- * the maintain until we are finished.
- */
- running_maintain = 1;
- JK_LEAVE_CS(&worker_lock, i);
-
- for (i = 0; i < sz; i++) {
- jk_worker_t *w = jk_map_value_at(worker_map, i);
- if (w && w->maintain) {
- if (JK_IS_DEBUG_LEVEL(l))
- jk_log(l, JK_LOG_DEBUG,
- "Maintaining worker %s",
- jk_map_name_at(worker_map, i));
- w->maintain(w, time(NULL), l);
- }
- }
- JK_ENTER_CS(&worker_lock, i);
- last_maintain = time(NULL);
- running_maintain = 0;
- JK_LEAVE_CS(&worker_lock, i);
- }
- JK_TRACE_EXIT(l);
-}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.h
deleted file mode 100644
index 18e9097c..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Workers controller header file *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-#ifndef JK_WORKER_H
-#define JK_WORKER_H
-
-#include "jk_logger.h"
-#include "jk_service.h"
-#include "jk_map.h"
-#include "jk_uri_worker_map.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-int wc_open(jk_map_t *init_data, jk_worker_env_t *we, jk_logger_t *l);
-
-void wc_close(jk_logger_t *l);
-
-jk_worker_t *wc_get_worker_for_name(const char *name, jk_logger_t *l);
-
-const char *wc_get_name_for_type(int type, jk_logger_t *l);
-
-int wc_create_worker(const char *name, int use_map,
- jk_map_t *init_data,
- jk_worker_t **rc,
- jk_worker_env_t *we, jk_logger_t *l);
-
-void wc_maintain(jk_logger_t *l);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* JK_WORKER_H */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.lo b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.lo
deleted file mode 100644
index 45a6af4b..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.lo
+++ /dev/null
@@ -1,12 +0,0 @@
-# jk_worker.lo - a libtool object file
-# Generated by ltmain.sh - GNU libtool 1.5.26 (1.1220.2.493 2008/02/01 16:58:18)
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-pic_object='.libs/jk_worker.o'
-
-# Name of the non-PIC object.
-non_pic_object='jk_worker.o'
-
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.o b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.o
deleted file mode 100644
index 756f2510..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker.o
+++ /dev/null
Binary files differ
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker_list.h b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker_list.h
deleted file mode 100644
index 59518b2a..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_worker_list.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/***************************************************************************
- * Description: Worker list *
- * Author: Gal Shachor <shachor@il.ibm.com> *
- * Author: Henri Gomez <hgomez@apache.org> *
- * Version: $Revision: 466585 $ *
- ***************************************************************************/
-
-/*
- * This file includes a list of all the possible workers in the jk library
- * plus their factories.
- *
- * If you want to add a worker just place it in the worker_factories array
- * with its unique name and factory.
- *
- * If you want to remove a worker, hjust comment out its line in the
- * worker_factories array as well as its header file. For example, look
- * at what we have done to the ajp23 worker.
- *
- * Note: This file should be included only in the jk_worker controller.
- * Currently the jk_worker controller is located in jk_worker.c
- */
-#ifdef _PLACE_WORKER_LIST_HERE
-#ifndef _JK_WORKER_LIST_H
-#define _JK_WORKER_LIST_H
-
-#include "jk_ajp12_worker.h"
-#include "jk_ajp13_worker.h"
-#include "jk_ajp14_worker.h"
-#ifdef HAVE_JNI
-#include "jk_jni_worker.h"
-#endif
-#include "jk_lb_worker.h"
-#include "jk_status.h"
-
-struct worker_factory_record
-{
- const char *name;
- int type;
- worker_factory fac;
-};
-typedef struct worker_factory_record worker_factory_record_t;
-
-static worker_factory_record_t worker_factories[] = {
- /*
- * AJPv12 worker, this is the stable worker.
- */
- {JK_AJP12_WORKER_NAME, JK_AJP12_WORKER_TYPE, ajp12_worker_factory},
- /*
- * AJPv13 worker, fast bi-directional worker.
- */
- {JK_AJP13_WORKER_NAME, JK_AJP13_WORKER_TYPE, ajp13_worker_factory},
- /*
- * AJPv14 worker, next generation fast bi-directional worker.
- */
- {JK_AJP14_WORKER_NAME, JK_AJP14_WORKER_TYPE, ajp14_worker_factory},
- /*
- * In process JNI based worker. Requires the server to be
- * multithreaded and to use native threads.
- */
-#ifdef HAVE_JNI
- {JK_JNI_WORKER_NAME, JK_JNI_WORKER_TYPE, jni_worker_factory},
-#endif
- /*
- * Load balancing worker. Performs round robin with sticky
- * session load balancing.
- */
- {JK_LB_WORKER_NAME, JK_LB_WORKER_TYPE, lb_worker_factory},
-
- /*
- * Status worker. Performs display display and
- * worker management.
- */
- {JK_STATUS_WORKER_NAME, JK_STATUS_WORKER_TYPE, status_worker_factory},
-
- /*
- * Marks the end of the worker factory list.
- */
- {NULL, 0, NULL}
-};
-#endif /* _JK_WORKER_LIST_H */
-#endif /* _PLACE_WORKER_LIST_HERE */
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/list.mk b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/list.mk
deleted file mode 100644
index 51fa1e0e..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/list.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-## Object needed for mod_jk for Apache-1.3
-APACHE_OBJECTS= ${JK}jk_ajp12_worker${OEXT} ${JK}jk_connect${OEXT} \
- ${JK}jk_msg_buff${OEXT} ${JK}jk_util${OEXT} \
- ${JK}jk_ajp13${OEXT} ${JK}jk_pool${OEXT} \
- ${JK}jk_worker${OEXT} ${JK}jk_ajp13_worker${OEXT} \
- ${JK}jk_lb_worker${OEXT} ${JK}jk_sockbuf${OEXT} \
- ${JK}jk_map${OEXT} ${JK}jk_uri_worker_map${OEXT} \
- ${JK}jk_ajp14${OEXT} ${JK}jk_ajp14_worker${OEXT} \
- ${JK}jk_md5${OEXT} ${JK}jk_shm${OEXT} ${JK}jk_jni_worker${OEXT} \
- ${JK}jk_ajp_common${OEXT} ${JK}jk_context${OEXT} \
- ${JK}jk_url${OEXT} \
- ${JK}jk_status${OEXT}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/list.mk.in b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/list.mk.in
deleted file mode 100644
index abc7ffe5..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/list.mk.in
+++ /dev/null
@@ -1,27 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-## Object needed for mod_jk for Apache-1.3
-APACHE_OBJECTS= ${JK}jk_ajp12_worker${OEXT} ${JK}jk_connect${OEXT} \
- ${JK}jk_msg_buff${OEXT} ${JK}jk_util${OEXT} \
- ${JK}jk_ajp13${OEXT} ${JK}jk_pool${OEXT} \
- ${JK}jk_worker${OEXT} ${JK}jk_ajp13_worker${OEXT} \
- ${JK}jk_lb_worker${OEXT} ${JK}jk_sockbuf${OEXT} \
- ${JK}jk_map${OEXT} ${JK}jk_uri_worker_map${OEXT} \
- ${JK}jk_ajp14${OEXT} ${JK}jk_ajp14_worker${OEXT} \
- ${JK}jk_md5${OEXT} ${JK}jk_shm${OEXT} @JK_JNI_WORKER@ \
- ${JK}jk_ajp_common${OEXT} ${JK}jk_context${OEXT} \
- ${JK}jk_url${OEXT} \
- ${JK}jk_status${OEXT}
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/stamp-h1 b/rubbos/app/tomcat-connectors-1.2.32-src/native/common/stamp-h1
deleted file mode 100644
index 8189b45b..00000000
--- a/rubbos/app/tomcat-connectors-1.2.32-src/native/common/stamp-h1
+++ /dev/null
@@ -1 +0,0 @@
-timestamp for common/config.h