1d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu/** @file
2d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  Support functions declaration for UEFI HTTP boot driver.
3d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
4d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuCopyright (c) 2015, Intel Corporation. All rights reserved.<BR>
5d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuThis program and the accompanying materials are licensed and made available under
6d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wuthe terms and conditions of the BSD License that accompanies this distribution.
7d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuThe full text of the license may be found at
8d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wuhttp://opensource.org/licenses/bsd-license.php.
9d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
10d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
13d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu**/
14d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
15d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu#ifndef __EFI_HTTP_BOOT_SUPPORT_H__
16d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu#define __EFI_HTTP_BOOT_SUPPORT_H__
17d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
18d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu/**
19d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  Get the Nic handle using any child handle in the IPv4 stack.
20d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
21d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  ControllerHandle    Pointer to child handle over IPv4.
22d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
23d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @return NicHandle               The pointer to the Nic handle.
24d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @return NULL                    Can't find the Nic handle.
25d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
26d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu**/
27d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuEFI_HANDLE
28d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuHttpBootGetNicByIp4Children (
29d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN EFI_HANDLE                 ControllerHandle
30d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  );
31d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
32d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu/**
33b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  Get the Nic handle using any child handle in the IPv6 stack.
34b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
35b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  @param[in]  ControllerHandle    Pointer to child handle over IPv6.
36b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
37b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  @return NicHandle               The pointer to the Nic handle.
38b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  @return NULL                    Can't find the Nic handle.
39b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
40b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo**/
41b659408b933f40765960e877de3e1f8ceaab52cbZhang LuboEFI_HANDLE
42b659408b933f40765960e877de3e1f8ceaab52cbZhang LuboHttpBootGetNicByIp6Children (
43b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  IN EFI_HANDLE                 ControllerHandle
44b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  );
45b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
46b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo/**
47d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  This function is to convert UINTN to ASCII string with the required formatting.
48d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
49d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  Number         Numeric value to be converted.
50d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  Buffer         The pointer to the buffer for ASCII string.
51d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  Length         The length of the required format.
52d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
53d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu**/
54d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuVOID
55d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuHttpBootUintnToAscDecWithFormat (
56d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN UINTN                       Number,
57d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN UINT8                       *Buffer,
58d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN INTN                        Length
59d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  );
60d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
61d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
62d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu/**
63d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  This function is to display the IPv4 address.
64d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
65d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  Ip        The pointer to the IPv4 address.
66d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
67d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu**/
68d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuVOID
69d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuHttpBootShowIp4Addr (
70d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN EFI_IPv4_ADDRESS   *Ip
71d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  );
72d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
73b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo/**
74b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  This function is to display the IPv6 address.
75b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
76b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  @param[in]  Ip        The pointer to the IPv6 address.
77b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
78b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo**/
79b659408b933f40765960e877de3e1f8ceaab52cbZhang LuboVOID
80b659408b933f40765960e877de3e1f8ceaab52cbZhang LuboHttpBootShowIp6Addr (
81b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  IN EFI_IPv6_ADDRESS   *Ip
82b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  );
83b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
84d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu//
85d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu// A wrapper structure to hold the HTTP headers.
86d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu//
87d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wutypedef struct {
88d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  UINTN                       MaxHeaderCount;
89d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  UINTN                       HeaderCount;
90d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  EFI_HTTP_HEADER             *Headers;
91d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu} HTTP_IO_HEADER;
92d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
93d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu/**
94d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  Create a HTTP_IO_HEADER to hold the HTTP header items.
95d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
96d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  MaxHeaderCount         The maximun number of HTTP header in this holder.
97d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
98d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @return    A pointer of the HTTP header holder or NULL if failed.
99d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
100d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu**/
101d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuHTTP_IO_HEADER *
102d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuHttpBootCreateHeader (
103d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN  UINTN                MaxHeaderCount
104d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  );
105d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
106d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu/**
107d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  Destroy the HTTP_IO_HEADER and release the resouces.
108d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
109d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  HttpIoHeader       Point to the HTTP header holder to be destroyed.
110d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
111d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu**/
112d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuVOID
113d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuHttpBootFreeHeader (
114d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN  HTTP_IO_HEADER       *HttpIoHeader
115d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  );
116d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
117d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu/**
118d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  Set or update a HTTP header with the field name and corresponding value.
119d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
120d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  HttpIoHeader       Point to the HTTP header holder.
121d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  FieldName          Null terminated string which describes a field name.
122d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  FieldValue         Null terminated string which describes the corresponding field value.
123d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
124d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval  EFI_SUCCESS           The HTTP header has been set or updated.
125d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval  EFI_INVALID_PARAMETER Any input parameter is invalid.
126d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval  EFI_OUT_OF_RESOURCES  Insufficient resource to complete the operation.
127d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval  Other                 Unexpected error happened.
128d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
129d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu**/
130d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuEFI_STATUS
131d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuHttpBootSetHeader (
132d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN  HTTP_IO_HEADER       *HttpIoHeader,
133d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN  CHAR8                *FieldName,
134d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN  CHAR8                *FieldValue
135d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  );
136d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
137d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu//
138d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu// HTTP_IO configuration data for IPv4
139d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu//
140d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wutypedef struct {
141d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  EFI_HTTP_VERSION          HttpVersion;
142d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  UINT32                    RequestTimeOut;  // In milliseconds.
143d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  UINT32                    ResponseTimeOut; // In milliseconds.
144d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  BOOLEAN                   UseDefaultAddress;
145d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  EFI_IPv4_ADDRESS          LocalIp;
146d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  EFI_IPv4_ADDRESS          SubnetMask;
147d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  UINT16                    LocalPort;
148d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu} HTTP4_IO_CONFIG_DATA;
149d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
150d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu//
151b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo// HTTP_IO configuration data for IPv6
152b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo//
153b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubotypedef struct {
154b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  EFI_HTTP_VERSION          HttpVersion;
155b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  UINT32                    RequestTimeOut;  // In milliseconds.
156b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  BOOLEAN                   UseDefaultAddress;
157b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  EFI_IPv6_ADDRESS          LocalIp;
158b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  UINT16                    LocalPort;
159b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo} HTTP6_IO_CONFIG_DATA;
160b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
161b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
162b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo//
163d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu// HTTP_IO configuration
164d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu//
165d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wutypedef union {
166d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  HTTP4_IO_CONFIG_DATA       Config4;
167b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  HTTP6_IO_CONFIG_DATA       Config6;
168d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu} HTTP_IO_CONFIG_DATA;
169d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
170d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu//
171d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu// HTTO_IO wrapper of the EFI HTTP service.
172d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu//
173d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wutypedef struct {
174d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  UINT8                     IpVersion;
175d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  EFI_HANDLE                Image;
176d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  EFI_HANDLE                Controller;
177d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  EFI_HANDLE                Handle;
178d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
179d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  EFI_HTTP_PROTOCOL         *Http;
180d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
181d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  EFI_HTTP_TOKEN            ReqToken;
182d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  EFI_HTTP_MESSAGE          ReqMessage;
183d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  EFI_HTTP_TOKEN            RspToken;
184d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  EFI_HTTP_MESSAGE          RspMessage;
185d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
186d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  BOOLEAN                   IsTxDone;
187d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  BOOLEAN                   IsRxDone;
188d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu} HTTP_IO;
189d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
190d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu//
191d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu// A wrapper structure to hold the received HTTP response data.
192d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu//
193d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wutypedef struct {
194d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  EFI_HTTP_RESPONSE_DATA      Response;
195d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  UINTN                       HeaderCount;
196d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  EFI_HTTP_HEADER             *Headers;
197d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  UINTN                       BodyLength;
198d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  CHAR8                       *Body;
199d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu} HTTP_IO_RESOPNSE_DATA;
200d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
201d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu/**
202b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  Retrieve the host address using the EFI_DNS6_PROTOCOL.
203b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
204b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  @param[in]  Private             The pointer to the driver's private data.
205b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  @param[in]  HostName            Pointer to buffer containing hostname.
206b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  @param[out] IpAddress           On output, pointer to buffer containing IPv6 address.
207b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
208b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  @retval EFI_SUCCESS             Operation succeeded.
209b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  @retval EFI_DEVICE_ERROR        An unexpected network error occurred.
210b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  @retval Others                  Other errors as indicated.
211b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo**/
212b659408b933f40765960e877de3e1f8ceaab52cbZhang LuboEFI_STATUS
213b659408b933f40765960e877de3e1f8ceaab52cbZhang LuboHttpBootDns (
214b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  IN     HTTP_BOOT_PRIVATE_DATA   *Private,
215b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  IN     CHAR16                   *HostName,
216b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo     OUT EFI_IPv6_ADDRESS         *IpAddress
217b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  );
218b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
219b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo/**
220b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  Notify the callback function when an event is triggered.
221b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
222b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  @param[in]  Event           The triggered event.
223b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  @param[in]  Context         The opaque parameter to the function.
224b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
225b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo**/
226b659408b933f40765960e877de3e1f8ceaab52cbZhang LuboVOID
227b659408b933f40765960e877de3e1f8ceaab52cbZhang LuboEFIAPI
228b659408b933f40765960e877de3e1f8ceaab52cbZhang LuboHttpBootCommonNotify (
229b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  IN EFI_EVENT           Event,
230b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  IN VOID                *Context
231b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo  );
232b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo
233b659408b933f40765960e877de3e1f8ceaab52cbZhang Lubo/**
234d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  Create a HTTP_IO to access the HTTP service. It will create and configure
235d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  a HTTP child handle.
236d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
237d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  Image          The handle of the driver image.
238d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  Controller     The handle of the controller.
239d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  IpVersion      IP_VERSION_4 or IP_VERSION_6.
240d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  ConfigData     The HTTP_IO configuration data.
241d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[out] HttpIo         The HTTP_IO.
242d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
243d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval EFI_SUCCESS            The HTTP_IO is created and configured.
244d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval EFI_INVALID_PARAMETER  One or more parameters are invalid.
245d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval EFI_UNSUPPORTED        One or more of the control options are not
246d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu                                 supported in the implementation.
247d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.
248d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval Others                 Failed to create the HTTP_IO or configure it.
249d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
250d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu**/
251d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuEFI_STATUS
252d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuHttpIoCreateIo (
253d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN EFI_HANDLE             Image,
254d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN EFI_HANDLE             Controller,
255d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN UINT8                  IpVersion,
256d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN HTTP_IO_CONFIG_DATA    *ConfigData,
257d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  OUT HTTP_IO               *HttpIo
258d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  );
259d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
260d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu/**
261d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  Destroy the HTTP_IO and release the resouces.
262d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
263d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]  HttpIo          The HTTP_IO which wraps the HTTP service to be destroyed.
264d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
265d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu**/
266d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuVOID
267d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuHttpIoDestroyIo (
268d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN HTTP_IO                *HttpIo
269d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  );
270d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
271d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu/**
272d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  Synchronously send a HTTP REQUEST message to the server.
273d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
274d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]   HttpIo           The HttpIo wrapping the HTTP service.
275d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]   Request          A pointer to storage such data as URL and HTTP method.
276d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]   HeaderCount      Number of HTTP header structures in Headers list.
277d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]   Headers          Array containing list of HTTP headers.
278d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]   BodyLength       Length in bytes of the HTTP body.
279d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]   Body             Body associated with the HTTP request.
280d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
281d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval EFI_SUCCESS            The HTTP request is trasmitted.
282d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval EFI_INVALID_PARAMETER  One or more parameters are invalid.
283d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.
284d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval EFI_DEVICE_ERROR       An unexpected network or system error occurred.
285d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval Others                 Other errors as indicated.
286d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
287d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu**/
288d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuEFI_STATUS
289d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuHttpIoSendRequest (
290d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN  HTTP_IO                *HttpIo,
291d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN  EFI_HTTP_REQUEST_DATA  *Request,      OPTIONAL
292d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN  UINTN                  HeaderCount,
293d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN  EFI_HTTP_HEADER        *Headers,      OPTIONAL
294d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN  UINTN                  BodyLength,
295d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN  VOID                   *Body          OPTIONAL
296d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  );
297d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
298d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu/**
299d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  Synchronously receive a HTTP RESPONSE message from the server.
300d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
301d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]   HttpIo           The HttpIo wrapping the HTTP service.
302d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[in]   RecvMsgHeader    TRUE to receive a new HTTP response (from message header).
303d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu                                FALSE to continue receive the previous response message.
304d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @param[out]  ResponseData     Point to a wrapper of the received response data.
305d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
306d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval EFI_SUCCESS            The HTTP resopnse is received.
307d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval EFI_INVALID_PARAMETER  One or more parameters are invalid.
308d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.
309d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval EFI_DEVICE_ERROR       An unexpected network or system error occurred.
310d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  @retval Others                 Other errors as indicated.
311d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
312d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu**/
313d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuEFI_STATUS
314d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin WuHttpIoRecvResponse (
315d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN      HTTP_IO                  *HttpIo,
316d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  IN      BOOLEAN                  RecvMsgHeader,
317d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu     OUT  HTTP_IO_RESOPNSE_DATA    *ResponseData
318d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu  );
319d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu
320d933e70a9761bf47941ac3d973cc5e7ee44da930Jiaxin Wu#endif
321