[or-cvs] remove on-the-fly compression feature

Roger Dingledine arma at seul.org
Fri Jun 13 10:23:44 UTC 2003


Update of /home/or/cvsroot/src/or
In directory moria.mit.edu:/home/arma/work/onion/cvs/src/or

Modified Files:
	Makefile.am buffers.c connection.c connection_edge.c or.h 
	test.c 
Log Message:
remove on-the-fly compression feature

it wasn't working, and it was harder than we'd anticipated

not worth it.


Index: Makefile.am
===================================================================
RCS file: /home/or/cvsroot/src/or/Makefile.am,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- Makefile.am	28 May 2003 02:03:25 -0000	1.17
+++ Makefile.am	13 Jun 2003 10:23:42 -0000	1.18
@@ -9,14 +9,14 @@
              onion.c routers.c directory.c dns.c connection_edge.c \
              main.c tor_main.c
 
-or_LDADD = ../common/libor.a -lz
+or_LDADD = ../common/libor.a
 
 test_SOURCES = buffers.c circuit.c command.c connection.c \
              connection_exit.c connection_ap.c connection_or.c config.c \
              onion.c routers.c directory.c dns.c connection_edge.c \
              main.c test.c
 
-test_LDADD = ../common/libor.a -lz
+test_LDADD = ../common/libor.a
 
 noinst_HEADERS = or.h tree.h
 

Index: buffers.c
===================================================================
RCS file: /home/or/cvsroot/src/or/buffers.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- buffers.c	20 May 2003 06:41:22 -0000	1.22
+++ buffers.c	13 Jun 2003 10:23:42 -0000	1.23
@@ -76,7 +76,6 @@
 //    log(LOG_DEBUG,"read_to_buf(): Read %d bytes. %d on inbuf.",read_result, *buf_datalen);
     return read_result;
   }
