Serialize/deserialize for ssl_server2
diff --git a/programs/ssl/ssl_server2.c b/programs/ssl/ssl_server2.c
index 7c431a0..58447e5 100644
--- a/programs/ssl/ssl_server2.c
+++ b/programs/ssl/ssl_server2.c
@@ -3918,7 +3918,53 @@
ret = 0;
/*
- * 7b. Continue doing data exchanges?
+ * 7b. Simulate serialize/deserialize and go back to data exchange
+ */
+ if( opt.serialize != 0)
+ {
+ size_t len;
+ unsigned char *buf = NULL;
+
+ opt.serialize = 0;
+ mbedtls_printf( " Serializing live connection..." );
+
+ if( ( ret = mbedtls_ssl_context_save( &ssl, NULL, 0, &len) ) != MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL )
+ {
+ mbedtls_printf( " failed\n ! mbedtls_ssl_context_save returned -0x%x\n\n", -ret );
+
+ goto exit;
+ }
+
+ if( ( buf = mbedtls_calloc(1, len) ) == NULL )
+ {
+ mbedtls_printf( " failed\n ! Couldn't allocate buffer for serialized context" );
+
+ goto exit;
+ }
+
+ if( ( ret = mbedtls_ssl_context_save( &ssl, buf, len, &len ) ) != 0 )
+ {
+ mbedtls_printf( "failed\n ! mbedtls_ssl_context_save returned -0x%x\n\n", -ret );
+
+ goto exit;
+ }
+
+ mbedtls_ssl_free( &ssl );
+
+ mbedtls_printf( " Deserializing connection..." );
+
+ mbedtls_ssl_init( &ssl );
+
+ if( ( ret = mbedtls_ssl_context_load( &ssl, buf, len ) ) != 0 )
+ {
+ mbedtls_printf( "failed\n ! mbedtls_ssl_context_load returned -0x%x\n\n", -ret );
+
+ goto exit;
+ }
+ }
+
+ /*
+ * 7c. Continue doing data exchanges?
*/
if( --exchanges_left > 0 )
goto data_exchange;