#define MAX_BUF 24*1024
#define MAX_MTU 20*1024
-
static void client(int fd)
{
gnutls_session_t session;
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));
gnutls_global_deinit();
}
-
static void terminate(void)
{
int status;
/* see the Getting peer's information example */
/* print_info(session); */
-
+
/* avoid uninitialized warnings */
memset(buffer, 1, sizeof(buffer));
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);