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