]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/HttpDxe/HttpProto.h
BaseTools/Capsule: Do not support -o with --dump-info
[mirror_edk2.git] / NetworkPkg / HttpDxe / HttpProto.h
index cdad5b0e48c84aa91426941b2a79def54cab95d0..fa57dbfd39d9de12cadcddd6d0e0d552def92fe9 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The header files of miscellaneous routines for HttpDxe driver.\r
 \r
-Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>\r
 (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
@@ -59,7 +59,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 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
@@ -83,6 +84,22 @@ typedef struct {
   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
@@ -109,18 +126,18 @@ typedef struct _HTTP_PROTOCOL {
   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
   // Rx4Token or Rx6Token used for receiving HTTP header.\r
   //\r
@@ -141,7 +158,8 @@ typedef struct _HTTP_PROTOCOL {
   // 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
@@ -153,6 +171,36 @@ typedef struct _HTTP_PROTOCOL {
   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
@@ -173,7 +221,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
@@ -250,14 +298,14 @@ 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
@@ -270,7 +318,7 @@ HttpCloseTcpRxEvent (
   @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
@@ -352,7 +400,8 @@ HttpConfigureTcp6 (
   );\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
@@ -367,7 +416,8 @@ HttpConnectTcp4 (
   );\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
@@ -382,7 +432,7 @@ HttpConnectTcp6 (
   );\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
@@ -443,25 +493,27 @@ HttpTcpNotReady (
   );\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 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
@@ -508,7 +560,7 @@ HttpTcpReceive (
   @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
@@ -525,24 +577,22 @@ HttpTcpReceiveHeader (
 \r
   @param[in]  Wrap               The HTTP token's wrap data.\r
   @param[in]  HttpMsg            The HTTP message data.\r
-  @param[in]  Timeout            The time to wait for receiving the body packet.\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  EFI_EVENT             Timeout\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