httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bill Stoddard" <b...@wstoddard.com>
Subject Re: [PATCH] Remove the insert_transport_filters hook
Date Tue, 05 Feb 2002 21:07:20 GMT
This approach has an aesthetic problem that annoys me. If mod_yadda wants to insert its
own replacement of CORE_IN and CORE_OUT, how does it reliable do so and ensure:

1. CORE_IN and CORE_OUT are not also installed (their presence in the filter chain when
they are not used is not right IMHO).
2. That YADDA_IN and YADDA_OUT are installed at the appropriate place (ie, they are not
installed above the NET_TIME filter for instance).

I assume returning DONE terminates the hook running with a RUN_ALL hook?  That seems non
intuitive to me.

It seems to me that the install_transport filters provides some semantic clarity, but I
can be swayed either way right now.

Bill

>
> This patch removes the insert_transport_filters hook, and replaces it
> with the pre_connection hook.  The were in the same place, with the only
> difference being the arguments and one was RUN_FIRST while the other was
> RUN_ALL.  I solved the first problem by changing the arguments of the
> pre_connection phase to match insert_transport_filters.  The second
> problem is that pre_connection is a RUN_ALL.
>
> This is solved by the module itself.  RUN_ALL simply means that the hook
> runs all of the functions until one of the functions declares that it is
> the last function to run by returning DONE.
>
> I am trying to remove redundant hooks.
>
> Ryan
>
> Index: include/http_connection.h
> ===================================================================
> RCS file: /home/cvs/httpd-2.0/include/http_connection.h,v
> retrieving revision 1.51
> diff -u -d -b -w -u -r1.51 http_connection.h
> --- include/http_connection.h 1 Feb 2002 22:16:30 -0000 1.51
> +++ include/http_connection.h 5 Feb 2002 20:29:21 -0000
> @@ -70,9 +70,12 @@
>   * This is the protocol module driver.  This calls all of the
>   * pre-connection and connection hooks for all protocol modules.
>   * @param c The connection on which the request is read
> - * @deffunc void ap_process_connection(conn_rec *)
> + * @param csd The mechanism on which this connection is to be read.
> + *            Most times this will be a socket, but it is up to the
> module
> + *            that accepts the request to determine the exact type.
> + * @deffunc void ap_process_connection(conn_rec *c, void *csd)
>   */
> -AP_CORE_DECLARE(void) ap_process_connection(conn_rec *, apr_socket_t
> *csd);
> +AP_CORE_DECLARE(void) ap_process_connection(conn_rec *c, void *csd);
>
>  AP_CORE_DECLARE(void) ap_flush_conn(conn_rec *c);
>
> @@ -114,26 +117,17 @@
>                  (apr_pool_t *p, server_rec *server, apr_socket_t *csd,
> long conn_id, void *sbh))
>
>  /**
> - * install_transport_filters is a RUN_FIRST hook used to install the
> bottom
> - * most input and output network transport filters (e.g., CORE_IN and
> CORE_OUT)
> - * used to interface to the network. This hook can access vhost
> configuration.
> - *
> - * @param c The socket to the client
> - * @param csd Pointer to the client apr_socket_t struct.
> - * @return OK or DECLINED
> - * @deffunc int ap_run_install_transport_filters(conn_rec *c,
> apr_socket_t *csd)
> - */
> -AP_DECLARE_HOOK(int, install_transport_filters, (conn_rec *c,
> apr_socket_t *csd))
> -
> -/**
>   * This hook gives protocol modules an opportunity to set everything up
>   * before calling the protocol handler.  All pre-connection hooks are
>   * run until one returns something other than ok or decline
>   * @param c The connection on which the request has been received.
> + * @param csd The mechanism on which this connection is to be read.
> + *            Most times this will be a socket, but it is up to the
> module
> + *            that accepts the request to determine the exact type.
>   * @return OK or DECLINED
> - * @deffunc int ap_run_pre_connection(conn_rec *c)
> + * @deffunc int ap_run_pre_connection(conn_rec *c, void *csd)
>   */
> -AP_DECLARE_HOOK(int,pre_connection,(conn_rec *c))
> +AP_DECLARE_HOOK(int,pre_connection,(conn_rec *c, void *csd))
>
>  /**
>   * This hook implements different protocols.  After a connection has
> been
> Index: modules/experimental/mod_example.c
> ===================================================================
> RCS file: /home/cvs/httpd-2.0/modules/experimental/mod_example.c,v
> retrieving revision 1.32
> diff -u -d -b -w -u -r1.32 mod_example.c
> --- modules/experimental/mod_example.c 28 Jan 2002 23:49:39 -0000
> 1.32
> +++ modules/experimental/mod_example.c 5 Feb 2002 20:29:21 -0000
> @@ -1028,7 +1028,7 @@
>   * server will still call any remaining modules with an handler for
> this
>   * phase.
>   */
> -static int x_pre_connection(conn_rec *c)
> +static int x_pre_connection(conn_rec *c, void *csd)
>  {
>      x_cfg *cfg;
>
> Index: modules/proxy/proxy_ftp.c
> ===================================================================
> RCS file: /home/cvs/httpd-2.0/modules/proxy/proxy_ftp.c,v
> retrieving revision 1.110
> diff -u -d -b -w -u -r1.110 proxy_ftp.c
> --- modules/proxy/proxy_ftp.c 4 Feb 2002 10:11:29 -0000 1.110
> +++ modules/proxy/proxy_ftp.c 5 Feb 2002 20:29:22 -0000
> @@ -1044,7 +1044,7 @@
>       */
>
>      /* set up the connection filters */
> -    ap_run_install_transport_filters(origin, sock);
> +    ap_run_pre_connection(origin, sock);
>
>      /* possible results: */
>      /* 120 Service ready in nnn minutes. */
> @@ -1786,7 +1786,7 @@
>      }
>
>      /* set up the connection filters */
> -    ap_run_install_transport_filters(data, data_sock);
> +    ap_run_pre_connection(data, data_sock);
>
>      /*
>       * VI: Receive the Response ------------------------
> Index: modules/proxy/proxy_http.c
> ===================================================================
> RCS file: /home/cvs/httpd-2.0/modules/proxy/proxy_http.c,v
> retrieving revision 1.128
> diff -u -d -b -w -u -r1.128 proxy_http.c
> --- modules/proxy/proxy_http.c 1 Feb 2002 22:16:30 -0000 1.128
> +++ modules/proxy/proxy_http.c 5 Feb 2002 20:29:22 -0000
> @@ -450,7 +450,7 @@
>                       p_conn->addr, p_conn->name);
>
>          /* set up the connection filters */
> -        ap_run_install_transport_filters(*origin, p_conn->sock);
> +        ap_run_pre_connection(*origin, p_conn->sock);
>      }
>      return OK;
>  }
> Index: modules/ssl/mod_ssl.c
> ===================================================================
> RCS file: /home/cvs/httpd-2.0/modules/ssl/mod_ssl.c,v
> retrieving revision 1.43
> diff -u -d -b -w -u -r1.43 mod_ssl.c
> --- modules/ssl/mod_ssl.c 28 Jan 2002 23:49:39 -0000 1.43
> +++ modules/ssl/mod_ssl.c 5 Feb 2002 20:29:22 -0000
> @@ -219,7 +219,7 @@
>      return OK;
>  }
>
> -static int ssl_hook_pre_connection(conn_rec *c)
> +static int ssl_hook_pre_connection(conn_rec *c, void *csd)
>  {
>      SSLSrvConfigRec *sc = mySrvConfig(c->base_server);
>      SSL *ssl;
> Index: server/connection.c
> ===================================================================
> RCS file: /home/cvs/httpd-2.0/server/connection.c,v
> retrieving revision 1.99
> diff -u -d -b -w -u -r1.99 connection.c
> --- server/connection.c 1 Feb 2002 22:16:30 -0000 1.99
> +++ server/connection.c 5 Feb 2002 20:29:22 -0000
> @@ -77,16 +77,13 @@
>  APR_HOOK_STRUCT(
>              APR_HOOK_LINK(create_connection)
>       APR_HOOK_LINK(process_connection)
> -            APR_HOOK_LINK(install_transport_filters)
>       APR_HOOK_LINK(pre_connection)
>  )
>  AP_IMPLEMENT_HOOK_RUN_FIRST(conn_rec *,create_connection,
>                              (apr_pool_t *p, server_rec *server,
> apr_socket_t *csd, long conn_id, void *sbh),
>                              (p, server, csd, conn_id, sbh), NULL)
>  AP_IMPLEMENT_HOOK_RUN_FIRST(int,process_connection,(conn_rec
> *c),(c),DECLINED)
> -AP_IMPLEMENT_HOOK_RUN_FIRST(int, install_transport_filters,
> -                            (conn_rec *c, apr_socket_t *csd),(c, csd),
> DECLINED)
> -AP_IMPLEMENT_HOOK_RUN_ALL(int,pre_connection,(conn_rec
> *c),(c),OK,DECLINED)
> +AP_IMPLEMENT_HOOK_RUN_ALL(int,pre_connection,(conn_rec *c, void
> *csd),(c, csd),OK,DECLINED)
>  /*
>   * More machine-dependent networking gooo... on some systems,
>   * you've got to be *really* sure that all the packets are acknowledged
> @@ -221,13 +218,11 @@
>      return;
>  }
>
> -AP_CORE_DECLARE(void) ap_process_connection(conn_rec *c, apr_socket_t
> *csd)
> +AP_CORE_DECLARE(void) ap_process_connection(conn_rec *c, void *csd)
>  {
>      ap_update_vhost_given_ip(c);
>
> -    ap_run_install_transport_filters(c, csd);
> -
> -    ap_run_pre_connection(c);
> +    ap_run_pre_connection(c, csd);
>
>      if (!c->aborted) {
>          ap_run_process_connection(c);
> Index: server/core.c
> ===================================================================
> RCS file: /home/cvs/httpd-2.0/server/core.c,v
> retrieving revision 1.142
> diff -u -d -b -w -u -r1.142 core.c
> --- server/core.c 1 Feb 2002 22:16:30 -0000 1.142
> +++ server/core.c 5 Feb 2002 20:29:29 -0000
> @@ -3651,7 +3651,7 @@
>      c->id = id;
>      return c;
>  }
> -static int core_install_transport_filters(conn_rec *c, apr_socket_t
> *csd)
> +static int core_pre_connection(conn_rec *c, void *csd)
>  {
>      core_net_rec *net = apr_palloc(c->pool, sizeof(*net));
>
> @@ -3671,17 +3671,18 @@
>      ap_set_module_config(net->c->conn_config, &core_module, csd);
>      ap_add_input_filter("CORE_IN", net, NULL, net->c);
>      ap_add_output_filter("CORE", net, NULL, net->c);
> -    return OK;
> +    return DONE;
>  }
>
>  static void register_hooks(apr_pool_t *p)
>  {
> -    /* create_connection and install_transport_filters are RUN_FIRST
> +    /* create_connection and install_transport_filters are
>       * hooks that should always be APR_HOOK_REALLY_LAST to give other
>       * modules the opportunity to install alternate network transports
> +     * and stop other functions from being run.
>       */
>      ap_hook_create_connection(core_create_conn, NULL, NULL,
> APR_HOOK_REALLY_LAST);
> -    ap_hook_install_transport_filters(core_install_transport_filters,
> NULL,
> +    ap_hook_pre_connection(core_pre_connection, NULL,
>                                        NULL, APR_HOOK_REALLY_LAST);
>
>
> ap_hook_post_config(core_post_config,NULL,NULL,APR_HOOK_REALLY_FIRST);
> Index: server/mpm/perchild/perchild.c
> ===================================================================
> RCS file: /home/cvs/httpd-2.0/server/mpm/perchild/perchild.c,v
> retrieving revision 1.107
> diff -u -d -b -w -u -r1.107 perchild.c
> --- server/mpm/perchild/perchild.c 4 Feb 2002 18:41:46 -0000
> 1.107
> +++ server/mpm/perchild/perchild.c 5 Feb 2002 20:29:29 -0000
> @@ -1726,7 +1726,7 @@
>      return APR_SUCCESS;
>  }
>
> -static int perchild_pre_connection(conn_rec *c)
> +static int perchild_pre_connection(conn_rec *c, void *csd)
>  {
>      ap_add_input_filter("PERCHILD_BUFFER", NULL, NULL, c);
>      return OK;
>
>
>
> ----------------------------------------------
> Ryan Bloom                  rbb@covalent.net
> 645 Howard St.              rbb@apache.org
> San Francisco, CA
>
>


Mime
View raw message