Reviewed-by: Jiaxin Wu <jiaxin...@intel.com>
Thanks, Jiaxin > -----Original Message----- > From: Luo, Heng <heng....@intel.com> > Sent: Tuesday, July 20, 2021 10:18 AM > To: devel@edk2.groups.io > Cc: Maciej Rabeda <maciej.rab...@linux.intel.com>; Wu, Jiaxin > <jiaxin...@intel.com>; Fu, Siyuan <siyuan...@intel.com> > Subject: [Patch V2] NetworkPkg: Add HTTP Additional Event Notifications > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3496 > > Add new EDKII_HTTP_CALLBACK_PROTOCOL in NetworkPkg, > Send HTTP Events via EDKII_HTTP_CALLBACK_PROTOCOL > when Dns/ConnectTcp/TlsConnectSession/InitSession > occurs. > > Signed-off-by: Heng Luo <heng....@intel.com> > Cc: Maciej Rabeda <maciej.rab...@linux.intel.com> > Cc: Jiaxin Wu <jiaxin...@intel.com> > Cc: Siyuan Fu <siyuan...@intel.com> > --- > NetworkPkg/HttpDxe/HttpDriver.h | 3 ++- > NetworkPkg/HttpDxe/HttpDxe.inf | 3 ++- > NetworkPkg/HttpDxe/HttpImpl.c | 4 +++- > NetworkPkg/HttpDxe/HttpProto.c | 58 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- > NetworkPkg/HttpDxe/HttpProto.h | 15 ++++++++++++++- > NetworkPkg/Include/Protocol/HttpCallback.h | 85 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > +++++++++++++++++++++++++++ > NetworkPkg/NetworkPkg.dec | 3 +++ > 7 files changed, 166 insertions(+), 5 deletions(-) > > diff --git a/NetworkPkg/HttpDxe/HttpDriver.h > b/NetworkPkg/HttpDxe/HttpDriver.h > index 5fe8c5b5e9..b701b80858 100644 > --- a/NetworkPkg/HttpDxe/HttpDriver.h > +++ b/NetworkPkg/HttpDxe/HttpDriver.h > @@ -1,7 +1,7 @@ > /** @file > > The header files of the driver binding and service binding protocol for > HttpDxe driver. > > > > - Copyright (c) 2015 - 2018, 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> > > > > SPDX-License-Identifier: BSD-2-Clause-Patent > > @@ -47,6 +47,7 @@ > #include <Protocol/Ip6Config.h> > > #include <Protocol/Tls.h> > > #include <Protocol/TlsConfig.h> > > +#include <Protocol/HttpCallback.h> > > > > #include <Guid/ImageAuthentication.h> > > // > > diff --git a/NetworkPkg/HttpDxe/HttpDxe.inf > b/NetworkPkg/HttpDxe/HttpDxe.inf > index 35fe31af18..23fb9ec394 100644 > --- a/NetworkPkg/HttpDxe/HttpDxe.inf > +++ b/NetworkPkg/HttpDxe/HttpDxe.inf > @@ -1,7 +1,7 @@ > ## @file > > # Implementation of EFI HTTP protocol interfaces. > > # > > -# Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR> > > +# Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<BR> > > # > > # SPDX-License-Identifier: BSD-2-Clause-Patent > > # > > @@ -65,6 +65,7 @@ > gEfiTlsServiceBindingProtocolGuid ## SOMETIMES_CONSUMES > > gEfiTlsProtocolGuid ## SOMETIMES_CONSUMES > > gEfiTlsConfigurationProtocolGuid ## SOMETIMES_CONSUMES > > + gEdkiiHttpCallbackProtocolGuid ## SOMETIMES_CONSUMES > > > > [Guids] > > gEfiTlsCaCertificateGuid ## SOMETIMES_CONSUMES ## > Variable:L"TlsCaCertificate" > > diff --git a/NetworkPkg/HttpDxe/HttpImpl.c > b/NetworkPkg/HttpDxe/HttpImpl.c > index 5a6ecbc9d9..97f15d229f 100644 > --- a/NetworkPkg/HttpDxe/HttpImpl.c > +++ b/NetworkPkg/HttpDxe/HttpImpl.c > @@ -1,7 +1,7 @@ > /** @file > > Implementation of EFI_HTTP_PROTOCOL protocol interfaces. > > > > - Copyright (c) 2015 - 2018, 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> > > > > SPDX-License-Identifier: BSD-2-Clause-Patent > > @@ -527,6 +527,7 @@ EfiHttpRequest ( > } else { > > Status = HttpDns6 (HttpInstance, HostNameStr, &HttpInstance- > >RemoteIpv6Addr); > > } > > + HttpNotify (HttpEventDns, Status); > > > > FreePool (HostNameStr); > > if (EFI_ERROR (Status)) { > > @@ -588,6 +589,7 @@ EfiHttpRequest ( > Configure || ReConfigure, > > TlsConfigure > > ); > > + HttpNotify (HttpEventInitSession, Status); > > if (EFI_ERROR (Status)) { > > goto Error2; > > } > > diff --git a/NetworkPkg/HttpDxe/HttpProto.c > b/NetworkPkg/HttpDxe/HttpProto.c > index afc7db5a72..affa916bd6 100644 > --- a/NetworkPkg/HttpDxe/HttpProto.c > +++ b/NetworkPkg/HttpDxe/HttpProto.c > @@ -1,7 +1,7 @@ > /** @file > > Miscellaneous routines for HttpDxe driver. > > > > -Copyright (c) 2015 - 2018, 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> > > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > @@ -966,6 +966,7 @@ HttpCreateConnection ( > HttpInstance->IsTcp4ConnDone = FALSE; > > HttpInstance->Tcp4ConnToken.CompletionToken.Status = > EFI_NOT_READY; > > Status = HttpInstance->Tcp4->Connect (HttpInstance->Tcp4, > &HttpInstance->Tcp4ConnToken); > > + HttpNotify (HttpEventConnectTcp, Status); > > if (EFI_ERROR (Status)) { > > DEBUG ((EFI_D_ERROR, "HttpCreateConnection: Tcp4->Connect() > = %r\n", Status)); > > return Status; > > @@ -981,6 +982,7 @@ HttpCreateConnection ( > HttpInstance->IsTcp6ConnDone = FALSE; > > HttpInstance->Tcp6ConnToken.CompletionToken.Status = > EFI_NOT_READY; > > Status = HttpInstance->Tcp6->Connect (HttpInstance->Tcp6, > &HttpInstance->Tcp6ConnToken); > > + HttpNotify (HttpEventConnectTcp, Status); > > if (EFI_ERROR (Status)) { > > DEBUG ((EFI_D_ERROR, "HttpCreateConnection: Tcp6->Connect() > = %r\n", Status)); > > return Status; > > @@ -1277,6 +1279,7 @@ HttpConnectTcp4 ( > } > > > > Status = TlsConnectSession (HttpInstance, HttpInstance->TimeoutEvent); > > + HttpNotify (HttpEventTlsConnectSession, Status); > > > > gBS->SetTimer (HttpInstance->TimeoutEvent, TimerCancel, 0); > > > > @@ -1369,6 +1372,7 @@ HttpConnectTcp6 ( > } > > > > Status = TlsConnectSession (HttpInstance, HttpInstance->TimeoutEvent); > > + HttpNotify (HttpEventTlsConnectSession, Status); > > > > gBS->SetTimer (HttpInstance->TimeoutEvent, TimerCancel, 0); > > > > @@ -2195,3 +2199,55 @@ HttpTcpTokenCleanup ( > } > > > > } > > + > > +/** > > + Send Events via EDKII_HTTP_CALLBACK_PROTOCOL. > > + > > + @param[in] Event The event that occurs in the current state. > > + @param[in] EventStatus The Status of Event, EFI_SUCCESS or other > errors. > > + > > +**/ > > +VOID > > +HttpNotify ( > > + IN EDKII_HTTP_CALLBACK_EVENT Event, > > + IN EFI_STATUS EventStatus > > + ) > > +{ > > + EFI_STATUS Status; > > + EFI_HANDLE *Handles; > > + UINTN Index; > > + UINTN HandleCount; > > + EFI_HANDLE Handle; > > + EDKII_HTTP_CALLBACK_PROTOCOL *HttpCallback; > > + > > + DEBUG ((DEBUG_INFO, "HttpNotify: Event - %d, EventStatus - %r\n", > Event, EventStatus)); > > + > > + Handles = NULL; > > + HandleCount = 0; > > + Status = gBS->LocateHandleBuffer ( > > + ByProtocol, > > + &gEdkiiHttpCallbackProtocolGuid, > > + NULL, > > + &HandleCount, > > + &Handles > > + ); > > + if (Status == EFI_SUCCESS) { > > + for (Index = 0; Index < HandleCount; Index++) { > > + Handle = Handles[Index]; > > + Status = gBS->HandleProtocol ( > > + Handle, > > + &gEdkiiHttpCallbackProtocolGuid, > > + (VOID **) &HttpCallback > > + ); > > + if (Status == EFI_SUCCESS) { > > + DEBUG ((DEBUG_INFO, "HttpNotify: Notifying %p\n", HttpCallback)); > > + HttpCallback->Callback ( > > + HttpCallback, > > + Event, > > + EventStatus > > + ); > > + } > > + } > > + FreePool (Handles); > > + } > > +} > > diff --git a/NetworkPkg/HttpDxe/HttpProto.h > b/NetworkPkg/HttpDxe/HttpProto.h > index 00ba26aca4..5b90a6b074 100644 > --- a/NetworkPkg/HttpDxe/HttpProto.h > +++ b/NetworkPkg/HttpDxe/HttpProto.h > @@ -1,7 +1,7 @@ > /** @file > > The header files of miscellaneous routines for HttpDxe driver. > > > > -Copyright (c) 2015 - 2018, 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> > > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > @@ -609,4 +609,17 @@ HttpResponseWorker ( > IN HTTP_TOKEN_WRAP *Wrap > > ); > > > > +/** > > + Send Events via EDKII_HTTP_CALLBACK_PROTOCOL. > > + > > + @param[in] Event The event that occurs in the current state. > > + @param[in] EventStatus The Status of Event, EFI_SUCCESS or other > errors. > > + > > +**/ > > +VOID > > +HttpNotify ( > > + IN EDKII_HTTP_CALLBACK_EVENT Event, > > + IN EFI_STATUS EventStatus > > + ); > > + > > #endif > > diff --git a/NetworkPkg/Include/Protocol/HttpCallback.h > b/NetworkPkg/Include/Protocol/HttpCallback.h > new file mode 100644 > index 0000000000..d036a8a4be > --- /dev/null > +++ b/NetworkPkg/Include/Protocol/HttpCallback.h > @@ -0,0 +1,85 @@ > +/** @file > > + This file defines the EDKII HTTP Callback Protocol interface. > > + > > + Copyright (c) 2021, Intel Corporation. All rights reserved.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > +**/ > > + > > +#ifndef __EDKII_HTTP_CALLBACK_H__ > > +#define __EDKII_HTTP_CALLBACK_H__ > > + > > +#define EDKII_HTTP_CALLBACK_PROTOCOL_GUID \ > > + { \ > > + 0x611114f1, 0xa37b, 0x4468, {0xa4, 0x36, 0x5b, 0xdd, 0xa1, 0x6a, 0xa2, > 0x40} \ > > + } > > + > > +typedef struct _EDKII_HTTP_CALLBACK_PROTOCOL > EDKII_HTTP_CALLBACK_PROTOCOL; > > + > > +/// > > +/// EDKII_HTTP_CALLBACK_EVENT > > +/// > > +typedef enum { > > + /// > > + /// The Status of DNS Event to retrieve the host address. > > + /// EventStatus: > > + /// EFI_SUCCESS Operation succeeded. > > + /// EFI_OUT_OF_RESOURCES Failed to allocate needed resources. > > + /// EFI_DEVICE_ERROR An unexpected network error occurred. > > + /// Others Other errors as indicated. > > + /// > > + HttpEventDns, > > + > > + /// > > + /// The Status of Event to initiate a nonblocking TCP connection request. > > + /// EventStatus: > > + /// EFI_SUCCESS The connection request is successfully > initiated. > > + /// EFI_NOT_STARTED This EFI TCP Protocol instance has not been > configured. > > + /// EFI_DEVICE_ERROR An unexpected system or network error > occurred. > > + /// Others Other errors as indicated. > > + /// > > + HttpEventConnectTcp, > > + > > + /// > > + /// The Status of Event to connect one TLS session by finishing the TLS > handshake process. > > + /// EventStatus: > > + /// EFI_SUCCESS The TLS session is established. > > + /// EFI_OUT_OF_RESOURCES Can't allocate memory resources. > > + /// EFI_ABORTED TLS session state is incorrect. > > + /// Others Other error as indicated. > > + /// > > + HttpEventTlsConnectSession, > > + > > + /// > > + /// The Status of Event to initialize Http session > > + /// EventStatus: > > + /// EFI_SUCCESS The initialization of session is done. > > + /// Others Other error as indicated. > > + /// > > + HttpEventInitSession > > +} EDKII_HTTP_CALLBACK_EVENT; > > + > > +/** > > + Callback function that is invoked when HTTP event occurs. > > + > > + @param[in] This Pointer to the EDKII_HTTP_CALLBACK_PROTOCOL > instance. > > + @param[in] Event The event that occurs in the current state. > > + @param[in] EventStatus The Status of Event, EFI_SUCCESS or other > errors. > > +**/ > > +typedef > > +VOID > > +(EFIAPI * EDKII_HTTP_CALLBACK) ( > > + IN EDKII_HTTP_CALLBACK_PROTOCOL *This, > > + IN EDKII_HTTP_CALLBACK_EVENT Event, > > + IN EFI_STATUS EventStatus > > + ); > > + > > +/// > > +/// EFI HTTP Callback Protocol is invoked when HTTP event occurs. > > +/// > > +struct _EDKII_HTTP_CALLBACK_PROTOCOL { > > + EDKII_HTTP_CALLBACK Callback; > > +}; > > + > > +extern EFI_GUID gEdkiiHttpCallbackProtocolGuid; > > + > > +#endif > > diff --git a/NetworkPkg/NetworkPkg.dec b/NetworkPkg/NetworkPkg.dec > index b81f10ef6e..0f9f7bb15e 100644 > --- a/NetworkPkg/NetworkPkg.dec > +++ b/NetworkPkg/NetworkPkg.dec > @@ -88,6 +88,9 @@ > ## Include/Protocol/Dpc.h > > gEfiDpcProtocolGuid = {0x480f8ae9, 0xc46, 0x4aa9, { 0xbc, 0x89, > 0xdb, > 0x9f, 0xba, 0x61, 0x98, 0x6 }} > > > > + ## Include/Protocol/HttpCallback.h > > + gEdkiiHttpCallbackProtocolGuid = {0x611114f1, 0xa37b, 0x4468, {0xa4, 0x36, > 0x5b, 0xdd, 0xa1, 0x6a, 0xa2, 0x40}} > > + > > [PcdsFixedAtBuild] > > ## The max attempt number will be created by iSCSI driver. > > # @Prompt Max attempt number. > > -- > 2.31.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#77938): https://edk2.groups.io/g/devel/message/77938 Mute This Topic: https://groups.io/mt/84324796/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-