2017-04-27 16:00:41 +02:00
|
|
|
/* 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 */
|
|
|
|
|
|
|
|
/**
|
2017-06-20 17:23:31 +02:00
|
|
|
* \file compress_none.c
|
2017-04-27 16:00:41 +02:00
|
|
|
* \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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|