JBoss Native SVN: r1561 - sandbox/httpd/src/native/mod_proxy_cluster.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2008-04-24 11:29:41 -0400 (Thu, 24 Apr 2008)
New Revision: 1561
Modified:
sandbox/httpd/src/native/mod_proxy_cluster/mod_proxy_cluster.c
Log:
Oops remove traces.
Modified: sandbox/httpd/src/native/mod_proxy_cluster/mod_proxy_cluster.c
===================================================================
--- sandbox/httpd/src/native/mod_proxy_cluster/mod_proxy_cluster.c 2008-04-24 13:29:32 UTC (rev 1560)
+++ sandbox/httpd/src/native/mod_proxy_cluster/mod_proxy_cluster.c 2008-04-24 15:29:41 UTC (rev 1561)
@@ -855,8 +855,6 @@
return 500;
}
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "proxy_cluster_isup: (first) %d %d %d", worker->id, worker->s->status, worker->s->lbfactor);
/* Try a ping/pong to check the node */
if (load > 0) {
/* Only try usuable nodes */
@@ -880,18 +878,12 @@
worker->s->status |= PROXY_WORKER_HOT_STANDBY;
}
else {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "proxy_cluster_isup: (AKE) %d %d %d", worker->id, worker->s->status, worker->s->lbfactor);
worker->s->status &= ~PROXY_WORKER_IN_ERROR;
worker->s->status &= ~PROXY_WORKER_STOPPED;
worker->s->status &= ~PROXY_WORKER_DISABLED;
worker->s->status &= ~PROXY_WORKER_HOT_STANDBY;
worker->s->lbfactor = load;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "proxy_cluster_isup: (AKU) %d %d %d", worker->id, worker->s->status, worker->s->lbfactor);
}
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
- "proxy_cluster_isup: %d %d %d", worker->id, worker->s->status, worker->s->lbfactor);
return 0;
}
16 years, 6 months
JBoss Native SVN: r1560 - sandbox/httpd/src/native/mod_proxy_cluster.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2008-04-24 09:29:32 -0400 (Thu, 24 Apr 2008)
New Revision: 1560
Modified:
sandbox/httpd/src/native/mod_proxy_cluster/mod_proxy_cluster.c
Log:
Add a a thread per process to handle the reversed connection.
Create the server socket and the worker in the new thread.
Modified: sandbox/httpd/src/native/mod_proxy_cluster/mod_proxy_cluster.c
===================================================================
--- sandbox/httpd/src/native/mod_proxy_cluster/mod_proxy_cluster.c 2008-04-24 08:29:42 UTC (rev 1559)
+++ sandbox/httpd/src/native/mod_proxy_cluster/mod_proxy_cluster.c 2008-04-24 13:29:32 UTC (rev 1560)
@@ -65,7 +65,7 @@
* Create/Get the worker before using it
*/
static void create_worker(proxy_server_conf *conf, proxy_balancer *balancer,
- request_rec *r, proxy_worker **worker,
+ server_rec *server, proxy_worker **worker,
nodeinfo_t *node)
{
char url[6+64+7+4]; /* Type :// Host : Port */
@@ -85,7 +85,7 @@
/* creates it */
const char *err = ap_proxy_add_worker(worker, conf->pool, conf, url);
if (err) {
- ap_log_error(APLOG_MARK, APLOG_NOTICE|APLOG_NOERRNO, 0, r->server,
+ ap_log_error(APLOG_MARK, APLOG_NOTICE|APLOG_NOERRNO, 0, server,
"Created: worker for %s failed: %s", url, err);
return;
}
@@ -95,7 +95,7 @@
ptr = ptr + node->offset;
proxy_worker->s = (proxy_worker_stat *) ptr;
proxy_worker->id = node->mess.id;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server,
"Created: worker for %s", url);
/*
* XXX: The Shared datastatus may already contains a valid information
@@ -118,14 +118,14 @@
int port = atoi(node->mess.Port);
int i;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server,
"Using reversed worker for %s", url);
/* XXX: change 10 into a CONFIG received value */
for (i=0; i<10; i++) {
rv = apr_socket_create(&listener, APR_INET, SOCK_STREAM,
APR_PROTO_TCP, conf->pool);
if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server,
"Unable to create server socket");
return;
}
@@ -133,38 +133,38 @@
rv = apr_sockaddr_info_get(&sockAddr, node->mess.Host, APR_UNSPEC,
port + i, 0, conf->pool);
if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server,
"Unable to get socket info");
apr_socket_close(listener);
return;
}
if ((rv = apr_socket_bind(listener, sockAddr)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server,
"Unable to bind to socket %d", rv);
apr_socket_close(listener);
continue; /* try again with next port */
}
/* XXX: 1 need to be ajusted */
if ((rv = apr_socket_listen(listener, 1)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server,
"Unable to listen to socket %d", rv);
apr_socket_close(listener);
continue; /* try again with next port */
}
break;
}
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server,
"Using reversed worker for %s listener %d", url, listener);
proxy_worker->opaque = listener;
} else {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server,
"Using normal worker for %s", url);
proxy_worker->opaque = NULL;
}
my_ap_proxy_add_worker_to_balancer(conf->pool, balancer, *worker);
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server,
"Created: worker for %s %d (status): %d", url, proxy_worker->id, proxy_worker->s->status);
/* XXX: it may be already filled... */
@@ -177,16 +177,13 @@
/*
* Create workers corresponding to newer nodes.
*/
-static void create_workers_node(request_rec *r)
+static void create_workers_node(proxy_server_conf *conf, apr_pool_t *pool, server_rec *server)
{
- void *sconf = r->server->module_config;
- proxy_server_conf *conf = (proxy_server_conf *)
- ap_get_module_config(sconf, &proxy_module);
int *ids, num;
/* read the ident of the nodes */
- ids = apr_pcalloc(r->pool, sizeof(int) * node_storage->get_max_size_node());
+ ids = apr_pcalloc(pool, sizeof(int) * node_storage->get_max_size_node());
num = node_storage->get_ids_used_node(ids);
/* XXX: How to skip the balancer that aren't controled by mod_manager */
if (conf->workers->nelts<num) {
@@ -211,16 +208,16 @@
/* read the node and create the worker */
nodeinfo_t *node;
if (node_storage->read_node(ids[j], &node) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server,
"create_workers_node can't read id %d", ids[j]);
continue;
}
- proxy_balancer *balancer = ap_proxy_get_balancer(r->pool, conf,
- apr_pstrcat(r->pool, "balancer://", node->balancer, NULL));
+ proxy_balancer *balancer = ap_proxy_get_balancer(pool, conf,
+ apr_pstrcat(pool, "balancer://", node->balancer, NULL));
if (balancer) {
- create_worker(conf, balancer, r, &worker, node);
+ create_worker(conf, balancer, server, &worker, node);
} else {
- ap_log_error(APLOG_MARK, APLOG_NOTICE|APLOG_NOERRNO, 0, NULL,
+ ap_log_error(APLOG_MARK, APLOG_NOTICE|APLOG_NOERRNO, 0, server,
"create_workers_node: Can't find balancer");
}
}
@@ -475,13 +472,16 @@
int max_lbset = 0;
int checking_standby;
int checked_standby;
+ void *sconf = r->server->module_config;
+ proxy_server_conf *conf = (proxy_server_conf *)
+ ap_get_module_config(sconf, &proxy_module);
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
"proxy: Entering bytraffic for BALANCER (%s)",
balancer->name);
/* create workers for new nodes */
- create_workers_node(r);
+ create_workers_node(conf, r->pool, r->server);
/* First try to see if we have available candidate */
do {
@@ -841,7 +841,7 @@
proxy_worker *worker;
/* create the workers (that could be the first time) */
- create_workers_node(r);
+ create_workers_node(conf, r->pool, r->server);
/* search for the worker */
worker = (proxy_worker *)conf->workers->elts;
@@ -855,6 +855,8 @@
return 500;
}
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "proxy_cluster_isup: (first) %d %d %d", worker->id, worker->s->status, worker->s->lbfactor);
/* Try a ping/pong to check the node */
if (load > 0) {
/* Only try usuable nodes */
@@ -878,15 +880,55 @@
worker->s->status |= PROXY_WORKER_HOT_STANDBY;
}
else {
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "proxy_cluster_isup: (AKE) %d %d %d", worker->id, worker->s->status, worker->s->lbfactor);
worker->s->status &= ~PROXY_WORKER_IN_ERROR;
worker->s->status &= ~PROXY_WORKER_STOPPED;
worker->s->status &= ~PROXY_WORKER_DISABLED;
- worker->s->status &= PROXY_WORKER_HOT_STANDBY;
+ worker->s->status &= ~PROXY_WORKER_HOT_STANDBY;
worker->s->lbfactor = load;
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "proxy_cluster_isup: (AKU) %d %d %d", worker->id, worker->s->status, worker->s->lbfactor);
}
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "proxy_cluster_isup: %d %d %d", worker->id, worker->s->status, worker->s->lbfactor);
return 0;
}
+static void * APR_THREAD_FUNC proxy_cluster_watchdog_func(apr_thread_t *thd, void *data)
+{
+ apr_pool_t *pool;
+ server_rec *s = (server_rec *) data;
+ void *sconf = s->module_config;
+ proxy_server_conf *conf = (proxy_server_conf *)
+ ap_get_module_config(sconf, &proxy_module);
+
+ for (;;) {
+ apr_sleep(apr_time_make(0, 1000));
+ /* Create new workers if the shared memory changes */
+ apr_pool_create(&pool, conf->pool);
+ create_workers_node(conf, pool, s);
+ apr_pool_destroy(pool);
+ }
+ apr_thread_exit(thd, 0);
+ return NULL;
+}
+
+/*
+ * Create a thread per process to make maintenance task.
+ */
+static void proxy_cluster_child_init(apr_pool_t *p, server_rec *s)
+{
+ apr_status_t rv;
+ apr_thread_t *wdt;
+
+ rv = apr_thread_create(&wdt, NULL, proxy_cluster_watchdog_func, s, p);
+ if (rv != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, s,
+ "proxy_cluster_child_init: apr_thread_create failed");
+ }
+}
+
static int proxy_cluster_post_config(apr_pool_t *p, apr_pool_t *plog,
apr_pool_t *ptemp, server_rec *s)
{
@@ -929,6 +971,9 @@
/* create the provider for the proxy logic */
ap_register_provider(p, PROXY_LBMETHOD, "cluster_bytraffic", "0", &bytraffic);
+ /* create the "maintenance" thread */
+ ap_hook_child_init(proxy_cluster_child_init, NULL, NULL, APR_HOOK_MIDDLE);
+
}
static void *create_proxy_cluster_dir_config(apr_pool_t *p, char *dir)
16 years, 6 months
JBoss Native SVN: r1559 - sandbox/httpd/src/native/mod_proxy_cluster.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2008-04-24 04:29:42 -0400 (Thu, 24 Apr 2008)
New Revision: 1559
Modified:
sandbox/httpd/src/native/mod_proxy_cluster/mod_proxy_cluster.c
Log:
First try to have a reversed logic to work.
Modified: sandbox/httpd/src/native/mod_proxy_cluster/mod_proxy_cluster.c
===================================================================
--- sandbox/httpd/src/native/mod_proxy_cluster/mod_proxy_cluster.c 2008-04-23 11:43:57 UTC (rev 1558)
+++ sandbox/httpd/src/native/mod_proxy_cluster/mod_proxy_cluster.c 2008-04-24 08:29:42 UTC (rev 1559)
@@ -47,6 +47,21 @@
static struct context_storage_method *context_storage = NULL;
/*
+ * XXX: Should use the proxy_util.c one?.
+ */
+static void my_ap_proxy_add_worker_to_balancer(apr_pool_t *pool, proxy_balancer *balancer,
+ proxy_worker *worker)
+{
+ proxy_worker *runtime;
+
+ runtime = apr_array_push(balancer->workers);
+ memcpy(runtime, worker, sizeof(proxy_worker));
+ /* Increase the total runtime count */
+ proxy_lb_workers++;
+
+}
+
+/*
* Create/Get the worker before using it
*/
static void create_worker(proxy_server_conf *conf, proxy_balancer *balancer,
@@ -82,10 +97,77 @@
proxy_worker->id = node->mess.id;
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
"Created: worker for %s", url);
- proxy_worker->s->status = PROXY_WORKER_INITIALIZED;
+ /*
+ * XXX: The Shared datastatus may already contains a valid information
+ */
+ if (!proxy_worker->s->status)
+ proxy_worker->s->status = PROXY_WORKER_INITIALIZED;
- ap_proxy_add_worker_to_balancer(conf->pool, balancer, *worker);
+ /*
+ * Process the reversed logic:
+ * proxy_worker->opaque will contain the socket (server)
+ * is reversed connection and a NULL otherwise.
+ * If something more need to be allocated it must use the
+ * conf->pool to persist through requests.
+ */
+ if (node->mess.reversed) {
+ /* Create a "server_socket" for the reversed connection */
+ apr_sockaddr_t *sockAddr;
+ apr_socket_t *listener;
+ apr_status_t rv;
+ int port = atoi(node->mess.Port);
+ int i;
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "Using reversed worker for %s", url);
+ /* XXX: change 10 into a CONFIG received value */
+ for (i=0; i<10; i++) {
+ rv = apr_socket_create(&listener, APR_INET, SOCK_STREAM,
+ APR_PROTO_TCP, conf->pool);
+ if (rv != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "Unable to create server socket");
+ return;
+ }
+
+ rv = apr_sockaddr_info_get(&sockAddr, node->mess.Host, APR_UNSPEC,
+ port + i, 0, conf->pool);
+ if (rv != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "Unable to get socket info");
+ apr_socket_close(listener);
+ return;
+ }
+
+ if ((rv = apr_socket_bind(listener, sockAddr)) != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "Unable to bind to socket %d", rv);
+ apr_socket_close(listener);
+ continue; /* try again with next port */
+ }
+ /* XXX: 1 need to be ajusted */
+ if ((rv = apr_socket_listen(listener, 1)) != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "Unable to listen to socket %d", rv);
+ apr_socket_close(listener);
+ continue; /* try again with next port */
+ }
+ break;
+ }
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "Using reversed worker for %s listener %d", url, listener);
+ proxy_worker->opaque = listener;
+ } else {
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "Using normal worker for %s", url);
+ proxy_worker->opaque = NULL;
+ }
+
+ my_ap_proxy_add_worker_to_balancer(conf->pool, balancer, *worker);
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "Created: worker for %s %d (status): %d", url, proxy_worker->id, proxy_worker->s->status);
+
+ /* XXX: it may be already filled... */
strncpy(proxy_worker->s->route, node->mess.JVMRoute, PROXY_WORKER_MAX_ROUTE_SIZ);
proxy_worker->s->route[PROXY_WORKER_MAX_ROUTE_SIZ] = '\0';
/* XXX: We need that information from TC */
@@ -221,6 +303,7 @@
/* Always return the SUCCESS */
return APR_SUCCESS;
}
+
/* Retrieve the parameter with the given name
* Something like 'JSESSIONID=12345...N'
* XXX: Should use the mod_proxy_balancer ones.
@@ -405,6 +488,8 @@
checking_standby = checked_standby = 0;
while (!mycandidate && !checked_standby) {
worker = (proxy_worker *)balancer->workers->elts;
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "proxy: bytraffic for BALANCER (%d)", balancer->workers->nelts);
for (i = 0; i < balancer->workers->nelts; i++, worker++) {
if (!checking_standby) { /* first time through */
if (worker->s->lbset > max_lbset)
@@ -422,6 +507,7 @@
*/
if (!PROXY_WORKER_IS_USABLE(worker))
ap_proxy_retry_worker("BALANCER", worker, r->server);
+
/* Take into calculation only the workers that are
* not in error state or not disabled.
*/
@@ -443,6 +529,205 @@
}
/*
+ * Check if the socket is still connected
+ * XXX: Should use the mod_proxy_balancer ones.
+ */
+#define USE_ALTERNATE_IS_CONNECTED 1
+
+#if !defined(APR_MSG_PEEK) && defined(MSG_PEEK)
+#define APR_MSG_PEEK MSG_PEEK
+#endif
+
+#if USE_ALTERNATE_IS_CONNECTED && defined(APR_MSG_PEEK)
+static int is_socket_connected(apr_socket_t *socket)
+{
+ apr_pollfd_t pfds[1];
+ apr_status_t status;
+ apr_int32_t nfds;
+
+ pfds[0].reqevents = APR_POLLIN;
+ pfds[0].desc_type = APR_POLL_SOCKET;
+ pfds[0].desc.s = socket;
+
+ do {
+ status = apr_poll(&pfds[0], 1, &nfds, 0);
+ } while (APR_STATUS_IS_EINTR(status));
+
+ if (status == APR_SUCCESS && nfds == 1 &&
+ pfds[0].rtnevents == APR_POLLIN) {
+ apr_sockaddr_t unused;
+ apr_size_t len = 1;
+ char buf[1];
+ /* The socket might be closed in which case
+ * the poll will return POLLIN.
+ * If there is no data available the socket
+ * is closed.
+ */
+ status = apr_socket_recvfrom(&unused, socket, APR_MSG_PEEK,
+ &buf[0], &len);
+ if (status == APR_SUCCESS && len)
+ return 1;
+ else
+ return 0;
+ }
+ else if (APR_STATUS_IS_EAGAIN(status) || APR_STATUS_IS_TIMEUP(status)) {
+ return 1;
+ }
+ return 0;
+
+}
+#else
+static int is_socket_connected(apr_socket_t *sock)
+
+{
+ apr_size_t buffer_len = 1;
+ char test_buffer[1];
+ apr_status_t socket_status;
+ apr_interval_time_t current_timeout;
+
+ /* save timeout */
+ apr_socket_timeout_get(sock, ¤t_timeout);
+ /* set no timeout */
+ apr_socket_timeout_set(sock, 0);
+ socket_status = apr_socket_recv(sock, test_buffer, &buffer_len);
+ /* put back old timeout */
+ apr_socket_timeout_set(sock, current_timeout);
+ if (APR_STATUS_IS_EOF(socket_status) ||
+ APR_STATUS_IS_ECONNRESET(socket_status))
+ return 0;
+ else
+ return 1;
+}
+#endif /* USE_ALTERNATE_IS_CONNECTED */
+/*
+ * Accept a connection from the backend server
+ */
+PROXY_DECLARE(int) toto_ap_proxy_accept_backend(const char *proxy_function,
+ proxy_conn_rec *conn,
+ proxy_worker *worker,
+ server_rec *s)
+{
+ apr_status_t rv;
+ int connected = 0;
+ int loglevel;
+ apr_sockaddr_t *backend_addr = conn->addr;
+ apr_socket_t *newsock;
+ void *sconf = s->module_config;
+ proxy_server_conf *conf =
+ (proxy_server_conf *) ap_get_module_config(sconf, &proxy_module);
+
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
+ "ap_proxy_accept_backend");
+ if (conn->sock) {
+ /*
+ * This increases the connection pool size
+ * but the number of dropped connections is
+ * relatively small compared to connection lifetime
+ */
+ if (!(connected = is_socket_connected(conn->sock))) {
+ apr_socket_close(conn->sock);
+ conn->sock = NULL;
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
+ "proxy: %s: backend socket is disconnected.",
+ proxy_function);
+ }
+ }
+
+ /* If we aren't connected we have to accept a connection */
+ while (!connected) {
+ if ((rv = apr_socket_accept(&newsock, worker->opaque,
+ conn->pool)) != APR_SUCCESS) {
+ loglevel = backend_addr->next ? APLOG_DEBUG : APLOG_ERR;
+ ap_log_error(APLOG_MARK, loglevel, rv, s,
+ "proxy: %s: error creating fam %d socket for target %s",
+ proxy_function,
+ backend_addr->family,
+ worker->hostname);
+ /*
+ * XXX: We loop... But that is a just a test...
+ */
+ continue;
+ }
+
+#if !defined(TPF) && !defined(BEOS)
+ if (worker->recv_buffer_size > 0 &&
+ (rv = apr_socket_opt_set(newsock, APR_SO_RCVBUF,
+ worker->recv_buffer_size))) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
+ "apr_socket_opt_set(SO_RCVBUF): Failed to set "
+ "ProxyReceiveBufferSize, using default");
+ }
+#endif
+
+ rv = apr_socket_opt_set(newsock, APR_TCP_NODELAY, 1);
+ if (rv != APR_SUCCESS && rv != APR_ENOTIMPL) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
+ "apr_socket_opt_set(APR_TCP_NODELAY): "
+ "Failed to set");
+ }
+
+ /* Set a timeout on the socket */
+ if (worker->timeout_set == 1) {
+ apr_socket_timeout_set(newsock, worker->timeout);
+ }
+ else if (conf->timeout_set == 1) {
+ apr_socket_timeout_set(newsock, conf->timeout);
+ }
+ else {
+ apr_socket_timeout_set(newsock, s->timeout);
+ }
+ /* Set a keepalive option */
+ if (worker->keepalive) {
+ if ((rv = apr_socket_opt_set(newsock,
+ APR_SO_KEEPALIVE, 1)) != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
+ "apr_socket_opt_set(SO_KEEPALIVE): Failed to set"
+ " Keepalive");
+ }
+ }
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
+ "proxy: %s: fam %d socket created to connect to %s",
+ proxy_function, backend_addr->family, worker->hostname);
+
+ /* if an error occurred, loop round and try again */
+ if (rv != APR_SUCCESS) {
+ apr_socket_close(newsock);
+ loglevel = backend_addr->next ? APLOG_DEBUG : APLOG_ERR;
+ ap_log_error(APLOG_MARK, loglevel, rv, s,
+ "proxy: %s: attempt to connect to %pI (%s) failed",
+ proxy_function,
+ backend_addr,
+ worker->hostname);
+ backend_addr = backend_addr->next;
+ continue;
+ }
+
+ conn->sock = newsock;
+ connected = 1;
+ }
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
+ "ap_proxy_accept_backend: CONNECTED");
+ /*
+ * Put the entire worker to error state if
+ * the PROXY_WORKER_IGNORE_ERRORS flag is not set.
+ * Altrough some connections may be alive
+ * no further connections to the worker could be made
+ */
+ if (!connected && PROXY_WORKER_IS_USABLE(worker) &&
+ !(worker->s->status & PROXY_WORKER_IGNORE_ERRORS)) {
+ worker->s->status |= PROXY_WORKER_IN_ERROR;
+ worker->s->error_time = apr_time_now();
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
+ "ap_proxy_connect_backend disabling worker for (%s)",
+ worker->hostname);
+ }
+ else {
+ worker->s->error_time = 0;
+ worker->s->retries = 0;
+ }
+ return connected ? OK : DECLINED;
+}
+/*
* Do a ping/pong to the node
*/
static apr_status_t proxy_cluster_try_pingpong(request_rec *r, proxy_worker *worker)
@@ -514,8 +799,14 @@
}
}
- /* Connect to the backend */
- rv = ap_proxy_connect_backend(scheme, conn, worker, r->server);
+ /* Connect to the backend: Check connected/reuse otherwise create new */
+ if (worker->opaque) {
+ /* The opaque points to the server_socket */
+ rv = ap_proxy_accept_backend(scheme, conn, worker, r->server);
+ } else {
+ /* Connect to the backend: Check connected/reuse otherwise create new */
+ rv = ap_proxy_connect_backend(scheme, conn, worker, r->server);
+ }
if (rv != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
"proxy_cluster_try_pingpong: can't connect to backend");
@@ -628,13 +919,18 @@
NULL
};
+/*
+ * Register the hooks on our module.
+ */
static void proxy_cluster_hooks(apr_pool_t *p)
{
ap_hook_post_config(proxy_cluster_post_config, NULL, NULL, APR_HOOK_MIDDLE);
/* create the provider for the proxy logic */
- ap_register_provider(p, PROXY_LBMETHOD, "cluster_bytraffic", "0", &bytraffic);
+ ap_register_provider(p, PROXY_LBMETHOD, "cluster_bytraffic", "0", &bytraffic);
+
}
+
static void *create_proxy_cluster_dir_config(apr_pool_t *p, char *dir)
{
return NULL;
16 years, 6 months
JBoss Native SVN: r1558 - sandbox/httpd/src/native/common.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2008-04-23 07:43:57 -0400 (Wed, 23 Apr 2008)
New Revision: 1558
Modified:
sandbox/httpd/src/native/common/node.c
Log:
Don't overwrite the mod_proxy_cluster part of the information.
Modified: sandbox/httpd/src/native/common/node.c
===================================================================
--- sandbox/httpd/src/native/common/node.c 2008-04-23 11:41:41 UTC (rev 1557)
+++ sandbox/httpd/src/native/common/node.c 2008-04-23 11:43:57 UTC (rev 1558)
@@ -88,9 +88,18 @@
nodeinfo_t *in = (nodeinfo_t *)*data;
nodeinfo_t *ou = (nodeinfo_t *)mem;
if (strcmp(in->mess.JVMRoute, ou->mess.JVMRoute) == 0) {
- memcpy(ou, in, sizeof(nodeinfo_t));
+ /*
+ * The node information is made of several pieces:
+ * Information from the cluster (nodemess_t).
+ * updatetime (time of last received message).
+ * balancer (provided by httpd).
+ * offset (of the area shared with the proxy logic).
+ * stat (shared area with the proxy logic we shouldn't modify it here).
+ */
+ memcpy(ou, in, sizeof(nodemess_t));
ou->mess.id = id;
ou->updatetime = (unsigned long) apr_time_sec(apr_time_now());
+ memcpy(ou->balancer, in->balancer, sizeof(ou->balancer));
ou->offset = sizeof(nodemess_t) + sizeof(unsigned long) + sizeof(ou->balancer) + sizeof(int);
*data = ou;
return APR_SUCCESS;
@@ -123,6 +132,9 @@
/* set of offset to the proxy_worker_stat */
ou->offset = sizeof(nodemess_t) + sizeof(unsigned long) + sizeof(ou->balancer) + sizeof(int);
+ /* blank the proxy status information */
+ memset(ou->stat, '\0', SIZEOFSCORE);
+
return APR_SUCCESS;
}
16 years, 6 months
JBoss Native SVN: r1557 - sandbox/httpd/src/native/common.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2008-04-23 07:41:41 -0400 (Wed, 23 Apr 2008)
New Revision: 1557
Modified:
sandbox/httpd/src/native/common/node.h
Log:
Add a flag for the reversed connections.
Modified: sandbox/httpd/src/native/common/node.h
===================================================================
--- sandbox/httpd/src/native/common/node.h 2008-04-23 09:11:49 UTC (rev 1556)
+++ sandbox/httpd/src/native/common/node.h 2008-04-23 11:41:41 UTC (rev 1557)
@@ -58,6 +58,7 @@
char Host[64];
char Port[7];
char Type[6];
+ int reversed; /* 1 : reversed... 0 : normal */
/* XXX: add the load balancing information */
char schni[44]; /* hugly filler */
16 years, 6 months
JBoss Native SVN: r1556 - sandbox/httpd_filters.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2008-04-23 05:11:49 -0400 (Wed, 23 Apr 2008)
New Revision: 1556
Modified:
sandbox/httpd_filters/README
sandbox/httpd_filters/cookie_filter.c
Log:
mod_jk (for example) doesn't call the inputfilter so use the ouputfilter to dump the input headers too.
Modified: sandbox/httpd_filters/README
===================================================================
--- sandbox/httpd_filters/README 2008-04-22 17:13:40 UTC (rev 1555)
+++ sandbox/httpd_filters/README 2008-04-23 09:11:49 UTC (rev 1556)
@@ -10,3 +10,7 @@
SetOutputFilter COOKIE_FILTER_OUT
SetInputFilter COOKIE_FILTER_IN
+++
+Notes:
+* The COOKIE_FILTER_OUT prints also the input headers so probably you only need this one.
+* The output is truncated a 127 bytes.
+* The output goes in the error_log file.
Modified: sandbox/httpd_filters/cookie_filter.c
===================================================================
--- sandbox/httpd_filters/cookie_filter.c 2008-04-22 17:13:40 UTC (rev 1555)
+++ sandbox/httpd_filters/cookie_filter.c 2008-04-23 09:11:49 UTC (rev 1556)
@@ -24,19 +24,26 @@
#include "http_protocol.h"
#include "http_core.h"
-static int echo_header_in(request_rec *v, const char *key, const char *val)
+static int echo_header(request_rec *v, const char *key, const char *val, const char *param)
{
+ char buf[128];
+ strncpy(buf, val, 128);
+ buf[127] = '\0';
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, v,
- "Got(in): %s : %s", key, val);
+ "Got(%s): %s : size: %d value: %s", param, key, strlen(val), buf);
return 1;
}
-static int echo_header_out(request_rec *v, const char *key, const char *val)
+
+static int echo_header_in(request_rec *v, const char *key, const char *val)
{
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, v,
- "Got(out): %s : %s", key, val);
- return 1;
+ return(echo_header(v, key, val, "in"));
}
+static int echo_header_ou(request_rec *v, const char *key, const char *val)
+{
+ return(echo_header(v, key, val, "ou"));
+}
+
static apr_status_t in_filter(ap_filter_t *f, apr_bucket_brigade *in,
ap_input_mode_t mode,
apr_read_type_e block,
@@ -50,8 +57,12 @@
static apr_status_t out_filter(ap_filter_t *f, apr_bucket_brigade *in)
{
+ /* Dump the received headers */
apr_table_do((int (*) (void *, const char *, const char *))
- echo_header_out, (void *) f->r, f->r->headers_out, NULL);
+ echo_header_in, (void *) f->r, f->r->headers_in, NULL);
+ /* Dump the output headers */
+ apr_table_do((int (*) (void *, const char *, const char *))
+ echo_header_ou, (void *) f->r, f->r->headers_out, NULL);
ap_remove_output_filter(f);
return ap_pass_brigade(f->next,in);
}
16 years, 6 months
JBoss Native SVN: r1554 - sandbox/httpd_filters.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2008-04-22 12:45:09 -0400 (Tue, 22 Apr 2008)
New Revision: 1554
Added:
sandbox/httpd_filters/README
Modified:
sandbox/httpd_filters/cookie_filter.c
Log:
Add README and get the filter earlier to get trace when use with other modules.
Added: sandbox/httpd_filters/README
===================================================================
--- sandbox/httpd_filters/README (rev 0)
+++ sandbox/httpd_filters/README 2008-04-22 16:45:09 UTC (rev 1554)
@@ -0,0 +1,12 @@
+To use the filters.
+sh buildconf
+./configure --with-apache=$HOME/APACHE
+make
+and copy the *so in APACHE installation:
+cp *.so $HOME/APACHE/modules
+add in conf/httpd.conf something like:
++++
+LoadModule httpd_filter_module modules/cookie_filter.so
+SetOutputFilter COOKIE_FILTER_OUT
+SetInputFilter COOKIE_FILTER_IN
++++
Modified: sandbox/httpd_filters/cookie_filter.c
===================================================================
--- sandbox/httpd_filters/cookie_filter.c 2008-04-22 15:39:37 UTC (rev 1553)
+++ sandbox/httpd_filters/cookie_filter.c 2008-04-22 16:45:09 UTC (rev 1554)
@@ -60,9 +60,9 @@
static void register_hooks(apr_pool_t *p)
{
ap_register_output_filter("COOKIE_FILTER_OUT", out_filter, NULL,
- AP_FTYPE_CONTENT_SET);
+ AP_FTYPE_PROTOCOL);
ap_register_input_filter("COOKIE_FILTER_IN", in_filter, NULL,
- AP_FTYPE_CONTENT_SET);
+ AP_FTYPE_PROTOCOL);
}
static void *create_filter_module_config(apr_pool_t *p, server_rec *s)
{
16 years, 6 months
JBoss Native SVN: r1553 - sandbox/httpd_filters.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2008-04-22 11:39:37 -0400 (Tue, 22 Apr 2008)
New Revision: 1553
Added:
sandbox/httpd_filters/buildconf
Log:
Just a forgotten file.
Added: sandbox/httpd_filters/buildconf
===================================================================
--- sandbox/httpd_filters/buildconf (rev 0)
+++ sandbox/httpd_filters/buildconf 2008-04-22 15:39:37 UTC (rev 1553)
@@ -0,0 +1,11 @@
+# Remove aclocal.m4 as it'll break some builds...
+rm -rf aclocal.m4 autom4te*.cache
+
+echo "Creating configure ..."
+### do some work to toss config.cache?
+if ${AUTOCONF:-autoconf}; then
+ :
+else
+ echo "autoconf failed"
+ exit 1
+fi
16 years, 6 months
JBoss Native SVN: r1552 - in trunk/srclib: iconv and 4 other directories.
by jbossnative-commits@lists.jboss.org
Author: mladen.turk(a)jboss.com
Date: 2008-04-21 07:55:33 -0400 (Mon, 21 Apr 2008)
New Revision: 1552
Added:
trunk/srclib/iconv/
trunk/srclib/iconv/NMAKEmakefile
trunk/srclib/iconv/include/
trunk/srclib/iconv/include/iconv.hw
trunk/srclib/iconv/lib/
trunk/srclib/iconv/lib/config.hw
trunk/srclib/iconv/libcharset/
trunk/srclib/iconv/libcharset/include/
trunk/srclib/iconv/libcharset/include/libcharset.hw
trunk/srclib/iconv/libcharset/include/localcharset.hw
Log:
Add windows builds for libiconv
Added: trunk/srclib/iconv/NMAKEmakefile
===================================================================
--- trunk/srclib/iconv/NMAKEmakefile (rev 0)
+++ trunk/srclib/iconv/NMAKEmakefile 2008-04-21 11:55:33 UTC (rev 1552)
@@ -0,0 +1,117 @@
+# Copyright 2001-2007 The Apache Software Foundation or its licensors, as
+# applicable.
+#
+# Licensed 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.
+#
+# ====================================================================
+#
+# NMAKEmakefile Master LIBICONV makefile.
+# Usage:
+# DLL=1 Build DLL version
+# DEBUG=1 Build DEBUG version of LIBICONV
+#
+# Originally contributed by Mladen Turk <mturk redhat.com>
+#
+# ====================================================================
+#
+
+!IF !DEFINED(ICONV_DECLARE_STATIC) || "$(ICONV_DECLARE_STATIC)" == ""
+TARGET=DLL
+CFLAGS = -DICONV_DECLARE_EXPORT -DHAVE_CONFIG_H -DNO_XMALLOC -DBUILDING_DLL
+PROJECT = libiconv-1
+!ELSE
+TARGET=LIB
+CFLAGS = -DICONV_DECLARE_STATIC -DHAVE_CONFIG_H -DNO_XMALLOC
+PROJECT = iconv-1
+!ENDIF
+
+VMAJOR = 1
+VMINOR = 12
+VPATCH = 0
+VSTRING= "$(VMAJOR).$(VMINOR).$(VPATCH)"
+
+!IF !DEFINED(SRCDIR) || "$(SRCDIR)" == ""
+SRCDIR = .
+!ENDIF
+
+!include <..\..\NMAKEcommon.inc>
+
+INCLUDES = -I$(SRCDIR)\include -I$(SRCDIR)\lib -I$(SRCDIR)\libcharset\include
+PDBFLAGS = -Fo$(WORKDIR)\ -Fd$(WORKDIR)\$(PROJECT)-src
+OBJECTS = \
+ $(WORKDIR)\localcharset.obj \
+ $(WORKDIR)\relocatable.obj \
+ $(WORKDIR)\iconv.obj
+
+HEADERS = \
+ $(SRCDIR)\include\iconv.h \
+ $(SRCDIR)\lib\config.h \
+ $(SRCDIR)\libcharset\include\libcharset.h \
+ $(SRCDIR)\libcharset\include\localcharset.h
+
+!IF "$(TARGET)" == "DLL"
+BUILDBIN = $(WORKDIR)\$(PROJECT).dll
+BUILDPDB = $(WORKDIR)\$(PROJECT).pdb
+BUILDRES = $(WORKDIR)\$(PROJECT).res
+BUILDMFT = $(BUILDBIN).manifest
+!ELSE
+BUILDBIN = $(WORKDIR)\$(PROJECT).lib
+!ENDIF
+
+all : $(BUILDINS) $(WORKDIR) $(HEADERS) $(BUILDBIN)
+
+$(WORKDIR) :
+ @$(MAKEWORKDIR)
+
+.SUFFIXES : .hw
+
+{$(SRCDIR)\lib}.hw{$(SRCDIR)\lib}.h:
+ @copy /Y $< $@ >NUL
+
+{$(SRCDIR)\include}.hw{$(SRCDIR)\include}.h:
+ @copy /Y $< $@ >NUL
+
+{$(SRCDIR)\libcharset}.hw{$(SRCDIR)\libcharset}.h:
+ @copy /Y $< $@ >NUL
+
+{$(SRCDIR)\libcharset\include}.hw{$(SRCDIR)\libcharset\include}.h:
+ @copy /Y $< $@ >NUL
+
+{$(SRCDIR)\lib}.c{$(WORKDIR)}.obj:
+ $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<
+
+{$(SRCDIR)\libcharset\lib}.c{$(WORKDIR)}.obj:
+ $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $<
+
+
+$(OBJECTS): $(SRCDIR)\include\*.h $(SRCDIR)\libcharset\include\*.h
+
+!IF "$(TARGET)" == "DLL"
+$(BUILDRES): $(SRCDIR)\windows\libiconv.rc $(HEADERS) $(SRCDIR)\include\*.h
+ $(RC) $(RCFLAGS) /i "$(SRCDIR)\include" /d PACKAGE_VERSION_MAJOR=$(VMAJOR) /d PACKAGE_VERSION_MINOR=$(VMINOR) /d PACKAGE_VERSION_SUBMINOR=$(VPATCH) /d PACKAGE_VERSION_STRING=$(VSTRING) /fo $(BUILDRES) $(SRCDIR)\windows\libiconv.rc
+$(BUILDBIN): $(WORKDIR) $(HEADERS) $(OBJECTS) $(BUILDRES)
+ $(LINK) $(LFLAGS) $(OBJECTS) $(BUILDRES) $(LIBS) /pdb:$(BUILDPDB) /out:$(BUILDBIN)
+ IF EXIST $(BUILDMFT) \
+ mt -nologo -manifest $(BUILDMFT) -outputresource:$(BUILDBIN);2
+!ELSE
+$(BUILDBIN): $(WORKDIR) $(OBJECTS)
+ $(LINK) $(LFLAGS) $(OBJECTS) /out:$(BUILDBIN)
+!ENDIF
+
+clean:
+ @$(CLEANTARGET)
+
+install: $(BUILDINS) $(WORKDIR) $(HEADERS) $(BUILDBIN)
+ @xcopy "$(SRCDIR)\include\iconv.h" "$(BUILDINC)" /Y /Q
+ @xcopy "$(WORKDIR)\*.lib" "$(BUILDLIB)" /Y /Q
+ @xcopy "$(WORKDIR)\*.dll" "$(BUILDOUT)" /Y /Q 2>NUL
Property changes on: trunk/srclib/iconv/NMAKEmakefile
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/srclib/iconv/include/iconv.hw
===================================================================
--- trunk/srclib/iconv/include/iconv.hw (rev 0)
+++ trunk/srclib/iconv/include/iconv.hw 2008-04-21 11:55:33 UTC (rev 1552)
@@ -0,0 +1,211 @@
+/* Copyright (C) 1999-2003, 2005-2006 Free Software Foundation, Inc.
+ This file is part of the GNU LIBICONV Library.
+
+ The GNU LIBICONV Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ The GNU LIBICONV Library is distributed in the hope that it will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU LIBICONV Library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation, Inc., 51 Franklin Street,
+ Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* When installed, this file is called "iconv.h". */
+
+#ifndef _LIBICONV_H
+#define _LIBICONV_H
+
+#define _LIBICONV_VERSION 0x010B /* version number: (major<<8) + minor */
+
+#if defined(ICONV_DECLARE_STATIC)
+#define ICONV_DECLARE(type) type
+#define ICONV_DECLARE_DATA
+#elif defined(ICONV_DECLARE_EXPORT)
+#define ICONV_DECLARE(type) __declspec(dllexport) type
+#define ICONV_DECLARE_DATA __declspec(dllexport)
+#else
+#define ICONV_DECLARE(type) __declspec(dllimport) type
+#define ICONV_DECLARE_DATA __declspec(dllimport)
+#endif
+
+
+ICONV_DECLARE_DATA int _libiconv_version; /* Likewise */
+
+/* We would like to #include any system header file which could define
+ iconv_t, 1. in order to eliminate the risk that the user gets compilation
+ errors because some other system header file includes /usr/include/iconv.h
+ which defines iconv_t or declares iconv after this file, 2. when compiling
+ for LIBICONV_PLUG, we need the proper iconv_t type in order to produce
+ binary compatible code.
+ But gcc's #include_next is not portable. Thus, once libiconv's iconv.h
+ has been installed in /usr/local/include, there is no way any more to
+ include the original /usr/include/iconv.h. We simply have to get away
+ without it.
+ Ad 1. The risk that a system header file does
+ #include "iconv.h" or #include_next "iconv.h"
+ is small. They all do #include <iconv.h>.
+ Ad 2. The iconv_t type is a pointer type in all cases I have seen. (It
+ has to be a scalar type because (iconv_t)(-1) is a possible return value
+ from iconv_open().) */
+
+/* Define iconv_t ourselves. */
+#undef iconv_t
+#define iconv_t libiconv_t
+typedef void* iconv_t;
+
+/* Get size_t declaration.
+ Get wchar_t declaration if it exists. */
+#include <stddef.h>
+
+/* Get errno declaration and values. */
+#include <errno.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Allocates descriptor for code conversion from encoding `fromcode' to
+ encoding `tocode'. */
+#ifndef LIBICONV_PLUG
+#define iconv_open libiconv_open
+#endif
+ICONV_DECLARE(iconv_t) iconv_open (const char* tocode, const char* fromcode);
+
+/* Converts, using conversion descriptor `cd', at most `*inbytesleft' bytes
+ starting at `*inbuf', writing at most `*outbytesleft' bytes starting at
+ `*outbuf'.
+ Decrements `*inbytesleft' and increments `*inbuf' by the same amount.
+ Decrements `*outbytesleft' and increments `*outbuf' by the same amount. */
+#ifndef LIBICONV_PLUG
+#define iconv libiconv
+#endif
+ICONV_DECLARE(size_t) iconv (iconv_t cd, const char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);
+
+/* Frees resources allocated for conversion descriptor `cd'. */
+#ifndef LIBICONV_PLUG
+#define iconv_close libiconv_close
+#endif
+ICONV_DECLARE(int) iconv_close (iconv_t cd);
+
+
+#ifndef LIBICONV_PLUG
+
+/* Nonstandard extensions. */
+
+/* Control of attributes. */
+#define iconvctl libiconvctl
+ICONV_DECLARE(int) iconvctl (iconv_t cd, int request, void* argument);
+
+/* Hook performed after every successful conversion of a Unicode character. */
+typedef void (*iconv_unicode_char_hook) (unsigned int uc, void* data);
+/* Hook performed after every successful conversion of a wide character. */
+typedef void (*iconv_wide_char_hook) (wchar_t wc, void* data);
+/* Set of hooks. */
+struct iconv_hooks {
+ iconv_unicode_char_hook uc_hook;
+ iconv_wide_char_hook wc_hook;
+ void* data;
+};
+
+/* Fallback function. Invoked when a small number of bytes could not be
+ converted to a Unicode character. This function should process all
+ bytes from inbuf and may produce replacement Unicode characters by calling
+ the write_replacement callback repeatedly. */
+typedef void (*iconv_unicode_mb_to_uc_fallback)
+ (const char* inbuf, size_t inbufsize,
+ void (*write_replacement) (const unsigned int *buf, size_t buflen,
+ void* callback_arg),
+ void* callback_arg,
+ void* data);
+/* Fallback function. Invoked when a Unicode character could not be converted
+ to the target encoding. This function should process the character and
+ may produce replacement bytes (in the target encoding) by calling the
+ write_replacement callback repeatedly. */
+typedef void (*iconv_unicode_uc_to_mb_fallback)
+ (unsigned int code,
+ void (*write_replacement) (const char *buf, size_t buflen,
+ void* callback_arg),
+ void* callback_arg,
+ void* data);
+#if 1
+/* Fallback function. Invoked when a number of bytes could not be converted to
+ a wide character. This function should process all bytes from inbuf and may
+ produce replacement wide characters by calling the write_replacement
+ callback repeatedly. */
+typedef void (*iconv_wchar_mb_to_wc_fallback)
+ (const char* inbuf, size_t inbufsize,
+ void (*write_replacement) (const wchar_t *buf, size_t buflen,
+ void* callback_arg),
+ void* callback_arg,
+ void* data);
+/* Fallback function. Invoked when a wide character could not be converted to
+ the target encoding. This function should process the character and may
+ produce replacement bytes (in the target encoding) by calling the
+ write_replacement callback repeatedly. */
+typedef void (*iconv_wchar_wc_to_mb_fallback)
+ (wchar_t code,
+ void (*write_replacement) (const char *buf, size_t buflen,
+ void* callback_arg),
+ void* callback_arg,
+ void* data);
+#else
+/* If the wchar_t type does not exist, these two fallback functions are never
+ invoked. Their argument list therefore does not matter. */
+typedef void (*iconv_wchar_mb_to_wc_fallback) ();
+typedef void (*iconv_wchar_wc_to_mb_fallback) ();
+#endif
+/* Set of fallbacks. */
+struct iconv_fallbacks {
+ iconv_unicode_mb_to_uc_fallback mb_to_uc_fallback;
+ iconv_unicode_uc_to_mb_fallback uc_to_mb_fallback;
+ iconv_wchar_mb_to_wc_fallback mb_to_wc_fallback;
+ iconv_wchar_wc_to_mb_fallback wc_to_mb_fallback;
+ void* data;
+};
+
+/* Requests for iconvctl. */
+#define ICONV_TRIVIALP 0 /* int *argument */
+#define ICONV_GET_TRANSLITERATE 1 /* int *argument */
+#define ICONV_SET_TRANSLITERATE 2 /* const int *argument */
+#define ICONV_GET_DISCARD_ILSEQ 3 /* int *argument */
+#define ICONV_SET_DISCARD_ILSEQ 4 /* const int *argument */
+#define ICONV_SET_HOOKS 5 /* const struct iconv_hooks *argument */
+#define ICONV_SET_FALLBACKS 6 /* const struct iconv_fallbacks *argument */
+
+/* Listing of locale independent encodings. */
+#define iconvlist libiconvlist
+ICONV_DECLARE(void) iconvlist (int (*do_one) (unsigned int namescount,
+ const char * const * names,
+ void* data),
+ void* data);
+
+/* Canonicalize an encoding name.
+ The result is either a canonical encoding name, or name itself. */
+ICONV_DECLARE(const char *) iconv_canonicalize (const char * name);
+
+/* Support for relocatable packages. */
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+ICONV_DECLARE(void) libiconv_set_relocation_prefix (const char *orig_prefix,
+ const char *curr_prefix);
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LIBICONV_H */
Property changes on: trunk/srclib/iconv/include/iconv.hw
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/srclib/iconv/lib/config.hw
===================================================================
--- trunk/srclib/iconv/lib/config.hw (rev 0)
+++ trunk/srclib/iconv/lib/config.hw 2008-04-21 11:55:33 UTC (rev 1552)
@@ -0,0 +1,70 @@
+/* Copyright (C) 1999-2003, 2005, 2007 Free Software Foundation, Inc.
+ This file is part of the GNU LIBICONV Library.
+
+ The GNU LIBICONV Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ The GNU LIBICONV Library is distributed in the hope that it will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU LIBICONV Library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation, Inc., 51 Franklin Street,
+ Fifth Floor, Boston, MA 02110-1301, USA. */
+
+
+/* Define to 1 to enable a few rarely used encodings. */
+#define ENABLE_EXTRA 1
+
+/* Define to 1 if the package shall run at any location in the filesystem. */
+#define ENABLE_RELOCATABLE 1
+
+/* Define to a type if <wchar.h> does not define. */
+#undef mbstate_t
+
+/* Define if you have <iconv.h>, the iconv_t type, and the
+ iconv_open, iconv, iconv_close functions. */
+#undef HAVE_ICONV
+/* Define as const if the declaration of iconv() needs const. */
+#define ICONV_CONST const
+
+/* Define to 1 if you have the getc_unlocked() function. */
+#undef HAVE_GETC_UNLOCKED
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Define if you have the mbrtowc() function. */
+#undef HAVE_MBRTOWC
+
+/* Define to 1 if you have the setlocale() function. */
+#define HAVE_SETLOCALE 1
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#define HAVE_STDDEF_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 <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 or 0, depending whether the compiler supports simple visibility
+ declarations. */
+#undef HAVE_VISIBILITY
+
+/* Define if you have the wcrtomb() function. */
+#undef HAVE_WCRTOMB
+
+/* Define if the machine's byte ordering is little endian. */
+#define WORDS_LITTLEENDIAN 1
+
+/* Define to the value of ${prefix}, as a string. */
+#undef INSTALLPREFIX
+
+#define LIBDIR "."
+#define set_relocation_prefix libcharset_set_relocation_prefix
Property changes on: trunk/srclib/iconv/lib/config.hw
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/srclib/iconv/libcharset/include/libcharset.hw
===================================================================
--- trunk/srclib/iconv/libcharset/include/libcharset.hw (rev 0)
+++ trunk/srclib/iconv/libcharset/include/libcharset.hw 2008-04-21 11:55:33 UTC (rev 1552)
@@ -0,0 +1,57 @@
+/* Copyright (C) 2003 Free Software Foundation, Inc.
+ This file is part of the GNU CHARSET Library.
+
+ The GNU CHARSET Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU CHARSET Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with the GNU CHARSET Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 51 Franklin Street,
+ Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _LIBCHARSET_H
+#define _LIBCHARSET_H
+
+#if defined(ICONV_DECLARE_STATIC)
+#define ICONV_DECLARE(type) type
+#define ICONV_DECLARE_DATA
+#elif defined(ICONV_DECLARE_EXPORT)
+#define ICONV_DECLARE(type) __declspec(dllexport) type
+#define ICONV_DECLARE_DATA __declspec(dllexport)
+#else
+#define ICONV_DECLARE(type) __declspec(dllimport) type
+#define AICONV_DECLARE_DATA __declspec(dllimport)
+#endif
+
+#include <localcharset.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Support for relocatable packages. */
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+ICONV_DECLARE(void) libcharset_set_relocation_prefix (const char *orig_prefix,
+ const char *curr_prefix);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LIBCHARSET_H */
Property changes on: trunk/srclib/iconv/libcharset/include/libcharset.hw
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/srclib/iconv/libcharset/include/localcharset.hw
===================================================================
--- trunk/srclib/iconv/libcharset/include/localcharset.hw (rev 0)
+++ trunk/srclib/iconv/libcharset/include/localcharset.hw 2008-04-21 11:55:33 UTC (rev 1552)
@@ -0,0 +1,52 @@
+/* Determine a canonical name for the current locale's character encoding.
+ Copyright (C) 2000-2003 Free Software Foundation, Inc.
+ This file is part of the GNU CHARSET Library.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _LOCALCHARSET_H
+#define _LOCALCHARSET_H
+
+#if defined(ICONV_DECLARE_STATIC)
+#define ICONV_DECLARE(type) type
+#define ICONV_DECLARE_DATA
+#elif defined(ICONV_DECLARE_EXPORT)
+#define ICONV_DECLARE(type) __declspec(dllexport) type
+#define ICONV_DECLARE_DATA __declspec(dllexport)
+#else
+#define ICONV_DECLARE(type) __declspec(dllimport) type
+#define AICONV_DECLARE_DATA __declspec(dllimport)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Determine the current locale's character encoding, and canonicalize it
+ into one of the canonical names listed in config.charset.
+ The result must not be freed; it is statically allocated.
+ If the canonical name cannot be determined, the result is a non-canonical
+ name. */
+ICONV_DECLARE(const char *) locale_charset (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LOCALCHARSET_H */
Property changes on: trunk/srclib/iconv/libcharset/include/localcharset.hw
___________________________________________________________________
Name: svn:eol-style
+ native
16 years, 6 months
JBoss Native SVN: r1551 - trunk/build/windows.
by jbossnative-commits@lists.jboss.org
Author: mladen.turk(a)jboss.com
Date: 2008-04-21 05:25:11 -0400 (Mon, 21 Apr 2008)
New Revision: 1551
Added:
trunk/build/windows/tools.ini
Modified:
trunk/build/windows/build.bat
Log:
Add nmake tools.ini file
Modified: trunk/build/windows/build.bat
===================================================================
--- trunk/build/windows/build.bat 2008-04-21 09:13:21 UTC (rev 1550)
+++ trunk/build/windows/build.bat 2008-04-21 09:25:11 UTC (rev 1551)
@@ -154,6 +154,7 @@
@if exist "%%i\bufferoverflowu.lib" set INCLUDE_BUFFEROVERFLOWU=1
)
+set INIT=%LOCAL_DIR%
pushd %BUILD_HOME%\unix
bash build.sh %1 %2 %3 %4 %5
popd
Added: trunk/build/windows/tools.ini
===================================================================
--- trunk/build/windows/tools.ini (rev 0)
+++ trunk/build/windows/tools.ini 2008-04-21 09:25:11 UTC (rev 1551)
@@ -0,0 +1,7 @@
+[NMAKE]
+# Forces build of all evaluated targets, even if not out-of-date with
+# respect to dependents
+!CMDSWITCHES +A
+
+# Ignores exit codes from all commands.
+!CMDSWITCHES +I
16 years, 6 months