| /** @file |
| The header files of miscellaneous routines specific to Https for HttpDxe driver. |
| |
| Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> |
| This program and the accompanying materials |
| are licensed and made available under the terms and conditions of the BSD License |
| which accompanies this distribution. The full text of the license may be found at |
| http://opensource.org/licenses/bsd-license.php |
| |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. |
| |
| **/ |
| |
| #ifndef __EFI_HTTPS_SUPPORT_H__ |
| #define __EFI_HTTPS_SUPPORT_H__ |
| |
| #define HTTPS_DEFAULT_PORT 443 |
| |
| #define HTTPS_FLAG "https://" |
| |
| /** |
| Check whether the Url is from Https. |
| |
| @param[in] Url The pointer to a HTTP or HTTPS URL string. |
| |
| @retval TRUE The Url is from HTTPS. |
| @retval FALSE The Url is from HTTP. |
| |
| **/ |
| BOOLEAN |
| IsHttpsUrl ( |
| IN CHAR8 *Url |
| ); |
| |
| /** |
| Creates a Tls child handle, open EFI_TLS_PROTOCOL and EFI_TLS_CONFIGURATION_PROTOCOL. |
| |
| @param[in] ImageHandle The firmware allocated handle for the UEFI image. |
| @param[out] TlsProto Pointer to the EFI_TLS_PROTOCOL instance. |
| @param[out] TlsConfiguration Pointer to the EFI_TLS_CONFIGURATION_PROTOCOL instance. |
| |
| @return The child handle with opened EFI_TLS_PROTOCOL and EFI_TLS_CONFIGURATION_PROTOCOL. |
| |
| **/ |
| EFI_HANDLE |
| EFIAPI |
| TlsCreateChild ( |
| IN EFI_HANDLE ImageHandle, |
| OUT EFI_TLS_PROTOCOL **TlsProto, |
| OUT EFI_TLS_CONFIGURATION_PROTOCOL **TlsConfiguration |
| ); |
| |
| /** |
| Create event for the TLS receive and transmit tokens which are used to receive and |
| transmit TLS related messages. |
| |
| @param[in, out] HttpInstance Pointer to HTTP_PROTOCOL structure. |
| |
| @retval EFI_SUCCESS The events are created successfully. |
| @retval others Other error as indicated. |
| |
| **/ |
| EFI_STATUS |
| EFIAPI |
| TlsCreateTxRxEvent ( |
| IN OUT HTTP_PROTOCOL *HttpInstance |
| ); |
| |
| /** |
| Close events in the TlsTxToken and TlsRxToken. |
| |
| @param[in] HttpInstance Pointer to HTTP_PROTOCOL structure. |
| |
| **/ |
| VOID |
| EFIAPI |
| TlsCloseTxRxEvent ( |
| IN HTTP_PROTOCOL *HttpInstance |
| ); |
| |
| /** |
| Read the TlsCaCertificate variable and configure it. |
| |
| @param[in, out] HttpInstance The HTTP instance private data. |
| |
| @retval EFI_SUCCESS TlsCaCertificate is configured. |
| @retval EFI_OUT_OF_RESOURCES Can't allocate memory resources. |
| @retval EFI_NOT_FOUND Fail to get "TlsCaCertificate" variable. |
| @retval Others Other error as indicated. |
| |
| **/ |
| EFI_STATUS |
| TlsConfigCertificate ( |
| IN OUT HTTP_PROTOCOL *HttpInstance |
| ); |
| |
| /** |
| Configure TLS session data. |
| |
| @param[in, out] HttpInstance The HTTP instance private data. |
| |
| @retval EFI_SUCCESS TLS session data is configured. |
| @retval Others Other error as indicated. |
| |
| **/ |
| EFI_STATUS |
| EFIAPI |
| TlsConfigureSession ( |
| IN OUT HTTP_PROTOCOL *HttpInstance |
| ); |
| |
| /** |
| Transmit the Packet by processing the associated HTTPS token. |
| |
| @param[in, out] HttpInstance Pointer to HTTP_PROTOCOL structure. |
| @param[in] Packet The packet to transmit. |
| |
| @retval EFI_SUCCESS The packet is transmitted. |
| @retval EFI_INVALID_PARAMETER HttpInstance is NULL or Packet is NULL. |
| @retval EFI_OUT_OF_RESOURCES Can't allocate memory resources. |
| @retval EFI_DEVICE_ERROR An unexpected system or network error occurred. |
| @retval Others Other errors as indicated. |
| |
| **/ |
| EFI_STATUS |
| EFIAPI |
| TlsCommonTransmit ( |
| IN OUT HTTP_PROTOCOL *HttpInstance, |
| IN NET_BUF *Packet |
| ); |
| |
| /** |
| Receive the Packet by processing the associated HTTPS token. |
| |
| @param[in, out] HttpInstance Pointer to HTTP_PROTOCOL structure. |
| @param[in] Packet The packet to transmit. |
| @param[in] Timeout The time to wait for connection done. |
| |
| @retval EFI_SUCCESS The Packet is received. |
| @retval EFI_INVALID_PARAMETER HttpInstance is NULL or Packet is NULL. |
| @retval EFI_OUT_OF_RESOURCES Can't allocate memory resources. |
| @retval EFI_TIMEOUT The operation is time out. |
| @retval Others Other error as indicated. |
| |
| **/ |
| EFI_STATUS |
| EFIAPI |
| TlsCommonReceive ( |
| IN OUT HTTP_PROTOCOL *HttpInstance, |
| IN NET_BUF *Packet, |
| IN EFI_EVENT Timeout |
| ); |
| |
| /** |
| Receive one TLS PDU. An TLS PDU contains an TLS record header and it's |
| corresponding record data. These two parts will be put into two blocks of buffers in the |
| net buffer. |
| |
| @param[in, out] HttpInstance Pointer to HTTP_PROTOCOL structure. |
| @param[out] Pdu The received TLS PDU. |
| @param[in] Timeout The time to wait for connection done. |
| |
| @retval EFI_SUCCESS An TLS PDU is received. |
| @retval EFI_OUT_OF_RESOURCES Can't allocate memory resources. |
| @retval EFI_PROTOCOL_ERROR An unexpected TLS packet was received. |
| @retval Others Other errors as indicated. |
| |
| **/ |
| EFI_STATUS |
| EFIAPI |
| TlsReceiveOnePdu ( |
| IN OUT HTTP_PROTOCOL *HttpInstance, |
| OUT NET_BUF **Pdu, |
| IN EFI_EVENT Timeout |
| ); |
| |
| /** |
| Connect one TLS session by finishing the TLS handshake process. |
| |
| @param[in] HttpInstance The HTTP instance private data. |
| @param[in] Timeout The time to wait for connection done. |
| |
| @retval EFI_SUCCESS The TLS session is established. |
| @retval EFI_OUT_OF_RESOURCES Can't allocate memory resources. |
| @retval EFI_ABORTED TLS session state is incorrect. |
| @retval Others Other error as indicated. |
| |
| **/ |
| EFI_STATUS |
| EFIAPI |
| TlsConnectSession ( |
| IN HTTP_PROTOCOL *HttpInstance, |
| IN EFI_EVENT Timeout |
| ); |
| |
| /** |
| Close the TLS session and send out the close notification message. |
| |
| @param[in] HttpInstance The HTTP instance private data. |
| |
| @retval EFI_SUCCESS The TLS session is closed. |
| @retval EFI_INVALID_PARAMETER HttpInstance is NULL or Packet is NULL. |
| @retval EFI_OUT_OF_RESOURCES Can't allocate memory resources. |
| @retval Others Other error as indicated. |
| |
| **/ |
| EFI_STATUS |
| EFIAPI |
| TlsCloseSession ( |
| IN HTTP_PROTOCOL *HttpInstance |
| ); |
| |
| /** |
| Process one message according to the CryptMode. |
| |
| @param[in] HttpInstance Pointer to HTTP_PROTOCOL structure. |
| @param[in] Message Pointer to the message buffer needed to processed. |
| @param[in] MessageSize Pointer to the message buffer size. |
| @param[in] ProcessMode Process mode. |
| @param[in, out] Fragment Only one Fragment returned after the Message is |
| processed successfully. |
| |
| @retval EFI_SUCCESS Message is processed successfully. |
| @retval EFI_OUT_OF_RESOURCES Can't allocate memory resources. |
| @retval Others Other errors as indicated. |
| |
| **/ |
| EFI_STATUS |
| EFIAPI |
| TlsProcessMessage ( |
| IN HTTP_PROTOCOL *HttpInstance, |
| IN UINT8 *Message, |
| IN UINTN MessageSize, |
| IN EFI_TLS_CRYPT_MODE ProcessMode, |
| IN OUT NET_FRAGMENT *Fragment |
| ); |
| |
| /** |
| Receive one fragment decrypted from one TLS record. |
| |
| @param[in] HttpInstance Pointer to HTTP_PROTOCOL structure. |
| @param[in, out] Fragment The received Fragment. |
| @param[in] Timeout The time to wait for connection done. |
| |
| @retval EFI_SUCCESS One fragment is received. |
| @retval EFI_OUT_OF_RESOURCES Can't allocate memory resources. |
| @retval EFI_ABORTED Something wrong decryption the message. |
| @retval Others Other errors as indicated. |
| |
| **/ |
| EFI_STATUS |
| EFIAPI |
| HttpsReceive ( |
| IN HTTP_PROTOCOL *HttpInstance, |
| IN OUT NET_FRAGMENT *Fragment, |
| IN EFI_EVENT Timeout |
| ); |
| |
| #endif |