]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Added test for gnutls_record_cork() and uncork usage under DTLS.
authorNikos Mavrogiannopoulos <nmav@redhat.com>
Fri, 28 Mar 2014 09:53:26 +0000 (10:53 +0100)
committerNikos Mavrogiannopoulos <nmav@redhat.com>
Fri, 28 Mar 2014 09:53:26 +0000 (10:53 +0100)
tests/mini-dtls-large.c

index 3d4f18604d0256da9720bf2da7f5046b3993807d..9ce749e0669d3464fa7c66f9ca75be79854c6999 100644 (file)
@@ -70,7 +70,6 @@ static pid_t child;
 #define MAX_BUF 24*1024
 #define MAX_MTU 20*1024
 
-
 static void client(int fd)
 {
        gnutls_session_t session;
@@ -129,8 +128,7 @@ static void client(int fd)
        do {
                ret = gnutls_record_recv(session, buffer, sizeof(buffer));
        }
-       while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED
-              || ret > 0);
+       while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED || ret > 0);
 
        if (ret < 0) {
                fail("recv: %s\n", gnutls_strerror(ret));
@@ -146,7 +144,6 @@ static void client(int fd)
        gnutls_global_deinit();
 }
 
-
 static void terminate(void)
 {
        int status;
@@ -207,7 +204,7 @@ static void server(int fd)
 
        /* see the Getting peer's information example */
        /* print_info(session); */
-       
+
        /* avoid uninitialized warnings */
        memset(buffer, 1, sizeof(buffer));
 
@@ -260,6 +257,47 @@ static void server(int fd)
                fail("send[%d]: %s\n", __LINE__, gnutls_strerror(ret));
        }
 
+       /* test cork and uncork */
+       gnutls_record_cork(session);
+
+       ret =
+           gnutls_record_send(session, buffer,
+                              gnutls_dtls_get_data_mtu(session));
+       if (ret < 0) {
+               terminate();
+               fail("send[%d]: %s\n", __LINE__, gnutls_strerror(ret));
+       }
+
+       ret = gnutls_record_uncork(session, 0);
+       if (ret < 0) {
+               terminate();
+               fail("send[%d]: %s\n", __LINE__, gnutls_strerror(ret));
+       }
+
+       gnutls_record_cork(session);
+
+       ret =
+           gnutls_record_send(session, buffer,
+                              gnutls_dtls_get_data_mtu(session) - 16);
+       if (ret < 0) {
+               terminate();
+               fail("send[%d]: %s\n", __LINE__, gnutls_strerror(ret));
+       }
+
+       ret =
+           gnutls_record_send(session, buffer,
+                              gnutls_dtls_get_data_mtu(session));
+       if (ret != GNUTLS_E_LARGE_PACKET) {
+               terminate();
+               fail("send[%d]: %s\n", __LINE__, gnutls_strerror(ret));
+       }
+
+       ret = gnutls_record_uncork(session, GNUTLS_RECORD_WAIT);
+       if (ret < 0) {
+               terminate();
+               fail("send[%d]: %s\n", __LINE__, gnutls_strerror(ret));
+       }
+
        /* do not wait for the peer to close the connection.
         */
        gnutls_bye(session, GNUTLS_SHUT_WR);