2 The header files of miscellaneous routines for HttpDxe driver.
4 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
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.
15 #ifndef __EFI_HTTP_PROTO_H__
16 #define __EFI_HTTP_PROTO_H__
18 #define DEF_BUF_LEN 2048
20 #define HTTP_SERVICE_SIGNATURE SIGNATURE_32('H', 't', 't', 'S')
22 #define HTTP_SERVICE_FROM_PROTOCOL(a) \
27 HTTP_SERVICE_SIGNATURE \
31 // The state of HTTP protocol. It starts from UNCONFIGED.
33 #define HTTP_STATE_UNCONFIGED 0
34 #define HTTP_STATE_HTTP_CONFIGED 1
35 #define HTTP_STATE_TCP_CONFIGED 2
36 #define HTTP_STATE_TCP_UNCONFIGED 3
37 #define HTTP_STATE_TCP_CONNECTED 4
38 #define HTTP_STATE_TCP_CLOSED 5
41 // TCP configured data.
43 #define HTTP_TOS_DEAULT 8
44 #define HTTP_TTL_DEAULT 255
45 #define HTTP_BUFFER_SIZE_DEAULT 65535
46 #define HTTP_MAX_SYN_BACK_LOG 5
47 #define HTTP_CONNECTION_TIMEOUT 60
48 #define HTTP_DATA_RETRIES 12
49 #define HTTP_FIN_TIMEOUT 2
50 #define HTTP_KEEP_ALIVE_PROBES 6
51 #define HTTP_KEEP_ALIVE_TIME 7200
52 #define HTTP_KEEP_ALIVE_INTERVAL 30
54 #define HTTP_URL_BUFFER_LEN 4096
56 typedef struct _HTTP_SERVICE
{
58 EFI_SERVICE_BINDING_PROTOCOL ServiceBinding
;
59 EFI_HANDLE ImageHandle
;
60 EFI_HANDLE ControllerHandle
;
61 LIST_ENTRY ChildrenList
;
63 EFI_HANDLE TcpChildHandle
;
68 EFI_TCP4_IO_TOKEN TxToken
;
69 EFI_TCP4_TRANSMIT_DATA TxData
;
71 EFI_TCP4_IO_TOKEN RxToken
;
72 EFI_TCP4_RECEIVE_DATA RxData
;
75 EFI_HTTP_METHOD Method
;
76 } HTTP_TCP_TOKEN_WRAP
;
78 typedef struct _HTTP_PROTOCOL
{
80 EFI_HTTP_PROTOCOL Http
;
82 HTTP_SERVICE
*Service
;
83 LIST_ENTRY Link
; // Link to all HTTP instance from the service.
87 EFI_HANDLE TcpChildHandle
;
88 EFI_TCP4_PROTOCOL
*Tcp4
;
89 EFI_TCP4_CONFIG_DATA Tcp4CfgData
;
90 EFI_TCP4_OPTION Tcp4Option
;
92 EFI_TCP4_CONNECTION_TOKEN ConnToken
;
94 EFI_TCP4_CLOSE_TOKEN CloseToken
;
99 EFI_IPv4_ADDRESS RemoteAddr
;
101 // RxToken used for receiving HTTP header.
103 EFI_TCP4_IO_TOKEN RxToken
;
104 EFI_TCP4_RECEIVE_DATA RxData
;
113 // HTTP message-body parser.
117 EFI_HTTP_VERSION HttpVersion
;
118 UINT32 TimeOutMillisec
;
119 BOOLEAN LocalAddressIsIPv6
;
121 EFI_HTTPv4_ACCESS_POINT IPv4Node
;
130 EFI_HTTP_TOKEN
*HttpToken
;
131 HTTP_PROTOCOL
*HttpInstance
;
132 HTTP_TCP_TOKEN_WRAP TcpWrap
;
136 #define HTTP_PROTOCOL_SIGNATURE SIGNATURE_32('H', 't', 't', 'P')
138 #define HTTP_INSTANCE_FROM_PROTOCOL(a) \
143 HTTP_PROTOCOL_SIGNATURE \
147 The common notify function used in HTTP driver.
149 @param[in] Event The event signaled.
150 @param[in] Context The context.
161 Create events for the TCP4 connection token and TCP4 close token.
163 @param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.
165 @retval EFI_SUCCESS The events are created successfully.
166 @retval others Other error as indicated.
170 HttpCreateTcp4ConnCloseEvent (
171 IN HTTP_PROTOCOL
*HttpInstance
175 Close events in the TCP4 connection token and TCP4 close token.
177 @param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.
181 HttpCloseTcp4ConnCloseEvent (
182 IN HTTP_PROTOCOL
*HttpInstance
186 Create event for the TCP4 transmit token.
188 @param[in] Wrap Point to HTTP token's wrap data.
190 @retval EFI_SUCCESS The events is created successfully.
191 @retval others Other error as indicated.
195 HttpCreateTcp4TxEvent (
196 IN HTTP_TOKEN_WRAP
*Wrap
200 Create event for the TCP4 receive token which is used to receive HTTP header.
202 @param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.
204 @retval EFI_SUCCESS The events is created successfully.
205 @retval others Other error as indicated.
209 HttpCreateTcp4RxEventForHeader (
210 IN HTTP_PROTOCOL
*HttpInstance
214 Create event for the TCP4 receive token which is used to receive HTTP body.
216 @param[in] Wrap Point to HTTP token's wrap data.
218 @retval EFI_SUCCESS The events is created successfully.
219 @retval others Other error as indicated.
223 HttpCreateTcp4RxEvent (
224 IN HTTP_TOKEN_WRAP
*Wrap
228 Intiialize the HTTP_PROTOCOL structure to the unconfigured state.
230 @param[in] HttpSb The HTTP service private instance.
231 @param[in, out] HttpInstance Pointer to HTTP_PROTOCOL structure.
233 @retval EFI_SUCCESS HTTP_PROTOCOL structure is initialized successfully.
234 @retval Others Other error as indicated.
239 IN HTTP_SERVICE
*HttpSb
,
240 IN OUT HTTP_PROTOCOL
*HttpInstance
244 Clean up the HTTP child, release all the resources used by it.
246 @param[in] HttpInstance The HTTP child to clean up.
251 IN HTTP_PROTOCOL
*HttpInstance
255 Establish TCP connection with HTTP server.
257 @param[in] HttpInstance The HTTP instance private data.
259 @retval EFI_SUCCESS The TCP connection is established.
260 @retval Others Other error as indicated.
264 HttpCreateConnection (
265 IN HTTP_PROTOCOL
*HttpInstance
269 Close existing TCP connection.
271 @param[in] HttpInstance The HTTP instance private data.
273 @retval EFI_SUCCESS The TCP connection is closed.
274 @retval Others Other error as indicated.
278 HttpCloseConnection (
279 IN HTTP_PROTOCOL
*HttpInstance
283 Configure TCP4 protocol child.
285 @param[in] HttpInstance The HTTP instance private data.
286 @param[in] Wrap The HTTP token's wrap data.
288 @retval EFI_SUCCESS The TCP4 protocol child is configured.
289 @retval Others Other error as indicated.
294 IN HTTP_PROTOCOL
*HttpInstance
,
295 IN HTTP_TOKEN_WRAP
*Wrap
299 Check existing TCP connection, if in error state, receover TCP4 connection.
301 @param[in] HttpInstance The HTTP instance private data.
303 @retval EFI_SUCCESS The TCP connection is established.
304 @retval EFI_NOT_READY TCP4 protocol child is not created or configured.
305 @retval Others Other error as indicated.
310 IN HTTP_PROTOCOL
*HttpInstance
314 Send the HTTP message through TCP4.
316 @param[in] HttpInstance The HTTP instance private data.
317 @param[in] Wrap The HTTP token's wrap data.
318 @param[in] TxString Buffer containing the HTTP message string.
319 @param[in] TxStringLen Length of the HTTP message string in bytes.
321 @retval EFI_SUCCESS The HTTP message is queued into TCP transmit queue.
322 @retval Others Other error as indicated.
327 IN HTTP_PROTOCOL
*HttpInstance
,
328 IN HTTP_TOKEN_WRAP
*Wrap
,
334 Translate the status code in HTTP message to EFI_HTTP_STATUS_CODE defined
335 in UEFI 2.5 specification.
337 @param[in] StatusCode The status code value in HTTP message.
339 @return Value defined in EFI_HTTP_STATUS_CODE .
343 HttpMappingToStatusCode (
348 Check whether the user's token or event has already
349 been enqueue on HTTP TxToken or RxToken list.
351 @param[in] Map The container of either user's transmit or receive
353 @param[in] Item Current item to check against.
354 @param[in] Context The Token to check againist.
356 @retval EFI_ACCESS_DENIED The token or event has already been enqueued in IP
357 @retval EFI_SUCCESS The current item isn't the same token/event as the
365 IN NET_MAP_ITEM
*Item
,
370 Check whether the HTTP message associated with TxToken is already sent out.
372 @param[in] Map The container of TxToken.
373 @param[in] Item Current item to check against.
374 @param[in] Context The Token to check againist.
376 @retval EFI_NOT_READY The HTTP message is still queued in the list.
377 @retval EFI_SUCCESS The HTTP message has been sent out.
384 IN NET_MAP_ITEM
*Item
,
389 Transmit the HTTP mssage by processing the associated HTTP token.
391 @param[in] Map The container of TxToken.
392 @param[in] Item Current item to check against.
393 @param[in] Context The Token to check againist.
395 @retval EFI_OUT_OF_RESOURCES Failed to allocate resources.
396 @retval EFI_SUCCESS The HTTP message is queued into TCP transmit
404 IN NET_MAP_ITEM
*Item
,
409 Receive the HTTP response by processing the associated HTTP token.
411 @param[in] Map The container of RxToken.
412 @param[in] Item Current item to check against.
413 @param[in] Context The Token to check againist.
415 @retval EFI_SUCCESS The HTTP response is queued into TCP receive
417 @retval Others Other error as indicated.
424 IN NET_MAP_ITEM
*Item
,
429 Generate HTTP request string.
431 @param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.
432 @param[in] Message Pointer to storage containing HTTP message data.
433 @param[in] Url The URL of a remote host.
435 @return Pointer to the created HTTP request string.
436 @return NULL if any error occured.
440 HttpGenRequestString (
441 IN HTTP_PROTOCOL
*HttpInstance
,
442 IN EFI_HTTP_MESSAGE
*Message
,
447 The work function of EfiHttpResponse().
449 @param[in] Wrap Pointer to HTTP token's wrap data.
451 @retval EFI_SUCCESS Allocation succeeded.
452 @retval EFI_OUT_OF_RESOURCES Failed to complete the opration due to lack of resources.
453 @retval EFI_NOT_READY Can't find a corresponding TxToken.
458 IN HTTP_TOKEN_WRAP
*Wrap