X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=NetworkPkg%2FHttpBootDxe%2FHttpBootClient.c;h=46cf9ca6fb78e49cc48ed5cf1cb1f7c5d3b94133;hb=42a8f2ceb45ec3beaec1262a7c61333c6be7c0b0;hp=0c472938a068145200089aee59ae25db0a80c17c;hpb=7537258100166bdf6e9f4203ac13e53a14f97490;p=mirror_edk2.git diff --git a/NetworkPkg/HttpBootDxe/HttpBootClient.c b/NetworkPkg/HttpBootDxe/HttpBootClient.c index 0c472938a0..46cf9ca6fb 100644 --- a/NetworkPkg/HttpBootDxe/HttpBootClient.c +++ b/NetworkPkg/HttpBootDxe/HttpBootClient.c @@ -570,6 +570,7 @@ HttpBootFreeCacheList ( @param[out] Buffer The memory buffer to transfer the file to. IF Buffer is NULL, then the size of the requested file is returned in BufferSize. + @param[out] ImageType The image type of the downloaded file. @retval EFI_SUCCESS Successfully created. @retval Others Failed to create HttpIo. @@ -580,7 +581,8 @@ HttpBootGetFileFromCache ( IN HTTP_BOOT_PRIVATE_DATA *Private, IN CHAR16 *Uri, IN OUT UINTN *BufferSize, - OUT UINT8 *Buffer + OUT UINT8 *Buffer, + OUT HTTP_BOOT_IMAGE_TYPE *ImageType ) { LIST_ENTRY *Entry; @@ -589,7 +591,7 @@ HttpBootGetFileFromCache ( HTTP_BOOT_ENTITY_DATA *EntityData; UINTN CopyedSize; - if (Uri == NULL || BufferSize == 0 || Buffer == NULL) { + if (Uri == NULL || BufferSize == 0 || Buffer == NULL || ImageType == NULL) { return EFI_INVALID_PARAMETER; } @@ -603,7 +605,12 @@ HttpBootGetFileFromCache ( (StrCmp (Uri, Cache->RequestData->Url) == 0)) { // - // Hit cache, check buffer size. + // Hit in cache, record image type. + // + *ImageType = Cache->ImageType; + + // + // Check buffer size. // if (*BufferSize < Cache->EntityLength) { *BufferSize = Cache->EntityLength; @@ -712,6 +719,7 @@ HttpBootGetBootFileCallback ( @param[out] Buffer The memory buffer to transfer the file to. IF Buffer is NULL, then the size of the requested file is returned in BufferSize. + @param[out] ImageType The image type of the downloaded file. @retval EFI_SUCCESS The file was loaded. @retval EFI_INVALID_PARAMETER BufferSize is NULL or Buffer Size is not NULL but Buffer is NULL. @@ -727,7 +735,8 @@ HttpBootGetBootFile ( IN HTTP_BOOT_PRIVATE_DATA *Private, IN BOOLEAN HeaderOnly, IN OUT UINTN *BufferSize, - OUT UINT8 *Buffer + OUT UINT8 *Buffer, + OUT HTTP_BOOT_IMAGE_TYPE *ImageType ) { EFI_STATUS Status; @@ -750,7 +759,7 @@ HttpBootGetBootFile ( ASSERT (Private != NULL); ASSERT (Private->HttpCreated); - if (BufferSize == NULL) { + if (BufferSize == NULL || ImageType == NULL) { return EFI_INVALID_PARAMETER; } @@ -767,7 +776,7 @@ HttpBootGetBootFile ( } AsciiStrToUnicodeStr (Private->BootFileUri, Url); if (!HeaderOnly) { - Status = HttpBootGetFileFromCache (Private, Url, BufferSize, Buffer); + Status = HttpBootGetFileFromCache (Private, Url, BufferSize, Buffer, ImageType); if (Status != EFI_NOT_FOUND) { FreePool (Url); return Status; @@ -788,6 +797,7 @@ HttpBootGetBootFile ( Status = EFI_OUT_OF_RESOURCES; goto ERROR_1; } + Cache->ImageType = ImageTypeMax; InitializeListHead (&Cache->EntityDataList); } @@ -918,11 +928,26 @@ HttpBootGetBootFile ( goto ERROR_5; } + // + // Check the image type according to server's response. + // + Status = HttpBootCheckImageType ( + Private->BootFileUri, + Private->BootFileUriParser, + ResponseData->HeaderCount, + ResponseData->Headers, + ImageType + ); + if (EFI_ERROR (Status)) { + goto ERROR_5; + } + // // 3.2 Cache the response header. // if (Cache != NULL) { Cache->ResponseData = ResponseData; + Cache->ImageType = *ImageType; } // @@ -1049,6 +1074,8 @@ HttpBootGetBootFile ( if (*BufferSize < ContentLength) { Status = EFI_BUFFER_TOO_SMALL; + } else { + Status = EFI_SUCCESS; } *BufferSize = ContentLength; @@ -1064,7 +1091,7 @@ HttpBootGetBootFile ( HttpFreeMsgParser (Parser); } - return EFI_SUCCESS; + return Status; ERROR_6: if (Parser != NULL) {