From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web12.52.1627490994040658370 for ; Wed, 28 Jul 2021 09:49:54 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=none, err=permanent DNS error (domain: linux.intel.com, ip: 134.134.136.100, mailfrom: maciej.rabeda@linux.intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10059"; a="276489576" X-IronPort-AV: E=Sophos;i="5.84,276,1620716400"; d="scan'208";a="276489576" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jul 2021 09:49:52 -0700 X-IronPort-AV: E=Sophos;i="5.84,276,1620716400"; d="scan'208";a="517606788" Received: from lzerbibm-mobl1.ger.corp.intel.com (HELO [10.214.252.131]) ([10.214.252.131]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jul 2021 09:49:50 -0700 Subject: Re: [edk2-devel] [Patch V3] NetworkPkg: Add HTTP Additional Event Notifications From: "Maciej Rabeda" To: devel@edk2.groups.io, heng.luo@intel.com Cc: Jiaxin Wu , Siyuan Fu Reply-To: devel@edk2.groups.io, maciej.rabeda@linux.intel.com References: <20210728115805.2218-1-heng.luo@intel.com> <1695F8AD5636CCB5.10937@groups.io> Message-ID: <3a4c1c96-e642-20c0-fdb8-78dfa7ee0781@linux.intel.com> Date: Wed, 28 Jul 2021 18:49:46 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.12.0 MIME-Version: 1.0 In-Reply-To: <1695F8AD5636CCB5.10937@groups.io> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: pl Change merged: https://github.com/tianocore/edk2/pull/1840 On 28-Jul-21 15:50, Maciej Rabeda wrote: > Reviewed-by: Maciej Rabeda > > 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 >> Cc: Maciej Rabeda >> Cc: Jiaxin Wu >> Cc: Siyuan Fu >> --- >> >>   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.
>> +  Copyright (c) 2015 - 2021, Intel Corporation. All rights >> reserved.
>>     (C) Copyright 2016 Hewlett Packard Enterprise Development LP
>>       SPDX-License-Identifier: BSD-2-Clause-Patent >> @@ -47,6 +47,7 @@ >>   #include >>   #include >>   #include >> +#include >>     #include >>   // >> 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.
>> +#  Copyright (c) 2015 - 2021, Intel Corporation. All rights >> reserved.
>>   # >>   #  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.
>> +  Copyright (c) 2015 - 2021, Intel Corporation. All rights >> reserved.
>>     (C) Copyright 2015-2016 Hewlett Packard Enterprise Development >> LP
>>       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.
>> +Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.
>>   (C) Copyright 2016 Hewlett Packard Enterprise Development LP
>>   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.
>> +Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.
>>   (C) Copyright 2016 Hewlett Packard Enterprise Development LP
>>   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.
>> +  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. > > > > > >