diff options
author | Nick Mathewson <nickm@torproject.org> | 2017-04-25 14:51:44 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2017-04-25 16:47:46 -0400 |
commit | 0274ea749a6a1456d905878730c226985db183ad (patch) | |
tree | 840e6b19a338e791005ff09073af237ef6e249db | |
parent | d4a2decc56cc5328c8edfde2cc512efd844cc32b (diff) | |
download | tor-0274ea749a6a1456d905878730c226985db183ad.tar.gz tor-0274ea749a6a1456d905878730c226985db183ad.zip |
Function to convert compression methods to/from strings.
-rw-r--r-- | src/common/compress.c | 43 | ||||
-rw-r--r-- | src/common/compress.h | 2 |
2 files changed, 45 insertions, 0 deletions
diff --git a/src/common/compress.c b/src/common/compress.c index 5a3359aa05..72669391bb 100644 --- a/src/common/compress.c +++ b/src/common/compress.c @@ -277,6 +277,49 @@ tor_compress_supports_method(compress_method_t method) } } +/** Table of compression method names. These should have an "x-" prefix, + * if they are not listed in the IANA content coding registry. */ +static const struct { + const char *name; + compress_method_t method; +} compression_method_names[] = { + { "gzip", GZIP_METHOD }, + { "deflate", ZLIB_METHOD }, + { "x-lzma2", LZMA_METHOD }, + { "x-zstd" , ZSTD_METHOD }, + { "identity", NO_METHOD }, + + /* Later entries in this table are not canonical; these are recognized but + * not emitted. */ + { "x-gzip", GZIP_METHOD }, +}; + +/** Return the canonical string representation of the compression method + * <b>method</b>, or NULL if the method isn't recognized. */ +const char * +compression_method_get_name(compress_method_t method) +{ + unsigned i; + for (i = 0; i < ARRAY_LENGTH(compression_method_names); ++i) { + if (method == compression_method_names[i].method) + return compression_method_names[i].name; + } + return NULL; +} + +/** Return the compression method represented by the string <b>name</b>, or + * UNKNOWN_METHOD if the string isn't recognized. */ +compress_method_t +compression_method_get_by_name(const char *name) +{ + unsigned i; + for (i = 0; i < ARRAY_LENGTH(compression_method_names); ++i) { + if (!strcmp(compression_method_names[i].name, name)) + return compression_method_names[i].method; + } + return UNKNOWN_METHOD; +} + /** Return a string representation of the version of the library providing the * compression method given in <b>method</b>. Returns NULL if <b>method</b> is * unknown or unsupported. */ diff --git a/src/common/compress.h b/src/common/compress.h index cb5caeaf07..95b70c02ec 100644 --- a/src/common/compress.h +++ b/src/common/compress.h @@ -48,6 +48,8 @@ compress_method_t detect_compression_method(const char *in, size_t in_len); int tor_compress_is_compression_bomb(size_t size_in, size_t size_out); int tor_compress_supports_method(compress_method_t method); +const char * compression_method_get_name(compress_method_t method); +compress_method_t compression_method_get_by_name(const char *name); const char *tor_compress_version_str(compress_method_t method); |