X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=NetworkPkg%2FHttpBootDxe%2FHttpBootSupport.c;h=5024f2e67672e34f7a143585c94c101bd20de6ec;hp=8fe81eb8d964dc21d141ba67400046d41aaa0f2d;hb=95b5c32fb3d6bf677d4cb6471d6c683939014c89;hpb=a77d109ffa0df3662999598e09e3c1e5fd7a1bfb diff --git a/NetworkPkg/HttpBootDxe/HttpBootSupport.c b/NetworkPkg/HttpBootDxe/HttpBootSupport.c index 8fe81eb8d9..5024f2e676 100644 --- a/NetworkPkg/HttpBootDxe/HttpBootSupport.c +++ b/NetworkPkg/HttpBootDxe/HttpBootSupport.c @@ -671,6 +671,9 @@ HttpIoNotify ( @param[in] Controller The handle of the controller. @param[in] IpVersion IP_VERSION_4 or IP_VERSION_6. @param[in] ConfigData The HTTP_IO configuration data. + @param[in] Callback Callback function which will be invoked when specified + HTTP_IO_CALLBACK_EVENT happened. + @param[in] Context The Context data which will be passed to the Callback function. @param[out] HttpIo The HTTP_IO. @retval EFI_SUCCESS The HTTP_IO is created and configured. @@ -687,6 +690,8 @@ HttpIoCreateIo ( IN EFI_HANDLE Controller, IN UINT8 IpVersion, IN HTTP_IO_CONFIG_DATA *ConfigData, + IN HTTP_IO_CALLBACK Callback, + IN VOID *Context, OUT HTTP_IO *HttpIo ) { @@ -739,6 +744,8 @@ HttpIoCreateIo ( HttpIo->Controller = Controller; HttpIo->IpVersion = IpVersion; HttpIo->Http = Http; + HttpIo->Callback = Callback; + HttpIo->Context = Context; ZeroMem (&HttpConfigData, sizeof (EFI_HTTP_CONFIG_DATA)); HttpConfigData.HttpVersion = HttpVersion11; @@ -908,6 +915,17 @@ HttpIoSendRequest ( HttpIo->ReqToken.Message->BodyLength = BodyLength; HttpIo->ReqToken.Message->Body = Body; + if (HttpIo->Callback != NULL) { + Status = HttpIo->Callback ( + HttpIoRequest, + HttpIo->ReqToken.Message, + HttpIo->Context + ); + if (EFI_ERROR (Status)) { + return Status; + } + } + // // Queue the request token to HTTP instances. // @@ -1016,6 +1034,17 @@ HttpIoRecvResponse ( HttpIo->IsRxDone = FALSE; } + if (!EFI_ERROR (HttpIo->RspToken.Status) && HttpIo->Callback != NULL) { + Status = HttpIo->Callback ( + HttpIoResponse, + HttpIo->RspToken.Message, + HttpIo->Context + ); + if (EFI_ERROR (Status)) { + return Status; + } + } + // // Store the received data into the wrapper. //