]> git.proxmox.com Git - mirror_edk2.git/blame - NetworkPkg/HttpDxe/HttpProto.h
NetworkPkg: Apply uncrustify changes
[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
47f51a06
YT
197} HTTP_PROTOCOL;\r
198\r
199typedef struct {\r
d1050b9d
MK
200 EFI_HTTP_TOKEN *HttpToken;\r
201 HTTP_PROTOCOL *HttpInstance;\r
202 HTTP_TCP_TOKEN_WRAP TcpWrap;\r
47f51a06
YT
203} HTTP_TOKEN_WRAP;\r
204\r
47f51a06
YT
205#define HTTP_PROTOCOL_SIGNATURE SIGNATURE_32('H', 't', 't', 'P')\r
206\r
207#define HTTP_INSTANCE_FROM_PROTOCOL(a) \\r
208 CR ( \\r
209 (a), \\r
210 HTTP_PROTOCOL, \\r
211 Http, \\r
212 HTTP_PROTOCOL_SIGNATURE \\r
213 )\r
214\r
215/**\r
f75a7f56 216 The common notify function used in HTTP driver.\r
47f51a06
YT
217\r
218 @param[in] Event The event signaled.\r
219 @param[in] Context The context.\r
220\r
221**/\r
222VOID\r
223EFIAPI\r
224HttpCommonNotify (\r
225 IN EFI_EVENT Event,\r
226 IN VOID *Context\r
227 );\r
228\r
229/**\r
b659408b 230 Create events for the TCP connection token and TCP close token.\r
47f51a06
YT
231\r
232 @param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.\r
233\r
234 @retval EFI_SUCCESS The events are created successfully.\r
235 @retval others Other error as indicated.\r
236\r
237**/\r
238EFI_STATUS\r
b659408b 239HttpCreateTcpConnCloseEvent (\r
d1050b9d 240 IN HTTP_PROTOCOL *HttpInstance\r
47f51a06
YT
241 );\r
242\r
243/**\r
b659408b 244 Close events in the TCP connection token and TCP close token.\r
47f51a06
YT
245\r
246 @param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.\r
247\r
248**/\r
249VOID\r
b659408b 250HttpCloseTcpConnCloseEvent (\r
d1050b9d 251 IN HTTP_PROTOCOL *HttpInstance\r
47f51a06
YT
252 );\r
253\r
254/**\r
b659408b 255 Create event for the TCP transmit token.\r
47f51a06
YT
256\r
257 @param[in] Wrap Point to HTTP token's wrap data.\r
258\r
259 @retval EFI_SUCCESS The events is created successfully.\r
260 @retval others Other error as indicated.\r
261\r
262**/\r
263EFI_STATUS\r
b659408b 264HttpCreateTcpTxEvent (\r
d1050b9d 265 IN HTTP_TOKEN_WRAP *Wrap\r
47f51a06
YT
266 );\r
267\r
268/**\r
b659408b 269 Create event for the TCP receive token which is used to receive HTTP header.\r
47f51a06
YT
270\r
271 @param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.\r
272\r
273 @retval EFI_SUCCESS The events is created successfully.\r
274 @retval others Other error as indicated.\r
275\r
276**/\r
277EFI_STATUS\r
b659408b 278HttpCreateTcpRxEventForHeader (\r
d1050b9d 279 IN HTTP_PROTOCOL *HttpInstance\r
47f51a06
YT
280 );\r
281\r
282/**\r
b659408b 283 Create event for the TCP receive token which is used to receive HTTP body.\r
47f51a06
YT
284\r
285 @param[in] Wrap Point to HTTP token's wrap data.\r
286\r
287 @retval EFI_SUCCESS The events is created successfully.\r
288 @retval others Other error as indicated.\r
289\r
290**/\r
291EFI_STATUS\r
b659408b 292HttpCreateTcpRxEvent (\r
d1050b9d 293 IN HTTP_TOKEN_WRAP *Wrap\r
47f51a06
YT
294 );\r
295\r
b659408b
ZL
296/**\r
297 Close Events for Tcp Receive Tokens for HTTP body and HTTP header.\r
298\r
299 @param[in] Wrap Pointer to HTTP token's wrap data.\r
f75a7f56 300\r
b659408b
ZL
301**/\r
302VOID\r
303HttpCloseTcpRxEvent (\r
d1050b9d 304 IN HTTP_TOKEN_WRAP *Wrap\r
b659408b
ZL
305 );\r
306\r
47f51a06 307/**\r
ba3b642d 308 Initialize the HTTP_PROTOCOL structure to the unconfigured state.\r
47f51a06 309\r
47f51a06 310 @param[in, out] HttpInstance Pointer to HTTP_PROTOCOL structure.\r
b659408b 311 @param[in] IpVersion Indicate us TCP4 protocol or TCP6 protocol.\r
47f51a06 312\r
f75a7f56 313 @retval EFI_SUCCESS HTTP_PROTOCOL structure is initialized successfully.\r
47f51a06
YT
314 @retval Others Other error as indicated.\r
315\r
316**/\r
317EFI_STATUS\r
318HttpInitProtocol (\r
d1050b9d
MK
319 IN OUT HTTP_PROTOCOL *HttpInstance,\r
320 IN BOOLEAN IpVersion\r
47f51a06
YT
321 );\r
322\r
323/**\r
324 Clean up the HTTP child, release all the resources used by it.\r
325\r
326 @param[in] HttpInstance The HTTP child to clean up.\r
327\r
328**/\r
329VOID\r
330HttpCleanProtocol (\r
d1050b9d 331 IN HTTP_PROTOCOL *HttpInstance\r
47f51a06
YT
332 );\r
333\r
334/**\r
335 Establish TCP connection with HTTP server.\r
336\r
337 @param[in] HttpInstance The HTTP instance private data.\r
338\r
339 @retval EFI_SUCCESS The TCP connection is established.\r
340 @retval Others Other error as indicated.\r
341\r
342**/\r
343EFI_STATUS\r
344HttpCreateConnection (\r
d1050b9d 345 IN HTTP_PROTOCOL *HttpInstance\r
47f51a06
YT
346 );\r
347\r
348/**\r
349 Close existing TCP connection.\r
350\r
351 @param[in] HttpInstance The HTTP instance private data.\r
352\r
353 @retval EFI_SUCCESS The TCP connection is closed.\r
354 @retval Others Other error as indicated.\r
355\r
356**/\r
357EFI_STATUS\r
358HttpCloseConnection (\r
d1050b9d 359 IN HTTP_PROTOCOL *HttpInstance\r
47f51a06
YT
360 );\r
361\r
362/**\r
363 Configure TCP4 protocol child.\r
364\r
365 @param[in] HttpInstance The HTTP instance private data.\r
366 @param[in] Wrap The HTTP token's wrap data.\r
367\r
368 @retval EFI_SUCCESS The TCP4 protocol child is configured.\r
369 @retval Others Other error as indicated.\r
370\r
371**/\r
372EFI_STATUS\r
373HttpConfigureTcp4 (\r
d1050b9d
MK
374 IN HTTP_PROTOCOL *HttpInstance,\r
375 IN HTTP_TOKEN_WRAP *Wrap\r
47f51a06
YT
376 );\r
377\r
b659408b
ZL
378/**\r
379 Configure TCP6 protocol child.\r
380\r
381 @param[in] HttpInstance The HTTP instance private data.\r
382 @param[in] Wrap The HTTP token's wrap data.\r
383\r
384 @retval EFI_SUCCESS The TCP6 protocol child is configured.\r
385 @retval Others Other error as indicated.\r
386\r
387**/\r
388EFI_STATUS\r
389HttpConfigureTcp6 (\r
d1050b9d
MK
390 IN HTTP_PROTOCOL *HttpInstance,\r
391 IN HTTP_TOKEN_WRAP *Wrap\r
b659408b
ZL
392 );\r
393\r
47f51a06 394/**\r
f75a7f56 395 Check existing TCP connection, if in error state, recover TCP4 connection. Then,\r
dac45de3 396 connect one TLS session if required.\r
47f51a06
YT
397\r
398 @param[in] HttpInstance The HTTP instance private data.\r
399\r
400 @retval EFI_SUCCESS The TCP connection is established.\r
401 @retval EFI_NOT_READY TCP4 protocol child is not created or configured.\r
402 @retval Others Other error as indicated.\r
403\r
404**/\r
405EFI_STATUS\r
406HttpConnectTcp4 (\r
d1050b9d 407 IN HTTP_PROTOCOL *HttpInstance\r
47f51a06
YT
408 );\r
409\r
410/**\r
f75a7f56 411 Check existing TCP connection, if in error state, recover TCP6 connection. Then,\r
dac45de3 412 connect one TLS session if required.\r
b659408b
ZL
413\r
414 @param[in] HttpInstance The HTTP instance private data.\r
415\r
416 @retval EFI_SUCCESS The TCP connection is established.\r
417 @retval EFI_NOT_READY TCP6 protocol child is not created or configured.\r
418 @retval Others Other error as indicated.\r
419\r
420**/\r
421EFI_STATUS\r
422HttpConnectTcp6 (\r
d1050b9d 423 IN HTTP_PROTOCOL *HttpInstance\r
b659408b
ZL
424 );\r
425\r
426/**\r
dac45de3 427 Send the HTTP or HTTPS message through TCP4 or TCP6.\r
47f51a06
YT
428\r
429 @param[in] HttpInstance The HTTP instance private data.\r
430 @param[in] Wrap The HTTP token's wrap data.\r
431 @param[in] TxString Buffer containing the HTTP message string.\r
432 @param[in] TxStringLen Length of the HTTP message string in bytes.\r
433\r
434 @retval EFI_SUCCESS The HTTP message is queued into TCP transmit queue.\r
435 @retval Others Other error as indicated.\r
436\r
437**/\r
438EFI_STATUS\r
b659408b 439HttpTransmitTcp (\r
47f51a06
YT
440 IN HTTP_PROTOCOL *HttpInstance,\r
441 IN HTTP_TOKEN_WRAP *Wrap,\r
442 IN UINT8 *TxString,\r
443 IN UINTN TxStringLen\r
444 );\r
445\r
47f51a06
YT
446/**\r
447 Check whether the user's token or event has already\r
b659408b 448 been enqueue on HTTP Tx or Rx Token list.\r
47f51a06
YT
449\r
450 @param[in] Map The container of either user's transmit or receive\r
451 token.\r
452 @param[in] Item Current item to check against.\r
ba3b642d 453 @param[in] Context The Token to check against.\r
47f51a06
YT
454\r
455 @retval EFI_ACCESS_DENIED The token or event has already been enqueued in IP\r
456 @retval EFI_SUCCESS The current item isn't the same token/event as the\r
457 context.\r
458\r
459**/\r
460EFI_STATUS\r
461EFIAPI\r
462HttpTokenExist (\r
d1050b9d
MK
463 IN NET_MAP *Map,\r
464 IN NET_MAP_ITEM *Item,\r
465 IN VOID *Context\r
47f51a06
YT
466 );\r
467\r
468/**\r
b659408b 469 Check whether the HTTP message associated with TxToken or Tx6Token is already sent out.\r
47f51a06
YT
470\r
471 @param[in] Map The container of TxToken.\r
472 @param[in] Item Current item to check against.\r
ba3b642d 473 @param[in] Context The Token to check against.\r
47f51a06
YT
474\r
475 @retval EFI_NOT_READY The HTTP message is still queued in the list.\r
476 @retval EFI_SUCCESS The HTTP message has been sent out.\r
477\r
478**/\r
479EFI_STATUS\r
480EFIAPI\r
481HttpTcpNotReady (\r
d1050b9d
MK
482 IN NET_MAP *Map,\r
483 IN NET_MAP_ITEM *Item,\r
484 IN VOID *Context\r
47f51a06
YT
485 );\r
486\r
b659408b 487/**\r
dac45de3 488 Initialize Http session.\r
b659408b
ZL
489\r
490 @param[in] HttpInstance The HTTP instance private data.\r
491 @param[in] Wrap The HTTP token's wrap data.\r
dac45de3
JW
492 @param[in] Configure The Flag indicates whether need to initialize session.\r
493 @param[in] TlsConfigure The Flag indicates whether it's the new Tls session.\r
b659408b 494\r
f75a7f56 495 @retval EFI_SUCCESS The initialization of session is done.\r
b659408b
ZL
496 @retval Others Other error as indicated.\r
497\r
498**/\r
499EFI_STATUS\r
dac45de3 500HttpInitSession (\r
b659408b 501 IN HTTP_PROTOCOL *HttpInstance,\r
a2e61982 502 IN HTTP_TOKEN_WRAP *Wrap,\r
dac45de3
JW
503 IN BOOLEAN Configure,\r
504 IN BOOLEAN TlsConfigure\r
b659408b
ZL
505 );\r
506\r
47f51a06 507/**\r
ba3b642d 508 Transmit the HTTP or HTTPS message by processing the associated HTTP token.\r
47f51a06 509\r
b659408b 510 @param[in] Map The container of TxToken or Tx6Token.\r
47f51a06 511 @param[in] Item Current item to check against.\r
ba3b642d 512 @param[in] Context The Token to check against.\r
47f51a06
YT
513\r
514 @retval EFI_OUT_OF_RESOURCES Failed to allocate resources.\r
515 @retval EFI_SUCCESS The HTTP message is queued into TCP transmit\r
516 queue.\r
517\r
518**/\r
519EFI_STATUS\r
520EFIAPI\r
521HttpTcpTransmit (\r
d1050b9d
MK
522 IN NET_MAP *Map,\r
523 IN NET_MAP_ITEM *Item,\r
524 IN VOID *Context\r
47f51a06
YT
525 );\r
526\r
527/**\r
528 Receive the HTTP response by processing the associated HTTP token.\r
529\r
b659408b 530 @param[in] Map The container of Rx4Token or Rx6Token.\r
47f51a06 531 @param[in] Item Current item to check against.\r
ba3b642d 532 @param[in] Context The Token to check against.\r
47f51a06
YT
533\r
534 @retval EFI_SUCCESS The HTTP response is queued into TCP receive\r
535 queue.\r
536 @retval Others Other error as indicated.\r
537\r
538**/\r
539EFI_STATUS\r
540EFIAPI\r
541HttpTcpReceive (\r
d1050b9d
MK
542 IN NET_MAP *Map,\r
543 IN NET_MAP_ITEM *Item,\r
544 IN VOID *Context\r
47f51a06
YT
545 );\r
546\r
b659408b
ZL
547/**\r
548 Receive the HTTP header by processing the associated HTTP token.\r
549\r
550 @param[in] HttpInstance The HTTP instance private data.\r
551 @param[in, out] SizeofHeaders The HTTP header length.\r
ba3b642d 552 @param[in, out] BufferSize The size of buffer to cache the header message.\r
b347a22a 553 @param[in] Timeout The time to wait for receiving the header packet.\r
b659408b 554\r
f75a7f56 555 @retval EFI_SUCCESS The HTTP header is received.\r
b659408b
ZL
556 @retval Others Other errors as indicated.\r
557\r
558**/\r
559EFI_STATUS\r
560HttpTcpReceiveHeader (\r
d1050b9d
MK
561 IN HTTP_PROTOCOL *HttpInstance,\r
562 IN OUT UINTN *SizeofHeaders,\r
563 IN OUT UINTN *BufferSize,\r
564 IN EFI_EVENT Timeout\r
b659408b
ZL
565 );\r
566\r
567/**\r
568 Receive the HTTP body by processing the associated HTTP token.\r
569\r
570 @param[in] Wrap The HTTP token's wrap data.\r
571 @param[in] HttpMsg The HTTP message data.\r
572\r
f75a7f56 573 @retval EFI_SUCCESS The HTTP body is received.\r
b659408b
ZL
574 @retval Others Other error as indicated.\r
575\r
576**/\r
577EFI_STATUS\r
578HttpTcpReceiveBody (\r
d1050b9d
MK
579 IN HTTP_TOKEN_WRAP *Wrap,\r
580 IN EFI_HTTP_MESSAGE *HttpMsg\r
b659408b
ZL
581 );\r
582\r
583/**\r
584 Clean up Tcp Tokens while the Tcp transmission error occurs.\r
585\r
586 @param[in] Wrap Pointer to HTTP token's wrap data.\r
f75a7f56 587\r
b659408b
ZL
588**/\r
589VOID\r
590HttpTcpTokenCleanup (\r
d1050b9d 591 IN HTTP_TOKEN_WRAP *Wrap\r
b659408b
ZL
592 );\r
593\r
47f51a06
YT
594/**\r
595 The work function of EfiHttpResponse().\r
596\r
597 @param[in] Wrap Pointer to HTTP token's wrap data.\r
598\r
599 @retval EFI_SUCCESS Allocation succeeded.\r
ba3b642d 600 @retval EFI_OUT_OF_RESOURCES Failed to complete the operation due to lack of resources.\r
47f51a06
YT
601 @retval EFI_NOT_READY Can't find a corresponding TxToken.\r
602\r
603**/\r
604EFI_STATUS\r
605HttpResponseWorker (\r
d1050b9d 606 IN HTTP_TOKEN_WRAP *Wrap\r
47f51a06
YT
607 );\r
608\r
ab796d3e
HL
609/**\r
610 Send Events via EDKII_HTTP_CALLBACK_PROTOCOL.\r
611\r
612 @param[in] Event The event that occurs in the current state.\r
613 @param[in] EventStatus The Status of Event, EFI_SUCCESS or other errors.\r
614\r
615**/\r
616VOID\r
617HttpNotify (\r
d1050b9d
MK
618 IN EDKII_HTTP_CALLBACK_EVENT Event,\r
619 IN EFI_STATUS EventStatus\r
ab796d3e
HL
620 );\r
621\r
47f51a06 622#endif\r