tls: fix disconnects for sessions with pending data
[vpp.git] / src / plugins / tlsmbedtls / tls_mbedtls.c
index aaad99f..1010e37 100644 (file)
@@ -169,7 +169,7 @@ tls_net_send (void *ctx_indexp, const unsigned char *buf, size_t len)
   rv = svm_fifo_enqueue_nowait (tls_session->server_tx_fifo, len, buf);
   if (rv < 0)
     return MBEDTLS_ERR_SSL_WANT_WRITE;
-  tls_add_vpp_q_evt (tls_session->server_tx_fifo, FIFO_EVENT_APP_TX);
+  tls_add_vpp_q_tx_evt (tls_session);
   return rv;
 }
 
@@ -258,6 +258,18 @@ mbedtls_ctx_init_client (tls_ctx_t * ctx)
   return 0;
 }
 
+static int
+mbedtls_start_listen (tls_ctx_t * lctx)
+{
+  return 0;
+}
+
+static int
+mbedtls_stop_listen (tls_ctx_t * lctx)
+{
+  return 0;
+}
+
 static int
 mbedtls_ctx_init_server (tls_ctx_t * ctx)
 {
@@ -436,7 +448,7 @@ mbedtls_ctx_write (tls_ctx_t * ctx, stream_session_t * app_session)
 
   if (PREDICT_FALSE (enq_max == 0))
     {
-      tls_add_vpp_q_evt (app_session->server_tx_fifo, FIFO_EVENT_APP_TX);
+      tls_add_vpp_q_builtin_tx_evt (app_session);
       return 0;
     }
 
@@ -447,16 +459,16 @@ mbedtls_ctx_write (tls_ctx_t * ctx, stream_session_t * app_session)
   wrote = mbedtls_ssl_write (&mc->ssl, mm->tx_bufs[thread_index], deq_now);
   if (wrote <= 0)
     {
-      tls_add_vpp_q_evt (app_session->server_tx_fifo, FIFO_EVENT_APP_TX);
+      tls_add_vpp_q_builtin_tx_evt (app_session);
       return 0;
     }
 
   svm_fifo_dequeue_drop (app_session->server_tx_fifo, wrote);
   vec_reset_length (mm->tx_bufs[thread_index]);
-  tls_add_vpp_q_evt (tls_session->server_tx_fifo, FIFO_EVENT_APP_TX);
+  tls_add_vpp_q_tx_evt (tls_session);
 
   if (deq_now < deq_max)
-    tls_add_vpp_q_evt (app_session->server_tx_fifo, FIFO_EVENT_APP_TX);
+    tls_add_vpp_q_builtin_tx_evt (app_session);
 
   return 0;
 }
@@ -487,7 +499,7 @@ mbedtls_ctx_read (tls_ctx_t * ctx, stream_session_t * tls_session)
 
   if (PREDICT_FALSE (enq_now == 0))
     {
-      tls_add_vpp_q_evt (tls_session->server_rx_fifo, FIFO_EVENT_BUILTIN_RX);
+      tls_add_vpp_q_builtin_rx_evt (tls_session);
       return 0;
     }
 
@@ -495,7 +507,7 @@ mbedtls_ctx_read (tls_ctx_t * ctx, stream_session_t * tls_session)
   read = mbedtls_ssl_read (&mc->ssl, mm->rx_bufs[thread_index], enq_now);
   if (read <= 0)
     {
-      tls_add_vpp_q_evt (tls_session->server_rx_fifo, FIFO_EVENT_BUILTIN_RX);
+      tls_add_vpp_q_builtin_rx_evt (tls_session);
       return 0;
     }
 
@@ -505,7 +517,7 @@ mbedtls_ctx_read (tls_ctx_t * ctx, stream_session_t * tls_session)
   vec_reset_length (mm->rx_bufs[thread_index]);
 
   if (svm_fifo_max_dequeue (tls_session->server_rx_fifo))
-    tls_add_vpp_q_evt (tls_session->server_rx_fifo, FIFO_EVENT_BUILTIN_RX);
+    tls_add_vpp_q_builtin_rx_evt (tls_session);
 
   if (enq > 0)
     tls_notify_app_enqueue (ctx, app_session);
@@ -530,6 +542,8 @@ const static tls_engine_vft_t mbedtls_engine = {
   .ctx_write = mbedtls_ctx_write,
   .ctx_read = mbedtls_ctx_read,
   .ctx_handshake_is_over = mbedtls_handshake_is_over,
+  .ctx_start_listen = mbedtls_start_listen,
+  .ctx_stop_listen = mbedtls_stop_listen,
 };
 
 int