]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/HttpBootDxe/HttpBootSupport.h
NetworkPkg/DxeHttpLib: Migrate HTTP header manipulation APIs
[mirror_edk2.git] / NetworkPkg / HttpBootDxe / HttpBootSupport.h
index f2b1846c056c250c3b56ac27479ebdc12c97d55c..c2ac1b785a8f7d56c6a6b20890c91cd2abe7b39a 100644 (file)
@@ -1,14 +1,9 @@
 /** @file\r
   Support functions declaration for UEFI HTTP boot driver.\r
 \r
-Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials are licensed and made available under \r
-the terms and conditions of the BSD License that accompanies this distribution.  \r
-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 2020 Hewlett-Packard Development Company, L.P.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -92,155 +87,6 @@ HttpBootPrintErrorMessage (
   EFI_HTTP_STATUS_CODE            StatusCode\r
   );\r
 \r
-//\r
-// A wrapper structure to hold the HTTP headers.\r
-//\r
-typedef struct {\r
-  UINTN                       MaxHeaderCount;\r
-  UINTN                       HeaderCount;\r
-  EFI_HTTP_HEADER             *Headers;\r
-} HTTP_IO_HEADER;\r
-\r
-/**\r
-  Create a HTTP_IO_HEADER to hold the HTTP header items.\r
-\r
-  @param[in]  MaxHeaderCount         The maximun number of HTTP header in this holder.\r
-\r
-  @return    A pointer of the HTTP header holder or NULL if failed.\r
-  \r
-**/\r
-HTTP_IO_HEADER *\r
-HttpBootCreateHeader (\r
-  IN  UINTN                MaxHeaderCount\r
-  );\r
-\r
-/**\r
-  Destroy the HTTP_IO_HEADER and release the resouces. \r
-\r
-  @param[in]  HttpIoHeader       Point to the HTTP header holder to be destroyed.\r
-\r
-**/\r
-VOID\r
-HttpBootFreeHeader (\r
-  IN  HTTP_IO_HEADER       *HttpIoHeader\r
-  );\r
-\r
-/**\r
-  Set or update a HTTP header with the field name and corresponding value.\r
-\r
-  @param[in]  HttpIoHeader       Point to the HTTP header holder.\r
-  @param[in]  FieldName          Null terminated string which describes a field name. \r
-  @param[in]  FieldValue         Null terminated string which describes the corresponding field value.\r
-\r
-  @retval  EFI_SUCCESS           The HTTP header has been set or updated.\r
-  @retval  EFI_INVALID_PARAMETER Any input parameter is invalid.\r
-  @retval  EFI_OUT_OF_RESOURCES  Insufficient resource to complete the operation.\r
-  @retval  Other                 Unexpected error happened.\r
-  \r
-**/\r
-EFI_STATUS\r
-HttpBootSetHeader (\r
-  IN  HTTP_IO_HEADER       *HttpIoHeader,\r
-  IN  CHAR8                *FieldName,\r
-  IN  CHAR8                *FieldValue\r
-  );\r
-\r
-///\r
-/// HTTP_IO_CALLBACK_EVENT\r
-///\r
-typedef enum {\r
-  HttpIoRequest,\r
-  HttpIoResponse\r
-} HTTP_IO_CALLBACK_EVENT;\r
-\r
-/**\r
-  HttpIo Callback function which will be invoked when specified HTTP_IO_CALLBACK_EVENT happened.\r
-\r
-  @param[in]    EventType      Indicate the Event type that occurs in the current callback.\r
-  @param[in]    Message        HTTP message which will be send to, or just received from HTTP server.\r
-  @param[in]    Context        The Callback Context pointer.\r
-  \r
-  @retval EFI_SUCCESS          Tells the HttpIo to continue the HTTP process.\r
-  @retval Others               Tells the HttpIo to abort the current HTTP process.\r
-**/\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI * HTTP_IO_CALLBACK) (\r
-  IN  HTTP_IO_CALLBACK_EVENT    EventType,\r
-  IN  EFI_HTTP_MESSAGE          *Message,\r
-  IN  VOID                      *Context\r
-  );\r
-\r
-//\r
-// HTTP_IO configuration data for IPv4\r
-//\r
-typedef struct {\r
-  EFI_HTTP_VERSION          HttpVersion;\r
-  UINT32                    RequestTimeOut;  // In milliseconds.\r
-  UINT32                    ResponseTimeOut; // In milliseconds.\r
-  BOOLEAN                   UseDefaultAddress;\r
-  EFI_IPv4_ADDRESS          LocalIp;\r
-  EFI_IPv4_ADDRESS          SubnetMask;\r
-  UINT16                    LocalPort;\r
-} HTTP4_IO_CONFIG_DATA;\r
-\r
-//\r
-// HTTP_IO configuration data for IPv6\r
-//\r
-typedef struct {\r
-  EFI_HTTP_VERSION          HttpVersion;\r
-  UINT32                    RequestTimeOut;  // In milliseconds.\r
-  BOOLEAN                   UseDefaultAddress;\r
-  EFI_IPv6_ADDRESS          LocalIp;\r
-  UINT16                    LocalPort;\r
-} HTTP6_IO_CONFIG_DATA;\r
-\r
-\r
-//\r
-// HTTP_IO configuration\r
-//\r
-typedef union {\r
-  HTTP4_IO_CONFIG_DATA       Config4;\r
-  HTTP6_IO_CONFIG_DATA       Config6;\r
-} HTTP_IO_CONFIG_DATA;\r
-\r
-//\r
-// HTTP_IO wrapper of the EFI HTTP service.\r
-//\r
-typedef struct {\r
-  UINT8                     IpVersion;\r
-  EFI_HANDLE                Image;\r
-  EFI_HANDLE                Controller;\r
-  EFI_HANDLE                Handle;\r
-  \r
-  EFI_HTTP_PROTOCOL         *Http;\r
-\r
-  HTTP_IO_CALLBACK          Callback;\r
-  VOID                      *Context;\r
-\r
-  EFI_HTTP_TOKEN            ReqToken;\r
-  EFI_HTTP_MESSAGE          ReqMessage;\r
-  EFI_HTTP_TOKEN            RspToken;\r
-  EFI_HTTP_MESSAGE          RspMessage;\r
-\r
-  BOOLEAN                   IsTxDone;\r
-  BOOLEAN                   IsRxDone;\r
-\r
-  EFI_EVENT                 TimeoutEvent;\r
-} HTTP_IO;\r
-\r
-//\r
-// A wrapper structure to hold the received HTTP response data.\r
-//\r
-typedef struct {\r
-  EFI_HTTP_RESPONSE_DATA      Response;\r
-  UINTN                       HeaderCount;\r
-  EFI_HTTP_HEADER             *Headers;\r
-  UINTN                       BodyLength;\r
-  CHAR8                       *Body;\r
-  EFI_STATUS                  Status;\r
-} HTTP_IO_RESPONSE_DATA;\r
-\r
 /**\r
   Retrieve the host address using the EFI_DNS6_PROTOCOL.\r
 \r
@@ -250,13 +96,13 @@ typedef struct {
 \r
   @retval EFI_SUCCESS             Operation succeeded.\r
   @retval EFI_DEVICE_ERROR        An unexpected network error occurred.\r
-  @retval Others                  Other errors as indicated.  \r
+  @retval Others                  Other errors as indicated.\r
 **/\r
 EFI_STATUS\r
 HttpBootDns (\r
   IN     HTTP_BOOT_PRIVATE_DATA   *Private,\r
   IN     CHAR16                   *HostName,\r
-     OUT EFI_IPv6_ADDRESS         *IpAddress \r
+     OUT EFI_IPv6_ADDRESS         *IpAddress\r
   );\r
 \r
 /**\r
@@ -273,103 +119,11 @@ HttpBootCommonNotify (
   IN VOID                *Context\r
   );\r
 \r
-/**\r
-  Create a HTTP_IO to access the HTTP service. It will create and configure\r
-  a HTTP child handle.\r
-\r
-  @param[in]  Image          The handle of the driver image.\r
-  @param[in]  Controller     The handle of the controller.\r
-  @param[in]  IpVersion      IP_VERSION_4 or IP_VERSION_6.\r
-  @param[in]  ConfigData     The HTTP_IO configuration data.\r
-  @param[in]  Callback       Callback function which will be invoked when specified\r
-                             HTTP_IO_CALLBACK_EVENT happened.\r
-  @param[in]  Context        The Context data which will be passed to the Callback function.\r
-  @param[out] HttpIo         The HTTP_IO.\r
-  \r
-  @retval EFI_SUCCESS            The HTTP_IO is created and configured.\r
-  @retval EFI_INVALID_PARAMETER  One or more parameters are invalid.\r
-  @retval EFI_UNSUPPORTED        One or more of the control options are not\r
-                                 supported in the implementation.\r
-  @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.\r
-  @retval Others                 Failed to create the HTTP_IO or configure it.\r
-\r
-**/\r
-EFI_STATUS\r
-HttpIoCreateIo (\r
-  IN EFI_HANDLE             Image,\r
-  IN EFI_HANDLE             Controller,\r
-  IN UINT8                  IpVersion,\r
-  IN HTTP_IO_CONFIG_DATA    *ConfigData,\r
-  IN HTTP_IO_CALLBACK       Callback,\r
-  IN VOID                   *Context,\r
-  OUT HTTP_IO               *HttpIo\r
-  );\r
-\r
-/**\r
-  Destroy the HTTP_IO and release the resouces. \r
-\r
-  @param[in]  HttpIo          The HTTP_IO which wraps the HTTP service to be destroyed.\r
-\r
-**/\r
-VOID\r
-HttpIoDestroyIo (\r
-  IN HTTP_IO                *HttpIo\r
-  );\r
-\r
-/**\r
-  Synchronously send a HTTP REQUEST message to the server.\r
-  \r
-  @param[in]   HttpIo           The HttpIo wrapping the HTTP service.\r
-  @param[in]   Request          A pointer to storage such data as URL and HTTP method.\r
-  @param[in]   HeaderCount      Number of HTTP header structures in Headers list. \r
-  @param[in]   Headers          Array containing list of HTTP headers.\r
-  @param[in]   BodyLength       Length in bytes of the HTTP body.\r
-  @param[in]   Body             Body associated with the HTTP request. \r
-  \r
-  @retval EFI_SUCCESS            The HTTP request is trasmitted.\r
-  @retval EFI_INVALID_PARAMETER  One or more parameters are invalid.\r
-  @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.\r
-  @retval EFI_DEVICE_ERROR       An unexpected network or system error occurred.\r
-  @retval Others                 Other errors as indicated.\r
-\r
-**/\r
-EFI_STATUS\r
-HttpIoSendRequest (\r
-  IN  HTTP_IO                *HttpIo,\r
-  IN  EFI_HTTP_REQUEST_DATA  *Request,      OPTIONAL\r
-  IN  UINTN                  HeaderCount,\r
-  IN  EFI_HTTP_HEADER        *Headers,      OPTIONAL\r
-  IN  UINTN                  BodyLength,\r
-  IN  VOID                   *Body          OPTIONAL\r
-  );\r
-\r
-/**\r
-  Synchronously receive a HTTP RESPONSE message from the server.\r
-  \r
-  @param[in]   HttpIo           The HttpIo wrapping the HTTP service.\r
-  @param[in]   RecvMsgHeader    TRUE to receive a new HTTP response (from message header).\r
-                                FALSE to continue receive the previous response message.\r
-  @param[out]  ResponseData     Point to a wrapper of the received response data.\r
-  \r
-  @retval EFI_SUCCESS            The HTTP response is received.\r
-  @retval EFI_INVALID_PARAMETER  One or more parameters are invalid.\r
-  @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.\r
-  @retval EFI_DEVICE_ERROR       An unexpected network or system error occurred.\r
-  @retval Others                 Other errors as indicated.\r
-\r
-**/\r
-EFI_STATUS\r
-HttpIoRecvResponse (\r
-  IN      HTTP_IO                  *HttpIo,\r
-  IN      BOOLEAN                  RecvMsgHeader,\r
-     OUT  HTTP_IO_RESPONSE_DATA    *ResponseData\r
-  );\r
-\r
 /**\r
   This function checks the HTTP(S) URI scheme.\r
 \r
   @param[in]    Uri              The pointer to the URI string.\r
-  \r
+\r
   @retval EFI_SUCCESS            The URI scheme is valid.\r
   @retval EFI_INVALID_PARAMETER  The URI scheme is not HTTP or HTTPS.\r
   @retval EFI_ACCESS_DENIED      HTTP is disabled and the URI is HTTP.\r
@@ -384,10 +138,10 @@ HttpBootCheckUriScheme (
   Get the URI address string from the input device path.\r
 \r
   Caller need to free the buffer in the UriAddress pointer.\r
-  \r
+\r
   @param[in]   FilePath         Pointer to the device path which contains a URI device path node.\r
   @param[out]  UriAddress       The URI address string extract from the device path.\r
-  \r
+\r
   @retval EFI_SUCCESS            The URI string is returned.\r
   @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.\r
 \r
@@ -403,16 +157,16 @@ HttpBootParseFilePath (
   and also the image's URI info.\r
 \r
   @param[in]    Uri              The pointer to the image's URI string.\r
-  @param[in]    UriParser        URI Parse result returned by NetHttpParseUrl(). \r
-  @param[in]    HeaderCount      Number of HTTP header structures in Headers list. \r
+  @param[in]    UriParser        URI Parse result returned by NetHttpParseUrl().\r
+  @param[in]    HeaderCount      Number of HTTP header structures in Headers list.\r
   @param[in]    Headers          Array containing list of HTTP headers.\r
   @param[out]   ImageType        The image type of the downloaded file.\r
-  \r
+\r
   @retval EFI_SUCCESS            The image type is returned in ImageType.\r
   @retval EFI_INVALID_PARAMETER  ImageType, Uri or UriParser is NULL.\r
   @retval EFI_INVALID_PARAMETER  HeaderCount is not zero, and Headers is NULL.\r
   @retval EFI_NOT_FOUND          Failed to identify the image type.\r
-  @retval Others                 Unexpect error happened.\r
+  @retval Others                 Unexpected error happened.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -426,7 +180,7 @@ HttpBootCheckImageType (
 \r
 /**\r
   This function register the RAM disk info to the system.\r
-  \r
+\r
   @param[in]       Private         The pointer to the driver's private data.\r
   @param[in]       BufferSize      The size of Buffer in bytes.\r
   @param[in]       Buffer          The base address of the RAM disk.\r
@@ -445,4 +199,17 @@ HttpBootRegisterRamDisk (
   IN  VOID                         *Buffer,\r
   IN  HTTP_BOOT_IMAGE_TYPE         ImageType\r
   );\r
+\r
+/**\r
+  Indicate if the HTTP status code indicates a redirection.\r
+\r
+  @param[in]  StatusCode      HTTP status code from server.\r
+\r
+  @return                     TRUE if it's redirection.\r
+\r
+**/\r
+BOOLEAN\r
+HttpBootIsHttpRedirectStatusCode (\r
+  IN   EFI_HTTP_STATUS_CODE        StatusCode\r
+  );\r
 #endif\r