From: Ben Laurie Date: Fri, 23 Jul 1999 18:52:29 +0000 (+0000) Subject: Support for echo protocol, to show how multiprotocol support works. X-Git-Tag: 1.3.7~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8b2e728bda846016ceb584a7e619ca7fb3df54d3;p=thirdparty%2Fapache%2Fhttpd.git Support for echo protocol, to show how multiprotocol support works. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@83489 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/echo/mod_echo.c b/modules/echo/mod_echo.c new file mode 100644 index 00000000000..210cfa708d4 --- /dev/null +++ b/modules/echo/mod_echo.c @@ -0,0 +1,82 @@ +#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 */ +};