Reviewed-by: Jiaxin Wu <jiaxin...@intel.com>

> -----Original Message-----
> From: Ghazi Belaam [mailto:ghazi.bel...@hpe.com]
> Sent: Saturday, March 5, 2016 6:08 AM
> To: edk2-devel@lists.01.org
> Cc: Tian, Feng <feng.t...@intel.com>; Zeng, Star <star.z...@intel.com>; Fu,
> Siyuan <siyuan...@intel.com>; Wu, Jiaxin <jiaxin...@intel.com>; samer.el-
> haj-mahm...@hpe.com; Ghazi Belaam <ghazi.bel...@hpe.com>
> Subject: [PATCH 2/2] NetworkPkg: Use the New Functions from HttpLib
> 
> After submitting changes for HttpLib, other modules should be able to use
> those functions
> 1 remove the private function and their calls
> 2 update it with the functions from httpLib
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ghazi Belaam <ghazi.bel...@hpe.com>
> ---
>  NetworkPkg/HttpBootDxe/HttpBootSupport.c           |  43 +---
>  NetworkPkg/HttpDxe/HttpImpl.c                      |   9 +-
>  NetworkPkg/HttpDxe/HttpProto.c                     | 112 +--------
>  NetworkPkg/HttpDxe/HttpProto.h                     |  33 +--
>  NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.h     |  94 +------
>  NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.inf   |   3 +-
>  NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesImpl.c    | 279 
> ---------------------
>  .../HttpUtilitiesDxe/HttpUtilitiesProtocol.c       |  27 +-
>  8 files changed, 35 insertions(+), 565 deletions(-)  delete mode 100644
> NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesImpl.c
> 
> diff --git a/NetworkPkg/HttpBootDxe/HttpBootSupport.c
> b/NetworkPkg/HttpBootDxe/HttpBootSupport.c
> index db2af78..5a22a17 100644
> --- a/NetworkPkg/HttpBootDxe/HttpBootSupport.c
> +++ b/NetworkPkg/HttpBootDxe/HttpBootSupport.c
> @@ -2,8 +2,9 @@
>    Support functions implementation for UEFI HTTP boot driver.
> 
>  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR> -This
> program and the accompanying materials are licensed and made available
> under -the terms and conditions of the BSD License that accompanies this
> distribution.
> +(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> This
> +program and the accompanying materials are licensed and made available
> +under the terms and conditions of the BSD License that accompanies this
> distribution.
>  The full text of the license may be found at
>  http://opensource.org/licenses/bsd-license.php.
> 
> @@ -548,44 +549,10 @@ HttpBootFreeHeader (  }
> 
>  /**
> -  Find a specified header field according to the field name.
> -
> -  @param[in]   HeaderCount      Number of HTTP header structures in
> Headers list.
> -  @param[in]   Headers          Array containing list of HTTP headers.
> -  @param[in]   FieldName        Null terminated string which describes a 
> field
> name.
> -
> -  @return    Pointer to the found header or NULL.
> -
> -**/
> -EFI_HTTP_HEADER *
> -HttpBootFindHeader (
> -  IN  UINTN                HeaderCount,
> -  IN  EFI_HTTP_HEADER      *Headers,
> -  IN  CHAR8                *FieldName
> -  )
> -{
> -  UINTN                 Index;
> -
> -  if (HeaderCount == 0 || Headers == NULL || FieldName == NULL) {
> -    return NULL;
> -  }
> -
> -  for (Index = 0; Index < HeaderCount; Index++){
> -    //
> -    // Field names are case-insensitive (RFC 2616).
> -    //
> -    if (AsciiStriCmp (Headers[Index].FieldName, FieldName) == 0) {
> -      return &Headers[Index];
> -    }
> -  }
> -  return NULL;
> -}
> -
> -/**
>    Set or update a HTTP header with the field name and corresponding value.
> 
>    @param[in]  HttpIoHeader       Point to the HTTP header holder.
> -  @param[in]  FieldName          Null terminated string which describes a 
> field
> name.
> +  @param[in]  FieldName          Null terminated string which describes a 
> field
> name.
>    @param[in]  FieldValue         Null terminated string which describes the
> corresponding field value.
> 
>    @retval  EFI_SUCCESS           The HTTP header has been set or updated.
> @@ -609,7 +576,7 @@ HttpBootSetHeader (
>      return EFI_INVALID_PARAMETER;
>    }
> 
> -  Header = HttpBootFindHeader (HttpIoHeader->HeaderCount,
> HttpIoHeader->Headers, FieldName);
> +  Header = HttpFindHeader (HttpIoHeader->HeaderCount,
> + HttpIoHeader->Headers, FieldName);
>    if (Header == NULL) {
>      //
>      // Add a new header.
> diff --git a/NetworkPkg/HttpDxe/HttpImpl.c
> b/NetworkPkg/HttpDxe/HttpImpl.c index a068cfb..63b683e 100644
> --- a/NetworkPkg/HttpDxe/HttpImpl.c
> +++ b/NetworkPkg/HttpDxe/HttpImpl.c
> @@ -2,7 +2,7 @@
>    Implementation of EFI_HTTP_PROTOCOL protocol interfaces.
> 
>    Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
> -  (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
> +  (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
> 
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of the BSD
> License @@ -497,9 +497,10 @@ EfiHttpRequest (
>        goto Error3;
>      }
>    }
> -  RequestStr = HttpGenRequestString (HttpInstance, HttpMsg, FileUrl);
> -  if (RequestStr == NULL) {
> -    Status = EFI_OUT_OF_RESOURCES;
> +
> +  Status = HttpGenRequestString (HttpMsg, FileUrl, &RequestStr);
> +
> +  if (EFI_ERROR (Status)) {
>      goto Error3;
>    }
> 
> diff --git a/NetworkPkg/HttpDxe/HttpProto.c
> b/NetworkPkg/HttpDxe/HttpProto.c index 579b9e4..d78577a 100644
> --- a/NetworkPkg/HttpDxe/HttpProto.c
> +++ b/NetworkPkg/HttpDxe/HttpProto.c
> @@ -1376,107 +1376,6 @@ HttpTransmitTcp (  }
> 
>  /**
> -  Translate the status code in HTTP message to EFI_HTTP_STATUS_CODE
> defined
> -  in UEFI 2.5 specification.
> -
> -  @param[in]  StatusCode         The status code value in HTTP message.
> -
> -  @return                        Value defined in EFI_HTTP_STATUS_CODE .
> -
> -**/
> -EFI_HTTP_STATUS_CODE
> -HttpMappingToStatusCode (
> -  IN UINTN                  StatusCode
> -  )
> -{
> -  switch (StatusCode) {
> -  case 100:
> -    return HTTP_STATUS_100_CONTINUE;
> -  case 101:
> -    return HTTP_STATUS_101_SWITCHING_PROTOCOLS;
> -  case 200:
> -    return HTTP_STATUS_200_OK;
> -  case 201:
> -    return HTTP_STATUS_201_CREATED;
> -  case 202:
> -    return HTTP_STATUS_202_ACCEPTED;
> -  case 203:
> -    return HTTP_STATUS_203_NON_AUTHORITATIVE_INFORMATION;
> -  case 204:
> -    return HTTP_STATUS_204_NO_CONTENT;
> -  case 205:
> -    return HTTP_STATUS_205_RESET_CONTENT;
> -  case 206:
> -    return HTTP_STATUS_206_PARTIAL_CONTENT;
> -  case 300:
> -    return HTTP_STATUS_300_MULTIPLE_CHIOCES;
> -  case 301:
> -    return HTTP_STATUS_301_MOVED_PERMANENTLY;
> -  case 302:
> -    return HTTP_STATUS_302_FOUND;
> -  case 303:
> -    return HTTP_STATUS_303_SEE_OTHER;
> -  case 304:
> -    return HTTP_STATUS_304_NOT_MODIFIED;
> -  case 305:
> -    return HTTP_STATUS_305_USE_PROXY;
> -  case 307:
> -    return HTTP_STATUS_307_TEMPORARY_REDIRECT;
> -  case 400:
> -    return HTTP_STATUS_400_BAD_REQUEST;
> -  case 401:
> -    return HTTP_STATUS_401_UNAUTHORIZED;
> -  case 402:
> -    return HTTP_STATUS_402_PAYMENT_REQUIRED;
> -  case 403:
> -    return HTTP_STATUS_403_FORBIDDEN;
> -  case 404:
> -    return HTTP_STATUS_404_NOT_FOUND;
> -  case 405:
> -    return HTTP_STATUS_405_METHOD_NOT_ALLOWED;
> -  case 406:
> -    return HTTP_STATUS_406_NOT_ACCEPTABLE;
> -  case 407:
> -    return HTTP_STATUS_407_PROXY_AUTHENTICATION_REQUIRED;
> -  case 408:
> -    return HTTP_STATUS_408_REQUEST_TIME_OUT;
> -  case 409:
> -    return HTTP_STATUS_409_CONFLICT;
> -  case 410:
> -    return HTTP_STATUS_410_GONE;
> -  case 411:
> -    return HTTP_STATUS_411_LENGTH_REQUIRED;
> -  case 412:
> -    return HTTP_STATUS_412_PRECONDITION_FAILED;
> -  case 413:
> -    return HTTP_STATUS_413_REQUEST_ENTITY_TOO_LARGE;
> -  case 414:
> -    return HTTP_STATUS_414_REQUEST_URI_TOO_LARGE;
> -  case 415:
> -    return HTTP_STATUS_415_UNSUPPORTED_MEDIA_TYPE;
> -  case 416:
> -    return HTTP_STATUS_416_REQUESTED_RANGE_NOT_SATISFIED;
> -  case 417:
> -    return HTTP_STATUS_417_EXPECTATION_FAILED;
> -  case 500:
> -    return HTTP_STATUS_500_INTERNAL_SERVER_ERROR;
> -  case 501:
> -    return HTTP_STATUS_501_NOT_IMPLEMENTED;
> -  case 502:
> -    return HTTP_STATUS_502_BAD_GATEWAY;
> -  case 503:
> -    return HTTP_STATUS_503_SERVICE_UNAVAILABLE;
> -  case 504:
> -    return HTTP_STATUS_504_GATEWAY_TIME_OUT;
> -  case 505:
> -    return HTTP_STATUS_505_HTTP_VERSION_NOT_SUPPORTED;
> -
> -  default:
> -    return HTTP_STATUS_UNSUPPORTED_STATUS;
> -  }
> -}
> -
> -/**
>    Check whether the user's token or event has already
>    been enqueue on HTTP Tx or Rx Token list.
> 
> @@ -1584,14 +1483,15 @@ HttpTcpTransmit (
>    //
>    // Create request message.
>    //
> -  RequestStr = HttpGenRequestString (
> -                 ValueInItem->HttpInstance,
> +  Status = HttpGenRequestString (
>                   ValueInItem->HttpToken->Message,
> -                 Url
> +                 Url,
> +                 &RequestStr
>                   );
>    FreePool (Url);
> -  if (RequestStr == NULL) {
> -    return EFI_OUT_OF_RESOURCES;
> +
> +  if (EFI_ERROR (Status)){
> +    return Status;
>    }
> 
>    //
> diff --git a/NetworkPkg/HttpDxe/HttpProto.h
> b/NetworkPkg/HttpDxe/HttpProto.h index 3a57494..7b4b343 100644
> --- a/NetworkPkg/HttpDxe/HttpProto.h
> +++ b/NetworkPkg/HttpDxe/HttpProto.h
> @@ -2,6 +2,7 @@
>    The header files of miscellaneous routines for HttpDxe driver.
> 
>  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
> +(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
>  This program and the accompanying materials  are licensed and made
> available under the terms and conditions of the BSD License  which
> accompanies this distribution.  The full text of the license may be found at
> @@ -399,20 +400,6 @@ HttpTransmitTcp (
>    );
> 
>  /**
> -  Translate the status code in HTTP message to EFI_HTTP_STATUS_CODE
> defined
> -  in UEFI 2.5 specification.
> -
> -  @param[in]  StatusCode         The status code value in HTTP message.
> -
> -  @return                        Value defined in EFI_HTTP_STATUS_CODE .
> -
> -**/
> -EFI_HTTP_STATUS_CODE
> -HttpMappingToStatusCode (
> -  IN UINTN                  StatusCode
> -  );
> -
> -/**
>    Check whether the user's token or event has already
>    been enqueue on HTTP Tx or Rx Token list.
> 
> @@ -557,24 +544,6 @@ HttpTcpTokenCleanup (
>    );
> 
>  /**
> -  Generate HTTP request string.
> -
> -  @param[in]  HttpInstance       Pointer to HTTP_PROTOCOL structure.
> -  @param[in]  Message            Pointer to storage containing HTTP message
> data.
> -  @param[in]  Url                The URL of a remote host.
> -
> -  @return     Pointer to the created HTTP request string.
> -  @return     NULL if any error occured.
> -
> -**/
> -CHAR8 *
> -HttpGenRequestString (
> -  IN  HTTP_PROTOCOL        *HttpInstance,
> -  IN  EFI_HTTP_MESSAGE     *Message,
> -  IN  CHAR8                *Url
> -  );
> -
> -/**
>    The work function of EfiHttpResponse().
> 
>    @param[in]  Wrap                Pointer to HTTP token's wrap data.
> diff --git a/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.h
> b/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.h
> index 70e9935..7f71955 100644
> --- a/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.h
> +++ b/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.h
> @@ -2,6 +2,7 @@
>    The header files of Http Utilities functions for HttpUtilities driver.
> 
>    Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> +  (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> 
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of the BSD
> License @@ -27,6 +28,7 @@  #include <Library/BaseLib.h>  #include
> <Library/UefiLib.h>  #include <Library/DebugLib.h>
> +#include <Library/HttpLib.h>
> 
>  //
>  // Consumed Protocols
> @@ -39,98 +41,6 @@
>  //
>  extern EFI_HTTP_UTILITIES_PROTOCOL mHttpUtilitiesProtocol;
> 
> -
> -/**
> -  Free existing HeaderFields.
> -
> -  @param[in]  HeaderFields       Pointer to array of key/value header pairs
> waitting for free.
> -  @param[in]  FieldCount         The number of header pairs in HeaderFields.
> -
> -**/
> -VOID
> -FreeHeaderFields (
> -  IN  EFI_HTTP_HEADER  *HeaderFields,
> -  IN  UINTN            FieldCount
> -  );
> -
> -
> -/**
> -  Find required header field in HeaderFields.
> -
> -  @param[in]  HeaderFields        Pointer to array of key/value header pairs.
> -  @param[in]  FieldCount          The number of header pairs.
> -  @param[in]  FieldName           Pointer to header field's name.
> -
> -  @return     Pointer to the queried header field.
> -  @return     NULL if not find this required header field.
> -
> -**/
> -EFI_HTTP_HEADER *
> -FindHttpHeader (
> -  IN  EFI_HTTP_HEADER  *HeaderFields,
> -  IN  UINTN            FieldCount,
> -  IN  CHAR8            *FieldName
> -  );
> -
> -
> -/**
> -  Check whether header field called FieldName is in DeleteList.
> -
> -  @param[in]  DeleteList        Pointer to array of key/value header pairs.
> -  @param[in]  DeleteCount       The number of header pairs.
> -  @param[in]  FieldName         Pointer to header field's name.
> -
> -  @return     TRUE if FieldName is not in DeleteList, that means this header
> field is valid.
> -  @return     FALSE if FieldName is in DeleteList, that means this header 
> field
> is invalid.
> -
> -**/
> -BOOLEAN
> -IsValidHttpHeader (
> -  IN  CHAR8            *DeleteList[],
> -  IN  UINTN            DeleteCount,
> -  IN  CHAR8            *FieldName
> -  );
> -
> -
> -/**
> -  Set FieldName and FieldValue into specified HttpHeader.
> -
> -  @param[in]  HttpHeader          Specified HttpHeader.
> -  @param[in]  FieldName           FieldName of this HttpHeader.
> -  @param[in]  FieldValue          FieldValue of this HttpHeader.
> -
> -
> -  @retval EFI_SUCCESS             The FieldName and FieldValue are set into
> HttpHeader successfully.
> -  @retval EFI_OUT_OF_RESOURCES    Failed to allocate resources.
> -
> -**/
> -EFI_STATUS
> -SetFieldNameAndValue (
> -  IN  EFI_HTTP_HEADER     *HttpHeader,
> -  IN  CHAR8               *FieldName,
> -  IN  CHAR8               *FieldValue
> -  );
> -
> -
> -/**
> -  Get one key/value header pair from the raw string.
> -
> -  @param[in]  String             Pointer to the raw string.
> -  @param[out] FieldName          Pointer to header field's name.
> -  @param[out] FieldValue         Pointer to header field's value.
> -
> -  @return     Pointer to the next raw string.
> -  @return     NULL if no key/value header pair from this raw string.
> -
> -**/
> -CHAR8 *
> -GetFieldNameAndValue (
> -  IN  CHAR8   *String,
> -  OUT CHAR8   **FieldName,
> -  OUT CHAR8   **FieldValue
> -  );
> -
> -
>  /**
>    Create HTTP header based on a combination of seed header, fields
>    to delete, and fields to append.
> diff --git a/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.inf
> b/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.inf
> index ffdbcd5..3f7551a 100644
> --- a/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.inf
> +++ b/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.inf
> @@ -2,6 +2,7 @@
>  #  Implementation of EFI Http Utilities Protocol interfaces.
>  #
>  #  Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> +#  (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
>  #
>  #  This program and the accompanying materials  #  are licensed and made
> available under the terms and conditions of the BSD License @@ -30,7 +31,6
> @@  [Sources]
>    HttpUtilitiesDxe.h
>    HttpUtilitiesDxe.c
> -  HttpUtilitiesImpl.c
>    HttpUtilitiesProtocol.c
> 
>  [LibraryClasses]
> @@ -41,6 +41,7 @@
>    BaseLib
>    UefiLib
>    DebugLib
> +  HttpLib
> 
>  [Protocols]
>    gEfiHttpUtilitiesProtocolGuid               ## PRODUCES
> diff --git a/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesImpl.c
> b/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesImpl.c
> deleted file mode 100644
> index adb50af..0000000
> --- a/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesImpl.c
> +++ /dev/null
> @@ -1,279 +0,0 @@
> -/** @file
> -  The functions for HttpUtilities driver.
> -
> -  Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> -
> -  This program and the accompanying materials
> -  are licensed and made available under the terms and conditions of the BSD
> License
> -  which accompanies this distribution.  The full text of the license may be
> found at
> -  http://opensource.org/licenses/bsd-license.php.
> -
> -  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> BASIS,
> -  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
> EXPRESS OR IMPLIED.
> -
> -**/
> -
> -#include "HttpUtilitiesDxe.h"
> -
> -
> -/**
> -  Get the next string, which is distinguished by specified seperator.
> -
> -  @param[in]  String             Pointer to the string.
> -  @param[in]  Seperator          Specified seperator used to distinguish 
> where
> is the beginning
> -                                 of next string.
> -
> -  @return     Pointer to the next string.
> -  @return     NULL if not find or String is NULL.
> -
> -**/
> -CHAR8 *
> -AsciiStrGetNextToken (
> -  IN CONST CHAR8 *String,
> -  IN       CHAR8 Seperator
> -  )
> -{
> -  CONST CHAR8 *Token;
> -
> -  Token = String;
> -  while (TRUE) {
> -    if (*Token == 0) {
> -      return NULL;
> -    }
> -    if (*Token == Seperator) {
> -      return (CHAR8 *)(Token + 1);
> -    }
> -    Token++;
> -  }
> -}
> -
> -
> -/**
> -  Free existing HeaderFields.
> -
> -  @param[in]  HeaderFields       Pointer to array of key/value header pairs
> waitting for free.
> -  @param[in]  FieldCount         The number of header pairs in HeaderFields.
> -
> -**/
> -VOID
> -FreeHeaderFields (
> -  IN  EFI_HTTP_HEADER  *HeaderFields,
> -  IN  UINTN            FieldCount
> -  )
> -{
> -  UINTN                       Index;
> -
> -  if (HeaderFields != NULL) {
> -    for (Index = 0; Index < FieldCount; Index++) {
> -      if (HeaderFields[Index].FieldName != NULL) {
> -        FreePool (HeaderFields[Index].FieldName);
> -      }
> -      if (HeaderFields[Index].FieldValue != NULL) {
> -        FreePool (HeaderFields[Index].FieldValue);
> -      }
> -    }
> -
> -    FreePool (HeaderFields);
> -  }
> -}
> -
> -
> -/**
> -  Find required header field in HeaderFields.
> -
> -  @param[in]  HeaderFields        Pointer to array of key/value header pairs.
> -  @param[in]  FieldCount          The number of header pairs.
> -  @param[in]  FieldName           Pointer to header field's name.
> -
> -  @return     Pointer to the queried header field.
> -  @return     NULL if not find this required header field.
> -
> -**/
> -EFI_HTTP_HEADER *
> -FindHttpHeader (
> -  IN  EFI_HTTP_HEADER  *HeaderFields,
> -  IN  UINTN            FieldCount,
> -  IN  CHAR8            *FieldName
> -  )
> -{
> -  UINTN                       Index;
> -
> -  for (Index = 0; Index < FieldCount; Index++) {
> -    if (AsciiStrCmp (FieldName, HeaderFields[Index].FieldName) == 0) {
> -      //
> -      // Find the required header field.
> -      //
> -      return &HeaderFields[Index];
> -    }
> -  }
> -  return NULL;
> -}
> -
> -
> -/**
> -  Check whether header field called FieldName is in DeleteList.
> -
> -  @param[in]  DeleteList        Pointer to array of key/value header pairs.
> -  @param[in]  DeleteCount       The number of header pairs.
> -  @param[in]  FieldName         Pointer to header field's name.
> -
> -  @return     TRUE if FieldName is not in DeleteList, that means this header
> field is valid.
> -  @return     FALSE if FieldName is in DeleteList, that means this header 
> field
> is invalid.
> -
> -**/
> -BOOLEAN
> -IsValidHttpHeader (
> -  IN  CHAR8            *DeleteList[],
> -  IN  UINTN            DeleteCount,
> -  IN  CHAR8            *FieldName
> -  )
> -{
> -  UINTN                       Index;
> -
> -  for (Index = 0; Index < DeleteCount; Index++) {
> -    if (AsciiStrCmp (FieldName, DeleteList[Index]) == 0) {
> -      return FALSE;
> -    }
> -  }
> -
> -  return TRUE;
> -}
> -
> -
> -/**
> -  Set FieldName and FieldValue into specified HttpHeader.
> -
> -  @param[in]  HttpHeader          Specified HttpHeader.
> -  @param[in]  FieldName           FieldName of this HttpHeader.
> -  @param[in]  FieldValue          FieldValue of this HttpHeader.
> -
> -
> -  @retval EFI_SUCCESS             The FieldName and FieldValue are set into
> HttpHeader successfully.
> -  @retval EFI_OUT_OF_RESOURCES    Failed to allocate resources.
> -
> -**/
> -EFI_STATUS
> -SetFieldNameAndValue (
> -  IN  EFI_HTTP_HEADER     *HttpHeader,
> -  IN  CHAR8               *FieldName,
> -  IN  CHAR8               *FieldValue
> -  )
> -{
> -  UINTN                       FieldNameSize;
> -  UINTN                       FieldValueSize;
> -
> -  if (HttpHeader->FieldName != NULL) {
> -    FreePool (HttpHeader->FieldName);
> -  }
> -  if (HttpHeader->FieldValue != NULL) {
> -    FreePool (HttpHeader->FieldValue);
> -  }
> -
> -  FieldNameSize = AsciiStrSize (FieldName);
> -  HttpHeader->FieldName = AllocateZeroPool (FieldNameSize);
> -  if (HttpHeader->FieldName == NULL) {
> -    return EFI_OUT_OF_RESOURCES;
> -  }
> -  CopyMem (HttpHeader->FieldName, FieldName, FieldNameSize);
> -  HttpHeader->FieldName[FieldNameSize - 1] = 0;
> -
> -  FieldValueSize = AsciiStrSize (FieldValue);
> -  HttpHeader->FieldValue = AllocateZeroPool (FieldValueSize);
> -  if (HttpHeader->FieldValue == NULL) {
> -    return EFI_OUT_OF_RESOURCES;
> -  }
> -  CopyMem (HttpHeader->FieldValue, FieldValue, FieldValueSize);
> -  HttpHeader->FieldValue[FieldValueSize - 1] = 0;
> -
> -  return EFI_SUCCESS;
> -}
> -
> -
> -/**
> -  Get one key/value header pair from the raw string.
> -
> -  @param[in]  String             Pointer to the raw string.
> -  @param[out] FieldName          Pointer to header field's name.
> -  @param[out] FieldValue         Pointer to header field's value.
> -
> -  @return     Pointer to the next raw string.
> -  @return     NULL if no key/value header pair from this raw string.
> -
> -**/
> -CHAR8 *
> -GetFieldNameAndValue (
> -  IN  CHAR8   *String,
> -  OUT CHAR8   **FieldName,
> -  OUT CHAR8   **FieldValue
> -  )
> -{
> -  CHAR8  *FieldNameStr;
> -  CHAR8  *FieldValueStr;
> -  CHAR8  *StrPtr;
> -
> -  if (String == NULL || FieldName == NULL || FieldValue == NULL) {
> -    return NULL;
> -  }
> -
> -  *FieldName    = NULL;
> -  *FieldValue   = NULL;
> -  FieldNameStr  = NULL;
> -  FieldValueStr = NULL;
> -  StrPtr        = NULL;
> -
> -  //
> -  // Each header field consists of a name followed by a colon (":") and the
> field value.
> -  //
> -  FieldNameStr = String;
> -  FieldValueStr = AsciiStrGetNextToken (FieldNameStr, ':');
> -  if (FieldValueStr == NULL) {
> -    return NULL;
> -  }
> -
> -  //
> -  // Replace ':' with 0
> -  //
> -  *(FieldValueStr - 1) = 0;
> -
> -  //
> -  // The field value MAY be preceded by any amount of LWS, though a single
> SP is preferred.
> -  //
> -  while (TRUE) {
> -    if (*FieldValueStr == ' ' || *FieldValueStr == '\t') {
> -      FieldValueStr ++;
> -    } else if (*FieldValueStr == '\r' && *(FieldValueStr + 1) == '\n' &&
> -               (*(FieldValueStr + 2) == ' ' || *(FieldValueStr + 2) == 
> '\t')) {
> -      FieldValueStr = FieldValueStr + 3;
> -    } else {
> -      break;
> -    }
> -  }
> -
> -  //
> -  // Header fields can be extended over multiple lines by preceding each
> extra
> -  // line with at least one SP or HT.
> -  //
> -  StrPtr = FieldValueStr;
> -  do {
> -    StrPtr = AsciiStrGetNextToken (StrPtr, '\r');
> -    if (StrPtr == NULL || *StrPtr != '\n') {
> -      return NULL;
> -    }
> -
> -    StrPtr++;
> -  } while (*StrPtr == ' ' || *StrPtr == '\t');
> -
> -  //
> -  // Replace '\r' with 0
> -  //
> -  *(StrPtr - 2) = 0;
> -
> -  //
> -  // Get FieldName and FieldValue.
> -  //
> -  *FieldName = FieldNameStr;
> -  *FieldValue = FieldValueStr;
> -
> -  return StrPtr;
> -}
> -
> diff --git a/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesProtocol.c
> b/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesProtocol.c
> index a83c963..739d3b7 100644
> --- a/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesProtocol.c
> +++ b/NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesProtocol.c
> @@ -2,6 +2,7 @@
>    Implementation of EFI_HTTP_PROTOCOL protocol interfaces.
> 
>    Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> +  (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of the BSD
> License
>    which accompanies this distribution.  The full text of the license may be
> found at @@ -122,8 +123,8 @@ HttpUtilitiesBuild (
>        //
>        // Check whether each SeedHeaderFields member is in DeleteList
>        //
> -      if (IsValidHttpHeader( DeleteList, DeleteCount,
> SeedHeaderFields[Index].FieldName)) {
> -        Status = SetFieldNameAndValue (
> +      if (HttpIsValidHttpHeader( DeleteList, DeleteCount,
> SeedHeaderFields[Index].FieldName)) {
> +        Status = HttpSetFieldNameAndValue (
>                     &TempHeaderFields[TempFieldCount],
>                     SeedHeaderFields[Index].FieldName,
>                     SeedHeaderFields[Index].FieldValue
> @@ -149,7 +150,7 @@ HttpUtilitiesBuild (
>    }
> 
>    for (Index = 0; Index < TempFieldCount; Index++) {
> -    Status = SetFieldNameAndValue (
> +    Status = HttpSetFieldNameAndValue (
>                 &NewHeaderFields[Index],
>                 TempHeaderFields[Index].FieldName,
>                 TempHeaderFields[Index].FieldValue
> @@ -162,9 +163,9 @@ HttpUtilitiesBuild (
>    NewFieldCount = TempFieldCount;
> 
>    for (Index = 0; Index < AppendCount; Index++) {
> -    HttpHeader = FindHttpHeader (NewHeaderFields, NewFieldCount,
> AppendList[Index]->FieldName);
> +    HttpHeader = HttpFindHeader (NewFieldCount, NewHeaderFields,
> + AppendList[Index]->FieldName);
>      if (HttpHeader != NULL) {
> -      Status = SetFieldNameAndValue (
> +      Status = HttpSetFieldNameAndValue (
>                   HttpHeader,
>                   AppendList[Index]->FieldName,
>                   AppendList[Index]->FieldValue @@ -173,7 +174,7 @@
> HttpUtilitiesBuild (
>          goto ON_EXIT;
>        }
>      } else {
> -      Status = SetFieldNameAndValue (
> +      Status = HttpSetFieldNameAndValue (
>                   &NewHeaderFields[NewFieldCount],
>                   AppendList[Index]->FieldName,
>                   AppendList[Index]->FieldValue @@ -251,15 +252,15 @@
> HttpUtilitiesBuild (
>    //
>  ON_EXIT:
>    if (SeedHeaderFields != NULL) {
> -    FreeHeaderFields(SeedHeaderFields, SeedFieldCount);
> +    HttpFreeHeaderFields(SeedHeaderFields, SeedFieldCount);
>    }
> 
>    if (TempHeaderFields != NULL) {
> -    FreeHeaderFields(TempHeaderFields, TempFieldCount);
> +    HttpFreeHeaderFields(TempHeaderFields, TempFieldCount);
>    }
> 
>    if (NewHeaderFields != NULL) {
> -    FreeHeaderFields(NewHeaderFields, NewFieldCount);
> +    HttpFreeHeaderFields(NewHeaderFields, NewFieldCount);
>    }
> 
>    return Status;
> @@ -332,7 +333,7 @@ HttpUtilitiesParse (
>    while (TRUE) {
>      FieldName     = NULL;
>      FieldValue    = NULL;
> -    NextToken = GetFieldNameAndValue (Token, &FieldName, &FieldValue);
> +    NextToken = HttpGetFieldNameAndValue (Token, &FieldName,
> + &FieldValue);
>      Token     = NextToken;
>      if (FieldName == NULL || FieldValue == NULL) {
>        break;
> @@ -365,16 +366,16 @@ HttpUtilitiesParse (
>    while (Index < *FieldCount) {
>      FieldName     = NULL;
>      FieldValue    = NULL;
> -    NextToken = GetFieldNameAndValue (Token, &FieldName, &FieldValue);
> +    NextToken = HttpGetFieldNameAndValue (Token, &FieldName,
> + &FieldValue);
>      Token     = NextToken;
>      if (FieldName == NULL || FieldValue == NULL) {
>        break;
>      }
> 
> -    Status = SetFieldNameAndValue (&(*HeaderFields)[Index], FieldName,
> FieldValue);
> +    Status = HttpSetFieldNameAndValue (&(*HeaderFields)[Index],
> + FieldName, FieldValue);
>      if (EFI_ERROR (Status)) {
>        *FieldCount = 0;
> -      FreeHeaderFields (*HeaderFields, Index);
> +      HttpFreeHeaderFields (*HeaderFields, Index);
>        goto ON_EXIT;
>      }
> 
> --
> 2.7.2.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to