]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/HttpDxe/HttpProto.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / NetworkPkg / HttpDxe / HttpProto.h
index 3a574949de24657e084fc8445b54b37eb131050b..620eb3915843057c2420f97b6aeea796a36574c1 100644 (file)
@@ -1,21 +1,16 @@
 /** @file\r
   The header files of miscellaneous routines for HttpDxe driver.\r
 \r
-Copyright (c) 2015 - 2016, 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 - 2021, 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
 #ifndef __EFI_HTTP_PROTO_H__\r
 #define __EFI_HTTP_PROTO_H__\r
 \r
-#define DEF_BUF_LEN                         2048\r
+#define DEF_BUF_LEN  2048\r
 \r
 #define HTTP_SERVICE_SIGNATURE  SIGNATURE_32('H', 't', 't', 'S')\r
 \r
@@ -27,138 +22,188 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
   HTTP_SERVICE_SIGNATURE \\r
   )\r
 \r
-\r
 //\r
 // The state of HTTP protocol. It starts from UNCONFIGED.\r
 //\r
-#define HTTP_STATE_UNCONFIGED        0\r
-#define HTTP_STATE_HTTP_CONFIGED     1\r
-#define HTTP_STATE_TCP_CONFIGED      2\r
-#define HTTP_STATE_TCP_UNCONFIGED    3\r
-#define HTTP_STATE_TCP_CONNECTED     4\r
-#define HTTP_STATE_TCP_CLOSED        5\r
+#define HTTP_STATE_UNCONFIGED      0\r
+#define HTTP_STATE_HTTP_CONFIGED   1\r
+#define HTTP_STATE_TCP_CONFIGED    2\r
+#define HTTP_STATE_TCP_UNCONFIGED  3\r
+#define HTTP_STATE_TCP_CONNECTED   4\r
+#define HTTP_STATE_TCP_CLOSED      5\r
 \r
 //\r
 // TCP configured data.\r
 //\r
-#define HTTP_TOS_DEAULT              8\r
-#define HTTP_TTL_DEAULT              255\r
-#define HTTP_BUFFER_SIZE_DEAULT      65535\r
-#define HTTP_MAX_SYN_BACK_LOG        5\r
-#define HTTP_CONNECTION_TIMEOUT      60\r
-#define HTTP_DATA_RETRIES            12\r
-#define HTTP_FIN_TIMEOUT             2\r
-#define HTTP_KEEP_ALIVE_PROBES       6\r
-#define HTTP_KEEP_ALIVE_TIME         7200\r
-#define HTTP_KEEP_ALIVE_INTERVAL     30\r
-\r
-#define HTTP_URL_BUFFER_LEN          4096\r
+#define HTTP_TOS_DEAULT           8\r
+#define HTTP_TTL_DEAULT           255\r
+#define HTTP_BUFFER_SIZE_DEAULT   65535\r
+#define HTTP_MAX_SYN_BACK_LOG     5\r
+#define HTTP_CONNECTION_TIMEOUT   60\r
+#define HTTP_DATA_RETRIES         12\r
+#define HTTP_FIN_TIMEOUT          2\r
+#define HTTP_KEEP_ALIVE_PROBES    6\r
+#define HTTP_KEEP_ALIVE_TIME      7200\r
+#define HTTP_KEEP_ALIVE_INTERVAL  30\r
+\r
+#define HTTP_URL_BUFFER_LEN  4096\r
 \r
 typedef struct _HTTP_SERVICE {\r
-  UINT32                        Signature;\r
-  EFI_SERVICE_BINDING_PROTOCOL  ServiceBinding;\r
-  EFI_HANDLE                    ImageHandle;\r
-  EFI_HANDLE                    ControllerHandle;\r
-  EFI_HANDLE                    Tcp4ChildHandle;\r
-  EFI_HANDLE                    Tcp6ChildHandle;\r
-  LIST_ENTRY                    ChildrenList;\r
-  UINTN                         ChildrenNumber;\r
-  INTN                          State;\r
+  UINT32                          Signature;\r
+  EFI_SERVICE_BINDING_PROTOCOL    ServiceBinding;\r
+  EFI_HANDLE                      Ip4DriverBindingHandle;\r
+  EFI_HANDLE                      Ip6DriverBindingHandle;\r
+  EFI_HANDLE                      ControllerHandle;\r
+  EFI_HANDLE                      Tcp4ChildHandle;\r
+  EFI_HANDLE                      Tcp6ChildHandle;\r
+  LIST_ENTRY                      ChildrenList;\r
+  UINTN                           ChildrenNumber;\r
+  INTN                            State;\r
 } HTTP_SERVICE;\r
 \r
 typedef struct {\r
-  EFI_TCP4_IO_TOKEN             Tx4Token;\r
-  EFI_TCP4_TRANSMIT_DATA        Tx4Data;\r
-  EFI_TCP6_IO_TOKEN             Tx6Token;\r
-  EFI_TCP6_TRANSMIT_DATA        Tx6Data;\r
-  EFI_TCP4_IO_TOKEN             Rx4Token;\r
-  EFI_TCP4_RECEIVE_DATA         Rx4Data;\r
-  EFI_TCP6_IO_TOKEN             Rx6Token;\r
-  EFI_TCP6_RECEIVE_DATA         Rx6Data;\r
-  BOOLEAN                       IsTxDone;\r
-  BOOLEAN                       IsRxDone;\r
-  UINTN                         BodyLen;\r
-  EFI_HTTP_METHOD               Method;\r
+  EFI_TCP4_IO_TOKEN         Tx4Token;\r
+  EFI_TCP4_TRANSMIT_DATA    Tx4Data;\r
+  EFI_TCP6_IO_TOKEN         Tx6Token;\r
+  EFI_TCP6_TRANSMIT_DATA    Tx6Data;\r
+  EFI_TCP4_IO_TOKEN         Rx4Token;\r
+  EFI_TCP4_RECEIVE_DATA     Rx4Data;\r
+  EFI_TCP6_IO_TOKEN         Rx6Token;\r
+  EFI_TCP6_RECEIVE_DATA     Rx6Data;\r
+  BOOLEAN                   IsTxDone;\r
+  BOOLEAN                   IsRxDone;\r
+  UINTN                     BodyLen;\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_VERIFY_HOST       VerifyHost;\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
-  EFI_HANDLE                    Handle;\r
-  HTTP_SERVICE                  *Service;\r
-  LIST_ENTRY                    Link;   // Link to all HTTP instance from the service.\r
-  BOOLEAN                       InDestroy;\r
-  INTN                          State;\r
-\r
-  UINTN                         StatusCode;\r
-\r
-  EFI_HANDLE                    Tcp4ChildHandle;\r
-  EFI_TCP4_PROTOCOL             *Tcp4;\r
-  EFI_TCP4_CONFIG_DATA          Tcp4CfgData;\r
-  EFI_TCP4_OPTION               Tcp4Option;\r
-\r
-  EFI_TCP4_CONNECTION_TOKEN     Tcp4ConnToken;\r
-  BOOLEAN                       IsTcp4ConnDone;\r
-  EFI_TCP4_CLOSE_TOKEN          Tcp4CloseToken;\r
-  BOOLEAN                       IsTcp4CloseDone;\r
-  CHAR8                         *RemoteHost;\r
-  UINT16                        RemotePort;\r
-  EFI_IPv4_ADDRESS              RemoteAddr;\r
-  \r
-  EFI_HANDLE                    Tcp6ChildHandle;\r
-  EFI_TCP6_PROTOCOL             *Tcp6;\r
-  EFI_TCP6_CONFIG_DATA          Tcp6CfgData;\r
-  EFI_TCP6_OPTION               Tcp6Option;\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
+  UINT32                            Signature;\r
+  EFI_HTTP_PROTOCOL                 Http;\r
+  EFI_HANDLE                        Handle;\r
+  HTTP_SERVICE                      *Service;\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
+  EFI_TCP4_CONFIG_DATA              Tcp4CfgData;\r
+  EFI_TCP4_OPTION                   Tcp4Option;\r
+\r
+  EFI_TCP4_CONNECTION_TOKEN         Tcp4ConnToken;\r
+  BOOLEAN                           IsTcp4ConnDone;\r
+  EFI_TCP4_CLOSE_TOKEN              Tcp4CloseToken;\r
+  BOOLEAN                           IsTcp4CloseDone;\r
+  CHAR8                             *RemoteHost;\r
+  UINT16                            RemotePort;\r
+  EFI_IPv4_ADDRESS                  RemoteAddr;\r
+\r
+  EFI_HANDLE                        Tcp6ChildHandle;\r
+  EFI_TCP6_PROTOCOL                 *Tcp6;\r
+  EFI_TCP6_CONFIG_DATA              Tcp6CfgData;\r
+  EFI_TCP6_OPTION                   Tcp6Option;\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
   // Rx4Token or Rx6Token used for receiving HTTP header.\r
   //\r
-  EFI_TCP4_IO_TOKEN             Rx4Token;\r
-  EFI_TCP4_RECEIVE_DATA         Rx4Data;\r
-  EFI_TCP6_IO_TOKEN             Rx6Token;\r
-  EFI_TCP6_RECEIVE_DATA         Rx6Data;\r
-  BOOLEAN                       IsRxDone;\r
-\r
-  CHAR8                         **EndofHeader;\r
-  CHAR8                         **HttpHeaders;\r
-  CHAR8                         *CacheBody;\r
-  CHAR8                         *NextMsg;\r
-  UINTN                         CacheLen;\r
-  UINTN                         CacheOffset;\r
+  EFI_TCP4_IO_TOKEN                 Rx4Token;\r
+  EFI_TCP4_RECEIVE_DATA             Rx4Data;\r
+  EFI_TCP6_IO_TOKEN                 Rx6Token;\r
+  EFI_TCP6_RECEIVE_DATA             Rx6Data;\r
+  BOOLEAN                           IsRxDone;\r
+\r
+  CHAR8                             **EndofHeader;\r
+  CHAR8                             **HttpHeaders;\r
+  CHAR8                             *CacheBody;\r
+  CHAR8                             *NextMsg;\r
+  UINTN                             CacheLen;\r
+  UINTN                             CacheOffset;\r
 \r
   //\r
   // HTTP message-body parser.\r
   //\r
-  VOID                          *MsgParser;\r
-  \r
-  EFI_HTTP_VERSION              HttpVersion;\r
-  UINT32                        TimeOutMillisec;\r
-  BOOLEAN                       LocalAddressIsIPv6;\r
+  VOID                              *MsgParser;\r
+  HTTP_CALLBACK_DATA                CallbackData;\r
+\r
+  EFI_HTTP_VERSION                  HttpVersion;\r
+  UINT32                            TimeOutMillisec;\r
+  BOOLEAN                           LocalAddressIsIPv6;\r
+\r
+  EFI_HTTPv4_ACCESS_POINT           IPv4Node;\r
+  EFI_HTTPv6_ACCESS_POINT           Ipv6Node;\r
+\r
+  NET_MAP                           TxTokens;\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
-  EFI_HTTPv4_ACCESS_POINT       IPv4Node;\r
-  EFI_HTTPv6_ACCESS_POINT       Ipv6Node;\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
-  NET_MAP                       TxTokens;\r
-  NET_MAP                       RxTokens;\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
 \r
-  CHAR8                         *Url;\r
+  BOOLEAN                           ConnectionClose;\r
 } HTTP_PROTOCOL;\r
 \r
 typedef struct {\r
-  EFI_HTTP_TOKEN                *HttpToken;\r
-  HTTP_PROTOCOL                 *HttpInstance;\r
-  HTTP_TCP_TOKEN_WRAP           TcpWrap;\r
+  EFI_HTTP_TOKEN         *HttpToken;\r
+  HTTP_PROTOCOL          *HttpInstance;\r
+  HTTP_TCP_TOKEN_WRAP    TcpWrap;\r
 } HTTP_TOKEN_WRAP;\r
 \r
-\r
 #define HTTP_PROTOCOL_SIGNATURE  SIGNATURE_32('H', 't', 't', 'P')\r
 \r
 #define HTTP_INSTANCE_FROM_PROTOCOL(a) \\r
@@ -170,7 +215,7 @@ typedef struct {
   )\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
@@ -194,7 +239,7 @@ HttpCommonNotify (
 **/\r
 EFI_STATUS\r
 HttpCreateTcpConnCloseEvent (\r
-  IN  HTTP_PROTOCOL        *HttpInstance\r
+  IN  HTTP_PROTOCOL  *HttpInstance\r
   );\r
 \r
 /**\r
@@ -205,7 +250,7 @@ HttpCreateTcpConnCloseEvent (
 **/\r
 VOID\r
 HttpCloseTcpConnCloseEvent (\r
-  IN  HTTP_PROTOCOL        *HttpInstance\r
+  IN  HTTP_PROTOCOL  *HttpInstance\r
   );\r
 \r
 /**\r
@@ -219,7 +264,7 @@ HttpCloseTcpConnCloseEvent (
 **/\r
 EFI_STATUS\r
 HttpCreateTcpTxEvent (\r
-  IN  HTTP_TOKEN_WRAP      *Wrap\r
+  IN  HTTP_TOKEN_WRAP  *Wrap\r
   );\r
 \r
 /**\r
@@ -233,7 +278,7 @@ HttpCreateTcpTxEvent (
 **/\r
 EFI_STATUS\r
 HttpCreateTcpRxEventForHeader (\r
-  IN  HTTP_PROTOCOL        *HttpInstance\r
+  IN  HTTP_PROTOCOL  *HttpInstance\r
   );\r
 \r
 /**\r
@@ -247,34 +292,34 @@ HttpCreateTcpRxEventForHeader (
 **/\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
