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(-)
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.luo@intel.com>
Cc: Maciej Rabeda <maciej.rabeda@linux.intel.com>
Cc: Jiaxin Wu <jiaxin.wu@intel.com>
Cc: Siyuan Fu <siyuan.fu@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 (#78283): https://edk2.groups.io/g/devel/message/78283
Mute This Topic: https://groups.io/mt/84503285/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Reviewed-by: Maciej Rabeda <maciej.rabeda@linux.intel.com> On 28-Jul-21 13:58, Heng Luo wrote: > 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.luo@intel.com> > Cc: Maciej Rabeda <maciej.rabeda@linux.intel.com> > Cc: Jiaxin Wu <jiaxin.wu@intel.com> > Cc: Siyuan Fu <siyuan.fu@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. -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#78285): https://edk2.groups.io/g/devel/message/78285 Mute This Topic: https://groups.io/mt/84503285/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2024 Red Hat, Inc.