/** @file\r
The header files of miscellaneous routines for HttpDxe driver.\r
\r
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>\r
+(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#define HTTP_BUFFER_SIZE_DEAULT 65535\r
#define HTTP_MAX_SYN_BACK_LOG 5\r
#define HTTP_CONNECTION_TIMEOUT 60\r
+#define HTTP_RESPONSE_TIMEOUT 5\r
#define HTTP_DATA_RETRIES 12\r
#define HTTP_FIN_TIMEOUT 2\r
#define HTTP_KEEP_ALIVE_PROBES 6\r
typedef struct _HTTP_SERVICE {\r
UINT32 Signature;\r
EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;\r
- EFI_HANDLE ImageHandle;\r
+ EFI_HANDLE Ip4DriverBindingHandle;\r
+ EFI_HANDLE Ip6DriverBindingHandle;\r
EFI_HANDLE ControllerHandle;\r
EFI_HANDLE Tcp4ChildHandle;\r
EFI_HANDLE Tcp6ChildHandle;\r
EFI_HTTP_METHOD Method;\r
} HTTP_TCP_TOKEN_WRAP;\r
\r
+typedef struct {\r
+ EFI_TLS_VERSION Version;\r
+ EFI_TLS_CONNECTION_END ConnectionEnd;\r
+ EFI_TLS_VERIFY VerifyMethod;\r
+ EFI_TLS_SESSION_STATE SessionState;\r
+} TLS_CONFIG_DATA;\r
+\r
+//\r
+// Callback data for HTTP_PARSER_CALLBACK()\r
+//\r
+typedef struct {\r
+ UINTN ParseDataLength;\r
+ VOID *ParseData;\r
+ VOID *Wrap;\r
+} HTTP_CALLBACK_DATA;\r
+\r
typedef struct _HTTP_PROTOCOL {\r
UINT32 Signature;\r
EFI_HTTP_PROTOCOL Http;\r
LIST_ENTRY Link; // Link to all HTTP instance from the service.\r
BOOLEAN InDestroy;\r
INTN State;\r
+ EFI_HTTP_METHOD Method;\r
+\r
+ UINTN StatusCode;\r
+\r
+ EFI_EVENT TimeoutEvent;\r
\r
EFI_HANDLE Tcp4ChildHandle;\r
EFI_TCP4_PROTOCOL *Tcp4;\r
CHAR8 *RemoteHost;\r
UINT16 RemotePort;\r
EFI_IPv4_ADDRESS RemoteAddr;\r
- \r
+\r
EFI_HANDLE Tcp6ChildHandle;\r
EFI_TCP6_PROTOCOL *Tcp6;\r
EFI_TCP6_CONFIG_DATA Tcp6CfgData;\r
EFI_TCP6_OPTION Tcp6Option;\r
- \r
+\r
EFI_TCP6_CONNECTION_TOKEN Tcp6ConnToken;\r
BOOLEAN IsTcp6ConnDone;\r
EFI_TCP6_CLOSE_TOKEN Tcp6CloseToken;\r
BOOLEAN IsTcp6CloseDone;\r
EFI_IPv6_ADDRESS RemoteIpv6Addr;\r
\r
-\r
- \r
//\r
// Rx4Token or Rx6Token used for receiving HTTP header.\r
//\r
// HTTP message-body parser.\r
//\r
VOID *MsgParser;\r
- \r
+ HTTP_CALLBACK_DATA CallbackData;\r
+\r
EFI_HTTP_VERSION HttpVersion;\r
UINT32 TimeOutMillisec;\r
BOOLEAN LocalAddressIsIPv6;\r
NET_MAP RxTokens;\r
\r
CHAR8 *Url;\r
+\r
+ //\r
+ // Https Support\r
+ //\r
+ BOOLEAN UseHttps;\r
+\r
+ EFI_SERVICE_BINDING_PROTOCOL *TlsSb;\r
+ EFI_HANDLE TlsChildHandle; /// Tls ChildHandle\r
+ TLS_CONFIG_DATA TlsConfigData;\r
+ EFI_TLS_PROTOCOL *Tls;\r
+ EFI_TLS_CONFIGURATION_PROTOCOL *TlsConfiguration;\r
+ EFI_TLS_SESSION_STATE TlsSessionState;\r
+\r
+ //\r
+ // TlsTxData used for transmitting TLS related messages.\r
+ //\r
+ EFI_TCP4_IO_TOKEN Tcp4TlsTxToken;\r
+ EFI_TCP4_TRANSMIT_DATA Tcp4TlsTxData;\r
+ EFI_TCP6_IO_TOKEN Tcp6TlsTxToken;\r
+ EFI_TCP6_TRANSMIT_DATA Tcp6TlsTxData;\r
+ BOOLEAN TlsIsTxDone;\r
+\r
+ //\r
+ // TlsRxData used for receiving TLS related messages.\r
+ //\r
+ EFI_TCP4_IO_TOKEN Tcp4TlsRxToken;\r
+ EFI_TCP4_RECEIVE_DATA Tcp4TlsRxData;\r
+ EFI_TCP6_IO_TOKEN Tcp6TlsRxToken;\r
+ EFI_TCP6_RECEIVE_DATA Tcp6TlsRxData;\r
+ BOOLEAN TlsIsRxDone;\r
} HTTP_PROTOCOL;\r
\r
typedef struct {\r
)\r
\r
/**\r
- The common notify function used in HTTP driver. \r
+ The common notify function used in HTTP driver.\r
\r
@param[in] Event The event signaled.\r
@param[in] Context The context.\r
**/\r
EFI_STATUS\r
HttpCreateTcpRxEvent (\r
- IN HTTP_TOKEN_WRAP *Wrap \r
+ IN HTTP_TOKEN_WRAP *Wrap\r
);\r
\r
/**\r
Close Events for Tcp Receive Tokens for HTTP body and HTTP header.\r
\r
@param[in] Wrap Pointer to HTTP token's wrap data.\r
- \r
+\r
**/\r
VOID\r
HttpCloseTcpRxEvent (\r
@param[in, out] HttpInstance Pointer to HTTP_PROTOCOL structure.\r
@param[in] IpVersion Indicate us TCP4 protocol or TCP6 protocol.\r
\r
- @retval EFI_SUCCESS HTTP_PROTOCOL structure is initialized successfully. \r
+ @retval EFI_SUCCESS HTTP_PROTOCOL structure is initialized successfully.\r
@retval Others Other error as indicated.\r
\r
**/\r
);\r
\r
/**\r
- Check existing TCP connection, if in error state, receover TCP4 connection.\r
+ Check existing TCP connection, if in error state, recover TCP4 connection. Then,\r
+ connect one TLS session if required.\r
\r
@param[in] HttpInstance The HTTP instance private data.\r
\r
);\r
\r
/**\r
- Check existing TCP connection, if in error state, recover TCP6 connection.\r
+ Check existing TCP connection, if in error state, recover TCP6 connection. Then,\r
+ connect one TLS session if required.\r
\r
@param[in] HttpInstance The HTTP instance private data.\r
\r
);\r
\r
/**\r
- Send the HTTP message through TCP4 or TCP6.\r
+ Send the HTTP or HTTPS message through TCP4 or TCP6.\r
\r
@param[in] HttpInstance The HTTP instance private data.\r
@param[in] Wrap The HTTP token's wrap data.\r
IN UINTN TxStringLen\r
);\r
\r
-/**\r
- Translate the status code in HTTP message to EFI_HTTP_STATUS_CODE defined \r
- in UEFI 2.5 specification.\r
-\r
- @param[in] StatusCode The status code value in HTTP message.\r
-\r
- @return Value defined in EFI_HTTP_STATUS_CODE .\r
-\r
-**/\r
-EFI_HTTP_STATUS_CODE\r
-HttpMappingToStatusCode (\r
- IN UINTN StatusCode\r
- );\r
-\r
/**\r
Check whether the user's token or event has already\r
been enqueue on HTTP Tx or Rx Token list.\r
);\r
\r
/**\r
- Initialize TCP related data.\r
+ Initialize Http session.\r
\r
@param[in] HttpInstance The HTTP instance private data.\r
@param[in] Wrap The HTTP token's wrap data.\r
+ @param[in] Configure The Flag indicates whether need to initialize session.\r
+ @param[in] TlsConfigure The Flag indicates whether it's the new Tls session.\r
\r
- @retval EFI_SUCCESS The initialization of TCP instance is done. \r
+ @retval EFI_SUCCESS The initialization of session is done.\r
@retval Others Other error as indicated.\r
\r
**/\r
EFI_STATUS\r
-HttpInitTcp (\r
+HttpInitSession (\r
IN HTTP_PROTOCOL *HttpInstance,\r
- IN HTTP_TOKEN_WRAP *Wrap\r
+ IN HTTP_TOKEN_WRAP *Wrap,\r
+ IN BOOLEAN Configure,\r
+ IN BOOLEAN TlsConfigure\r
);\r
\r
/**\r
- Transmit the HTTP mssage by processing the associated HTTP token.\r
+ Transmit the HTTP or HTTPS mssage by processing the associated HTTP token.\r
\r
@param[in] Map The container of TxToken or Tx6Token.\r
@param[in] Item Current item to check against.\r
@param[in] HttpInstance The HTTP instance private data.\r
@param[in, out] SizeofHeaders The HTTP header length.\r
@param[in, out] BufferSize The size of buffer to cacahe the header message.\r
+ @param[in] Timeout The time to wait for receiving the header packet.\r
\r
- @retval EFI_SUCCESS The HTTP header is received. \r
+ @retval EFI_SUCCESS The HTTP header is received.\r
@retval Others Other errors as indicated.\r
\r
**/\r
HttpTcpReceiveHeader (\r
IN HTTP_PROTOCOL *HttpInstance,\r
IN OUT UINTN *SizeofHeaders,\r
- IN OUT UINTN *BufferSize\r
+ IN OUT UINTN *BufferSize,\r
+ IN EFI_EVENT Timeout\r
);\r
\r
/**\r
@param[in] Wrap The HTTP token's wrap data.\r
@param[in] HttpMsg The HTTP message data.\r
\r
- @retval EFI_SUCCESS The HTTP body is received. \r
+ @retval EFI_SUCCESS The HTTP body is received.\r
@retval Others Other error as indicated.\r
\r
**/\r
Clean up Tcp Tokens while the Tcp transmission error occurs.\r
\r
@param[in] Wrap Pointer to HTTP token's wrap data.\r
- \r
+\r
**/\r
VOID\r
HttpTcpTokenCleanup (\r
IN HTTP_TOKEN_WRAP *Wrap\r
);\r
\r
-/**\r
- Generate HTTP request string.\r
-\r
- @param[in] HttpInstance Pointer to HTTP_PROTOCOL structure.\r
- @param[in] Message Pointer to storage containing HTTP message data.\r
- @param[in] Url The URL of a remote host.\r
-\r
- @return Pointer to the created HTTP request string.\r
- @return NULL if any error occured.\r
-\r
-**/\r
-CHAR8 *\r
-HttpGenRequestString (\r
- IN HTTP_PROTOCOL *HttpInstance,\r
- IN EFI_HTTP_MESSAGE *Message,\r
- IN CHAR8 *Url\r
- );\r
-\r
/**\r
The work function of EfiHttpResponse().\r
\r