ben         99/07/23 11:52:29

  Modified:    mpm/src  Configuration.tmpl
  Added:       mpm/src/modules/standard mod_echo.c
  Log:
  Support for echo protocol, to show how multiprotocol support works.
  
  Revision  Changes    Path
  1.5       +4 -0      apache-2.0/mpm/src/Configuration.tmpl
  
  Index: Configuration.tmpl
  ===================================================================
  RCS file: /export/home/cvs/apache-2.0/mpm/src/Configuration.tmpl,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Configuration.tmpl        1999/07/10 18:20:16     1.4
  +++ Configuration.tmpl        1999/07/23 18:52:28     1.5
  @@ -414,3 +414,7 @@
   
   AddModule modules/standard/mod_setenvif.o
   
  +## Demonstration module for the TCP echo protocol, just to show how
  +## multiprotocol support works.
  +
  +AddModule modules/standard/mod_echo.o
  
  
  
  1.1                  apache-2.0/mpm/src/modules/standard/mod_echo.c
  
  Index: mod_echo.c
  ===================================================================
  #include "httpd.h"
  #include "http_config.h"
  #include "http_connection.h"
  
  API_VAR_EXPORT module echo_module;
  
  typedef struct
      {
      int bEnabled;
      } EchoConfig;
  
  static void *create_echo_server_config(pool *p,server_rec *s)
      {
      EchoConfig *pConfig=ap_pcalloc(p,sizeof *pConfig);
  
      pConfig->bEnabled=0;
  
      return pConfig;
      }
  
  static const char *echo_on(cmd_parms *cmd, void *dummy, char *arg)
      {
      EchoConfig *pConfig=ap_get_module_config(cmd->server->module_config,
                                             &echo_module);
      pConfig->bEnabled=1;
  
      return NULL;
      }
  
  static int process_echo_connection(conn_rec *c)
      {
      char buf[1024];
      EchoConfig *pConfig=ap_get_module_config(c->base_server->module_config,
                                             &echo_module);
  
      if(!pConfig->bEnabled)
        return DECLINED;
  
      for( ; ; )
        {
        int w;
        int r=ap_bread(c->client,buf,sizeof buf);
        if(r <= 0)
            break;
        w=ap_bwrite(c->client,buf,r);
        if(w != r)
            break;
        ap_bflush(c->client);
        }
      return OK;
      }
  
  static const command_rec echo_cmds[] = {
  { "ProtocolEcho", echo_on, NULL, RSRC_CONF, RAW_ARGS,
    "Run an echo server on this host" },
  { NULL }
  };
  
  static void register_hooks()
      {
      ap_hook_process_connection(process_echo_connection,NULL,NULL,HOOK_MIDDLE);
      }
  
  API_VAR_EXPORT module echo_module = {
      STANDARD20_MODULE_STUFF,
      NULL,                     /* pre_command_line */
      NULL,                     /* pre_config */
      NULL,                     /* post_config */
      NULL,                     /* open_logs */
      NULL,                     /* child_init */
      NULL,                     /* create per-directory config structure */
      NULL,                     /* merge per-directory config structures */
      create_echo_server_config,        /* create per-server config structure */
      NULL,                     /* merge per-server config structures */
      echo_cmds,                        /* command table */
      NULL,                     /* handlers */
      NULL,                     /* check auth */
      NULL,                     /* check access */
      NULL,                     /* type_checker */
      NULL,                     /* pre-run fixups */
      register_hooks            /* register hooks */
  };
  
  
  

Reply via email to