Add option for ssl-context re-initialization flow
diff --git a/programs/ssl/ssl_client2.c b/programs/ssl/ssl_client2.c
index 415caa0..fd4e180 100644
--- a/programs/ssl/ssl_client2.c
+++ b/programs/ssl/ssl_client2.c
@@ -282,7 +282,9 @@
 
 #if defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION)
 #define USAGE_SERIALIZATION \
-    "    serialize=%%d        default: 0 (do not serialize/deserialize)\n"
+    "    serialize=%%d        default: 0 (do not serialize/deserialize)\n" \
+    "                         options: 1 (serialize)\n"                    \
+    "                                  2 (serialize with re-initialization)\n"
 #else
 #define USAGE_SERIALIZATION ""
 #endif
@@ -1229,7 +1231,7 @@
         else if( strcmp( p, "serialize") == 0 )
         {
             opt.serialize = atoi( q );
-            if( opt.serialize < 0 || opt.serialize > 1)
+            if( opt.serialize < 0 || opt.serialize > 2)
                 goto usage;
         }
         else
@@ -2363,7 +2365,7 @@
      * 7c. Simulate serialize/deserialize and go back to data exchange
      */
 #if defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION)
-    if( opt.serialize != 0)
+    if( opt.serialize != 0 )
     {
         size_t len;
         unsigned char *buf = NULL;
@@ -2399,6 +2401,28 @@
             goto exit;
         }
 
+        if( opt.serialize == 2 )
+        {
+            mbedtls_ssl_free( &ssl );
+
+            mbedtls_ssl_init( &ssl );
+
+            if( ( ret = mbedtls_ssl_setup( &ssl, &conf ) ) != 0 )
+            {
+                mbedtls_printf( " failed\n  ! mbedtls_ssl_setup returned -0x%x\n\n",
+                                -ret );
+                goto exit;
+            }
+
+            if( opt.nbio == 2 )
+                mbedtls_ssl_set_bio( &ssl, &server_fd, my_send, my_recv, NULL );
+            else
+                mbedtls_ssl_set_bio( &ssl, &server_fd,
+                                    mbedtls_net_send, mbedtls_net_recv,
+                                    opt.nbio == 0 ? mbedtls_net_recv_timeout : NULL );
+
+        }
+
         mbedtls_printf( " Deserializing connection..." );
 
         if( ( ret = mbedtls_ssl_context_load( &ssl, buf, len ) ) != 0 )