mirror of https://github.com/acidanthera/audk.git
NetworkPkg/HttpDxe: Refactor TlsCreateChild
- Use HTTP instance as the parameter for TlsCreateChild function. - Install TLS protocol on the HTTP instance thats create TLS child. Signed-off-by: Abner Chang <abner.chang@amd.com> Cc: Saloni Kasbekar <saloni.kasbekar@intel.com> Cc: Zachary Clark-williams <zachary.clark-williams@intel.com> Cc: Michael Brown <mcb30@ipxe.org> Cc: Nickle Wang <nicklew@nvidia.com> Cc: Igor Kulchytskyy <igork@ami.com> Reviewed-by: Michael Brown <mcb30@ipxe.org> Reviewed-by: Saloni Kasbekar <saloni.kasbekar@intel.com>
This commit is contained in:
parent
edba0779ba
commit
0abd598e3f
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<BR>
|
||||||
(C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
|
(C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
|
||||||
|
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
|
||||||
|
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
|
@ -248,7 +249,6 @@ EfiHttpRequest (
|
||||||
HTTP_TOKEN_WRAP *Wrap;
|
HTTP_TOKEN_WRAP *Wrap;
|
||||||
CHAR8 *FileUrl;
|
CHAR8 *FileUrl;
|
||||||
UINTN RequestMsgSize;
|
UINTN RequestMsgSize;
|
||||||
EFI_HANDLE ImageHandle;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Initializations
|
// Initializations
|
||||||
|
@ -371,23 +371,10 @@ EfiHttpRequest (
|
||||||
//
|
//
|
||||||
// Check whether we need to create Tls child and open the TLS protocol.
|
// Check whether we need to create Tls child and open the TLS protocol.
|
||||||
//
|
//
|
||||||
if (HttpInstance->UseHttps && (HttpInstance->TlsChildHandle == NULL)) {
|
if (HttpInstance->UseHttps && !HttpInstance->TlsAlreadyCreated) {
|
||||||
//
|
// Create TLS child for this HTTP instance.
|
||||||
// Use TlsSb to create Tls child and open the TLS protocol.
|
Status = TlsCreateChild (HttpInstance);
|
||||||
//
|
if (EFI_ERROR (Status)) {
|
||||||
if (HttpInstance->LocalAddressIsIPv6) {
|
|
||||||
ImageHandle = HttpInstance->Service->Ip6DriverBindingHandle;
|
|
||||||
} else {
|
|
||||||
ImageHandle = HttpInstance->Service->Ip4DriverBindingHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
HttpInstance->TlsChildHandle = TlsCreateChild (
|
|
||||||
ImageHandle,
|
|
||||||
&(HttpInstance->TlsSb),
|
|
||||||
&(HttpInstance->Tls),
|
|
||||||
&(HttpInstance->TlsConfiguration)
|
|
||||||
);
|
|
||||||
if (HttpInstance->TlsChildHandle == NULL) {
|
|
||||||
return EFI_DEVICE_ERROR;
|
return EFI_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<BR>
|
||||||
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
||||||
|
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
@ -852,12 +853,12 @@ HttpCleanProtocol (
|
||||||
NetMapClean (&HttpInstance->TxTokens);
|
NetMapClean (&HttpInstance->TxTokens);
|
||||||
NetMapClean (&HttpInstance->RxTokens);
|
NetMapClean (&HttpInstance->RxTokens);
|
||||||
|
|
||||||
if ((HttpInstance->TlsSb != NULL) && (HttpInstance->TlsChildHandle != NULL)) {
|
if ((HttpInstance->TlsSb != NULL) && HttpInstance->TlsAlreadyCreated) {
|
||||||
//
|
//
|
||||||
// Destroy the TLS instance.
|
// Destroy the TLS instance.
|
||||||
//
|
//
|
||||||
HttpInstance->TlsSb->DestroyChild (HttpInstance->TlsSb, HttpInstance->TlsChildHandle);
|
HttpInstance->TlsSb->DestroyChild (HttpInstance->TlsSb, HttpInstance->Handle);
|
||||||
HttpInstance->TlsChildHandle = NULL;
|
HttpInstance->TlsAlreadyCreated = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HttpInstance->Tcp4ChildHandle != NULL) {
|
if (HttpInstance->Tcp4ChildHandle != NULL) {
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<BR>
|
||||||
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
||||||
|
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
@ -171,7 +172,7 @@ typedef struct _HTTP_PROTOCOL {
|
||||||
BOOLEAN UseHttps;
|
BOOLEAN UseHttps;
|
||||||
|
|
||||||
EFI_SERVICE_BINDING_PROTOCOL *TlsSb;
|
EFI_SERVICE_BINDING_PROTOCOL *TlsSb;
|
||||||
EFI_HANDLE TlsChildHandle; /// Tls ChildHandle
|
BOOLEAN TlsAlreadyCreated;
|
||||||
TLS_CONFIG_DATA TlsConfigData;
|
TLS_CONFIG_DATA TlsConfigData;
|
||||||
EFI_TLS_PROTOCOL *Tls;
|
EFI_TLS_PROTOCOL *Tls;
|
||||||
EFI_TLS_CONFIGURATION_PROTOCOL *TlsConfiguration;
|
EFI_TLS_CONFIGURATION_PROTOCOL *TlsConfiguration;
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||||
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
||||||
|
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
@ -134,27 +135,31 @@ IsHttpsUrl (
|
||||||
/**
|
/**
|
||||||
Creates a Tls child handle, open EFI_TLS_PROTOCOL and EFI_TLS_CONFIGURATION_PROTOCOL.
|
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[in] HttpInstance Pointer to HTTP_PROTOCOL structure.
|
||||||
@param[out] TlsSb Pointer to the TLS SERVICE_BINDING_PROTOCOL.
|
|
||||||
@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.
|
@return EFI_SUCCESS TLS child handle is returned in HttpInstance->TlsChildHandle
|
||||||
|
with opened EFI_TLS_PROTOCOL and EFI_TLS_CONFIGURATION_PROTOCOL.
|
||||||
|
EFI_DEVICE_ERROR TLS service binding protocol is not found.
|
||||||
|
Otherwise Fail to create TLS chile handle.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_HANDLE
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
TlsCreateChild (
|
TlsCreateChild (
|
||||||
IN EFI_HANDLE ImageHandle,
|
IN HTTP_PROTOCOL *HttpInstance
|
||||||
OUT EFI_SERVICE_BINDING_PROTOCOL **TlsSb,
|
|
||||||
OUT EFI_TLS_PROTOCOL **TlsProto,
|
|
||||||
OUT EFI_TLS_CONFIGURATION_PROTOCOL **TlsConfiguration
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
EFI_HANDLE ImageHandle;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_HANDLE TlsChildHandle;
|
|
||||||
|
|
||||||
TlsChildHandle = 0;
|
//
|
||||||
|
// Use TlsSb to create Tls child and open the TLS protocol.
|
||||||
|
//
|
||||||
|
if (HttpInstance->LocalAddressIsIPv6) {
|
||||||
|
ImageHandle = HttpInstance->Service->Ip6DriverBindingHandle;
|
||||||
|
} else {
|
||||||
|
ImageHandle = HttpInstance->Service->Ip4DriverBindingHandle;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Locate TlsServiceBinding protocol.
|
// Locate TlsServiceBinding protocol.
|
||||||
|
@ -162,44 +167,51 @@ TlsCreateChild (
|
||||||
gBS->LocateProtocol (
|
gBS->LocateProtocol (
|
||||||
&gEfiTlsServiceBindingProtocolGuid,
|
&gEfiTlsServiceBindingProtocolGuid,
|
||||||
NULL,
|
NULL,
|
||||||
(VOID **)TlsSb
|
(VOID **)&HttpInstance->TlsSb
|
||||||
);
|
);
|
||||||
if (*TlsSb == NULL) {
|
if (HttpInstance->TlsSb == NULL) {
|
||||||
return NULL;
|
return EFI_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = (*TlsSb)->CreateChild (*TlsSb, &TlsChildHandle);
|
//
|
||||||
|
// Create TLS protocol on HTTP handle, this creates the association between HTTP and TLS
|
||||||
|
// for HTTP driver external usages.
|
||||||
|
//
|
||||||
|
Status = HttpInstance->TlsSb->CreateChild (HttpInstance->TlsSb, &HttpInstance->Handle);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return NULL;
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
HttpInstance->TlsAlreadyCreated = TRUE;
|
||||||
|
Status = gBS->OpenProtocol (
|
||||||
|
HttpInstance->Handle,
|
||||||
|
&gEfiTlsProtocolGuid,
|
||||||
|
(VOID **)&HttpInstance->Tls,
|
||||||
|
ImageHandle,
|
||||||
|
HttpInstance->Handle,
|
||||||
|
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
HttpInstance->TlsSb->DestroyChild (HttpInstance->TlsSb, HttpInstance->Handle);
|
||||||
|
HttpInstance->TlsAlreadyCreated = FALSE;
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = gBS->OpenProtocol (
|
Status = gBS->OpenProtocol (
|
||||||
TlsChildHandle,
|
HttpInstance->Handle,
|
||||||
&gEfiTlsProtocolGuid,
|
|
||||||
(VOID **)TlsProto,
|
|
||||||
ImageHandle,
|
|
||||||
TlsChildHandle,
|
|
||||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
|
||||||
);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
(*TlsSb)->DestroyChild (*TlsSb, TlsChildHandle);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = gBS->OpenProtocol (
|
|
||||||
TlsChildHandle,
|
|
||||||
&gEfiTlsConfigurationProtocolGuid,
|
&gEfiTlsConfigurationProtocolGuid,
|
||||||
(VOID **)TlsConfiguration,
|
(VOID **)&HttpInstance->TlsConfiguration,
|
||||||
ImageHandle,
|
ImageHandle,
|
||||||
TlsChildHandle,
|
HttpInstance->Handle,
|
||||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
(*TlsSb)->DestroyChild (*TlsSb, TlsChildHandle);
|
HttpInstance->TlsSb->DestroyChild (HttpInstance->TlsSb, HttpInstance->Handle);
|
||||||
return NULL;
|
HttpInstance->TlsAlreadyCreated = FALSE;
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TlsChildHandle;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
The header files of miscellaneous routines specific to Https for HttpDxe driver.
|
The header files of miscellaneous routines specific to Https for HttpDxe driver.
|
||||||
|
|
||||||
Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||||
|
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
@ -30,21 +31,18 @@ IsHttpsUrl (
|
||||||
/**
|
/**
|
||||||
Creates a Tls child handle, open EFI_TLS_PROTOCOL and EFI_TLS_CONFIGURATION_PROTOCOL.
|
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[in] HttpInstance Pointer to HTTP_PROTOCOL structure.
|
||||||
@param[out] TlsSb Pointer to the TLS SERVICE_BINDING_PROTOCOL.
|
|
||||||
@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.
|
@return EFI_SUCCESS TLS child handle is returned in HttpInstance->TlsChildHandle
|
||||||
|
with opened EFI_TLS_PROTOCOL and EFI_TLS_CONFIGURATION_PROTOCOL.
|
||||||
|
EFI_DEVICE_ERROR TLS service binding protocol is not found.
|
||||||
|
Otherwise Fail to create TLS chile handle.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_HANDLE
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
TlsCreateChild (
|
TlsCreateChild (
|
||||||
IN EFI_HANDLE ImageHandle,
|
IN HTTP_PROTOCOL *HttpInstance
|
||||||
OUT EFI_SERVICE_BINDING_PROTOCOL **TlsSb,
|
|
||||||
OUT EFI_TLS_PROTOCOL **TlsProto,
|
|
||||||
OUT EFI_TLS_CONFIGURATION_PROTOCOL **TlsConfiguration
|
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue