diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2012-07-02 19:41:46 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2012-07-02 19:41:46 +0200 |
commit | a29d5a9c792440d48fd00171ac10264e32241a18 (patch) | |
tree | cb33beac5396dac16ef5e97a7dbe617abb236c23 /tests/eagain-common.h | |
parent | 8972f5e9304e3683a777570857c88e00e5df03e4 (diff) | |
download | gnutls-a29d5a9c792440d48fd00171ac10264e32241a18.tar.gz |
Added test application that tests GNUTLS_E_LARGE_PACKET and modifies the MTU size during handshake.
Diffstat (limited to 'tests/eagain-common.h')
-rw-r--r-- | tests/eagain-common.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/eagain-common.h b/tests/eagain-common.h index 7c218361ee..c9aa0324eb 100644 --- a/tests/eagain-common.h +++ b/tests/eagain-common.h @@ -29,6 +29,46 @@ extern const char* side; #define HANDSHAKE(c, s) \ HANDSHAKE_EXPECT(c,s,0,0) +#define HANDSHAKE_DTLS_EXPECT(c, s, clierr, serverr) \ + sret = cret = GNUTLS_E_LARGE_PACKET; \ + do \ + { \ + if (cret == GNUTLS_E_LARGE_PACKET) \ + { \ + unsigned int mtu = gnutls_dtls_get_mtu(s); \ + gnutls_dtls_set_mtu(s, mtu/2); \ + } \ + if (cret < 0 && gnutls_error_is_fatal(cret) == 0) \ + { \ + side = "client"; \ + cret = gnutls_handshake (c); \ + } \ + if (sret == GNUTLS_E_LARGE_PACKET) \ + { \ + unsigned int mtu = gnutls_dtls_get_mtu(s); \ + gnutls_dtls_set_mtu(s, mtu/2); \ + } \ + if (sret < 0 && gnutls_error_is_fatal(sret) == 0) \ + { \ + side = "server"; \ + sret = gnutls_handshake (s); \ + } \ + } \ + while (((gnutls_error_is_fatal(cret) == 0 && gnutls_error_is_fatal(sret) == 0)) && (cret < 0 || sret < 0)); \ + if (cret != clierr || sret != serverr) \ + { \ + fprintf(stderr, "client: %s\n", gnutls_strerror(cret)); \ + fprintf(stderr, "server: %s\n", gnutls_strerror(sret)); \ + fail("Handshake failed\n"); \ + exit(1); \ + } + +#define HANDSHAKE_DTLS(c, s) \ + HANDSHAKE_DTLS_EXPECT(c,s,0,0) + +#define HANDSHAKE(c, s) \ + HANDSHAKE_EXPECT(c,s,0,0) + #define TRANSFER(c, s, msg, msglen, buf, buflen) \ do \ { \ @@ -119,6 +159,7 @@ static size_t to_client_len = 0; #define RETURN_RND_EAGAIN(session) #endif +#ifndef IGNORE_PUSH static ssize_t client_push (gnutls_transport_ptr_t tr, const void *data, size_t len) { @@ -136,6 +177,8 @@ client_push (gnutls_transport_ptr_t tr, const void *data, size_t len) return len; } +#endif + static ssize_t client_pull (gnutls_transport_ptr_t tr, void *data, size_t len) { @@ -189,6 +232,7 @@ server_pull (gnutls_transport_ptr_t tr, void *data, size_t len) return len; } +#ifndef IGNORE_PUSH static ssize_t server_push (gnutls_transport_ptr_t tr, const void *data, size_t len) { @@ -209,6 +253,8 @@ server_push (gnutls_transport_ptr_t tr, const void *data, size_t len) return len; } +#endif + /* inline is used to avoid a gcc warning if used in mini-eagain */ inline static int server_pull_timeout_func(gnutls_transport_ptr_t ptr, unsigned int ms) { |