Hi,
 
I have a need to capture the incoming request body each time a request
comes into Apache Proxy server. I have mod_proxy and mod_filters setup
and I have an input filter that I wrote that captures the payload from
the request and logs it out. The input filter is able to do this,
however, the filter is processing the same request twice. The input
filter gets invoked 7-8 times for each request, most of the time with
empty buf on apr_bucket_read and twice with the same request contents.
What do I need to do to change the filter not to process the request
contents twice? How do I know the request has been already processed
once? Here is the part of the code that I have in the filter. Anything
that I missed? thank you in advance for your help.
 
if (ap_is_initial_req(r)) {
   if ( ret = ap_get_brigade(f->next, bb, mode, block, nbytes), ret ==
APR_SUCCESS ) {
    const char* buf;
    for ( b = APR_BRIGADE_FIRST(bb); b != APR_BRIGADE_SENTINEL(bb); b =
APR_BUCKET_NEXT(b) )
    {
 

                   int len;
                   if (apr_bucket_read(b,&buf,&bytes,APR_NONBLOCK_READ)
== APR_SUCCESS) {
                              read = 1;
                   }
 
    }
 
    //if anything is read, send out the payload
    if (read == 1) {
     //check if buf is all empty
     char *newbuf = stripspaces(buf);
     int l = strlen(newbuf);
    
 

     if (l == 0 || l == 1) {
 
                fprintf(stderr, "the buf length is 0 or 1 - all empty!
not sending data \n");
     } else   {
     
                fprintf(stderr, "unparsed uri is: %s \n",
r->unparsed_uri);
 
    
                fprintf(stderr, "The request buf is --------------- %s",
buf);
     
   }
   }
     }
  }
  return ret ;

Reply via email to