##
## Annotated patch file: eapi.patch
## Copyright (c) 1998-2001 Ralf S. Engelschall, All Rights Reserved.
-## Created on: 29-Jan-2001
+## Created on: 19-Jun-2002
##
## This file assembles changes to existing Apache source files
## between the original Apache and the patched variant. It can be
| patches and configured the shared memory support via the MM library.
+---------------------------------------------------------------------------
Index: src/Configuration.tmpl
---- src/Configuration.tmpl 1999/08/17 11:21:38 1.1.1.5
-+++ src/Configuration.tmpl 2000/10/09 12:15:02 1.21
+--- src/Configuration.tmpl 28 Jan 2002 19:21:21 -0000 1.1.1.7
++++ src/Configuration.tmpl 28 Jan 2002 19:40:56 -0000 1.23
@@ -68,6 +105,24 @@
#TARGET=
| Patch in implementation of the EAPI rule.
+---------------------------------------------------------------------------
Index: src/Configure
---- src/Configure 2001/01/29 19:36:36 1.1.1.13
-+++ src/Configure 2001/01/29 19:38:39 1.15
-@@ -1808,6 +1808,72 @@
+--- src/Configure 19 Jun 2002 07:20:22 -0000 1.1.1.19
++++ src/Configure 19 Jun 2002 07:29:08 -0000 1.22
+@@ -1869,6 +1869,72 @@
fi
####################################################################
+ esac
+ # MM Shared Memory Library support for EAPI
+ if [ "x$EAPI_MM" = "x" ]; then
-+ EAPI_MM=`egrep '^EAPI_MM=' $file | tail -1 | awk -F= '{print $2}'`
++ EAPI_MM=`egrep '^EAPI_MM=' $file | sed -n -e '$p' | awk -F= '{print $2}'`
+ fi
+ if [ "x$EAPI_MM" != "x" ]; then
+ case $EAPI_MM in
+####################################################################
## Add in the Expat library if needed/wanted.
##
- if [ -d ./lib/expat-lite/ ]; then
+
+---------------------------------------------------------------------------
| Add the build support for the ap_hook.c and ap_ctx.c sources (Unix)
+---------------------------------------------------------------------------
Index: src/ap/Makefile.tmpl
---- src/ap/Makefile.tmpl 2000/10/12 08:17:28 1.1.1.6
-+++ src/ap/Makefile.tmpl 2000/10/12 08:31:47 1.6
-@@ -6,7 +6,8 @@
- LIB=libap.a
+--- src/ap/Makefile.tmpl 19 Jun 2002 07:20:22 -0000 1.1.1.8
++++ src/ap/Makefile.tmpl 19 Jun 2002 07:29:08 -0000 1.8
+@@ -7,7 +7,7 @@
OBJS=ap_cpystrn.o ap_execve.o ap_fnmatch.o ap_getpass.o ap_md5c.o ap_signal.o \
-- ap_slack.o ap_snprintf.o ap_sha1.o ap_checkpass.o ap_base64.o
-+ ap_slack.o ap_snprintf.o ap_sha1.o ap_checkpass.o ap_base64.o \
-+ ap_hook.o ap_ctx.o ap_mm.o
+ ap_slack.o ap_snprintf.o ap_sha1.o ap_checkpass.o ap_base64.o ap_ebcdic.o \
+- ap_strtol.o
++ ap_strtol.o ap_hook.o ap_ctx.o ap_mm.o
.c.o:
$(CC) -c $(INCLUDES) $(CFLAGS) $<
| Add the build support for the ap_hook.c and ap_ctx.c sources (Win32)
+---------------------------------------------------------------------------
Index: src/ap/ap.mak
---- src/ap/ap.mak 2001/01/23 11:35:02 1.1.1.7
-+++ src/ap/ap.mak 2001/01/23 11:48:05 1.7
-@@ -52,6 +52,9 @@
+--- src/ap/ap.mak 16 Oct 2001 11:47:06 -0000 1.1.1.9
++++ src/ap/ap.mak 16 Oct 2001 11:57:38 -0000 1.9
+@@ -50,6 +50,9 @@
-@erase "$(INTDIR)\ap_cpystrn.obj"
-@erase "$(INTDIR)\ap_fnmatch.obj"
-@erase "$(INTDIR)\ap_md5c.obj"
-@erase "$(INTDIR)\ap_sha1.obj"
-@erase "$(INTDIR)\ap_signal.obj"
-@erase "$(INTDIR)\ap_slack.obj"
-@@ -78,6 +81,9 @@
+@@ -108,6 +111,9 @@
"$(INTDIR)\ap_cpystrn.obj" \
"$(INTDIR)\ap_fnmatch.obj" \
"$(INTDIR)\ap_md5c.obj" \
"$(INTDIR)\ap_sha1.obj" \
"$(INTDIR)\ap_signal.obj" \
"$(INTDIR)\ap_slack.obj" \
-@@ -114,6 +120,9 @@
+@@ -144,6 +150,9 @@
-@erase "$(INTDIR)\ap_cpystrn.obj"
-@erase "$(INTDIR)\ap_fnmatch.obj"
-@erase "$(INTDIR)\ap_md5c.obj"
-@erase "$(INTDIR)\ap_sha1.obj"
-@erase "$(INTDIR)\ap_signal.obj"
-@erase "$(INTDIR)\ap_slack.obj"
-@@ -140,6 +149,9 @@
+@@ -202,6 +211,9 @@
"$(INTDIR)\ap_cpystrn.obj" \
"$(INTDIR)\ap_fnmatch.obj" \
"$(INTDIR)\ap_md5c.obj" \
| EAPI-aware modules and standard modules.
+---------------------------------------------------------------------------
Index: src/include/ap_mmn.h
---- src/include/ap_mmn.h 2001/01/23 11:35:07 1.1.1.8
-+++ src/include/ap_mmn.h 2001/01/23 11:48:05 1.8
-@@ -233,7 +233,23 @@
- * 19990320.10 - add ap_is_rdirectory() and ap_stripprefix()
+--- src/include/ap_mmn.h 19 Jun 2002 07:20:24 -0000 1.1.1.11
++++ src/include/ap_mmn.h 19 Jun 2002 07:29:08 -0000 1.11
+@@ -239,7 +239,23 @@
+ * 19990320.13 - add ap_strtol()
*/
+/*
| shared memory pools.
+---------------------------------------------------------------------------
Index: src/include/ap_alloc.h
---- src/include/ap_alloc.h 2001/01/23 11:35:07 1.1.1.2
-+++ src/include/ap_alloc.h 2001/01/23 11:48:05 1.3
+--- src/include/ap_alloc.h 27 Mar 2002 15:22:56 -0000 1.1.1.5
++++ src/include/ap_alloc.h 27 Mar 2002 15:30:02 -0000 1.6
@@ -95,6 +95,15 @@
- pool * ap_init_alloc(void); /* Set up everything */
+ API_EXPORT(pool *) ap_init_alloc(void); /* Set up everything */
void ap_cleanup_alloc(void);
API_EXPORT(pool *) ap_make_sub_pool(pool *); /* All pools are subpools of permanent_pool */
+#if defined(EAPI)
| Add the additional context variable `ctx' for BUFF structures.
+---------------------------------------------------------------------------
Index: src/include/buff.h
---- src/include/buff.h 2001/01/23 11:35:07 1.1.1.4
-+++ src/include/buff.h 2001/01/23 11:48:05 1.8
+--- src/include/buff.h 27 Mar 2002 15:22:57 -0000 1.1.1.6
++++ src/include/buff.h 27 Mar 2002 15:30:02 -0000 1.10
@@ -125,6 +125,10 @@
/* transport handle, for RPC binding handle or some such */
void *t_handle;
#ifdef B_SFIO
Sfio_t *sf_in;
Sfio_t *sf_out;
-@@ -176,6 +180,10 @@
+@@ -180,6 +184,10 @@
/* Internal routines */
API_EXPORT(int) ap_bflsbuf(int c, BUFF *fb);
API_EXPORT(int) ap_bfilbuf(BUFF *fb);
| Add the four additional Apache API module hooks.
+---------------------------------------------------------------------------
Index: src/include/http_config.h
---- src/include/http_config.h 2001/01/23 11:35:07 1.1.1.8
-+++ src/include/http_config.h 2001/01/23 11:48:05 1.10
+--- src/include/http_config.h 27 Mar 2002 15:22:57 -0000 1.1.1.10
++++ src/include/http_config.h 27 Mar 2002 15:30:02 -0000 1.12
@@ -276,6 +276,65 @@
void (*child_exit) (server_rec *, pool *);
#endif
| global module context.
+---------------------------------------------------------------------------
Index: src/include/http_conf_globals.h
---- src/include/http_conf_globals.h 2001/01/23 11:35:07 1.1.1.8
-+++ src/include/http_conf_globals.h 2001/01/23 11:48:05 1.9
-@@ -92,6 +92,9 @@
- extern int ap_listenbacklog;
+--- src/include/http_conf_globals.h 27 Mar 2002 15:22:57 -0000 1.1.1.11
++++ src/include/http_conf_globals.h 27 Mar 2002 15:30:02 -0000 1.12
+@@ -95,6 +95,9 @@
+ #endif
extern int ap_dump_settings;
extern API_VAR_EXPORT int ap_extended_status;
+#ifdef EAPI
| some modules need a generic timeout mechanism.
+---------------------------------------------------------------------------
Index: src/include/http_main.h
---- src/include/http_main.h 2001/01/23 11:35:07 1.1.1.5
-+++ src/include/http_main.h 2001/01/23 11:48:05 1.5
-@@ -125,7 +125,11 @@
- API_EXPORT(void) ap_sync_scoreboard_image(void);
- int ap_update_child_status(int child_num, int status, request_rec *r);
- void ap_time_process_request(int child_num, int status);
-+#ifdef EAPI
-+API_EXPORT(unsigned int) ap_set_callback_and_alarm(void (*fn) (int), int x);
-+#else
- unsigned int ap_set_callback_and_alarm(void (*fn) (int), int x);
-+#endif
- API_EXPORT(int) ap_check_alarm(void);
-
- void setup_signal_names(char *prefix);
+---------------------------------------------------------------------------
| First add support for the HTTPS protocol scheme via hooks,
| function.
+---------------------------------------------------------------------------
Index: src/include/httpd.h
---- src/include/httpd.h 2001/01/29 19:36:42 1.1.1.13
-+++ src/include/httpd.h 2001/01/29 19:38:39 1.22
+--- src/include/httpd.h 19 Jun 2002 07:20:24 -0000 1.1.1.19
++++ src/include/httpd.h 19 Jun 2002 07:29:08 -0000 1.29
@@ -70,7 +70,19 @@
/* Headers in which EVERYONE has an interest... */
#include "buff.h"
#include "ap.h"
-@@ -141,8 +153,13 @@
+@@ -141,12 +153,17 @@
#define DEFAULT_HTTP_PORT 80
#define DEFAULT_HTTPS_PORT 443
#define ap_is_default_port(port,r) ((port) == ap_default_port(r))
+#ifdef EAPI
-+#define ap_http_method(r) (ap_ctx_get((r)->ctx, "ap::http::method") != NULL ? ((char *)ap_ctx_get((r)->ctx, "ap::http::method")) : "http")
-+#define ap_default_port(r) (ap_ctx_get((r)->ctx, "ap::default::port") != NULL ? atoi((char *)ap_ctx_get((r)->ctx, "ap::default::port")) : DEFAULT_HTTP_PORT)
++#define ap_http_method(r) (((r)->ctx != NULL && ap_ctx_get((r)->ctx, "ap::http::method") != NULL) ? ((char *)ap_ctx_get((r)->ctx, "ap::http::method")) : "http")
++#define ap_default_port(r) (((r)->ctx != NULL && ap_ctx_get((r)->ctx, "ap::default::port") != NULL) ? atoi((char *)ap_ctx_get((r)->ctx, "ap::default::port")) : DEFAULT_HTTP_PORT)
+#else /* EAPI */
+ #ifdef NETWARE
+ #define ap_http_method(r) ap_os_http_method(r)
+ #else
#define ap_http_method(r) "http"
+ #endif
#define ap_default_port(r) DEFAULT_HTTP_PORT
+#endif /* EAPI */
/* --------- Default user name and group name running standalone ---------- */
/* --- These may be specified as numbers by placing a # before a number --- */
-@@ -354,6 +371,19 @@
+@@ -351,6 +368,19 @@
#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000
#endif
/* Number of requests to try to handle in a single process. If <= 0,
* the children don't die off. That's the default here, since I'm still
* interested in finding and stanching leaks.
-@@ -446,6 +476,9 @@
+@@ -443,6 +473,9 @@
API_EXPORT(const char *) ap_get_server_version(void);
API_EXPORT(void) ap_add_version_component(const char *component);
API_EXPORT(const char *) ap_get_server_built(void);
/* Numeric release version identifier: MMNNFFRBB: major minor fix final beta
* Always increases along the same track as the source branch.
-@@ -838,6 +871,10 @@
+@@ -846,6 +879,10 @@
* record to improve 64bit alignment the next time we need to break
* binary compatibility for some other reason.
*/
};
-@@ -886,6 +923,9 @@
+@@ -894,6 +931,9 @@
char *local_host; /* used for ap_get_server_name when
* UseCanonicalName is set to DNS
* (ignores setting of HostnameLookups) */
};
/* Per-vhost config... */
-@@ -958,6 +998,10 @@
+@@ -966,6 +1006,10 @@
int limit_req_line; /* limit on size of the HTTP request line */
int limit_req_fieldsize; /* limit on size of any request header field */
int limit_req_fields; /* limit on number of request header fields */
| Patch the shared memory pool support into the Apache pool facility.
+---------------------------------------------------------------------------
Index: src/main/alloc.c
---- src/main/alloc.c 2001/01/23 11:35:08 1.1.1.10
-+++ src/main/alloc.c 2001/01/23 11:48:05 1.17
+--- src/main/alloc.c 27 Mar 2002 15:23:00 -0000 1.1.1.12
++++ src/main/alloc.c 27 Mar 2002 15:30:02 -0000 1.19
@@ -64,6 +64,10 @@
*/
(void) ap_acquire_mutex(alloc_mutex);
old_free_list = block_freelist;
block_freelist = blok;
-@@ -342,7 +369,11 @@
+@@ -342,6 +369,10 @@
#endif
(void) ap_release_mutex(alloc_mutex);
+#if defined(EAPI) && defined(EAPI_MM)
+ if (blok->h.is_shm)
+ (void)ap_mm_unlock(mm);
- #endif
+#endif
+ #endif
}
-
@@ -350,7 +381,11 @@
* if necessary. Must be called with alarms blocked.
*/
| modules to intercept the I/O processing via hooks.
+---------------------------------------------------------------------------
Index: src/main/buff.c
---- src/main/buff.c 2001/01/23 11:35:08 1.1.1.10
-+++ src/main/buff.c 2001/01/23 11:48:05 1.18
-@@ -127,7 +127,11 @@
- select() sometimes returns 1 even though the write will block. We must work around this.
- */
-
-+#ifdef EAPI
-+API_EXPORT(int) sendwithtimeout(int sock, const char *buf, int len, int flags)
-+#else /* EAPI */
- int sendwithtimeout(int sock, const char *buf, int len, int flags)
-+#endif /* EAPI */
- {
- int iostate = 1;
- fd_set fdset;
-@@ -195,8 +199,11 @@
- return (rv);
- }
-
--
-+#ifdef EAPI
-+API_EXPORT(int) recvwithtimeout(int sock, char *buf, int len, int flags)
-+#else /* EAPI */
- int recvwithtimeout(int sock, char *buf, int len, int flags)
-+#endif /* EAPI */
- {
- int iostate = 1;
- fd_set fdset;
-@@ -274,6 +281,9 @@
+--- src/main/buff.c 27 Mar 2002 15:23:00 -0000 1.1.1.12
++++ src/main/buff.c 27 Mar 2002 15:30:02 -0000 1.20
+@@ -293,6 +293,9 @@
}
else
#endif
rv = read(fb->fd_in, buf, nbyte);
return rv;
-@@ -285,6 +295,9 @@
+@@ -304,6 +307,9 @@
- #if defined (WIN32) || defined(NETWARE)
+ #if defined (WIN32) || defined(NETWARE) || defined(CYGWIN_WINSOCK)
if (fb->flags & B_SOCKET) {
+#ifdef EAPI
+ if (!ap_hook_call("ap::buff::recvwithtimeout", &rv, fb, buf, nbyte))
+#endif /* EAPI */
- rv = recvwithtimeout(fb->fd_in, buf, nbyte, 0);
+ rv = ap_recvwithtimeout(fb->fd_in, buf, nbyte, 0);
if (rv == SOCKET_ERROR)
errno = WSAGetLastError();
-@@ -332,6 +345,9 @@
+@@ -351,6 +357,9 @@
}
else
#endif
#if defined (B_SFIO)
rv = sfwrite(fb->sf_out, buf, nbyte);
#else
-@@ -358,6 +374,9 @@
-
+@@ -381,6 +390,9 @@
+
#if defined(WIN32) || defined(NETWARE)
if (fb->flags & B_SOCKET) {
+#ifdef EAPI
+ if (!ap_hook_call("ap::buff::sendwithtimeout", &rv, fb, buf, nbyte))
+#endif /* EAPI */
- rv = sendwithtimeout(fb->fd, buf, nbyte, 0);
+ rv = ap_sendwithtimeout(fb->fd, buf, nbyte, 0);
if (rv == SOCKET_ERROR)
errno = WSAGetLastError();
-@@ -438,6 +457,10 @@
- (size_t) SF_UNBOUND, 1, SF_WRITE);
- #endif
+@@ -464,6 +476,10 @@
+ fb->callback_data = NULL;
+ fb->filter_callback = NULL;
+#ifdef EAPI
+ fb->ctx = ap_ctx_new(p);
return fb;
}
-@@ -1084,6 +1107,9 @@
+@@ -1116,6 +1132,9 @@
i = 0;
while (i < nvec) {
do
| variables are initialized.
+---------------------------------------------------------------------------
Index: src/main/http_config.c
---- src/main/http_config.c 2001/01/29 19:36:42 1.1.1.11
-+++ src/main/http_config.c 2001/01/29 19:38:39 1.14
+--- src/main/http_config.c 27 Mar 2002 15:23:00 -0000 1.1.1.14
++++ src/main/http_config.c 27 Mar 2002 15:30:02 -0000 1.17
@@ -599,6 +599,20 @@
m->name = tmp;
}
| is added plus the initialization of one more `ctx' variable.
+---------------------------------------------------------------------------
Index: src/main/http_main.c
---- src/main/http_main.c 2001/01/29 19:36:43 1.1.1.12
-+++ src/main/http_main.c 2001/01/29 19:38:39 1.33
-@@ -260,6 +260,9 @@
- int ap_listenbacklog;
+--- src/main/http_main.c 19 Jun 2002 07:20:25 -0000 1.1.1.18
++++ src/main/http_main.c 19 Jun 2002 07:29:08 -0000 1.40
+@@ -279,6 +279,9 @@
+
int ap_dump_settings = 0;
API_VAR_EXPORT int ap_extended_status = 0;
+#ifdef EAPI
/*
* The max child slot ever assigned, preserved across restarts. Necessary
-@@ -442,6 +445,30 @@
+@@ -463,6 +466,30 @@
}
}
#ifndef NETWARE
static APACHE_TLS int volatile exit_after_unblock = 0;
#endif
-@@ -1206,6 +1233,10 @@
+@@ -1518,6 +1545,10 @@
ap_log_transaction(log_req);
}
ap_bsetflag(save_req->connection->client, B_EOUT, 1);
ap_bclose(save_req->connection->client);
-@@ -1214,6 +1245,9 @@
+@@ -1526,6 +1557,9 @@
ap_longjmp(jmpbuffer, 1);
}
else { /* abort the connection */
ap_bsetflag(current_conn->client, B_EOUT, 1);
ap_bclose(current_conn->client);
current_conn->aborted = 1;
-@@ -1279,7 +1313,11 @@
- }
- #endif
-
-+#ifdef EAPI
-+API_EXPORT(unsigned int) ap_set_callback_and_alarm(void (*fn) (int), int x)
-+#else
- unsigned int ap_set_callback_and_alarm(void (*fn) (int), int x)
-+#endif
- {
- unsigned int old;
-
-@@ -1515,10 +1553,16 @@
+@@ -1828,10 +1862,16 @@
/* Send any leftover data to the client, but never try to again */
if (ap_bflush(r->connection->client) == -1) {
ap_bsetflag(r->connection->client, B_EOUT, 1);
/* Close our half of the connection --- send the client a FIN */
-@@ -2229,6 +2273,9 @@
+@@ -2559,6 +2599,9 @@
/* Clear the pool - including any registered cleanups */
ap_destroy_pool(pglobal);
#endif
exit(code);
}
-@@ -3223,6 +3270,24 @@
+@@ -3570,6 +3613,24 @@
conn->remote_addr = *remaddr;
conn->remote_ip = ap_pstrdup(conn->pool,
inet_ntoa(conn->remote_addr.sin_addr));
return conn;
}
-@@ -3545,6 +3610,11 @@
- else {
- ap_note_cleanups_for_socket(p, fd);
- }
-+ if (fd >= 0) {
-+ FD_SET(fd, &listenfds);
-+ if (fd > listenmaxfd)
-+ listenmaxfd = fd;
-+ }
- FD_SET(fd, &listenfds);
- if (fd > listenmaxfd)
- listenmaxfd = fd;
-@@ -3644,6 +3714,15 @@
+@@ -3998,6 +4059,15 @@
printf("Server's Module Magic Number: %u:%u\n",
MODULE_MAGIC_NUMBER_MAJOR, MODULE_MAGIC_NUMBER_MINOR);
printf("Server compiled with....\n");
+ printf(" -D EAPI_MM_CORE_PATH=\"" EAPI_MM_CORE_PATH "\"\n");
+#endif
+#endif
- #ifdef BIG_SECURITY_HOLE
- printf(" -D BIG_SECURITY_HOLE\n");
+ #ifdef TPF
+ show_os_specific_compile_settings();
#endif
-@@ -3797,6 +3876,22 @@
+@@ -4167,6 +4237,22 @@
ap_server_pre_read_config = ap_make_array(pcommands, 1, sizeof(char *));
ap_server_post_read_config = ap_make_array(pcommands, 1, sizeof(char *));
ap_server_config_defines = ap_make_array(pcommands, 1, sizeof(char *));
}
#ifndef MULTITHREAD
-@@ -4216,6 +4311,9 @@
+@@ -4617,6 +4703,9 @@
ap_sync_scoreboard_image();
if (ap_scoreboard_image->global.running_generation != ap_my_generation) {
ap_bclose(conn_io);
clean_child_exit(0);
}
-@@ -4244,6 +4342,9 @@
+@@ -4645,6 +4734,9 @@
*/
#ifdef NO_LINGCLOSE
ap_bclose(conn_io); /* just close it */
#else
if (r && r->connection
-@@ -4254,6 +4355,9 @@
+@@ -4655,6 +4747,9 @@
lingering_close(r);
}
else {
ap_bsetflag(conn_io, B_EOUT, 1);
ap_bclose(conn_io);
}
-@@ -4978,16 +5082,31 @@
+@@ -5420,16 +5515,31 @@
usage(argv[0]);
}
}
}
child_timeouts = !ap_standalone || one_process;
-@@ -5121,6 +5240,10 @@
+@@ -5576,6 +5686,10 @@
ap_destroy_pool(r->pool);
}
ap_bclose(cio);
}
exit(0);
-@@ -5467,6 +5590,9 @@
+@@ -5952,6 +6066,9 @@
ap_kill_cleanups_for_socket(ptrans, csd);
#ifdef NO_LINGCLOSE
ap_bclose(conn_io); /* just close it */
#else
if (r && r->connection
-@@ -5477,6 +5603,9 @@
+@@ -5962,6 +6079,9 @@
lingering_close(r);
}
else {
ap_bsetflag(conn_io, B_EOUT, 1);
ap_bclose(conn_io);
}
-@@ -6979,6 +7108,9 @@
- sizeof(ap_server_root));
- }
- }
+@@ -7530,6 +7650,10 @@
+ if (!conf_specified)
+ ap_cpystrn(ap_server_confname, SERVER_CONFIG_FILE, sizeof(ap_server_confname));
+
+#ifdef EAPI
+ ap_init_alloc_shared(TRUE);
+#endif
-
- ap_cpystrn(ap_server_confname,
- ap_server_root_relative(pcommands, ap_server_confname),
-@@ -7020,6 +7152,9 @@
++
+ if (!ap_os_is_path_absolute(ap_server_confname))
+ ap_cpystrn(ap_server_confname,
+ ap_server_root_relative(pcommands, ap_server_confname),
+@@ -7569,6 +7693,9 @@
}
#else /* ndef WIN32 */
server_conf = ap_read_config(pconf, ptrans, ap_server_confname);
| conn_rec structures.
+---------------------------------------------------------------------------
Index: src/main/http_request.c
---- src/main/http_request.c 2001/01/23 11:35:09 1.1.1.10
-+++ src/main/http_request.c 2001/01/23 11:48:07 1.9
-@@ -1387,6 +1387,9 @@
- new->no_local_copy = r->no_local_copy;
- new->read_length = r->read_length; /* We can only read it once */
- new->vlist_validator = r->vlist_validator;
+--- src/main/http_request.c 19 Jun 2002 07:20:26 -0000 1.1.1.15
++++ src/main/http_request.c 19 Jun 2002 07:29:09 -0000 1.15
+@@ -1375,6 +1375,10 @@
+
+ new->method = r->method;
+ new->method_number = r->method_number;
+#ifdef EAPI
++ /* initialize context _BEFORE_ ap_parse_uri() call */
+ new->ctx = r->ctx;
+#endif /* EAPI */
-
- ap_table_setn(new->subprocess_env, "REDIRECT_STATUS",
- ap_psprintf(r->pool, "%d", r->status));
+ ap_parse_uri(new, new_uri);
+ new->request_config = ap_create_request_config(r->pool);
+ new->per_dir_config = r->server->lookup_defaults;
+---------------------------------------------------------------------------
| Just add the initialization of the `ctx' variable for
| request_rec structures.
+---------------------------------------------------------------------------
Index: src/main/http_protocol.c
---- src/main/http_protocol.c 2001/01/23 11:35:09 1.1.1.11
-+++ src/main/http_protocol.c 2001/01/23 11:48:06 1.11
-@@ -1105,6 +1105,10 @@
+--- src/main/http_protocol.c 19 Jun 2002 07:20:26 -0000 1.1.1.17
++++ src/main/http_protocol.c 19 Jun 2002 07:29:09 -0000 1.17
+@@ -1167,6 +1167,10 @@
r->status = HTTP_REQUEST_TIME_OUT; /* Until we get a request */
r->the_request = NULL;
+#endif /* EAPI */
+
#ifdef CHARSET_EBCDIC
- ap_bsetflag(r->connection->client, B_ASCII2EBCDIC|B_EBCDIC2ASCII, 1);
- #endif
-@@ -1252,6 +1256,11 @@
+ ap_bsetflag(r->connection->client, B_ASCII2EBCDIC, r->ebcdic.conv_in = 1);
+ ap_bsetflag(r->connection->client, B_EBCDIC2ASCII, r->ebcdic.conv_out = 1);
+@@ -1323,6 +1327,11 @@
rnew->read_body = REQUEST_NO_BODY;
rnew->main = (request_rec *) r;
+
}
- void ap_finalize_sub_req_protocol(request_rec *sub)
+ API_EXPORT(void) ap_finalize_sub_req_protocol(request_rec *sub)
+---------------------------------------------------------------------------
| Add support for loading both EAPI and AP13 modules.
+---------------------------------------------------------------------------
Index: src/modules/standard/mod_so.c
---- src/modules/standard/mod_so.c 2001/01/23 11:35:13 1.1.1.6
-+++ src/modules/standard/mod_so.c 2001/01/23 11:48:08 1.7
-@@ -263,11 +263,24 @@
+--- src/modules/standard/mod_so.c 27 Mar 2002 15:23:06 -0000 1.1.1.9
++++ src/modules/standard/mod_so.c 27 Mar 2002 15:30:03 -0000 1.10
+@@ -269,11 +269,24 @@
* Make sure the found module structure is really a module structure
*
*/
| one hook for creating new %x tags at all.
+---------------------------------------------------------------------------
Index: src/modules/standard/mod_log_config.c
---- src/modules/standard/mod_log_config.c 2001/01/23 11:35:12 1.1.1.11
-+++ src/modules/standard/mod_log_config.c 2001/01/23 11:48:08 1.24
+--- src/modules/standard/mod_log_config.c 19 Jun 2002 07:20:30 -0000 1.1.1.13
++++ src/modules/standard/mod_log_config.c 19 Jun 2002 07:29:09 -0000 1.26
@@ -262,6 +262,9 @@
typedef const char *(*item_key_func) (request_rec *, char *);
item_key_func func;
char *arg;
int condition_sense;
-@@ -573,15 +576,36 @@
+@@ -580,15 +583,36 @@
}
};
return NULL;
}
-@@ -707,7 +731,11 @@
+@@ -714,7 +738,11 @@
break;
default:
if (!l) {
char dummy[2];
-@@ -716,6 +744,9 @@
+@@ -723,6 +751,9 @@
return ap_pstrcat(p, "Unrecognized LogFormat directive %",
dummy, NULL);
}
it->func = l->func;
if (it->want_orig == -1) {
it->want_orig = l->want_orig_default;
-@@ -777,6 +808,15 @@
+@@ -784,6 +815,15 @@
/* We do. Do it... */
| variables from other modules.
+---------------------------------------------------------------------------
Index: src/modules/standard/mod_rewrite.c
---- src/modules/standard/mod_rewrite.c 2001/01/23 11:35:13 1.1.1.9
-+++ src/modules/standard/mod_rewrite.c 2001/01/23 11:48:08 1.7
-@@ -3637,6 +3637,15 @@
+--- src/modules/standard/mod_rewrite.c 19 Jun 2002 07:20:30 -0000 1.1.1.15
++++ src/modules/standard/mod_rewrite.c 19 Jun 2002 07:29:09 -0000 1.13
+@@ -3678,6 +3678,15 @@
}
#endif /* ndef WIN32 && NETWARE*/
| the status HTML page.
+---------------------------------------------------------------------------
Index: src/modules/standard/mod_status.c
---- src/modules/standard/mod_status.c 2001/01/23 11:35:14 1.1.1.11
-+++ src/modules/standard/mod_status.c 2001/01/23 11:48:08 1.8
-@@ -711,6 +748,12 @@
+--- src/modules/standard/mod_status.c 27 Mar 2002 15:23:06 -0000 1.1.1.14
++++ src/modules/standard/mod_status.c 27 Mar 2002 15:30:03 -0000 1.11
+@@ -717,6 +754,12 @@
</table>\n", r);
#endif
}
| recognize more schemes by intercepting this processing.
+---------------------------------------------------------------------------
Index: src/modules/proxy/mod_proxy.c
---- src/modules/proxy/mod_proxy.c 2001/01/23 11:35:10 1.1.1.8
-+++ src/modules/proxy/mod_proxy.c 2001/01/23 11:48:07 1.15
-@@ -215,6 +215,9 @@
+--- src/modules/proxy/mod_proxy.c 19 Jun 2002 07:20:27 -0000 1.1.1.12
++++ src/modules/proxy/mod_proxy.c 19 Jun 2002 07:29:09 -0000 1.19
+@@ -218,6 +218,9 @@
static int proxy_fixup(request_rec *r)
{
char *url, *p;
+#endif /* EAPI */
if (r->proxyreq == NOT_PROXY || strncmp(r->filename, "proxy:", 6) != 0)
- return DECLINED;
-@@ -222,6 +225,14 @@
+ return DECLINED;
+@@ -225,6 +228,14 @@
url = &r->filename[6];
/* canonicalise each specific scheme */
+ else
+#endif /* EAPI */
if (strncasecmp(url, "http:", 5) == 0)
- return ap_proxy_http_canon(r, url + 5, "http", DEFAULT_HTTP_PORT);
+ return ap_proxy_http_canon(r, url + 5, "http", DEFAULT_HTTP_PORT);
else if (strncasecmp(url, "ftp:", 4) == 0)
-@@ -237,9 +248,44 @@
+@@ -240,9 +251,44 @@
static void proxy_init(server_rec *r, pool *p)
{
ap_proxy_garbage_init(r, p);
+ AP_HOOK_SIG3(void,ptr,ptr), AP_HOOK_ALL, r, p);
+#endif
}
--
+-
+#ifdef EAPI
+static void proxy_addmod(module *m)
+{
/* Send a redirection if the request contains a hostname which is not */
/* fully qualified, i.e. doesn't have a domain name appended. Some proxy */
-@@ -369,6 +415,14 @@
- /* CONNECT is a special method that bypasses the normal
- * proxy code.
- */
+@@ -374,6 +420,14 @@
+ * CONNECT is a special method that bypasses the normal proxy
+ * code.
+ */
+#ifdef EAPI
+ if (!ap_hook_use("ap::mod_proxy::handler",
+ AP_HOOK_SIG7(int,ptr,ptr,ptr,ptr,int,ptr),
+ ents[i].hostname, ents[i].port,
+ ents[i].protocol) || rc == DECLINED) {
+#endif /* EAPI */
- if (r->method_number == M_CONNECT)
- rc = ap_proxy_connect_handler(r, cr, url, ents[i].hostname,
- ents[i].port);
-@@ -378,6 +432,9 @@
- ents[i].port);
- else
- rc = DECLINED;
+ if (r->method_number == M_CONNECT)
+ rc = ap_proxy_connect_handler(r, cr, url, ents[i].hostname,
+ ents[i].port);
+@@ -383,6 +437,9 @@
+ ents[i].port);
+ else
+ rc = DECLINED;
+#ifdef EAPI
+ }
+#endif /* EAPI */
- /* an error or success */
- if (rc != DECLINED && rc != HTTP_BAD_GATEWAY)
-@@ -391,6 +448,14 @@
- * give up??
- */
+ /* an error or success */
+ if (rc != DECLINED && rc != HTTP_BAD_GATEWAY)
+@@ -397,6 +454,14 @@
+ */
+
/* handle the scheme */
+#ifdef EAPI
+ if (ap_hook_use("ap::mod_proxy::handler",
+ NULL, 0, scheme) && rc != DECLINED)
+ return rc;
+#endif /* EAPI */
- if (r->method_number == M_CONNECT)
- return ap_proxy_connect_handler(r, cr, url, NULL, 0);
- if (strcasecmp(scheme, "http") == 0)
-@@ -955,6 +1020,12 @@
- NULL, /* child_init */
- NULL, /* child_exit */
- proxy_detect /* post read-request */
+ if (r->method_number == M_CONNECT) {
+ return ap_proxy_connect_handler(r, cr, url, NULL, 0);
+ }
+@@ -994,4 +1059,10 @@
+ NULL, /* child_init */
+ NULL, /* child_exit */
+ proxy_detect /* post read-request */
+#ifdef EAPI
+ ,proxy_addmod, /* EAPI: add_module */
+ proxy_remmod, /* EAPI: remove_module */
+ NULL /* EAPI: new_connection */
+#endif
};
-
-
+---------------------------------------------------------------------------
| Add hooks to the HTTP processing to allow other modules
| to enhance it by intercepting this processing.
+---------------------------------------------------------------------------
Index: src/modules/proxy/proxy_http.c
---- src/modules/proxy/proxy_http.c 2001/01/23 11:35:10 1.1.1.9
-+++ src/modules/proxy/proxy_http.c 2001/01/23 11:48:07 1.17
-@@ -190,6 +190,9 @@
- const char *urlptr = NULL;
- const char *datestr;
- struct tbl_do_args tdo;
+--- src/modules/proxy/proxy_http.c 19 Jun 2002 07:20:27 -0000 1.1.1.14
++++ src/modules/proxy/proxy_http.c 19 Jun 2002 07:29:09 -0000 1.22
+@@ -170,6 +170,9 @@
+ const char *datestr, *urlstr;
+ int result, major, minor;
+ const char *content_length;
+#ifdef EAPI
+ char *peer;
+#endif
void *sconf = r->server->module_config;
proxy_server_conf *conf =
-@@ -208,6 +211,12 @@
- return HTTP_BAD_REQUEST;
+@@ -191,6 +194,12 @@
+ return HTTP_BAD_REQUEST;
urlptr += 3;
destport = DEFAULT_HTTP_PORT;
+#ifdef EAPI
+#endif /* EAPI */
strp = strchr(urlptr, '/');
if (strp == NULL) {
- desthost = ap_pstrdup(p, urlptr);
-@@ -244,12 +253,18 @@
- err = ap_proxy_host2addr(proxyhost, &server_hp);
- if (err != NULL)
- return DECLINED; /* try another */
+ desthost = ap_pstrdup(p, urlptr);
+@@ -228,12 +237,18 @@
+ err = ap_proxy_host2addr(proxyhost, &server_hp);
+ if (err != NULL)
+ return DECLINED; /* try another */
+#ifdef EAPI
+ peer = ap_psprintf(p, "%s:%u", proxyhost, proxyport);
+#endif
}
else {
- server.sin_port = htons(destport);
- err = ap_proxy_host2addr(desthost, &server_hp);
- if (err != NULL)
- return ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, err);
+ server.sin_port = htons((unsigned short)destport);
+ err = ap_proxy_host2addr(desthost, &server_hp);
+ if (err != NULL)
+ return ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, err);
+#ifdef EAPI
+ peer = ap_psprintf(p, "%s:%u", desthost, destport);
+#endif
}
- sock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
-@@ -306,13 +321,41 @@
+
+@@ -308,14 +323,42 @@
f = ap_bcreate(p, B_RDWR | B_SOCKET);
ap_bpushfd(f, sock, sock);
+#endif /* EAPI */
+
ap_hard_timeout("proxy send", r);
- ap_bvputs(f, r->method, " ", proxyhost ? url : urlptr, " HTTP/1.0" CRLF,
- NULL);
+ ap_bvputs(f, r->method, " ", proxyhost ? url : urlptr, " HTTP/1.1" CRLF,
+ NULL);
+#ifdef EAPI
+ {
+ int rc = DECLINED;
+ }
+ }
+#else /* EAPI */
+ /* Send Host: now, adding it to req_hdrs wouldn't be much better */
if (destportstr != NULL && destport != DEFAULT_HTTP_PORT)
- ap_bvputs(f, "Host: ", desthost, ":", destportstr, CRLF, NULL);
+ ap_bvputs(f, "Host: ", desthost, ":", destportstr, CRLF, NULL);
else
- ap_bvputs(f, "Host: ", desthost, CRLF, NULL);
+ ap_bvputs(f, "Host: ", desthost, CRLF, NULL);
+#endif /* EAPI */
if (conf->viaopt == via_block) {
- /* Block all outgoing Via: headers */
+ /* Block all outgoing Via: headers */
+---------------------------------------------------------------------------
| Add EAPI hooks in module structure for APXS generated samples.
+---------------------------------------------------------------------------
Index: src/support/apxs.pl
---- src/support/apxs.pl 2001/01/23 11:35:14 1.1.1.9
-+++ src/support/apxs.pl 2001/01/23 11:48:09 1.9
-@@ -654,5 +654,11 @@
+--- src/support/apxs.pl 19 Jun 2002 07:20:34 -0000 1.1.1.12
++++ src/support/apxs.pl 19 Jun 2002 07:29:09 -0000 1.12
+@@ -711,5 +711,11 @@
NULL, /* child_init */
NULL, /* child_exit */
NULL /* [#0] post read-request */
| and similar braindead platforms as DSO.
+---------------------------------------------------------------------------
Index: src/support/httpd.exp
---- src/support/httpd.exp 2000/10/12 08:17:39 1.1.1.8
-+++ src/support/httpd.exp 2000/10/12 08:31:48 1.10
-@@ -421,3 +421,59 @@
+--- src/support/httpd.exp 19 Jun 2002 07:20:34 -0000 1.1.1.11
++++ src/support/httpd.exp 19 Jun 2002 07:29:09 -0000 1.13
+@@ -427,3 +427,59 @@
XML_SetUnparsedEntityDeclHandler
XML_SetUserData
XML_UseParserAsHandlerArg
| Windows 95 and similar braindead platforms as DDL.
+---------------------------------------------------------------------------
Index: src/ApacheCore.def
---- src/ApacheCore.def 2001/01/23 11:35:01 1.1.1.7
-+++ src/ApacheCore.def 2001/01/23 12:38:37 1.10
-@@ -389,3 +389,70 @@
- ap_stripprefix @380
- ap_os_dso_load @381
- ap_os_dso_error @382
+--- src/ApacheCore.def 19 Jun 2002 07:20:21 -0000 1.1.1.10
++++ src/ApacheCore.def 19 Jun 2002 07:29:08 -0000 1.14
+@@ -447,3 +447,67 @@
+ ap_getline @439
+ ap_get_chunk_size @440
+ ap_escape_logitem @441
+
+ ; EAPI extended symbols
+ ; note; no ID's, so these all bind by name rather than ordinal since
+ ap_hook_use
+ ap_hook_call
+ ap_set_callback_and_alarm
-+ recvwithtimeout
-+ sendwithtimeout
-+ ap_aquire_pool
-+ ap_make_shared_pool
++ ap_acquire_pool
+ ap_make_shared_sub_pool
+ ap_release_pool
+ ap_mm_useable