Index: tinyproxy/src/conns.h
===================================================================
--- tinyproxy.orig/src/conns.h	2007-04-23 10:02:29.000000000 +0200
+++ tinyproxy/src/conns.h	2007-04-23 10:02:29.000000000 +0200
@@ -20,6 +20,7 @@
 
 #include "tinyproxy.h"
 #include "hashmap.h"
+#include "pa/spaced.h"
 
 /*
  * Connection Definition
@@ -75,6 +76,7 @@
 	hashmap_t server_headers;
 	int check_content;
 	char *forwarded_for;
+	pasd_handle_t *spacedaemon;     /* Handle for PA-Spacedaemon */
 };
 
 /*
Index: tinyproxy/src/grammar.y
===================================================================
--- tinyproxy.orig/src/grammar.y	2007-04-23 10:02:29.000000000 +0200
+++ tinyproxy/src/grammar.y	2007-04-23 10:02:29.000000000 +0200
@@ -59,6 +59,7 @@
 %token KW_CLAMAV_PORT KW_CCHECK_ERR_FILE KW_ADMIN_EMAIL KW_CCHECK_MIME_EXCLUDE
 %token KW_CHROOT KW_CCHECK_MAX_SIZE KW_CCHECK_MIN_FREE KW_CCHECK_TEMP_DIR
 %token KW_CCHECK_VIRT_DIR KW_CCHECK_MAX_SIZE_PASS
+%token KW_CCHECK_USE_REAL_SIZE
 
 /* yes/no switches */
 %token KW_YES KW_NO
@@ -229,9 +230,9 @@
 	| KW_CCHECK_MIME_EXCLUDE MIME_TYPE
 					{ add_exclude_mime_type($2); }
 	| KW_CHROOT string              { config.chroot = $2; }
-	| KW_CCHECK_MAX_SIZE NUMBER     { config.ccheck_max_size =
-	                                   1024 * 1024 * $2; }
+	| KW_CCHECK_MAX_SIZE NUMBER     { config.ccheck_max_size = $2; }
 	| KW_CCHECK_MAX_SIZE_PASS NUMBER	{ config.ccheck_max_size_pass = $2; }
+	| KW_CCHECK_USE_REAL_SIZE NUMBER	{ config.ccheck_use_real_size = $2; }
 	| KW_CCHECK_MIN_FREE NUMBER     { config.ccheck_min_free =  
 	                                  1024 * 1024 * $2; }
 	| KW_CCHECK_TEMP_DIR string     { config.ccheck_temp_dir = $2; }
Index: tinyproxy/src/Makefile.in
===================================================================
--- tinyproxy.orig/src/Makefile.in	2007-04-23 10:02:29.000000000 +0200
+++ tinyproxy/src/Makefile.in	2007-04-23 11:38:48.000000000 +0200
@@ -122,7 +122,7 @@
 EXTRA_DIST = gnuregex.c gnuregex.h
 EXTRA_tinyproxy_SOURCES = filter.c filter.h grammar.h
 tinyproxy_DEPENDENCIES = @ADDITIONAL_OBJECTS@
-tinyproxy_LDADD = @ADDITIONAL_OBJECTS@ -lpabaselib
+tinyproxy_LDADD = @ADDITIONAL_OBJECTS@ -lpaiface
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 CONFIG_HEADER = ../config.h
 CONFIG_CLEAN_FILES = 
Index: tinyproxy/src/reqs.c
===================================================================
--- tinyproxy.orig/src/reqs.c	2007-04-23 10:02:29.000000000 +0200
+++ tinyproxy/src/reqs.c	2007-04-23 10:02:29.000000000 +0200
@@ -45,6 +45,7 @@
 #include <sys/vfs.h>
 #include <sys/socket.h>
 #include <linux/tcp.h>
+#include "pa/spaced.h"
 
 
 
