Reviewed-by: Ye Ting <[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