-
 }
 
 int flush_buf(int s, char **buf, int *buflen, int *buf_flushlen, int *buf_datalen) {
@@ -131,129 +130,6 @@
   *buf_datalen += string_len;
 //  log(LOG_DEBUG,"write_to_buf(): added %d bytes to buf (now %d total).",string_len, *buf_datalen);
   return *buf_datalen;
-
-}
-
-z_stream *zstream_new(int compression)
-{
-  z_stream* stream;
-  stream = tor_malloc(sizeof(z_stream));
-  memset(stream, 0, sizeof(z_stream));
-  if (compression) {
-    if (deflateInit(stream, Z_DEFAULT_COMPRESSION) != Z_OK) {
-      log(LOG_ERR, "Error initializing zlib: %s", stream->msg);
-      free(stream);
-      return NULL;
-    }
-  } else {
-    if (inflateInit(stream) != Z_OK) {
-      log(LOG_ERR, "Error initializing zlib: %s", stream->msg);
-      free(stream);
-      return NULL;
-    }
-  }
-  return stream;
-}
-
-z_compression *compression_new()
-{
-  return (z_compression *) zstream_new(1);
-}
-
-z_decompression *decompression_new()
-{
-  return (z_compression *) zstream_new(0);
-}
-
-void compression_free(z_stream *stream)
-{
-  int r;
-  r = deflateEnd(stream);
-  if (r != Z_OK)
-    log(LOG_ERR, "while closing compression: %d (%s)", r, stream->msg);
-  free(stream);
-}
-
-void decompression_free(z_stream *stream)
-{
-  int r;
-  r = inflateEnd(stream);
-  if (r != Z_OK)
-    log(LOG_ERR, "while closing decompression: %d (%s)", r, stream->msg);
-  free(stream);
-}
-
-int compress_from_buf(char *string, int string_len, 
-                      char **buf_in, int *buflen_in, int *buf_datalen_in,
-                      z_stream *zstream, int flush) {
-  int err;
-
-  if (!*buf_datalen_in)
-    return 0;
-
-  zstream->next_in = *buf_in;
-  zstream->avail_in = *buf_datalen_in;
-  zstream->next_out = string;
-  zstream->avail_out = string_len;
-  
-  err = deflate(zstream, flush);
-
-  switch (err) 
-    {
-    case Z_OK:
-    case Z_STREAM_END:
-      log(LOG_DEBUG, "Compressed (%d/%d); filled (%d/%d).",
-          *buf_datalen_in-zstream->avail_in, *buf_datalen_in,
-          string_len-zstream->avail_out, string_len);
-      memmove(*buf_in, zstream->next_in, zstream->avail_in);
-      *buf_datalen_in = zstream->avail_in;
-      return string_len - zstream->avail_out;
-    case Z_STREAM_ERROR:
-    case Z_BUF_ERROR:
-      log(LOG_ERR, "Error processing compression: %s", zstream->msg);
-      return -1;
-    default:
-      log(LOG_ERR, "Unknown return value from deflate: %d", err);
-      return -1;
-  }
-}
-
-int decompress_buf_to_buf(char **buf_in, int *buflen_in, int *buf_datalen_in,
-                          char **buf_out, int *buflen_out, int *buf_datalen_out,
-                          z_stream *zstream, int flush) 
-{
-  int err;
-
-  zstream->next_in = *buf_in;
-  zstream->avail_in = *buf_datalen_in;
-  zstream->next_out = *buf_out + *buf_datalen_out;
-  zstream->avail_out = *buflen_out - *buf_datalen_out;
-  
-  if (!zstream->avail_in && !zstream->avail_out)
-    return 0;
-  
-  err = inflate(zstream, flush);
-
-  switch (err) 
-    {
-    case Z_OK:
-    case Z_STREAM_END:
-      log(LOG_DEBUG, "Uncompressed (%d/%d); filled (%d/%d)",
-          *buf_datalen_in-zstream->avail_in, *buf_datalen_in,
-          (*buflen_out-*buf_datalen_out)-zstream->avail_out, 
-          (*buflen_out-*buf_datalen_out) );
-      memmove(*buf_in, zstream->next_in, zstream->avail_in);
-      *buf_datalen_in = zstream->avail_in;
-      *buf_datalen_out = *buflen_out - zstream->avail_out;
-      return 1;
-    case Z_STREAM_ERROR:
-    case Z_BUF_ERROR:
-      log(LOG_ERR, "Error processing compression: %s", zstream->msg);
-      return 1;
-    default:
-      log(LOG_ERR, "Unknown return value from deflate: %d", err);
-      return -1;
-    }
 }
 
 int fetch_from_buf(char *string, int string_len,

Index: connection.c
===================================================================
RCS file: /home/or/cvsroot/src/or/connection.c,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -d -r1.64 -r1.65
--- connection.c	13 Jun 2003 09:25:55 -0000	1.64
+++ connection.c	13 Jun 2003 10:23:42 -0000	1.65
@@ -98,18 +98,6 @@
       return NULL;
     }
   }
-#ifdef USE_ZLIB
-  if (type == CONN_TYPE_AP || type == CONN_TYPE_EXIT)  {
-    if (buf_new(&conn->z_outbuf, &conn->z_outbuflen, &conn->z_outbuf_datalen) < 0)
-      return NULL;
-    if (! (conn->compression = compression_new()))
-      return NULL;
-    if (! (conn->decompression = decompression_new()))
-      return NULL;
-  } else {
-    conn->compression = conn->decompression = NULL;
-  }
-#endif
   conn->done_sending = conn->done_receiving = 0;
   return conn;
 }
@@ -141,13 +129,6 @@
   if(conn->type == CONN_TYPE_OR) {
     directory_set_dirty();
   }
-#ifdef USE_ZLIB
-  if (conn->compression) {
-    decompression_free(conn->decompression);
-    compression_free(conn->compression);
-    buf_free(conn->z_outbuf);
-  }
-#endif
   free(conn);
 }
 
