mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 14:21:25 +02:00
MEDIUM: compression: split deflate_flush() into flush and finish
This function used to take a zlib-specific flag as argument to indicate whether a buffer flush or end of contents was met, let's split it in two so that we don't depend on zlib anymore.
This commit is contained in:
parent
c91840aa33
commit
9787efa97c
@ -62,7 +62,8 @@ struct comp_algo {
|
|||||||
|
|
||||||
int (*init)(struct comp_ctx **comp_ctx, int level);
|
int (*init)(struct comp_ctx **comp_ctx, int level);
|
||||||
int (*add_data)(struct comp_ctx *comp_ctx, const char *in_data, int in_len, struct buffer *out);
|
int (*add_data)(struct comp_ctx *comp_ctx, const char *in_data, int in_len, struct buffer *out);
|
||||||
int (*flush)(struct comp_ctx *comp_ctx, struct buffer *out, int flag);
|
int (*flush)(struct comp_ctx *comp_ctx, struct buffer *out);
|
||||||
|
int (*finish)(struct comp_ctx *comp_ctx, struct buffer *out);
|
||||||
int (*reset)(struct comp_ctx *comp_ctx);
|
int (*reset)(struct comp_ctx *comp_ctx);
|
||||||
int (*end)(struct comp_ctx **comp_ctx);
|
int (*end)(struct comp_ctx **comp_ctx);
|
||||||
struct comp_algo *next;
|
struct comp_algo *next;
|
||||||
|
@ -57,7 +57,8 @@ static struct pool_head *pool_comp_ctx = NULL;
|
|||||||
|
|
||||||
static int identity_init(struct comp_ctx **comp_ctx, int level);
|
static int identity_init(struct comp_ctx **comp_ctx, int level);
|
||||||
static int identity_add_data(struct comp_ctx *comp_ctx, const char *in_data, int in_len, struct buffer *out);
|
static int identity_add_data(struct comp_ctx *comp_ctx, const char *in_data, int in_len, struct buffer *out);
|
||||||
static int identity_flush(struct comp_ctx *comp_ctx, struct buffer *out, int flag);
|
static int identity_flush(struct comp_ctx *comp_ctx, struct buffer *out);
|
||||||
|
static int identity_finish(struct comp_ctx *comp_ctx, struct buffer *out);
|
||||||
static int identity_reset(struct comp_ctx *comp_ctx);
|
static int identity_reset(struct comp_ctx *comp_ctx);
|
||||||
static int identity_end(struct comp_ctx **comp_ctx);
|
static int identity_end(struct comp_ctx **comp_ctx);
|
||||||
|
|
||||||
@ -66,7 +67,8 @@ static int gzip_init(struct comp_ctx **comp_ctx, int level);
|
|||||||
static int raw_def_init(struct comp_ctx **comp_ctx, int level);
|
static int raw_def_init(struct comp_ctx **comp_ctx, int level);
|
||||||
static int deflate_init(struct comp_ctx **comp_ctx, int level);
|
static int deflate_init(struct comp_ctx **comp_ctx, int level);
|
||||||
static int deflate_add_data(struct comp_ctx *comp_ctx, const char *in_data, int in_len, struct buffer *out);
|
static int deflate_add_data(struct comp_ctx *comp_ctx, const char *in_data, int in_len, struct buffer *out);
|
||||||
static int deflate_flush(struct comp_ctx *comp_ctx, struct buffer *out, int flag);
|
static int deflate_flush(struct comp_ctx *comp_ctx, struct buffer *out);
|
||||||
|
static int deflate_finish(struct comp_ctx *comp_ctx, struct buffer *out);
|
||||||
static int deflate_reset(struct comp_ctx *comp_ctx);
|
static int deflate_reset(struct comp_ctx *comp_ctx);
|
||||||
static int deflate_end(struct comp_ctx **comp_ctx);
|
static int deflate_end(struct comp_ctx **comp_ctx);
|
||||||
#endif /* USE_ZLIB */
|
#endif /* USE_ZLIB */
|
||||||
@ -74,11 +76,11 @@ static int deflate_end(struct comp_ctx **comp_ctx);
|
|||||||
|
|
||||||
const struct comp_algo comp_algos[] =
|
const struct comp_algo comp_algos[] =
|
||||||
{
|
{
|
||||||
{ "identity", 8, "identity", 8, identity_init, identity_add_data, identity_flush, identity_reset, identity_end },
|
{ "identity", 8, "identity", 8, identity_init, identity_add_data, identity_flush, identity_finish, identity_reset, identity_end },
|
||||||
#ifdef USE_ZLIB
|
#ifdef USE_ZLIB
|
||||||
{ "deflate", 7, "deflate", 7, deflate_init, deflate_add_data, deflate_flush, deflate_reset, deflate_end },
|
{ "deflate", 7, "deflate", 7, deflate_init, deflate_add_data, deflate_flush, deflate_finish, deflate_reset, deflate_end },
|
||||||
{ "raw-deflate", 11, "deflate", 7, raw_def_init, deflate_add_data, deflate_flush, deflate_reset, deflate_end },
|
{ "raw-deflate", 11, "deflate", 7, raw_def_init, deflate_add_data, deflate_flush, deflate_finish, deflate_reset, deflate_end },
|
||||||
{ "gzip", 4, "gzip", 4, gzip_init, deflate_add_data, deflate_flush, deflate_reset, deflate_end },
|
{ "gzip", 4, "gzip", 4, gzip_init, deflate_add_data, deflate_flush, deflate_finish, deflate_reset, deflate_end },
|
||||||
#endif /* USE_ZLIB */
|
#endif /* USE_ZLIB */
|
||||||
{ NULL, 0, NULL, 0, NULL , NULL, NULL, NULL, NULL }
|
{ NULL, 0, NULL, 0, NULL , NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
@ -225,9 +227,9 @@ int http_compression_buffer_end(struct session *s, struct buffer **in, struct bu
|
|||||||
/* flush data here */
|
/* flush data here */
|
||||||
|
|
||||||
if (end)
|
if (end)
|
||||||
ret = s->comp_algo->flush(s->comp_ctx, ob, Z_FINISH); /* end of data */
|
ret = s->comp_algo->finish(s->comp_ctx, ob); /* end of data */
|
||||||
else
|
else
|
||||||
ret = s->comp_algo->flush(s->comp_ctx, ob, Z_SYNC_FLUSH); /* end of buffer */
|
ret = s->comp_algo->flush(s->comp_ctx, ob); /* end of buffer */
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return -1; /* flush failed */
|
return -1; /* flush failed */
|
||||||
@ -415,7 +417,12 @@ static int identity_add_data(struct comp_ctx *comp_ctx, const char *in_data, int
|
|||||||
return in_len;
|
return in_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int identity_flush(struct comp_ctx *comp_ctx, struct buffer *out, int flag)
|
static int identity_flush(struct comp_ctx *comp_ctx, struct buffer *out)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int identity_finish(struct comp_ctx *comp_ctx, struct buffer *out)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -614,7 +621,7 @@ static int deflate_add_data(struct comp_ctx *comp_ctx, const char *in_data, int
|
|||||||
return in_len - strm->avail_in;
|
return in_len - strm->avail_in;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int deflate_flush(struct comp_ctx *comp_ctx, struct buffer *out, int flag)
|
static int deflate_flush_or_finish(struct comp_ctx *comp_ctx, struct buffer *out, int flag)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
int out_len = 0;
|
int out_len = 0;
|
||||||
@ -648,6 +655,16 @@ static int deflate_flush(struct comp_ctx *comp_ctx, struct buffer *out, int flag
|
|||||||
return out_len;
|
return out_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int deflate_flush(struct comp_ctx *comp_ctx, struct buffer *out)
|
||||||
|
{
|
||||||
|
return deflate_flush_or_finish(comp_ctx, out, Z_SYNC_FLUSH);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int deflate_finish(struct comp_ctx *comp_ctx, struct buffer *out)
|
||||||
|
{
|
||||||
|
return deflate_flush_or_finish(comp_ctx, out, Z_FINISH);
|
||||||
|
}
|
||||||
|
|
||||||
static int deflate_reset(struct comp_ctx *comp_ctx)
|
static int deflate_reset(struct comp_ctx *comp_ctx)
|
||||||
{
|
{
|
||||||
z_stream *strm = &comp_ctx->strm;
|
z_stream *strm = &comp_ctx->strm;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user