-  IN  HTTP_TOKEN_WRAP      *Wrap\r
+  IN  HTTP_TOKEN_WRAP  *Wrap\r
   );\r
 \r
 /**\r
-  Intiialize the HTTP_PROTOCOL structure to the unconfigured state.\r
+  Initialize the HTTP_PROTOCOL structure to the unconfigured state.\r
 \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
 EFI_STATUS\r
 HttpInitProtocol (\r
-  IN OUT HTTP_PROTOCOL           *HttpInstance,\r
-  IN     BOOLEAN                 IpVersion\r
+  IN OUT HTTP_PROTOCOL  *HttpInstance,\r
+  IN     BOOLEAN        IpVersion\r
   );\r
 \r
 /**\r
@@ -285,7 +330,7 @@ HttpInitProtocol (
 **/\r
 VOID\r
 HttpCleanProtocol (\r
-  IN  HTTP_PROTOCOL          *HttpInstance\r
+  IN  HTTP_PROTOCOL  *HttpInstance\r
   );\r
 \r
 /**\r
@@ -299,7 +344,7 @@ HttpCleanProtocol (
 **/\r
 EFI_STATUS\r
 HttpCreateConnection (\r
-  IN  HTTP_PROTOCOL        *HttpInstance\r
+  IN  HTTP_PROTOCOL  *HttpInstance\r
   );\r
 \r
 /**\r
@@ -313,7 +358,7 @@ HttpCreateConnection (
 **/\r
 EFI_STATUS\r
 HttpCloseConnection (\r
-  IN  HTTP_PROTOCOL        *HttpInstance\r
+  IN  HTTP_PROTOCOL  *HttpInstance\r
   );\r
 \r
 /**\r
@@ -328,8 +373,8 @@ HttpCloseConnection (
 **/\r
 EFI_STATUS\r
 HttpConfigureTcp4 (\r
-  IN  HTTP_PROTOCOL        *HttpInstance,\r
-  IN  HTTP_TOKEN_WRAP      *Wrap\r
+  IN  HTTP_PROTOCOL    *HttpInstance,\r
+  IN  HTTP_TOKEN_WRAP  *Wrap\r
   );\r
 \r
 /**\r
@@ -344,12 +389,13 @@ HttpConfigureTcp4 (
 **/\r
 EFI_STATUS\r
 HttpConfigureTcp6 (\r
-  IN  HTTP_PROTOCOL        *HttpInstance,\r
-  IN  HTTP_TOKEN_WRAP      *Wrap\r
+  IN  HTTP_PROTOCOL    *HttpInstance,\r
+  IN  HTTP_TOKEN_WRAP  *Wrap\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
@@ -360,11 +406,12 @@ HttpConfigureTcp6 (
 **/\r
 EFI_STATUS\r
 HttpConnectTcp4 (\r
-  IN  HTTP_PROTOCOL        *HttpInstance\r
+  IN  HTTP_PROTOCOL  *HttpInstance\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
@@ -375,11 +422,11 @@ HttpConnectTcp4 (
 **/\r
 EFI_STATUS\r
 HttpConnectTcp6 (\r
-  IN  HTTP_PROTOCOL        *HttpInstance\r
+  IN  HTTP_PROTOCOL  *HttpInstance\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
@@ -398,20 +445,6 @@ HttpTransmitTcp (
   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
@@ -419,7 +452,7 @@ HttpMappingToStatusCode (
   @param[in]  Map                The container of either user's transmit or receive\r
                                  token.\r
   @param[in]  Item               Current item to check against.\r
-  @param[in]  Context            The Token to check againist.\r
+  @param[in]  Context            The Token to check against.\r
 \r
   @retval EFI_ACCESS_DENIED      The token or event has already been enqueued in IP\r
   @retval EFI_SUCCESS            The current item isn't the same token/event as the\r
@@ -429,9 +462,9 @@ HttpMappingToStatusCode (
 EFI_STATUS\r
 EFIAPI\r
 HttpTokenExist (\r
-  IN NET_MAP                *Map,\r
-  IN NET_MAP_ITEM           *Item,\r
-  IN VOID                   *Context\r
+  IN NET_MAP       *Map,\r
+  IN NET_MAP_ITEM  *Item,\r
+  IN VOID          *Context\r
   );\r
 \r
 /**\r
@@ -439,7 +472,7 @@ HttpTokenExist (
 \r
   @param[in]  Map                The container of TxToken.\r
   @param[in]  Item               Current item to check against.\r
-  @param[in]  Context            The Token to check againist.\r
+  @param[in]  Context            The Token to check against.\r
 \r
   @retval EFI_NOT_READY          The HTTP message is still queued in the list.\r
   @retval EFI_SUCCESS            The HTTP message has been sent out.\r
@@ -448,35 +481,37 @@ HttpTokenExist (
 EFI_STATUS\r
 EFIAPI\r
 HttpTcpNotReady (\r
-  IN NET_MAP                *Map,\r
-  IN NET_MAP_ITEM           *Item,\r
-  IN VOID                   *Context\r
+  IN NET_MAP       *Map,\r
+  IN NET_MAP_ITEM  *Item,\r
+  IN VOID          *Context\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 the first time to initialize Tcp.\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  BOOLEAN          Configure\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 message 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]  Context            The Token to check againist.\r
+  @param[in]  Context            The Token to check against.\r
 \r
   @retval EFI_OUT_OF_RESOURCES   Failed to allocate resources.\r
   @retval EFI_SUCCESS            The HTTP message is queued into TCP transmit\r
@@ -486,9 +521,9 @@ HttpInitTcp (
 EFI_STATUS\r
 EFIAPI\r
 HttpTcpTransmit (\r
-  IN NET_MAP                *Map,\r
-  IN NET_MAP_ITEM           *Item,\r
-  IN VOID                   *Context\r
+  IN NET_MAP       *Map,\r
+  IN NET_MAP_ITEM  *Item,\r
+  IN VOID          *Context\r
   );\r
 \r
 /**\r
@@ -496,7 +531,7 @@ HttpTcpTransmit (
 \r
   @param[in]  Map                The container of Rx4Token or Rx6Token.\r
   @param[in]  Item               Current item to check against.\r
-  @param[in]  Context            The Token to check againist.\r
+  @param[in]  Context            The Token to check against.\r
 \r
   @retval EFI_SUCCESS            The HTTP response is queued into TCP receive\r
                                  queue.\r
@@ -506,9 +541,9 @@ HttpTcpTransmit (
 EFI_STATUS\r
 EFIAPI\r
 HttpTcpReceive (\r
-  IN NET_MAP                *Map,\r
-  IN NET_MAP_ITEM           *Item,\r
-  IN VOID                   *Context\r
+  IN NET_MAP       *Map,\r
+  IN NET_MAP_ITEM  *Item,\r
+  IN VOID          *Context\r
   );\r
 \r
 /**\r
@@ -516,17 +551,19 @@ HttpTcpReceive (
 \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, out]  BufferSize      The size of buffer to cache 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
 EFI_STATUS\r
 HttpTcpReceiveHeader (\r
-  IN  HTTP_PROTOCOL         *HttpInstance,\r
-  IN  OUT UINTN             *SizeofHeaders,\r
-  IN  OUT UINTN             *BufferSize\r
+  IN  HTTP_PROTOCOL  *HttpInstance,\r
+  IN  OUT UINTN      *SizeofHeaders,\r
+  IN  OUT UINTN      *BufferSize,\r
+  IN  EFI_EVENT      Timeout\r
   );\r
 \r
 /**\r
@@ -535,43 +572,25 @@ HttpTcpReceiveHeader (
   @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
 EFI_STATUS\r
 HttpTcpReceiveBody (\r
-  IN  HTTP_TOKEN_WRAP       *Wrap,\r
-  IN  EFI_HTTP_MESSAGE      *HttpMsg\r
+  IN  HTTP_TOKEN_WRAP   *Wrap,\r
+  IN  EFI_HTTP_MESSAGE  *HttpMsg\r
   );\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
+  IN  HTTP_TOKEN_WRAP  *Wrap\r
   );\r
 \r
 /**\r
@@ -580,13 +599,26 @@ HttpGenRequestString (
   @param[in]  Wrap                Pointer to HTTP token's wrap data.\r
 \r
   @retval EFI_SUCCESS             Allocation succeeded.\r
-  @retval EFI_OUT_OF_RESOURCES    Failed to complete the opration due to lack of resources.\r
+  @retval EFI_OUT_OF_RESOURCES    Failed to complete the operation due to lack of resources.\r
   @retval EFI_NOT_READY           Can't find a corresponding TxToken.\r
 \r
 **/\r
 EFI_STATUS\r
 HttpResponseWorker (\r
-  IN  HTTP_TOKEN_WRAP           *Wrap\r
+  IN  HTTP_TOKEN_WRAP  *Wrap\r
+  );\r
+\r
+/**\r
+  Send Events via EDKII_HTTP_CALLBACK_PROTOCOL.\r
+\r
+  @param[in]  Event               The event that occurs in the current state.\r
+  @param[in]  EventStatus         The Status of Event, EFI_SUCCESS or other errors.\r
+\r
+**/\r
+VOID\r
+HttpNotify (\r
+  IN  EDKII_HTTP_CALLBACK_EVENT  Event,\r
+  IN  EFI_STATUS                 EventStatus\r
   );\r
 \r
 #endif\r