diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2013-07-28 09:22:00 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2013-07-28 09:23:11 +0200 |
commit | c5ce9f782ba597ddbafd84648d4befaf14745146 (patch) | |
tree | c8b1093bc54131c8101db73c8fcc26c6b8fe7d12 | |
parent | e21b0e082103084d25034f38b4e5aa66c8c2627f (diff) | |
download | gnutls-c5ce9f782ba597ddbafd84648d4befaf14745146.tar.gz |
test sending and receiving the maximum allowed TLS buffer size.
-rw-r--r-- | tests/record-sizes.c | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/tests/record-sizes.c b/tests/record-sizes.c index 08c8d2b0d0..7c84c5f5fb 100644 --- a/tests/record-sizes.c +++ b/tests/record-sizes.c @@ -44,7 +44,9 @@ tls_log_func (int level, const char *str) /* This test attempts to transfer various sizes using AES-128-CBC. */ -#define MAX_BUF 1024 +#define MAX_BUF 16384 +static char b1[MAX_BUF + 1]; +static char buffer[MAX_BUF + 1]; void doit (void) @@ -60,8 +62,6 @@ doit (void) gnutls_session_t client; int cret = GNUTLS_E_AGAIN, i; /* Need to enable anonymous KX specifically. */ - char b1[MAX_BUF + 1]; - char buffer[MAX_BUF + 1]; ssize_t ns; int ret, transferred = 0; @@ -77,7 +77,7 @@ doit (void) gnutls_dh_params_import_pkcs3 (dh_params, &p3, GNUTLS_X509_FMT_PEM); gnutls_anon_set_server_dh_params (s_anoncred, dh_params); gnutls_init (&server, GNUTLS_SERVER); - gnutls_priority_set_direct (server, "NONE:+VERS-TLS-ALL:+AES-128-CBC:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-DH", NULL); + gnutls_priority_set_direct (server, "NONE:+VERS-TLS-ALL:+AES-128-CBC:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-DH", NULL); gnutls_credentials_set (server, GNUTLS_CRD_ANON, s_anoncred); gnutls_dh_set_prime_bits (server, 1024); gnutls_transport_set_push_function (server, server_push); @@ -87,7 +87,7 @@ doit (void) /* Init client */ gnutls_anon_allocate_client_credentials (&c_anoncred); gnutls_init (&client, GNUTLS_CLIENT); - gnutls_priority_set_direct (client, "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-DH", NULL); + gnutls_priority_set_direct (client, "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-DH", NULL); gnutls_credentials_set (client, GNUTLS_CRD_ANON, c_anoncred); gnutls_transport_set_push_function (client, client_push); gnutls_transport_set_pull_function (client, client_pull); @@ -98,7 +98,43 @@ doit (void) if (debug) success ("Handshake established\n"); + + memset(b1, 1, MAX_BUF); + /* try the maximum allowed */ + ret = gnutls_record_send(client, b1, MAX_BUF); + if (ret < 0) + { + fprintf(stderr, "Error sending %d bytes: %s\n", (int)MAX_BUF, gnutls_strerror(ret)); + exit(1); + } + + if (ret != MAX_BUF) + { + fprintf(stderr, "Couldn't send %d bytes\n", (int)MAX_BUF); + exit(1); + } + + ret = gnutls_record_recv(server, buffer, MAX_BUF); + if (ret < 0) + { + fprintf(stderr, "Error receiving %d bytes: %s\n", (int)MAX_BUF, gnutls_strerror(ret)); + exit(1); + } + + if (ret != MAX_BUF) + { + fprintf(stderr, "Couldn't receive %d bytes, received %d\n", (int)MAX_BUF, ret); + exit(1); + } + + if (memcmp(b1, buffer, MAX_BUF) != 0) + { + fprintf(stderr, "Buffers do not match!\n"); + exit(1); + } + + /* Try sending various other sizes */ for (i=1;i<128;i++) { TRANSFER(client, server, b1, i, buffer, MAX_BUF); @@ -106,6 +142,8 @@ doit (void) if (debug) fputs ("\n", stdout); + + gnutls_bye (client, GNUTLS_SHUT_RDWR); gnutls_bye (server, GNUTLS_SHUT_RDWR); |