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