Reviewed-by: Jiaxin Wu <[email protected]>

> -----Original Message-----
> From: edk2-devel [mailto:[email protected]] On Behalf Of Fu
> Siyuan
> Sent: Monday, February 29, 2016 1:52 PM
> To: [email protected]
> Cc: Ye, Ting <[email protected]>; Wu, Jiaxin <[email protected]>
> Subject: [edk2] [Patch] MdeModulePkg: Add new API HttpUrlGetPath() to
> HttpLib.h
> 
> This patch is to add a new interface to get the "Path" component according to
> the URI parse result, it would be helpful for the library user to extract the 
> file
> path value in a URI.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Fu Siyuan <[email protected]>
> Cc: Wu Jiaxin <[email protected]>
> Cc: Ye Ting <[email protected]>
> ---
>  MdeModulePkg/Include/Library/HttpLib.h       | 26 +++++++++++-
>  MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.c | 61
> +++++++++++++++++++++++++++-
>  2 files changed, 85 insertions(+), 2 deletions(-)
> 
> diff --git a/MdeModulePkg/Include/Library/HttpLib.h
> b/MdeModulePkg/Include/Library/HttpLib.h
> index ce5a839..cd97b64 100644
> --- a/MdeModulePkg/Include/Library/HttpLib.h
> +++ b/MdeModulePkg/Include/Library/HttpLib.h
> @@ -2,7 +2,7 @@
>    This library is used to share code between UEFI network stack modules.
>    It provides the helper routines to parse the HTTP message byte stream.
> 
> -Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> +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  which
> accompanies this distribution.  The full text of the license may be found
> at<BR> @@ -164,6 +164,30 @@ HttpUrlGetPort (
>    );
> 
>  /**
> +  Get the Path from a HTTP URL.
> +
> +  This function will return the Path according to the Url and previous
> + parse result,and  it is the caller's responsibility to free the buffer 
> returned
> in *Path.
> +
> +  @param[in]    Url                The pointer to a HTTP URL string.
> +  @param[in]    UrlParser          URL Parse result returned by
> NetHttpParseUrl().
> +  @param[out]   Path               Pointer to a buffer to store the Path.
> +
> +  @retval EFI_SUCCESS              Successfully get the required component.
> +  @retval EFI_INVALID_PARAMETER    Uri is NULL or HostName is NULL or
> UrlParser is invalid.
> +  @retval EFI_NOT_FOUND            No hostName component in the URL.
> +  @retval EFI_OUT_OF_RESOURCES     Could not allocate needed resources.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +HttpUrlGetPath (
> +  IN      CHAR8              *Url,
> +  IN      VOID               *UrlParser,
> +     OUT  CHAR8              **Path
> +  );
> +
> +/**
>    Release the resource of the URL parser.
> 
>    @param[in]    UrlParser            Pointer to the parser.
> diff --git a/MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.c
> b/MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.c
> index 040d874..49c2b9c 100644
> --- a/MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.c
> +++ b/MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.c
> @@ -2,7 +2,7 @@
>    This library is used to share code between UEFI network stack modules.
>    It provides the helper routines to parse the HTTP message byte stream.
> 
> -Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> +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  which
> accompanies this distribution.  The full text of the license may be found
> at<BR> @@ -785,6 +785,65 @@ HttpUrlGetPort (  }
> 
>  /**
> +  Get the Path from a HTTP URL.
> +
> +  This function will return the Path according to the Url and previous
> + parse result,and  it is the caller's responsibility to free the buffer 
> returned
> in *Path.
> +
> +  @param[in]    Url                The pointer to a HTTP URL string.
> +  @param[in]    UrlParser          URL Parse result returned by
> NetHttpParseUrl().
> +  @param[out]   Path               Pointer to a buffer to store the Path.
> +
> +  @retval EFI_SUCCESS              Successfully get the required component.
> +  @retval EFI_INVALID_PARAMETER    Uri is NULL or HostName is NULL or
> UrlParser is invalid.
> +  @retval EFI_NOT_FOUND            No hostName component in the URL.
> +  @retval EFI_OUT_OF_RESOURCES     Could not allocate needed resources.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +HttpUrlGetPath (
> +  IN      CHAR8              *Url,
> +  IN      VOID               *UrlParser,
> +     OUT  CHAR8              **Path
> +  )
> +{
> +  CHAR8                *PathStr;
> +  EFI_STATUS           Status;
> +  UINT32               ResultLength;
> +  HTTP_URL_PARSER      *Parser;
> +
> +  if (Url == NULL || UrlParser == NULL || Path == NULL) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  Parser = (HTTP_URL_PARSER*) UrlParser;
> +
> +  if ((Parser->FieldBitMap & BIT (HTTP_URI_FIELD_PATH)) == 0) {
> +    return EFI_NOT_FOUND;
> +  }
> +
> +  PathStr = AllocatePool (Parser->FieldData[HTTP_URI_FIELD_PATH].Length
> + + 1);  if (PathStr == NULL) {
> +    return EFI_OUT_OF_RESOURCES;
> +  }
> +
> +  Status = UriPercentDecode (
> +             Url + Parser->FieldData[HTTP_URI_FIELD_PATH].Offset,
> +             Parser->FieldData[HTTP_URI_FIELD_PATH].Length,
> +             PathStr,
> +             &ResultLength
> +             );
> +  if (EFI_ERROR (Status)) {
> +    return Status;
> +  }
> +
> +  PathStr[ResultLength] = '\0';
> +  *Path = PathStr;
> +  return EFI_SUCCESS;
> +}
> +
> +/**
>    Release the resource of the URL parser.
> 
>    @param[in]    UrlParser            Pointer to the parser.
> --
> 2.7.0.windows.2
> 
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to