NetworkPkg: Use Http11 definitions in HttpDxe and HttpBootDxe
[mirror_edk2.git] / NetworkPkg / HttpBootDxe / HttpBootClient.h
1 /** @file
2 Declaration of the boot file download function.
3
4 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
5 (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
6 This program and the accompanying materials are licensed and made available under
7 the terms and conditions of the BSD License that accompanies this distribution.
8 The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php.
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14 **/
15
16 #ifndef __EFI_HTTP_BOOT_HTTP_H__
17 #define __EFI_HTTP_BOOT_HTTP_H__
18
19 #define HTTP_BOOT_REQUEST_TIMEOUT 5000 // 5 seconds in uints of millisecond.
20 #define HTTP_BOOT_BLOCK_SIZE 1500
21
22
23
24 #define HTTP_USER_AGENT_EFI_HTTP_BOOT "UefiHttpBoot/1.0"
25
26 //
27 // Record the data length and start address of a data block.
28 //
29 typedef struct {
30 LIST_ENTRY Link; // Link to the EntityDataList in HTTP_BOOT_CACHE_CONTENT
31 UINT8 *Block; // If NULL, the data is in previous data block.
32 UINT8 *DataStart; // Point to somewhere in the Block
33 UINTN DataLength;
34 } HTTP_BOOT_ENTITY_DATA;
35
36 //
37 // Structure for a cache item
38 //
39 typedef struct {
40 LIST_ENTRY Link; // Link to the CacheList in driver's private data.
41 EFI_HTTP_REQUEST_DATA *RequestData;
42 HTTP_IO_RESPONSE_DATA *ResponseData; // Not include any message-body data.
43 UINTN EntityLength;
44 LIST_ENTRY EntityDataList; // Entity data (message-body)
45 } HTTP_BOOT_CACHE_CONTENT;
46
47 //
48 // Callback data for HTTP_BODY_PARSER_CALLBACK()
49 //
50 typedef struct {
51 EFI_STATUS Status;
52 //
53 // Cache info.
54 //
55 HTTP_BOOT_CACHE_CONTENT *Cache;
56 BOOLEAN NewBlock;
57 UINT8 *Block;
58
59 //
60 // Caller provided buffer to load the file in.
61 //
62 UINTN CopyedSize;
63 UINTN BufferSize;
64 UINT8 *Buffer;
65 } HTTP_BOOT_CALLBACK_DATA;
66
67 /**
68 Discover all the boot information for boot file.
69
70 @param[in, out] Private The pointer to the driver's private data.
71
72 @retval EFI_SUCCESS Successfully obtained all the boot information .
73 @retval Others Failed to retrieve the boot information.
74
75 **/
76 EFI_STATUS
77 HttpBootDiscoverBootInfo (
78 IN OUT HTTP_BOOT_PRIVATE_DATA *Private
79 );
80
81 /**
82 Create a HttpIo instance for the file download.
83
84 @param[in] Private The pointer to the driver's private data.
85
86 @retval EFI_SUCCESS Successfully created.
87 @retval Others Failed to create HttpIo.
88
89 **/
90 EFI_STATUS
91 HttpBootCreateHttpIo (
92 IN HTTP_BOOT_PRIVATE_DATA *Private
93 );
94
95 /**
96 This function download the boot file by using UEFI HTTP protocol.
97
98 @param[in] Private The pointer to the driver's private data.
99 @param[in] HeaderOnly Only request the response header, it could save a lot of time if
100 the caller only want to know the size of the requested file.
101 @param[in, out] BufferSize On input the size of Buffer in bytes. On output with a return
102 code of EFI_SUCCESS, the amount of data transferred to
103 Buffer. On output with a return code of EFI_BUFFER_TOO_SMALL,
104 the size of Buffer required to retrieve the requested file.
105 @param[out] Buffer The memory buffer to transfer the file to. IF Buffer is NULL,
106 then the size of the requested file is returned in
107 BufferSize.
108
109 @retval EFI_SUCCESS The file was loaded.
110 @retval EFI_INVALID_PARAMETER BufferSize is NULL or Buffer Size is not NULL but Buffer is NULL.
111 @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources
112 @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small to read the current directory entry.
113 BufferSize has been updated with the size needed to complete
114 the request.
115 @retval Others Unexpected error happened.
116
117 **/
118 EFI_STATUS
119 HttpBootGetBootFile (
120 IN HTTP_BOOT_PRIVATE_DATA *Private,
121 IN BOOLEAN HeaderOnly,
122 IN OUT UINTN *BufferSize,
123 OUT UINT8 *Buffer
124 );
125
126 /**
127 Clean up all cached data.
128
129 @param[in] Private The pointer to the driver's private data.
130
131 **/
132 VOID
133 HttpBootFreeCacheList (
134 IN HTTP_BOOT_PRIVATE_DATA *Private
135 );
136
137 #endif