/** @file\r
Miscellaneous routines for HttpDxe driver.\r
\r
-Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<BR>\r
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
HttpInstance->IsTcp4ConnDone = FALSE;\r
HttpInstance->Tcp4ConnToken.CompletionToken.Status = EFI_NOT_READY;\r
Status = HttpInstance->Tcp4->Connect (HttpInstance->Tcp4, &HttpInstance->Tcp4ConnToken);\r
+ HttpNotify (HttpEventConnectTcp, Status);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((EFI_D_ERROR, "HttpCreateConnection: Tcp4->Connect() = %r\n", Status));\r
return Status;\r
HttpInstance->IsTcp6ConnDone = FALSE;\r
HttpInstance->Tcp6ConnToken.CompletionToken.Status = EFI_NOT_READY;\r
Status = HttpInstance->Tcp6->Connect (HttpInstance->Tcp6, &HttpInstance->Tcp6ConnToken);\r
+ HttpNotify (HttpEventConnectTcp, Status);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((EFI_D_ERROR, "HttpCreateConnection: Tcp6->Connect() = %r\n", Status));\r
return Status;\r
}\r
\r
Status = TlsConnectSession (HttpInstance, HttpInstance->TimeoutEvent);\r
+ HttpNotify (HttpEventTlsConnectSession, Status);\r
\r
gBS->SetTimer (HttpInstance->TimeoutEvent, TimerCancel, 0);\r
\r
}\r
\r
Status = TlsConnectSession (HttpInstance, HttpInstance->TimeoutEvent);\r
+ HttpNotify (HttpEventTlsConnectSession, Status);\r
\r
gBS->SetTimer (HttpInstance->TimeoutEvent, TimerCancel, 0);\r
\r
}\r
\r
}\r
+\r
+/**\r
+ Send Events via EDKII_HTTP_CALLBACK_PROTOCOL.\r
+\r
+ @param[in] Event The event that occurs in the current state.\r
+ @param[in] EventStatus The Status of Event, EFI_SUCCESS or other errors.\r
+\r
+**/\r
+VOID\r
+HttpNotify (\r
+ IN EDKII_HTTP_CALLBACK_EVENT Event,\r
+ IN EFI_STATUS EventStatus\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_HANDLE *Handles;\r
+ UINTN Index;\r
+ UINTN HandleCount;\r
+ EFI_HANDLE Handle;\r
+ EDKII_HTTP_CALLBACK_PROTOCOL *HttpCallback;\r
+\r
+ DEBUG ((DEBUG_INFO, "HttpNotify: Event - %d, EventStatus - %r\n", Event, EventStatus));\r
+\r
+ Handles = NULL;\r
+ HandleCount = 0;\r
+ Status = gBS->LocateHandleBuffer (\r
+ ByProtocol,\r
+ &gEdkiiHttpCallbackProtocolGuid,\r
+ NULL,\r
+ &HandleCount,\r
+ &Handles\r
+ );\r
+ if (Status == EFI_SUCCESS) {\r
+ for (Index = 0; Index < HandleCount; Index++) {\r
+ Handle = Handles[Index];\r
+ Status = gBS->HandleProtocol (\r
+ Handle,\r
+ &gEdkiiHttpCallbackProtocolGuid,\r
+ (VOID **) &HttpCallback\r
+ );\r
+ if (Status == EFI_SUCCESS) {\r
+ DEBUG ((DEBUG_INFO, "HttpNotify: Notifying %p\n", HttpCallback));\r
+ HttpCallback->Callback (\r
+ HttpCallback,\r
+ Event,\r
+ EventStatus\r
+ );\r
+ }\r
+ }\r
+ FreePool (Handles);\r
+ }\r
+}\r