@@ -322,58 +303,6 @@
   return fetch_from_buf(string, len, &conn->inbuf, &conn->inbuflen, &conn->inbuf_datalen);
 }
 
-#ifdef USE_ZLIB
-int connection_compress_from_buf(char *string, int len, connection_t *conn,
-                                 int flush) {
-  return compress_from_buf(string, len,
-                           &conn->inbuf, &conn->inbuflen, &conn->inbuf_datalen,
-                           conn->compression, flush);
-}
-
-int connection_decompress_to_buf(char *string, int len, connection_t *conn,
-                                 int flush) {
-  int n;
-  struct timeval now;
-
-  assert(conn);
-
-  if (len) {
-    if (write_to_buf(string, len, 
-        &conn->z_outbuf, &conn->z_outbuflen, &conn->z_outbuf_datalen) < 0)
-      return -1;
-  }
-
-  /* If we have more that 10 payloads worth of data waiting in outbuf, 
-   * don't uncompress any more; queue this data in z_outbuf.
-   *
-   * This check should may be different.
-   */
-  if (connection_outbuf_too_full(conn))
-    return 0;
-  
-  n = decompress_buf_to_buf(
-        &conn->z_outbuf, &conn->z_outbuflen, &conn->z_outbuf_datalen,
-        &conn->outbuf, &conn->outbuflen, &conn->outbuf_datalen,
-        conn->decompression, flush);
-
-  if (n < 0)
-    return -1;
-
-  my_gettimeofday(&now,NULL);
-  
-  if(!n)
-    return 0;
-
-  if(conn->marked_for_close)
-    return 0;
-
-  conn->timestamp_lastwritten = now.tv_sec;
-  conn->outbuf_flushlen += n;
-
-  return n;
-}
-#endif
-
 int connection_find_on_inbuf(char *string, int len, connection_t *conn) {
   return find_on_inbuf(string, len, conn->inbuf, conn->inbuf_datalen);
 }
