diff --git a/src/common.h b/src/common.h index 1a1a22ca..fafc9335 100644 --- a/src/common.h +++ b/src/common.h @@ -273,7 +273,8 @@ struct _xmpp_conn_t { struct { struct xmpp_compression *state; - int allowed, supported, dont_reset; + int allowed, dont_reset, level; + int supported; } compression; char *lang; diff --git a/src/compression.c b/src/compression.c index 9fac6c0a..aee78189 100644 --- a/src/compression.c +++ b/src/compression.c @@ -91,7 +91,7 @@ int compression_init(xmpp_conn_t *conn) comp->compression.stream.next_out = comp->compression.buffer; comp->compression.stream.avail_out = STROPHE_COMPRESSION_BUFFER_SIZE; - int err = deflateInit(&comp->compression.stream, Z_DEFAULT_COMPRESSION); + int err = deflateInit(&comp->compression.stream, conn->compression.level); if (err != Z_OK) { strophe_free_and_null(conn->ctx, comp->compression.buffer); conn->error = EBADFD; diff --git a/src/conn.c b/src/conn.c index 51ad7cb7..cb8a34a4 100644 --- a/src/conn.c +++ b/src/conn.c @@ -170,6 +170,8 @@ xmpp_conn_t *xmpp_conn_new(xmpp_ctx_t *ctx) tls_clear_password_cache(conn); conn->password_retries = 1; + conn->compression.level = -1; + conn->parser = parser_new(conn->ctx, _handle_stream_start, _handle_stream_end, _handle_stream_stanza, conn); @@ -351,6 +353,10 @@ int xmpp_conn_release(xmpp_conn_t *conn) * In case the user enters the password manually it can be useful to * directly retry if the decryption of the key file failed. * + * - \ref XMPP_SETTING_COMPRESSION_LEVEL + * Set the compression level. \n + * For zlib the valid range is `-1` to `9`. + * * @param conn a Strophe connection object * @param setting The setting that shall be configured * @param value The value, the settings should get @@ -368,6 +374,9 @@ void xmpp_conn_set_int(xmpp_conn_t *conn, else conn->password_retries = value; break; + case XMPP_SETTING_COMPRESSION_LEVEL: + conn->compression.level = value; + break; default: strophe_warn(conn->ctx, "xmpp", "Invalid Int setting %d", setting); return; diff --git a/strophe.h b/strophe.h index cd8b2233..21d925a3 100644 --- a/strophe.h +++ b/strophe.h @@ -389,6 +389,7 @@ typedef enum xmpp_conn_setting_t { /* Int values */ XMPP_SETTING_PASSWORD_RETRIES = 0x40, /**< Number of retry attempts to decrypt a private key file. */ + XMPP_SETTING_COMPRESSION_LEVEL, /**< Compression level. */ /* Pointer values */ XMPP_SETTING_PASSWORD_CALLBACK_USERDATA = 0x80, /**< Userdata for password