compress: faster check, better return codes
In the transport functions we avoid a strcmp() now and just check a boolean instead. The compress/decompress function's return code is now acknowledged and used as actual return code in case of failures.
This commit is contained in:
parent
0d58af6aec
commit
59636cc11e
@ -77,6 +77,7 @@ comp_method_none_comp(LIBSSH2_SESSION * session,
|
|||||||
|
|
||||||
static const LIBSSH2_COMP_METHOD comp_method_none = {
|
static const LIBSSH2_COMP_METHOD comp_method_none = {
|
||||||
"none",
|
"none",
|
||||||
|
0, /* not really compressing */
|
||||||
NULL,
|
NULL,
|
||||||
comp_method_none_comp,
|
comp_method_none_comp,
|
||||||
NULL
|
NULL
|
||||||
@ -318,6 +319,7 @@ comp_method_zlib_dtor(LIBSSH2_SESSION * session, int compress,
|
|||||||
|
|
||||||
static const LIBSSH2_COMP_METHOD comp_method_zlib = {
|
static const LIBSSH2_COMP_METHOD comp_method_zlib = {
|
||||||
"zlib",
|
"zlib",
|
||||||
|
1, /* yes, this compresses */
|
||||||
comp_method_zlib_init,
|
comp_method_zlib_init,
|
||||||
comp_method_zlib_comp,
|
comp_method_zlib_comp,
|
||||||
comp_method_zlib_dtor,
|
comp_method_zlib_dtor,
|
||||||
|
@ -998,7 +998,7 @@ struct _LIBSSH2_CRYPT_METHOD
|
|||||||
struct _LIBSSH2_COMP_METHOD
|
struct _LIBSSH2_COMP_METHOD
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
|
int compress; /* 1 if it does compress, 0 if it doesn't */
|
||||||
int (*init) (LIBSSH2_SESSION * session, int compress, void **abstract);
|
int (*init) (LIBSSH2_SESSION * session, int compress, void **abstract);
|
||||||
int (*comp) (LIBSSH2_SESSION * session, int compress, unsigned char **dest,
|
int (*comp) (LIBSSH2_SESSION * session, int compress, unsigned char **dest,
|
||||||
size_t *dest_len, size_t payload_limit,
|
size_t *dest_len, size_t payload_limit,
|
||||||
|
@ -195,21 +195,21 @@ fullpacket(LIBSSH2_SESSION * session, int encrypted /* 1 or 0 */ )
|
|||||||
session->fullpacket_payload_len -= p->padding_length;
|
session->fullpacket_payload_len -= p->padding_length;
|
||||||
|
|
||||||
/* Check for and deal with decompression */
|
/* Check for and deal with decompression */
|
||||||
if (session->remote.comp &&
|
if (session->remote.comp && session->remote.comp->compress) {
|
||||||
strcmp(session->remote.comp->name, "none")) {
|
|
||||||
unsigned char *data;
|
unsigned char *data;
|
||||||
size_t data_len;
|
size_t data_len;
|
||||||
int free_payload = 1;
|
int free_payload = 1;
|
||||||
|
|
||||||
if (session->remote.comp->comp(session, 0,
|
rc = session->remote.comp->comp(session, 0,
|
||||||
&data, &data_len,
|
&data, &data_len,
|
||||||
LIBSSH2_PACKET_MAXDECOMP,
|
LIBSSH2_PACKET_MAXDECOMP,
|
||||||
&free_payload,
|
&free_payload,
|
||||||
p->payload,
|
p->payload,
|
||||||
session->fullpacket_payload_len,
|
session->fullpacket_payload_len,
|
||||||
&session->remote.comp_abstract)) {
|
&session->remote.comp_abstract);
|
||||||
|
if(rc) {
|
||||||
LIBSSH2_FREE(session, p->payload);
|
LIBSSH2_FREE(session, p->payload);
|
||||||
return LIBSSH2_ERROR_COMPRESS;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (free_payload) {
|
if (free_payload) {
|
||||||
@ -718,13 +718,13 @@ _libssh2_transport_write(LIBSSH2_SESSION * session, unsigned char *data,
|
|||||||
encrypted = (session->state & LIBSSH2_STATE_NEWKEYS) ? 1 : 0;
|
encrypted = (session->state & LIBSSH2_STATE_NEWKEYS) ? 1 : 0;
|
||||||
|
|
||||||
/* check if we should compress */
|
/* check if we should compress */
|
||||||
if (encrypted && strcmp(session->local.comp->name, "none")) {
|
if (encrypted && session->local.comp->compress) {
|
||||||
if (session->local.comp->comp(session, 1, &data, &data_len,
|
rc = session->local.comp->comp(session, 1, &data, &data_len,
|
||||||
LIBSSH2_PACKET_MAXCOMP,
|
LIBSSH2_PACKET_MAXCOMP,
|
||||||
&free_data, data, data_len,
|
&free_data, data, data_len,
|
||||||
&session->local.comp_abstract)) {
|
&session->local.comp_abstract);
|
||||||
return LIBSSH2_ERROR_COMPRESS; /* compression failure */
|
if(rc)
|
||||||
}
|
return rc; /* compression failure */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* RFC4253 says: Note that the length of the concatenation of
|
/* RFC4253 says: Note that the length of the concatenation of
|
||||||
|
Loading…
x
Reference in New Issue
Block a user