@@ -625,7 +554,7 @@
 }
 
 int connection_package_raw_inbuf(connection_t *conn) {
-  int amount_to_process, len;
+  int amount_to_process;
   cell_t cell;
   circuit_t *circ;
 
@@ -643,20 +572,6 @@
   /* Initialize the cell with 0's */
   memset(&cell, 0, sizeof(cell_t));
 
-#ifdef USE_ZLIB
-  /* This compression logic is not necessarily optimal:
-   *    1) Maybe we should try to read as much as we can onto the inbuf before
-   *       compressing.
-   *    2) 
-   */
-  len = connection_compress_from_buf(cell.payload+RELAY_HEADER_SIZE,
-                                     CELL_PAYLOAD_SIZE - RELAY_HEADER_SIZE,
-                                     conn, Z_SYNC_FLUSH);
-  if (len < 0)
-    return -1;
-
-  cell.length = len;    
-#else 
   if(amount_to_process > CELL_PAYLOAD_SIZE - RELAY_HEADER_SIZE) {
     cell.length = CELL_PAYLOAD_SIZE - RELAY_HEADER_SIZE;
   } else {
@@ -666,7 +581,6 @@
   if(connection_fetch_from_buf(cell.payload+RELAY_HEADER_SIZE, 
                                cell.length, conn) < 0)
     return -1;
-#endif
 
   circ = circuit_get_by_conn(conn);
   if(!circ) {

Index: connection_edge.c
===================================================================
RCS file: /home/or/cvsroot/src/or/connection_edge.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- connection_edge.c	12 Jun 2003 10:16:33 -0000	1.10
+++ connection_edge.c	13 Jun 2003 10:23:42 -0000	1.11
@@ -156,21 +156,11 @@
         return -1; /* somebody's breaking protocol. kill the whole circuit. */
       }
 
-#ifdef USE_ZLIB
-      if(connection_decompress_to_buf(cell->payload + RELAY_HEADER_SIZE,
-                                      cell->length - RELAY_HEADER_SIZE, 
-                                      conn, Z_SYNC_FLUSH) < 0) {
-        log(LOG_INFO,"connection_edge_process_relay_cell(): write to buf failed. Marking for close.");
-        conn->marked_for_close = 1;
-        return 0;
-      }
-#else
       if(connection_write_to_buf(cell->payload + RELAY_HEADER_SIZE,
                                  cell->length - RELAY_HEADER_SIZE, conn) < 0) {
         conn->marked_for_close = 1;
         return 0;
       }
-#endif
       if(connection_consider_sending_sendme(conn, edge_type) < 0)
         conn->marked_for_close = 1;
       return 0;
@@ -296,10 +286,6 @@
     case AP_CONN_STATE_OPEN:
     case EXIT_CONN_STATE_OPEN:
       connection_stop_writing(conn);
-#ifdef USE_ZLIB
-      if (connection_decompress_to_buf(NULL, 0, conn, Z_SYNC_FLUSH) < 0)
-        return 0;
-#endif
       return connection_consider_sending_sendme(conn, conn->type);
     default:
       log(LOG_DEBUG,"Bug: connection_edge_finished_flushing() called in unexpected state.");

Index: or.h
===================================================================
RCS file: /home/or/cvsroot/src/or/or.h,v
retrieving revision 1.90
retrieving revision 1.91
diff -u -d -r1.90 -r1.91
--- or.h	13 Jun 2003 09:59:33 -0000	1.90
+++ or.h	13 Jun 2003 10:23:42 -0000	1.91
@@ -37,11 +37,6 @@
 #include <assert.h>
 #include <time.h>
 
-#define free_func zlib_free_func
-#include <zlib.h>
-#undef free_func
-
-
 #include "../common/crypto.h"
 #include "../common/log.h"
 #include "../common/ss.h"
@@ -167,9 +162,6 @@
 /* legal characters in a filename */
 #define CONFIG_LEGAL_FILENAME_CHARACTERS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_/"
 
-typedef z_stream z_compression;
-typedef z_stream z_decompression;
-
 struct config_line {
   char *key;
   char *value;
@@ -259,14 +251,6 @@
   int deliver_window;
   int done_sending;
   int done_receiving;
-#ifdef USE_ZLIB
-  char *z_outbuf;
-  int z_outbuflen;
-  int z_outbuf_datalen;
-
-  z_stream *compression;
-  z_stream *decompression;
-#endif
 
 /* Used by ap: */
   char socks_version; 
@@ -441,25 +425,6 @@
    * then memmove buf back (that is, remove them from buf)
    */
 
-z_compression* compression_new();
-z_decompression* decompression_new();
-void compression_free(z_compression *);
-void decompression_free(z_decompression *);
-
-int compress_from_buf(char *string, int string_len, 
-                      char **buf_in, int *buflen_in, int *buf_datalen_in,
-                      z_compression *compression, int flush);
-  /* read and compress as many characters as possible from buf, writing up to
-   * string_len of them onto string, then memmove buf back.  Return number of
-   * characters written.
-   */
-
-int decompress_buf_to_buf(char **buf_in, int *buflen_in, int *buf_datalen_in,
-                          char **buf_out, int *buflen_out, int *buf_datalen_out,
-                          z_decompression *decompression, int flush);
-  /* XXX document this NM
-   */
-
 int find_on_inbuf(char *string, int string_len,
                   char *buf, int buf_datalen);
   /* find first instance of needle 'string' on haystack 'buf'. return how
@@ -570,13 +535,6 @@
 int connection_read_to_buf(connection_t *conn);
 
 int connection_fetch_from_buf(char *string, int len, connection_t *conn);
-
-#ifdef USE_ZLIB
-int connection_compress_from_buf(char *string, int len, connection_t *conn,
-                                 int flush);
-int connection_decompress_to_buf(char *string, int len, connection_t *conn,
-                                 int flush);
-#endif
 
 int connection_outbuf_too_full(connection_t *conn);
 int connection_find_on_inbuf(char *string, int len, connection_t *conn);

Index: test.c
===================================================================
RCS file: /home/or/cvsroot/src/or/test.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- test.c	12 Jun 2003 10:16:33 -0000	1.20
+++ test.c	13 Jun 2003 10:23:42 -0000	1.21
@@ -24,12 +24,7 @@
   char *buf;
   int buflen, buf_datalen;
 
-  char *buf2;
-  int buf2len, buf2_datalen;
-
   int s, i, j, eof;
-  z_compression *comp;
-  z_decompression *decomp;
 
   /****
    * buf_new
@@ -159,74 +154,7 @@
    ****/
   /* XXXX Needs tests. */
 
-  
-  /***
-   * compress_from_buf (simple)
-   ***/
-  buf_datalen = 0;
-  comp = compression_new();
-  for (i = 0; i < 20; ++i) {
-    write_to_buf("Hello world.  ", 14, &buf, &buflen, &buf_datalen);
-  }
-  i = compress_from_buf(str, 256, &buf, &buflen, &buf_datalen, comp, 
-                        Z_SYNC_FLUSH);
-  test_eq(buf_datalen, 0);
-  /*
-  for (j = 0; j <i ; ++j) {
-    printf("%x '%c'\n", ((int) str[j])&0xff, str[j]);
-  }
-  */
-  /* Now try decompressing. */
-  decomp = decompression_new();
-  if (buf_new(&buf2, &buf2len, &buf2_datalen))
-    test_fail();
-  buf_datalen = 0;
-  test_eq(i, write_to_buf(str, i, &buf, &buflen, &buf_datalen));
-  j = decompress_buf_to_buf(&buf, &buflen, &buf_datalen,
-                            &buf2, &buf2len, &buf2_datalen,
-                            decomp, Z_SYNC_FLUSH);
-  test_eq(buf2_datalen, 14*20);
-  for (i = 0; i < 20; ++i) {
-    test_memeq(buf2+(14*i), "Hello world.  ", 14);
-  }
-  
-  /* Now compress more, into less room. */
-  for (i = 0; i < 20; ++i) {
-    write_to_buf("Hello wxrlx.  ", 14, &buf, &buflen, &buf_datalen);
-  }
-  i = compress_from_buf(str, 8, &buf, &buflen, &buf_datalen, comp, 
-                        Z_SYNC_FLUSH);
-  test_eq(buf_datalen, 0);
-  test_eq(i, 8);
-  memset(str+8,0,248);
-  j = compress_from_buf(str+8, 248, &buf, &buflen, &buf_datalen, comp, 
-                        Z_SYNC_FLUSH);
-  /* test_eq(j, 2); XXXX This breaks, see below. */ 
-
-  buf2_datalen=buf_datalen=0;
-  write_to_buf(str, i+j, &buf, &buflen, &buf_datalen);
-  memset(buf2, 0, buf2len);
-  j = decompress_buf_to_buf(&buf, &buflen, &buf_datalen,
-                            &buf2, &buf2len, &buf2_datalen,
-                            decomp, Z_SYNC_FLUSH);
-  test_eq(buf2_datalen, 14*20);
-  for (i = 0; i < 20; ++i) {
-    test_memeq(buf2+(14*i), "Hello wxrlx.  ", 14);
-  }
-
-  /* This situation is a bit messy.  We need to refactor our use of
-   * zlib until the above code works.  Here's the problem: The zlib
-   * documentation claims that we should reinvoke deflate immediately 
-   * when the outbuf buffer is full and we get Z_OK, without adjusting
-   * the input at all.  This implies that we need to tie a buffer to a
-   * compression or decompression object.
-   */
-
-  compression_free(comp);
-  decompression_free(decomp);
-
   buf_free(buf);
-  buf_free(buf2);
 }
 
 void



More information about the tor-commits mailing list