ben         99/07/05 06:00:47

  Modified:    mpm/src  CHANGES
               mpm/src/include http_config.h http_connection.h
               mpm/src/main http_config.c http_connection.c http_main.c
  Added:       mpm/src/include ap_hooks.h
  Log:
  Strawman hooks implementation (beginning of).
  
  Revision  Changes    Path
  1.12      +7 -0      apache-2.0/mpm/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache-2.0/mpm/src/CHANGES,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- CHANGES   1999/06/24 01:57:43     1.11
  +++ CHANGES   1999/07/05 13:00:39     1.12
  @@ -1,5 +1,12 @@
   Changes with MPM
   
  +    * Start to implement module-defined hooks that are a) fast and b) 
typesafe.
  +      Replace pre_connection module call with a register_hook call and
  +      implement pre_connection as a hook. The intent is that these hooks will
  +      be extended to allow Apache to be multi-protocol, and also to allow the
  +      calling order to be specified on a per-hook/per-module basis.
  +      [Ben Laurie]
  +
       * Implement mpm_* methods as "modules". Each method gets it's own
         subdir in src/modules (eg: src/modules/prefork). Selection
         of method uses Rule MPM_METHOD. [Jim Jagielski]
  
  
  
  1.4       +1 -1      apache-2.0/mpm/src/include/http_config.h
  
  Index: http_config.h
  ===================================================================
  RCS file: /export/home/cvs/apache-2.0/mpm/src/include/http_config.h,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- http_config.h     1999/06/29 09:00:08     1.3
  +++ http_config.h     1999/07/05 13:00:42     1.4
  @@ -249,7 +249,7 @@
       int (*logger) (request_rec *);
       int (*header_parser) (request_rec *);
       int (*post_read_request) (request_rec *);
  -    int (*pre_connection) (conn_rec *);
  +    void (*register_hooks) (void);
   } module;
   
   /* Initializer for the first few module slots, which are only
  
  
  
  1.4       +5 -0      apache-2.0/mpm/src/include/http_connection.h
  
  Index: http_connection.h
  ===================================================================
  RCS file: /export/home/cvs/apache-2.0/mpm/src/include/http_connection.h,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- http_connection.h 1999/07/02 18:22:24     1.3
  +++ http_connection.h 1999/07/05 13:00:42     1.4
  @@ -58,6 +58,8 @@
   #ifndef APACHE_HTTP_CONNECTION_H
   #define APACHE_HTTP_CONNECTION_H
   
  +#include "ap_hooks.h"
  +
   #ifdef __cplusplus
   extern "C" {
   #endif
  @@ -67,6 +69,9 @@
                            const struct sockaddr_in *saddr,
                            int child_num, int thread_num);
   CORE_EXPORT(void) ap_process_connection(conn_rec *);
  +
  +  /* Hooks */
  +DECLARE_HOOK(void,pre_connection,(conn_rec *))
   
   #ifdef __cplusplus
   }
  
  
  
  1.1                  apache-2.0/mpm/src/include/ap_hooks.h
  
  Index: ap_hooks.h
  ===================================================================
  #define DECLARE_HOOK(ret,name,args) \
  typedef ret HOOK_##name args; \
  void hook_##name(HOOK_##name *pf); \
  typedef struct _LINK_##name \
      { \
      HOOK_##name *pFunc; \
      struct _LINK_##name *pNext; \
      } LINK_##name;
  
  #define HOOK_STRUCT(members) \
  static struct { members } _hooks;
  
  #define HOOK_LINK(name) \
      LINK_##name *link_##name;
  
  #define 