@@ -1524,12 +1525,20 @@
 	char *sock_str_int;
 
 	if(config.ccheck_max_size != 0 &&
-	  connptr->content_length.server > config.ccheck_max_size)
+	  connptr->content_length.server > config.ccheck_max_size
+	  || connptr->content_length.server < 0 )
 	{
+		if(connptr->content_length.server < 0) {
+			send_server_headers(connptr);
+			relay_connection(connptr);
+			return;
+		}
+
 		if(config.ccheck_max_size_pass == 1) {
 			log_message(LOG_WARNING, "Maximum allowed file size exceeded "
 			  "(content-length: %d)",connptr->content_length.server); 
 			log_message(LOG_WARNING, "Piping Message through without scanning....");
+			send_server_headers(connptr);
 			relay_connection(connptr);
 			return;
 		}
@@ -1539,6 +1548,21 @@
 		  "(content-length: %d)",connptr->content_length.server); 
 		return;
 	}
+	/* Catch Space from SpaceDaemon */
+	if(config.ccheck_use_real_size == 1) {
+		if(! (connptr->spacedaemon = pasd_request(pasd_client_type_http, connptr->content_length.server)))
+		{
+			log_message(LOG_WARNING, "PA-SpaceDaemon returned: %s", pasd_errstr);
+			return;
+		}
+	} else {
+		if(! (connptr->spacedaemon = pasd_request(pasd_client_type_http, config.ccheck_max_size)))
+		{
+			log_message(LOG_WARNING, "PA-SpaceDaemon returned: %s", pasd_errstr);
+			return;
+		}
+	}
+	
 	snprintf(filename, sizeof(filename), "%s/buffer.%d", 
 	  config.virt_ccheck_temp_dir, getpid());
 	if((tmp_file = open(filename, O_CREAT|O_WRONLY, 0666)) < 0)
@@ -1688,6 +1712,7 @@
 	}
 
 	close(tmp_file);
+
 	content_result = scan_file(filename, connptr, content_msg,
 	  sizeof(content_msg));
 	if(content_result < 0)
@@ -1966,12 +1991,17 @@
 			return;
 		}
 	}
-
+	
+	connptr->spacedaemon = NULL;
 	if(connptr->check_content && !connptr->connect_method)
 		relay_check_content(connptr);
 	else
 		relay_connection(connptr);
 
+	/* Release Space from SpaceDaemon */
+	if(connptr->spacedaemon != NULL)
+		pasd_release(connptr->spacedaemon);
+	
 	log_message(LOG_INFO, "Closed connection between local client (fd:%d) and remote client (fd:%d)",
 		    connptr->client_fd, connptr->server_fd);
 
Index: tinyproxy/src/scanner.l
===================================================================
--- tinyproxy.orig/src/scanner.l	2007-04-23 10:02:29.000000000 +0200
+++ tinyproxy/src/scanner.l	2007-04-23 10:02:29.000000000 +0200
@@ -66,6 +66,7 @@
 	{ "adminemail",          KW_ADMIN_EMAIL },
 	{ "ccheckexclude",       KW_CCHECK_MIME_EXCLUDE },
 	{ "chroot",              KW_CHROOT },
+	{ "ccheckuserealsize",   KW_CCHECK_USE_REAL_SIZE },
 	{ "ccheckmaxsize",       KW_CCHECK_MAX_SIZE },
 	{ "ccheckmaxsizepass",   KW_CCHECK_MAX_SIZE_PASS },
 	{ "ccheckminfree",       KW_CCHECK_MIN_FREE },
Index: tinyproxy/src/tinyproxy.h
===================================================================
--- tinyproxy.orig/src/tinyproxy.h	2007-04-23 10:02:29.000000000 +0200
+++ tinyproxy/src/tinyproxy.h	2007-04-23 10:02:29.000000000 +0200
@@ -97,6 +97,7 @@
 	int ccheck_max_size;
 	int ccheck_max_size_pass;
 	int ccheck_min_free;
+	int ccheck_use_real_size;
 	char *ccheck_temp_dir;
 	char *ccheck_virt_dir;
 	char *ccheck_admin;

