]> granicus.if.org Git - apache/commitdiff
Make mod_echo use filters for all communication with clients.
authorRyan Bloom <rbb@apache.org>
Wed, 6 Jun 2001 21:28:20 +0000 (21:28 +0000)
committerRyan Bloom <rbb@apache.org>
Wed, 6 Jun 2001 21:28:20 +0000 (21:28 +0000)
Submitted by: Ryan Morgan <rmorgan@covalent.net>

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89279 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
modules/echo/mod_echo.c

diff --git a/CHANGES b/CHANGES
index cbce958d0460cbfd0cdcbedee79fd29d22c6bdd2..1f060b87ab73437b2f713ed80a4eb112556f1e99 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,8 @@
 Changes with Apache 2.0.19-dev
+
+  *) Modify mod_echo to make it use filters for input and output.
+     [Ryan Morgan <rmorgan@covalent.net>]
+
   *) Extend mod_headers to support conditional driven Header 
      add, append and set. Use SetEnvIf to set an envar and conditionally
      add/append/set headers based on this envar thusly:
index f1821232130a43cd4dd2c899a86f58ed70a1acb7..ee3ca35f112ec92973b2d849a5f0aeed52bb4b21 100644 (file)
@@ -62,6 +62,8 @@
 #include "http_config.h"
 #include "http_connection.h"
 
+#include "apr_buckets.h"
+#include "util_filter.h"
 AP_DECLARE_DATA module echo_module;
 
 typedef struct {
@@ -88,26 +90,32 @@ static const char *echo_on(cmd_parms *cmd, void *dummy, int arg)
 
 static int process_echo_connection(conn_rec *c)
 {
-    char buf[1024];
+    apr_bucket_brigade *bb;
+    apr_bucket *b;
+    apr_status_t rv;
+    int zero = 0;
     EchoConfig *pConfig = ap_get_module_config(c->base_server->module_config,
                                                &echo_module);
 
     if (!pConfig->bEnabled) {
         return DECLINED;
     }
+    
+    bb = apr_brigade_create(c->pool);
 
     for ( ; ; ) {
-       apr_ssize_t r, w;
-        r = sizeof(buf);
-        apr_recv(c->client_socket, buf, &r);
-       if (r <= 0) {
+        /* Get a single line of input from the client */
+        if ((rv = ap_get_brigade(c->input_filters, bb,
+                                 AP_MODE_BLOCKING, &zero) != APR_SUCCESS || 
+             APR_BRIGADE_EMPTY(bb))) {
+            apr_brigade_destroy(bb);
             break;
         }
-        w = r;
-       apr_send(c->client_socket, buf, &w);
-       if (w != r) {
-           break;
-        }
+
+        /* Make sure the data is flushed to the client */
+        b = apr_bucket_flush_create();
+        APR_BRIGADE_INSERT_TAIL(bb, b);
+        ap_pass_brigade(c->output_filters, bb);    
     }
     return OK;
 }