|
@@ -0,0 +1,53 @@
|
|
|
+/* Copyright (c) 2004, Roger Dingledine.
|
|
|
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
|
|
+ * Copyright (c) 2007-2017, The Tor Project, Inc. */
|
|
|
+/* See LICENSE for licensing information */
|
|
|
+
|
|
|
+/**
|
|
|
+ * \file compress_lzma.c
|
|
|
+ * \brief Compression backend for identity compression.
|
|
|
+ *
|
|
|
+ * We actually define this backend so that we can treat the identity transform
|
|
|
+ * as another case of compression.
|
|
|
+ *
|
|
|
+ * This module should never be invoked directly. Use the compress module
|
|
|
+ * instead.
|
|
|
+ **/
|
|
|
+
|
|
|
+#include "orconfig.h"
|
|
|
+
|
|
|
+#include "util.h"
|
|
|
+#include "torlog.h"
|
|
|
+#include "compress.h"
|
|
|
+#include "compress_none.h"
|
|
|
+
|
|
|
+/** Transfer some bytes using the identity transformation. Read up to
|
|
|
+ * *<b>in_len</b> bytes from *<b>in</b>, and write up to *<b>out_len</b> bytes
|
|
|
+ * to *<b>out</b>, adjusting the values as we go. If <b>finish</b> is true,
|
|
|
+ * we've reached the end of the input.
|
|
|
+ *
|
|
|
+ * Return TOR_COMPRESS_DONE if we've finished the entire
|
|
|
+ * compression/decompression.
|
|
|
+ * Return TOR_COMPRESS_OK if we're processed everything from the input.
|
|
|
+ * Return TOR_COMPRESS_BUFFER_FULL if we're out of space on <b>out</b>.
|
|
|
+ * Return TOR_COMPRESS_ERROR if the stream is corrupt.
|
|
|
+ */
|
|
|
+tor_compress_output_t
|
|
|
+tor_cnone_compress_process(char **out, size_t *out_len,
|
|
|
+ const char **in, size_t *in_len,
|
|
|
+ int finish)
|
|
|
+{
|
|
|
+ size_t n_to_copy = MIN(*in_len, *out_len);
|
|
|
+
|
|
|
+ memcpy(*out, *in, n_to_copy);
|
|
|
+ *out += n_to_copy;
|
|
|
+ *in += n_to_copy;
|
|
|
+ *out_len -= n_to_copy;
|
|
|
+ *in_len -= n_to_copy;
|
|
|
+ if (*in_len == 0) {
|
|
|
+ return finish ? TOR_COMPRESS_DONE : TOR_COMPRESS_OK;
|
|
|
+ } else {
|
|
|
+ return TOR_COMPRESS_BUFFER_FULL;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|