]> git.proxmox.com Git - mirror_edk2.git/blobdiff - CryptoPkg/Library/TlsLib/TlsProcess.c
CryptoPkg: Extend Tls function library
[mirror_edk2.git] / CryptoPkg / Library / TlsLib / TlsProcess.c
index 0f2ad7a9fbc0c996a952f45895de9a5c6fcc51a7..a803d86c4f4e3676d7575165993e58dddb319595 100644 (file)
@@ -461,3 +461,35 @@ TlsWrite (
   //\r
   return SSL_write (TlsConn->Ssl, Buffer, (UINT32)BufferSize);\r
 }\r
+\r
+/**\r
+  Shutdown a TLS connection.\r
+\r
+  Shutdown the TLS connection without releasing the resources, meaning a new\r
+  connection can be started without calling TlsNew() and without setting\r
+  certificates etc.\r
+\r
+  @param[in]       Tls            Pointer to the TLS object to shutdown.\r
+\r
+  @retval EFI_SUCCESS             The TLS is shutdown successfully.\r
+  @retval EFI_INVALID_PARAMETER   Tls is NULL.\r
+  @retval EFI_PROTOCOL_ERROR      Some other error occurred.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+TlsShutdown (\r
+  IN     VOID  *Tls\r
+  )\r
+{\r
+  TLS_CONNECTION  *TlsConn;\r
+\r
+  TlsConn = (TLS_CONNECTION *)Tls;\r
+\r
+  if ((TlsConn == NULL) || ((TlsConn->Ssl) == NULL)) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  SSL_set_quiet_shutdown (TlsConn->Ssl, 1);\r
+  SSL_shutdown (TlsConn->Ssl);\r
+  return SSL_clear (TlsConn->Ssl) == 1 ? EFI_SUCCESS : EFI_PROTOCOL_ERROR;\r
+}\r