IMPLEMENT_HOOK_BASE(ret,rv_decl,sv,rv,name,args,args2,run_all,terminate) \
  void hook_##name(HOOK_##name *pf) \
      { \
      LINK_##name *pHook=ap_palloc(g_pHookPool,sizeof(LINK_##name)); \
      pHook->pNext=_hooks.link_##name; \
      pHook->pFunc=pf; \
      _hooks.link_##name=pHook; \
      } \
  ret run_##name args \
      { \
      LINK_##name *pHook; \
      rv_decl \
  \
      for(pHook=_hooks.link_##name ; pHook ; pHook=pHook->pNext) \
        { \
        sv pHook->pFunc args2; \
  \
        if(!run_all terminate) \
            return rv; \
        } \
      return rv; \
      }
  
  #define IMPLEMENT_HOOK(ret,name,args,args2,run_all,finish) \
        IMPLEMENT_HOOK_BASE(ret,ret r;,r=,r,name,args,args2,run_all,&& r == 
finish)
  #define IMPLEMENT_VOID_HOOK(name,args,args2,run_all) \
        IMPLEMENT_HOOK_BASE(void,,,,name,args,args2,run_all,)
  
  extern pool *g_pHookPool;
  
  
  
  1.5       +5 -9      apache-2.0/mpm/src/main/http_config.c
  
  Index: http_config.c
  ===================================================================
  RCS file: /export/home/cvs/apache-2.0/mpm/src/main/http_config.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- http_config.c     1999/06/29 09:00:16     1.4
  +++ http_config.c     1999/07/05 13:00:44     1.5
  @@ -281,8 +281,7 @@
       XtOffsetOf(module, fixer_upper),
       XtOffsetOf(module, logger),
       XtOffsetOf(module, header_parser),
  -    XtOffsetOf(module, post_read_request),
  -    XtOffsetOf(module, pre_connection)
  +    XtOffsetOf(module, post_read_request)
   };
   #define NMETHODS     (sizeof (method_offsets)/sizeof (method_offsets[0]))
   
  @@ -296,7 +295,6 @@
       int logger;
       int header_parser;
       int post_read_request;
  -    int pre_connection;
   } offsets_into_method_ptrs;
   
   /*
  @@ -409,12 +407,6 @@
       return run_method(r, offsets_into_method_ptrs.post_read_request, 1);
   }
   
  -int ap_run_pre_connection(conn_rec *c)
  -{
  -/* FIXME: either make run_method take a void * or do something nicer */
  -    return run_method((request_rec *)c, 
offsets_into_method_ptrs.pre_connection, 1);
  -}
  -
   /* Auth stuff --- anything that defines one of these will presumably
    * want to define something for the other.  Note that check_auth is
    * separate from check_access to make catching some config errors easier.
  @@ -596,6 +588,10 @@
        m->name = tmp;
       }
   #endif /*_OSD_POSIX*/
  +
  +    /* FIXME: is this the right place to call this? */
  +    if(m->register_hooks)
  +     m->register_hooks();
   }
   
   /* 
  
  
  
  1.7       +7 -1      apache-2.0/mpm/src/main/http_connection.c
  
  Index: http_connection.c
  ===================================================================
  RCS file: /export/home/cvs/apache-2.0/mpm/src/main/http_connection.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- http_connection.c 1999/07/02 18:22:25     1.6
  +++ http_connection.c 1999/07/05 13:00:45     1.7
  @@ -64,6 +64,12 @@
   #include "http_config.h"
   #include "http_vhost.h"
   
  +HOOK_STRUCT(
  +         HOOK_LINK(pre_connection)
  +);
  +
  +IMPLEMENT_VOID_HOOK(pre_connection,(conn_rec *c),(c),1)
  +
   /* TODO: re-implement the lingering close stuff */
   #define NO_LINGCLOSE
   
  @@ -188,7 +194,7 @@
   
       ap_update_vhost_given_ip(c);
   
  -    ap_run_pre_connection(c);
  +    run_pre_connection(c);
   
       /*
        * Read and process each request found on our connection
  
  
  
  1.3       +5 -1      apache-2.0/mpm/src/main/http_main.c
  
  Index: http_main.c
  ===================================================================
  RCS file: /export/home/cvs/apache-2.0/mpm/src/main/http_main.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- http_main.c       1999/06/24 17:48:26     1.2
  +++ http_main.c       1999/07/05 13:00:45     1.3
  @@ -231,6 +231,8 @@
       exit(1);
   }
   
  +pool *g_pHookPool;
  +
   int main(int argc, char **argv)
   {
       int c;
  @@ -258,9 +260,11 @@
   
       ap_util_init();
       ap_util_uri_init();
  -    ap_setup_prelinked_modules();
   
       pglobal = ap_init_alloc();
  +    g_pHookPool=pglobal;
  +
  +    ap_setup_prelinked_modules();
   
       pcommands = ap_make_sub_pool(pglobal);
       ap_server_pre_read_config  = ap_make_array(pcommands, 1, sizeof(char *));
  
  
  

Reply via email to