mirror of
https://github.com/apache/httpd.git
synced 2025-08-13 14:40:20 +00:00
Add ap_vhost_iterate_given_conn() as I had previously mentioned on the mailing list.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@164538 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
4
CHANGES
4
CHANGES
@ -2,6 +2,10 @@ Changes with Apache 2.1.5
|
||||
|
||||
[Remove entries to the current 2.0 section below, when backported]
|
||||
|
||||
*) Add the ap_vhost_iterate_given_conn function to expose the information
|
||||
used in Name Based Virtual Hosting. (minor MMN bump)
|
||||
[Paul Querna]
|
||||
|
||||
*) Remove the never working ap_method_list_do and ap_method_list_vdo.
|
||||
[Paul Querna]
|
||||
|
||||
|
@ -93,6 +93,7 @@
|
||||
* symbols from the public sector, and decorated real_exit_code
|
||||
* with ap_ in the win32 os.h.
|
||||
* 20050305.0 (2.1.4-dev) added pid and generation fields to worker_score
|
||||
* 20050305.1 (2.1.5-dev) added ap_vhost_iterate_given_conn.
|
||||
*/
|
||||
|
||||
#define MODULE_MAGIC_COOKIE 0x41503230UL /* "AP20" */
|
||||
@ -100,7 +101,7 @@
|
||||
#ifndef MODULE_MAGIC_NUMBER_MAJOR
|
||||
#define MODULE_MAGIC_NUMBER_MAJOR 20050305
|
||||
#endif
|
||||
#define MODULE_MAGIC_NUMBER_MINOR 0 /* 0...n */
|
||||
#define MODULE_MAGIC_NUMBER_MINOR 1 /* 0...n */
|
||||
|
||||
/**
|
||||
* Determine if the server's current MODULE_MAGIC_NUMBER is at least a
|
||||
|
@ -52,6 +52,30 @@ const char *ap_parse_vhost_addrs(apr_pool_t *p, const char *hostname, server_rec
|
||||
const char *ap_set_name_virtual_host (cmd_parms *cmd, void *dummy,
|
||||
const char *arg);
|
||||
|
||||
/**
|
||||
* Callback function for every Name Based Virtual Host.
|
||||
* @param baton Opaque user object
|
||||
* @param conn The current Connection
|
||||
* @param s The current Server
|
||||
* @see ap_vhost_iterate_given_conn
|
||||
* @return 0 on success, any non-zero return will stop the iteration.
|
||||
*/
|
||||
typedef int(*ap_vhost_iterate_conn_cb)(void* baton, conn_rec* conn, server_rec* s);
|
||||
|
||||
/**
|
||||
* For every virtual host on this connection, call func_cb.
|
||||
* @param conn The current connection
|
||||
* @param func_cb Function called for every Name Based Virtual Host for this
|
||||
* connection.
|
||||
* @param baton Opaque object passed to func_cb.
|
||||
* @return The return value from func_cb.
|
||||
* @note If func_cb returns non-zero, the function will return at this point,
|
||||
* and not continue iterating the virtual hosts.
|
||||
*/
|
||||
AP_DECLARE(int) ap_vhost_iterate_given_conn(conn_rec *conn,
|
||||
ap_vhost_iterate_conn_cb func_cb,
|
||||
void* baton);
|
||||
|
||||
/**
|
||||
* given an ip address only, give our best guess as to what vhost it is
|
||||
* @param conn The current connection
|
||||
|
@ -977,6 +977,56 @@ AP_DECLARE(void) ap_update_vhost_from_headers(request_rec *r)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* For every virtual host on this connection, call func_cb.
|
||||
*/
|
||||
AP_DECLARE(int) ap_vhost_iterate_given_conn(conn_rec *conn,
|
||||
ap_vhost_iterate_conn_cb func_cb,
|
||||
void* baton)
|
||||
{
|
||||
server_rec *s;
|
||||
server_rec *last_s;
|
||||
name_chain *src;
|
||||
apr_port_t port;
|
||||
int rv = 0;
|
||||
|
||||
if (conn->vhost_lookup_data) {
|
||||
last_s = NULL;
|
||||
port = conn->local_addr->port;
|
||||
|
||||
for (src = conn->vhost_lookup_data; src; src = src->next) {
|
||||
server_addr_rec *sar;
|
||||
|
||||
/* We only consider addresses on the name_chain which have a
|
||||
* matching port.
|
||||
*/
|
||||
sar = src->sar;
|
||||
if (sar->host_port != 0 && port != sar->host_port) {
|
||||
continue;
|
||||
}
|
||||
|
||||
s = src->server;
|
||||
|
||||
if (s == last_s) {
|
||||
/* we've already done a callback for this vhost. */
|
||||
continue;
|
||||
}
|
||||
|
||||
last_s = s;
|
||||
|
||||
rv = func_cb(baton, conn, s);
|
||||
|
||||
if (rv != 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
rv = func_cb(baton, conn, conn->base_server);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/* Called for a new connection which has a known local_addr. Note that the
|
||||
* new connection is assumed to have conn->server == main server.
|
||||
|
Reference in New Issue
Block a user