]> git.proxmox.com Git - mirror_edk2.git/blame - NetworkPkg/HttpDxe/HttpProto.h
NetworkPkg/HttpDxe: Fix various typos
[mirror_edk2.git] / NetworkPkg / HttpDxe / HttpProto.h
CommitLineData
47f51a06
YT
1/** @file\r
2 The header files of miscellaneous routines for HttpDxe driver.\r
3\r
f75a7f56 4Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>\r
f58554fc 5(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
ecf98fbc 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
47f51a06
YT
7\r
8**/\r
9\r
10#ifndef __EFI_HTTP_PROTO_H__\r
11#define __EFI_HTTP_PROTO_H__\r
12\r
13#define DEF_BUF_LEN 2048\r
14\r
15#define HTTP_SERVICE_SIGNATURE SIGNATURE_32('H', 't', 't', 'S')\r
16\r
17#define HTTP_SERVICE_FROM_PROTOCOL(a) \\r
18 CR ( \\r
19 (a), \\r
20 HTTP_SERVICE, \\r
21 ServiceBinding, \\r
22 HTTP_SERVICE_SIGNATURE \\r
23 )\r
24\r
b659408b 25\r
47f51a06
YT
26//\r
27// The state of HTTP protocol. It starts from UNCONFIGED.\r
28//\r
29#define HTTP_STATE_UNCONFIGED 0\r
30#define HTTP_STATE_HTTP_CONFIGED 1\r
31#define HTTP_STATE_TCP_CONFIGED 2\r
32#define HTTP_STATE_TCP_UNCONFIGED 3\r
33#define HTTP_STATE_TCP_CONNECTED 4\r
34#define HTTP_STATE_TCP_CLOSED 5\r
35\r
36//\r
37// TCP configured data.\r
38//\r
39#define HTTP_TOS_DEAULT 8\r
40#define HTTP_TTL_DEAULT 255\r
41#define HTTP_BUFFER_SIZE_DEAULT 65535\r
42#define HTTP_MAX_SYN_BACK_LOG 5\r
43#define HTTP_CONNECTION_TIMEOUT 60\r
b347a22a 44#define HTTP_RESPONSE_TIMEOUT 5\r
47f51a06
YT
45#define HTTP_DATA_RETRIES 12\r
46#define HTTP_FIN_TIMEOUT 2\r
47#define HTTP_KEEP_ALIVE_PROBES 6\r
48#define HTTP_KEEP_ALIVE_TIME 7200\r
49#define HTTP_KEEP_ALIVE_INTERVAL 30\r
50\r
51b0450e
FS
51#define HTTP_URL_BUFFER_LEN 4096\r
52\r
47f51a06
YT
53typedef struct _HTTP_SERVICE {\r
54 UINT32 Signature;\r
55 EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;\r
7cf59c85
ZL
56 EFI_HANDLE Ip4DriverBindingHandle;\r
57 EFI_HANDLE Ip6DriverBindingHandle;\r
47f51a06 58 EFI_HANDLE ControllerHandle;\r
b659408b
ZL
59 EFI_HANDLE Tcp4ChildHandle;\r
60 EFI_HANDLE Tcp6ChildHandle;\r
47f51a06
YT
61 LIST_ENTRY ChildrenList;\r
62 UINTN ChildrenNumber;\r
47f51a06
YT
63 INTN State;\r
64} HTTP_SERVICE;\r
65\r
66typedef struct {\r
b659408b
ZL
67 EFI_TCP4_IO_TOKEN Tx4Token;\r
68 EFI_TCP4_TRANSMIT_DATA Tx4Data;\r
69 EFI_TCP6_IO_TOKEN Tx6Token;\r
70 EFI_TCP6_TRANSMIT_DATA Tx6Data;\r
71 EFI_TCP4_IO_TOKEN Rx4Token;\r
72 EFI_TCP4_RECEIVE_DATA Rx4Data;\r
73 EFI_TCP6_IO_TOKEN Rx6Token;\r
74 EFI_TCP6_RECEIVE_DATA Rx6Data;\r
47f51a06 75 BOOLEAN IsTxDone;\r
47f51a06
YT
76 BOOLEAN IsRxDone;\r
77 UINTN BodyLen;\r
78 EFI_HTTP_METHOD Method;\r
79} HTTP_TCP_TOKEN_WRAP;\r
80\r
dac45de3
JW
81typedef struct {\r
82 EFI_TLS_VERSION Version;\r
83 EFI_TLS_CONNECTION_END ConnectionEnd;\r
84 EFI_TLS_VERIFY VerifyMethod;\r
e2fc5081 85 EFI_TLS_VERIFY_HOST VerifyHost;\r
dac45de3
JW
86 EFI_TLS_SESSION_STATE SessionState;\r
87} TLS_CONFIG_DATA;\r
88\r
895b87e3
JW
89//\r
90// Callback data for HTTP_PARSER_CALLBACK()\r
91//\r
92typedef struct {\r
93 UINTN ParseDataLength;\r
94 VOID *ParseData;\r
95 VOID *Wrap;\r
96} HTTP_CALLBACK_DATA;\r
97\r
47f51a06
YT
98typedef struct _HTTP_PROTOCOL {\r
99 UINT32 Signature;\r
100 EFI_HTTP_PROTOCOL Http;\r
101 EFI_HANDLE Handle;\r
102 HTTP_SERVICE *Service;\r
103 LIST_ENTRY Link; // Link to all HTTP instance from the service.\r
104 BOOLEAN InDestroy;\r
105 INTN State;\r
d8293d31 106 EFI_HTTP_METHOD Method;\r
47f51a06 107\r
072289f4
ZL
108 UINTN StatusCode;\r
109\r
b347a22a
JW
110 EFI_EVENT TimeoutEvent;\r
111\r
b659408b 112 EFI_HANDLE Tcp4ChildHandle;\r
47f51a06
YT
113 EFI_TCP4_PROTOCOL *Tcp4;\r
114 EFI_TCP4_CONFIG_DATA Tcp4CfgData;\r
115 EFI_TCP4_OPTION Tcp4Option;\r
116\r
b659408b
ZL
117 EFI_TCP4_CONNECTION_TOKEN Tcp4ConnToken;\r
118 BOOLEAN IsTcp4ConnDone;\r
119 EFI_TCP4_CLOSE_TOKEN Tcp4CloseToken;\r
120 BOOLEAN IsTcp4CloseDone;\r
47f51a06
YT
121 CHAR8 *RemoteHost;\r
122 UINT16 RemotePort;\r
123 EFI_IPv4_ADDRESS RemoteAddr;\r
f75a7f56 124\r
b659408b
ZL
125 EFI_HANDLE Tcp6ChildHandle;\r
126 EFI_TCP6_PROTOCOL *Tcp6;\r
127 EFI_TCP6_CONFIG_DATA Tcp6CfgData;\r
128 EFI_TCP6_OPTION Tcp6Option;\r
f75a7f56 129\r
b659408b
ZL
130 EFI_TCP6_CONNECTION_TOKEN Tcp6ConnToken;\r
131 BOOLEAN IsTcp6ConnDone;\r
132 EFI_TCP6_CLOSE_TOKEN Tcp6CloseToken;\r
133 BOOLEAN IsTcp6CloseDone;\r
134 EFI_IPv6_ADDRESS RemoteIpv6Addr;\r
f75a7f56 135\r
47f51a06 136 //\r
b659408b 137 // Rx4Token or Rx6Token used for receiving HTTP header.\r
47f51a06 138 //\r
b659408b
ZL
139 EFI_TCP4_IO_TOKEN Rx4Token;\r
140 EFI_TCP4_RECEIVE_DATA Rx4Data;\r
141 EFI_TCP6_IO_TOKEN Rx6Token;\r
142 EFI_TCP6_RECEIVE_DATA Rx6Data;\r
47f51a06
YT
143 BOOLEAN IsRxDone;\r
144\r
b659408b
ZL
145 CHAR8 **EndofHeader;\r
146 CHAR8 **HttpHeaders;\r
47f51a06
YT
147 CHAR8 *CacheBody;\r
148 CHAR8 *NextMsg;\r
149 UINTN CacheLen;\r
150 UINTN CacheOffset;\r
151\r
152 //\r
153 // HTTP message-body parser.\r
154 //\r
155 VOID *MsgParser;\r
895b87e3 156 HTTP_CALLBACK_DATA CallbackData;\r
f75a7f56 157\r
47f51a06
YT
158 EFI_HTTP_VERSION HttpVersion;\r
159 UINT32 TimeOutMillisec;\r
160 BOOLEAN LocalAddressIsIPv6;\r
161\r
162 EFI_HTTPv4_ACCESS_POINT IPv4Node;\r
b659408b 163 EFI_HTTPv6_ACCESS_POINT Ipv6Node;\r
47f51a06
YT
164\r
165 NET_MAP TxTokens;\r
166 NET_MAP RxTokens;\r
51b0450e
FS
167\r
168 CHAR8 *Url;\r
dac45de3
JW
169\r
170 //\r
171 // Https Support\r
172 //\r
173 BOOLEAN UseHttps;\r
45ea8a0c
JW
174\r
175 EFI_SERVICE_BINDING_PROTOCOL *TlsSb;\r
dac45de3
JW
176 EFI_HANDLE TlsChildHandle; /// Tls ChildHandle\r
177 TLS_CONFIG_DATA TlsConfigData;\r
178 EFI_TLS_PROTOCOL *Tls;\r
179 EFI_TLS_CONFIGURATION_PROTOCOL *TlsConfiguration;\r
180 EFI_TLS_SESSION_STATE TlsSessionState;\r
181\r
182 //\r
183 // TlsTxData used for transmitting TLS related messages.\r
184 //\r
185 EFI_TCP4_IO_TOKEN Tcp4TlsTxToken;\r
186 EFI_TCP4_TRANSMIT_DATA Tcp4TlsTxData;\r
187 EFI_TCP6_IO_TOKEN Tcp6TlsTxToken;\r
188 EFI_TCP6_TRANSMIT_DATA Tcp6TlsTxData;\r
189 BOOLEAN TlsIsTxDone;\r
190\r
191 //\r
192 // TlsRxData used for receiving TLS related messages.\r
193 //\r
194 EFI_TCP4_IO_TOKEN Tcp4TlsRxToken;\r
195 EFI_TCP4_RECEIVE_DATA Tcp4TlsRxData;\r
196 EFI_TCP6_IO_TOKEN Tcp6TlsRxToken;\r
197 EFI_TCP6_RECEIVE_DATA Tcp6TlsRxData;\r
198 BOOLEAN TlsIsRxDone;\r
47f51a06
YT
199} HTTP_PROTOCOL;\r
200\r
201typedef struct {\r
202 EFI_HTTP_TOKEN *HttpToken;\r
203 HTTP_PROTOCOL *HttpInstance;\r
204 HTTP_TCP_TOKEN_WRAP TcpWrap;\r
205} HTTP_TOKEN_WRAP;\r
206\r
207\r
208#define HTTP_PROTOCOL_SIGNATURE SIGNATURE_32('H', 't', 't', 'P')\r
209\r
210#define HTTP_INSTANCE_FROM_PROTOCOL(a) \\r
211 CR ( \\r
212 (a), \\r
213 HTTP_PROTOCOL, \\r
214 Http, \\r
215 HTTP_PROTOCOL_SIGNATURE \\r
216 )\r
217\r
218/**\r
f75a7f56 219 The common notify function used in HTTP driver.\r
47f51a06
YT
220\r
221 @param[in] Event The event signaled.\r
222 @param[in] Context The context.\r
223\r
224**/\r
225VOID\r
226EFIAPI\r
227HttpCommonNotify (\r
228 IN EFI_EVENT Event,\r
229 IN VOID *Context\r
230 );\r
231\r
232/**\r
b659408b 233 Create events for the TCP connection token and TCP close token.\r
47f51a06
YT
234\r
235 @param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.\r
236\r
237 @retval EFI_SUCCESS The events are created successfully.\r
238 @retval others Other error as indicated.\r
239\r
240**/\r
241EFI_STATUS\r
b659408b 242HttpCreateTcpConnCloseEvent (\r
47f51a06
YT
243 IN HTTP_PROTOCOL *HttpInstance\r
244 );\r
245\r
246/**\r
b659408b 247 Close events in the TCP connection token and TCP close token.\r
47f51a06
YT
248\r
249 @param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.\r
250\r
251**/\r
252VOID\r
b659408b 253HttpCloseTcpConnCloseEvent (\r
47f51a06
YT
254 IN HTTP_PROTOCOL *HttpInstance\r
255 );\r
256\r
257/**\r
b659408b 258 Create event for the TCP transmit token.\r
47f51a06
YT
259\r
260 @param[in] Wrap Point to HTTP token's wrap data.\r
261\r
262 @retval EFI_SUCCESS The events is created successfully.\r
263 @retval others Other error as indicated.\r
264\r
265**/\r
266EFI_STATUS\r
b659408b 267HttpCreateTcpTxEvent (\r
47f51a06
YT
268 IN HTTP_TOKEN_WRAP *Wrap\r
269 );\r
270\r
271/**\r
b659408b 272 Create event for the TCP receive token which is used to receive HTTP header.\r
47f51a06
YT
273\r
274 @param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.\r
275\r
276 @retval EFI_SUCCESS The events is created successfully.\r
277 @retval others Other error as indicated.\r
278\r
279**/\r
280EFI_STATUS\r
b659408b 281HttpCreateTcpRxEventForHeader (\r
47f51a06
YT
282 IN HTTP_PROTOCOL *HttpInstance\r
283 );\r
284\r
285/**\r
b659408b 286 Create event for the TCP receive token which is used to receive HTTP body.\r
47f51a06
YT
287\r
288 @param[in] Wrap Point to HTTP token's wrap data.\r
289\r
290 @retval EFI_SUCCESS The events is created successfully.\r
291 @retval others Other error as indicated.\r
292\r
293**/\r
294EFI_STATUS\r
b659408b 295HttpCreateTcpRxEvent (\r
f75a7f56 296 IN HTTP_TOKEN_WRAP *Wrap\r
47f51a06
YT
297 );\r
298\r
b659408b
ZL
299/**\r
300 Close Events for Tcp Receive Tokens for HTTP body and HTTP header.\r
301\r
302 @param[in] Wrap Pointer to HTTP token's wrap data.\r
f75a7f56 303\r
b659408b
ZL
304**/\r
305VOID\r
306HttpCloseTcpRxEvent (\r
307 IN HTTP_TOKEN_WRAP *Wrap\r
308 );\r
309\r
47f51a06 310/**\r
ba3b642d 311 Initialize the HTTP_PROTOCOL structure to the unconfigured state.\r
47f51a06 312\r
47f51a06 313 @param[in, out] HttpInstance Pointer to HTTP_PROTOCOL structure.\r
b659408b 314 @param[in] IpVersion Indicate us TCP4 protocol or TCP6 protocol.\r
47f51a06 315\r
f75a7f56 316 @retval EFI_SUCCESS HTTP_PROTOCOL structure is initialized successfully.\r
47f51a06
YT
317 @retval Others Other error as indicated.\r
318\r
319**/\r
320EFI_STATUS\r
321HttpInitProtocol (\r
b659408b
ZL
322 IN OUT HTTP_PROTOCOL *HttpInstance,\r
323 IN BOOLEAN IpVersion\r
47f51a06
YT
324 );\r
325\r
326/**\r
327 Clean up the HTTP child, release all the resources used by it.\r
328\r
329 @param[in] HttpInstance The HTTP child to clean up.\r
330\r
331**/\r
332VOID\r
333HttpCleanProtocol (\r
334 IN HTTP_PROTOCOL *HttpInstance\r
335 );\r
336\r
337/**\r
338 Establish TCP connection with HTTP server.\r
339\r
340 @param[in] HttpInstance The HTTP instance private data.\r
341\r
342 @retval EFI_SUCCESS The TCP connection is established.\r
343 @retval Others Other error as indicated.\r
344\r
345**/\r
346EFI_STATUS\r
347HttpCreateConnection (\r
348 IN HTTP_PROTOCOL *HttpInstance\r
349 );\r
350\r
351/**\r
352 Close existing TCP connection.\r
353\r
354 @param[in] HttpInstance The HTTP instance private data.\r
355\r
356 @retval EFI_SUCCESS The TCP connection is closed.\r
357 @retval Others Other error as indicated.\r
358\r
359**/\r
360EFI_STATUS\r
361HttpCloseConnection (\r
362 IN HTTP_PROTOCOL *HttpInstance\r
363 );\r
364\r
365/**\r
366 Configure TCP4 protocol child.\r
367\r
368 @param[in] HttpInstance The HTTP instance private data.\r
369 @param[in] Wrap The HTTP token's wrap data.\r
370\r
371 @retval EFI_SUCCESS The TCP4 protocol child is configured.\r
372 @retval Others Other error as indicated.\r
373\r
374**/\r
375EFI_STATUS\r
376HttpConfigureTcp4 (\r
377 IN HTTP_PROTOCOL *HttpInstance,\r
378 IN HTTP_TOKEN_WRAP *Wrap\r
379 );\r
380\r
b659408b
ZL
381/**\r
382 Configure TCP6 protocol child.\r
383\r
384 @param[in] HttpInstance The HTTP instance private data.\r
385 @param[in] Wrap The HTTP token's wrap data.\r
386\r
387 @retval EFI_SUCCESS The TCP6 protocol child is configured.\r
388 @retval Others Other error as indicated.\r
389\r
390**/\r
391EFI_STATUS\r
392HttpConfigureTcp6 (\r
393 IN HTTP_PROTOCOL *HttpInstance,\r
394 IN HTTP_TOKEN_WRAP *Wrap\r
395 );\r
396\r
47f51a06 397/**\r
f75a7f56 398 Check existing TCP connection, if in error state, recover TCP4 connection. Then,\r
dac45de3 399 connect one TLS session if required.\r
47f51a06
YT
400\r
401 @param[in] HttpInstance The HTTP instance private data.\r
402\r
403 @retval EFI_SUCCESS The TCP connection is established.\r
404 @retval EFI_NOT_READY TCP4 protocol child is not created or configured.\r
405 @retval Others Other error as indicated.\r
406\r
407**/\r
408EFI_STATUS\r
409HttpConnectTcp4 (\r
410 IN HTTP_PROTOCOL *HttpInstance\r
411 );\r
412\r
413/**\r
f75a7f56 414 Check existing TCP connection, if in error state, recover TCP6 connection. Then,\r
dac45de3 415 connect one TLS session if required.\r
b659408b
ZL
416\r
417 @param[in] HttpInstance The HTTP instance private data.\r
418\r
419 @retval EFI_SUCCESS The TCP connection is established.\r
420 @retval EFI_NOT_READY TCP6 protocol child is not created or configured.\r
421 @retval Others Other error as indicated.\r
422\r
423**/\r
424EFI_STATUS\r
425HttpConnectTcp6 (\r
426 IN HTTP_PROTOCOL *HttpInstance\r
427 );\r
428\r
429/**\r
dac45de3 430 Send the HTTP or HTTPS message through TCP4 or TCP6.\r
47f51a06
YT
431\r
432 @param[in] HttpInstance The HTTP instance private data.\r
433 @param[in] Wrap The HTTP token's wrap data.\r
434 @param[in] TxString Buffer containing the HTTP message string.\r
435 @param[in] TxStringLen Length of the HTTP message string in bytes.\r
436\r
437 @retval EFI_SUCCESS The HTTP message is queued into TCP transmit queue.\r
438 @retval Others Other error as indicated.\r
439\r
440**/\r
441EFI_STATUS\r
b659408b 442HttpTransmitTcp (\r
47f51a06
YT
443 IN HTTP_PROTOCOL *HttpInstance,\r
444 IN HTTP_TOKEN_WRAP *Wrap,\r
445 IN UINT8 *TxString,\r
446 IN UINTN TxStringLen\r
447 );\r
448\r
47f51a06
YT
449/**\r
450 Check whether the user's token or event has already\r
b659408b 451 been enqueue on HTTP Tx or Rx Token list.\r
47f51a06
YT
452\r
453 @param[in] Map The container of either user's transmit or receive\r
454 token.\r
455 @param[in] Item Current item to check against.\r
ba3b642d 456 @param[in] Context The Token to check against.\r
47f51a06
YT
457\r
458 @retval EFI_ACCESS_DENIED The token or event has already been enqueued in IP\r
459 @retval EFI_SUCCESS The current item isn't the same token/event as the\r
460 context.\r
461\r
462**/\r
463EFI_STATUS\r
464EFIAPI\r
465HttpTokenExist (\r
466 IN NET_MAP *Map,\r
467 IN NET_MAP_ITEM *Item,\r
468 IN VOID *Context\r
469 );\r
470\r
471/**\r
b659408b 472 Check whether the HTTP message associated with TxToken or Tx6Token is already sent out.\r
47f51a06
YT
473\r
474 @param[in] Map The container of TxToken.\r
475 @param[in] Item Current item to check against.\r
ba3b642d 476 @param[in] Context The Token to check against.\r
47f51a06
YT
477\r
478 @retval EFI_NOT_READY The HTTP message is still queued in the list.\r
479 @retval EFI_SUCCESS The HTTP message has been sent out.\r
480\r
481**/\r
482EFI_STATUS\r
483EFIAPI\r
484HttpTcpNotReady (\r
485 IN NET_MAP *Map,\r
486 IN NET_MAP_ITEM *Item,\r
487 IN VOID *Context\r
488 );\r
489\r
b659408b 490/**\r
dac45de3 491 Initialize Http session.\r
b659408b
ZL
492\r
493 @param[in] HttpInstance The HTTP instance private data.\r
494 @param[in] Wrap The HTTP token's wrap data.\r
dac45de3
JW
495 @param[in] Configure The Flag indicates whether need to initialize session.\r
496 @param[in] TlsConfigure The Flag indicates whether it's the new Tls session.\r
b659408b 497\r
f75a7f56 498 @retval EFI_SUCCESS The initialization of session is done.\r
b659408b
ZL
499 @retval Others Other error as indicated.\r
500\r
501**/\r
502EFI_STATUS\r
dac45de3 503HttpInitSession (\r
b659408b 504 IN HTTP_PROTOCOL *HttpInstance,\r
a2e61982 505 IN HTTP_TOKEN_WRAP *Wrap,\r
dac45de3
JW
506 IN BOOLEAN Configure,\r
507 IN BOOLEAN TlsConfigure\r
b659408b
ZL
508 );\r
509\r
47f51a06 510/**\r
ba3b642d 511 Transmit the HTTP or HTTPS message by processing the associated HTTP token.\r
47f51a06 512\r
b659408b 513 @param[in] Map The container of TxToken or Tx6Token.\r
47f51a06 514 @param[in] Item Current item to check against.\r
ba3b642d 515 @param[in] Context The Token to check against.\r
47f51a06
YT
516\r
517 @retval EFI_OUT_OF_RESOURCES Failed to allocate resources.\r
518 @retval EFI_SUCCESS The HTTP message is queued into TCP transmit\r
519 queue.\r
520\r
521**/\r
522EFI_STATUS\r
523EFIAPI\r
524HttpTcpTransmit (\r
525 IN NET_MAP *Map,\r
526 IN NET_MAP_ITEM *Item,\r
527 IN VOID *Context\r
528 );\r
529\r
530/**\r
531 Receive the HTTP response by processing the associated HTTP token.\r
532\r
b659408b 533 @param[in] Map The container of Rx4Token or Rx6Token.\r
47f51a06 534 @param[in] Item Current item to check against.\r
ba3b642d 535 @param[in] Context The Token to check against.\r
47f51a06
YT
536\r
537 @retval EFI_SUCCESS The HTTP response is queued into TCP receive\r
538 queue.\r
539 @retval Others Other error as indicated.\r
540\r
541**/\r
542EFI_STATUS\r
543EFIAPI\r
544HttpTcpReceive (\r
545 IN NET_MAP *Map,\r
546 IN NET_MAP_ITEM *Item,\r
547 IN VOID *Context\r
548 );\r
549\r
b659408b
ZL
550/**\r
551 Receive the HTTP header by processing the associated HTTP token.\r
552\r
553 @param[in] HttpInstance The HTTP instance private data.\r
554 @param[in, out] SizeofHeaders The HTTP header length.\r
ba3b642d 555 @param[in, out] BufferSize The size of buffer to cache the header message.\r
b347a22a 556 @param[in] Timeout The time to wait for receiving the header packet.\r
b659408b 557\r
f75a7f56 558 @retval EFI_SUCCESS The HTTP header is received.\r
b659408b
ZL
559 @retval Others Other errors as indicated.\r
560\r
561**/\r
562EFI_STATUS\r
563HttpTcpReceiveHeader (\r
564 IN HTTP_PROTOCOL *HttpInstance,\r
565 IN OUT UINTN *SizeofHeaders,\r
b347a22a
JW
566 IN OUT UINTN *BufferSize,\r
567 IN EFI_EVENT Timeout\r
b659408b
ZL
568 );\r
569\r
570/**\r
571 Receive the HTTP body by processing the associated HTTP token.\r
572\r
573 @param[in] Wrap The HTTP token's wrap data.\r
574 @param[in] HttpMsg The HTTP message data.\r
575\r
f75a7f56 576 @retval EFI_SUCCESS The HTTP body is received.\r
b659408b
ZL
577 @retval Others Other error as indicated.\r
578\r
579**/\r
580EFI_STATUS\r
581HttpTcpReceiveBody (\r
582 IN HTTP_TOKEN_WRAP *Wrap,\r
30526a51 583 IN EFI_HTTP_MESSAGE *HttpMsg\r
b659408b
ZL
584 );\r
585\r
586/**\r
587 Clean up Tcp Tokens while the Tcp transmission error occurs.\r
588\r
589 @param[in] Wrap Pointer to HTTP token's wrap data.\r
f75a7f56 590\r
b659408b
ZL
591**/\r
592VOID\r
593HttpTcpTokenCleanup (\r
594 IN HTTP_TOKEN_WRAP *Wrap\r
595 );\r
596\r
47f51a06
YT
597/**\r
598 The work function of EfiHttpResponse().\r
599\r
600 @param[in] Wrap Pointer to HTTP token's wrap data.\r
601\r
602 @retval EFI_SUCCESS Allocation succeeded.\r
ba3b642d 603 @retval EFI_OUT_OF_RESOURCES Failed to complete the operation due to lack of resources.\r
47f51a06
YT
604 @retval EFI_NOT_READY Can't find a corresponding TxToken.\r
605\r
606**/\r
607EFI_STATUS\r
608HttpResponseWorker (\r
609 IN HTTP_TOKEN_WRAP *Wrap\r
610 );\r
611\r
612#endif\r