-const char filters_rcs[] = "$Id: filters.c,v 1.19 2001/06/29 21:45:41 oes Exp $";
+const char filters_rcs[] = "$Id: filters.c,v 1.20 2001/07/01 17:01:04 oes Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/filters.c,v $
* `acl_addr', `add_stats', `block_acl', `block_imageurl',
* `block_url', `url_actions', `domaincmp', `dsplit',
* `filter_popups', `forward_url', 'redirect_url',
- * `ij_untrusted_url', `intercept_url', `re_process_buffer',
+ * `ij_untrusted_url', `intercept_url', `pcrs_filter_respose',
* `show_proxy_args', 'ijb_send_banner', and `trust_url'
*
* Copyright : Written by and Copyright (C) 2001 the SourceForge
*
* Revisions :
* $Log: filters.c,v $
+ * Revision 1.20 2001/07/01 17:01:04 oes
+ * Added comments and missing return statement in is_untrusted_url()
+ *
* Revision 1.19 2001/06/29 21:45:41 oes
* Indentation, CRLF->LF, Tab-> Space
*
#include "actions.h"
#include "cgi.h"
#include "list.h"
+#include "deanimate.h"
#ifdef _WIN32
#include "win32.h"
#endif /* def TRUST_FILES */
-#ifdef PCRS
/*********************************************************************
*
- * Function : re_process_buffer
+ * Function : pcrs_filter_response
*
* Description : Apply all the pcrs jobs from the joblist (re_filterfile)
* to the text buffer that's been accumulated in
* 1 : csp = Current client state (buffers, headers, etc...)
*
* Returns : a pointer to the (newly allocated) modified buffer.
- * or an empty string in case something went wrong
+ * or NULL in case something went wrong
*
*********************************************************************/
-char *re_process_buffer(struct client_state *csp)
+char *pcrs_filter_response(struct client_state *csp)
{
int hits=0;
int size = csp->iob->eod - csp->iob->cur;
/* Sanity first ;-) */
if (size <= 0)
{
- return(strdup(""));
+ return(NULL);
}
if ( ( NULL == (fl = csp->rlist) ) || ( NULL == (b = fl->f) ) )
{
log_error(LOG_LEVEL_ERROR, "Unable to get current state of regexp filtering.");
- return(strdup(""));
+ return(NULL);
}
log_error(LOG_LEVEL_RE_FILTER, "re_filtering %s%s (size %d) ...",
return(new);
}
-#endif /* def PCRS */
+
+
+/*********************************************************************
+ *
+ * Function : gif_deanimate_response
+ *
+ * Description : Deanimate the GIF image that has been accumulated in
+ * csp->iob->buf and set csp->content_length to the modified
+ * size.
+ *
+ * Parameters :
+ * 1 : csp = Current client state (buffers, headers, etc...)
+ *
+ * Returns : a pointer to the (newly allocated) modified buffer.
+ * or NULL in case something went wrong.
+ *
+ *********************************************************************/
+char *gif_deanimate_response(struct client_state *csp)
+{
+ struct binbuffer *in, *out;
+ char *p;
+ int size = csp->iob->eod - csp->iob->cur;
+
+ if ( (NULL == (in = (struct binbuffer *)zalloc(sizeof *in )))
+ || (NULL == (out = (struct binbuffer *)zalloc(sizeof *out))) )
+ {
+ log_error(LOG_LEVEL_DEANIMATE, "failed! (No Mem!)");
+ return NULL;
+ }
+
+ in->buffer = csp->iob->cur;
+ in->size = size;
+
+ if (gif_deanimate(in, out))
+ {
+ log_error(LOG_LEVEL_DEANIMATE, "failed! (size %d)", size);
+ free(in);
+ buf_free(out);
+ return(NULL);
+ }
+ else
+ {
+ log_error(LOG_LEVEL_DEANIMATE, "Success! GIF shrunk from %d bytes to %d.", size, out->offset);
+ csp->content_length = out->offset;
+ p = out->buffer;
+ free(in);
+ free(out);
+ return(p);
+ }
+
+}
/*********************************************************************