Add new HttpUtilLib that contains helper functions for HTTP
Request/Response processing.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Samer El-Haj-Mahmoud <el...@hpe.com>
---
 MdeModulePkg/Include/Library/HttpUtilLib.h         | 140 ++++++
 .../Library/DxeHttpUtilLib/DxeHttpUtilLib.c        | 525 +++++++++++++++++++++
 .../Library/DxeHttpUtilLib/DxeHttpUtilLib.h        |  34 ++
 .../Library/DxeHttpUtilLib/DxeHttpUtilLib.inf      |  48 ++
 MdeModulePkg/MdeModulePkg.dec                      |   6 +
 5 files changed, 753 insertions(+)
 create mode 100644 MdeModulePkg/Include/Library/HttpUtilLib.h
 create mode 100644 MdeModulePkg/Library/DxeHttpUtilLib/DxeHttpUtilLib.c
 create mode 100644 MdeModulePkg/Library/DxeHttpUtilLib/DxeHttpUtilLib.h
 create mode 100644 MdeModulePkg/Library/DxeHttpUtilLib/DxeHttpUtilLib.inf

diff --git a/MdeModulePkg/Include/Library/HttpUtilLib.h 
b/MdeModulePkg/Include/Library/HttpUtilLib.h
new file mode 100644
index 0000000..db3166d
--- /dev/null
+++ b/MdeModulePkg/Include/Library/HttpUtilLib.h
@@ -0,0 +1,140 @@
+/** @file
+  Header file for HTTP helper functions for Messages request/responses.
+
+ (C) Copyright 2016 Hewlett Packard Enterprise Development LP<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
+ 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.
+
+**/
+
+#ifndef __HTTP_UTIL_LIB_H__
+#define __HTTP_UTIL_LIB_H__
+
+#include <Protocol/Http.h>
+
+///
+/// Local Host IP address
+///
+#define LOCAL_HOST             "127.0.0.1"
+
+///
+/// HTTP Request Format Strings
+///
+
+#define HTTP_EOL           "\r\n"
+
+#define HTTP_REQUEST_LINE_FORMAT  "%a %a %a"HTTP_EOL
+
+#define HTTP_HEADER_FIELD_FORMAT  "%a: %a"HTTP_EOL
+
+
+/**
+  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 *
+HttpFindHeader (
+  IN  UINTN                HeaderCount,
+  IN  EFI_HTTP_HEADER      *Headers,
+  IN  CHAR8                *FieldName
+  );
+
+/**
+  Set FieldName and FieldValue into specified HttpHeader.
+
+  @param[in,out]  HttpHeader          Specified HttpHeader.
+  @param[in]      FieldName           FieldName of this HttpHeader, a NULL 
terminated ASCII string.
+  @param[in]      FieldValue          FieldValue of this HttpHeader, a NULL 
terminated ASCII string.
+
+
+  @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  OUT   EFI_HTTP_HEADER       *HttpHeader,
+   IN  CONST CHAR8                 *FieldName,
+   IN  CONST CHAR8                 *FieldValue
+  );
+
+/**
+  Get one key/value header pair from the raw string.
+
+  @param[in]  String             Pointer to the raw string.
+  @param[out] FieldName          Points directly to field name within 
'HttpHeader'.
+  @param[out] FieldValue         Points directly to field value within 
'HttpHeader'.
+
+  @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
+  );
+
+/**
+  Free existing HeaderFields.
+
+  @param[in]  HeaderFields       Pointer to array of key/value header pairs 
waiting for free.
+  @param[in]  FieldCount         The number of header pairs in HeaderFields.
+
+**/
+VOID
+FreeHeaderFields (
+  IN  EFI_HTTP_HEADER  *HeaderFields,
+  IN  UINTN            FieldCount
+  );
+
+/**
+  Generate HTTP request string.
+
+  @param[in]   Message            Pointer to storage containing HTTP message 
data.
+  @param[in]   Url                The URL of a remote host.
+  @param[out]  RequestString      Pointer to the created HTTP request string.
+                                  NULL if any error occured.
+
+  @return EFI_SUCCESS             If HTTP request string was created 
successfully
+  @retval EFI_OUT_OF_RESOURCES    Failed to allocate resources.
+  @retval EFI_INVALID_PARAMETER   The input arguments are invalid
+
+**/
+EFI_STATUS
+EFIAPI
+HttpGenRequestString (
+  IN  CONST EFI_HTTP_MESSAGE        *Message,
+  IN  CONST CHAR8                   *Url,
+  OUT CHAR8                         **RequestString
+  );
+
+/**
+  Translate the status code in HTTP message to EFI_HTTP_STATUS_CODE defined
+  in UEFI 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
+  );
+
+#endif
+
diff --git a/MdeModulePkg/Library/DxeHttpUtilLib/DxeHttpUtilLib.c 
b/MdeModulePkg/Library/DxeHttpUtilLib/DxeHttpUtilLib.c
new file mode 100644
index 0000000..0fd108d
--- /dev/null
+++ b/MdeModulePkg/Library/DxeHttpUtilLib/DxeHttpUtilLib.c
@@ -0,0 +1,525 @@
+/** @file
+
+ Helper functions for HTTP Messages Request/Responses.
+
+ (C) Copyright 2016 Hewlett Packard Enterprise Development LP<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
+ 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 "DxeHttpUtilLib.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++;
+  }
+}
+
+/**
+  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 *
+HttpFindHeader (
+  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 FieldName and FieldValue into specified HttpHeader.
+
+  @param[in,out]  HttpHeader      Specified HttpHeader.
+  @param[in]  FieldName           FieldName of this HttpHeader, a NULL 
terminated ASCII string.
+  @param[in]  FieldValue          FieldValue of this HttpHeader, a NULL 
terminated ASCII string.
+
+
+  @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  OUT   EFI_HTTP_HEADER       *HttpHeader,
+  IN  CONST CHAR8                 *FieldName,
+  IN  CONST 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          Points directly to field name within 
'HttpHeader'.
+  @param[out] FieldValue         Points directly to field value within 
'HttpHeader'.
+
+  @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;
+}
+
+/**
+  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);
+  }
+}
+
+/**
+  Generate HTTP request string.
+
+  @param[in]   Message            Pointer to storage containing HTTP message 
data.
+  @param[in]   Url                The URL of a remote host.
+  @param[out]  RequestString      Pointer to the created HTTP request string.
+                                  NULL if any error occured.
+
+  @return EFI_SUCCESS             If HTTP request string was created 
successfully
+  @retval EFI_OUT_OF_RESOURCES    Failed to allocate resources.
+  @retval EFI_INVALID_PARAMETER   The input arguments are invalid
+
+**/
+EFI_STATUS
+EFIAPI
+HttpGenRequestString (
+  IN  CONST EFI_HTTP_MESSAGE        *Message,
+  IN  CONST CHAR8                   *Url,
+  OUT CHAR8                         **Request
+  )
+{
+  EFI_STATUS                       Status;
+  UINTN                            StrLength;
+  CHAR8                            *RequestPtr;
+  UINTN                            HttpHdrSize;
+  UINTN                            MsgSize;
+  BOOLEAN                          Success;
+  VOID                             *HttpHdr;
+  EFI_HTTP_HEADER                  **AppendList;
+  UINTN                            Index;
+  EFI_HTTP_UTILITIES_PROTOCOL      *mHttpUtilitiesProtocol = NULL;
+
+
+  ASSERT (Message != NULL);
+
+  *Request = NULL;
+  MsgSize = 0;
+  Success = FALSE;
+  HttpHdr = NULL;
+  AppendList = NULL;
+
+  //
+  // Locate the HTTP_UTILITIES protocol.
+  //
+  Status = gBS->LocateProtocol (
+                  &gEfiHttpUtilitiesProtocolGuid,
+                  NULL,
+                  (VOID **)&mHttpUtilitiesProtocol
+                  );
+
+  if (EFI_ERROR(Status)) {
+    DEBUG ((DEBUG_ERROR,"%a: Failed to locate Http Utilities protocol. Status 
= %r.\n", __FUNCTION__, Status));
+    return Status;
+  }
+
+  //
+  // Build AppendList to send into HttpUtilitiesBuild
+  //
+  AppendList = AllocateZeroPool (sizeof (EFI_HTTP_HEADER *) * 
(Message->HeaderCount));
+  if (AppendList == NULL) {
+    return EFI_OUT_OF_RESOURCES;
+  }
+
+  for(Index = 0; Index < Message->HeaderCount; Index++){
+    AppendList[Index] = &Message->Headers[Index];
+  }
+
+  //
+  // Build raw HTTP Headers
+  //
+  Status = mHttpUtilitiesProtocol->Build(
+              mHttpUtilitiesProtocol,
+              0,
+              NULL,
+              0,
+              NULL,
+              Message->HeaderCount,
+              AppendList,
+              &HttpHdrSize,
+              &HttpHdr
+              );
+
+  if (AppendList != NULL)
+    FreePool(AppendList); 
+
+  if (EFI_ERROR (Status) || HttpHdr == NULL){
+    return EFI_INVALID_PARAMETER;
+  }
+
+  //
+  // Calculate HTTP message length.
+  //
+  MsgSize = Message->BodyLength + HTTP_METHOD_MAXIMUM_LEN + AsciiStrLen (Url) +
+            AsciiStrLen (HTTP_VERSION_CRLF_STR) + HttpHdrSize;
+
+
+  *Request = AllocateZeroPool (MsgSize);
+  if (*Request == NULL) {
+    goto Exit;
+  }
+
+  RequestPtr = *Request;
+  //
+  // Construct header request
+  //
+  switch (Message->Data.Request->Method) {
+  case HttpMethodGet:
+    StrLength = sizeof (HTTP_METHOD_GET) - 1;
+    CopyMem (RequestPtr, HTTP_METHOD_GET, StrLength);
+    RequestPtr += StrLength;
+    break;
+  case HttpMethodPut:
+    StrLength = sizeof (HTTP_METHOD_PUT) - 1;
+    CopyMem (RequestPtr, HTTP_METHOD_PUT, StrLength);
+    RequestPtr += StrLength;
+    break;
+  case HttpMethodPatch:
+    StrLength = sizeof (HTTP_METHOD_PATCH) - 1;
+    CopyMem (RequestPtr, HTTP_METHOD_PATCH, StrLength);
+    RequestPtr += StrLength;
+    break;
+  case HttpMethodPost:
+    StrLength = sizeof (HTTP_METHOD_POST) - 1;
+    CopyMem (RequestPtr, HTTP_METHOD_POST, StrLength);
+    RequestPtr += StrLength;
+    break;
+  case HttpMethodDelete:
+    StrLength = sizeof (HTTP_METHOD_DELETE) - 1;
+    CopyMem (RequestPtr, HTTP_METHOD_DELETE, StrLength);
+    RequestPtr += StrLength;
+    break;
+  default:
+    ASSERT (FALSE);
+    goto Exit;
+  }
+
+  StrLength = AsciiStrLen(EMPTY_SPACE);
+  CopyMem (RequestPtr, EMPTY_SPACE, StrLength);
+  RequestPtr += StrLength;
+
+  StrLength = AsciiStrLen (Url);
+  CopyMem (RequestPtr, Url, StrLength);
+  RequestPtr += StrLength;
+
+  StrLength = sizeof (HTTP_VERSION_CRLF_STR) - 1;
+  CopyMem (RequestPtr, HTTP_VERSION_CRLF_STR, StrLength);
+  RequestPtr += StrLength;
+
+  //
+  // Construct header
+  //
+  CopyMem (RequestPtr, HttpHdr, HttpHdrSize);
+  RequestPtr += HttpHdrSize;
+
+  //
+  // Done
+  //
+  *RequestPtr = 0;
+  Success     = TRUE;
+
+Exit:
+
+  if (!Success) {
+    if (*Request != NULL) {
+      FreePool(*Request);
+    }
+    *Request = NULL;
+  }
+
+  if (HttpHdr != NULL) {
+    FreePool (HttpHdr);
+  }
+
+  return EFI_SUCCESS;
+}
+
+/**
+  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;
+  }
+}
diff --git a/MdeModulePkg/Library/DxeHttpUtilLib/DxeHttpUtilLib.h 
b/MdeModulePkg/Library/DxeHttpUtilLib/DxeHttpUtilLib.h
new file mode 100644
index 0000000..ed56907
--- /dev/null
+++ b/MdeModulePkg/Library/DxeHttpUtilLib/DxeHttpUtilLib.h
@@ -0,0 +1,34 @@
+/** @file
+ Helper functions for HTTP Messages Request/Responses.
+
+ (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
+ 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.
+
+**/
+
+#ifndef __HTTP_LIB_UTIL_H__
+#define __HTTP_LIB_UTIL_H__
+
+#include <Uefi.h>
+#include <IndustryStandard/Http11.h>
+#include <Protocol/Http.h>
+#include <Protocol/HttpUtilities.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/BaseLib.h>
+#include <Library/UefiLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/HttpLib.h>
+#include <Library/HttpUtilLib.h>
+
+#define EMPTY_SPACE     " "
+
+#endif
diff --git a/MdeModulePkg/Library/DxeHttpUtilLib/DxeHttpUtilLib.inf 
b/MdeModulePkg/Library/DxeHttpUtilLib/DxeHttpUtilLib.inf
new file mode 100644
index 0000000..409e107
--- /dev/null
+++ b/MdeModulePkg/Library/DxeHttpUtilLib/DxeHttpUtilLib.inf
@@ -0,0 +1,48 @@
+## @file
+#  HTTP Util Library
+#  
+# (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
+#  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.
+#
+##
+
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = DxeHttpUtilLib
+  FILE_GUID                      = bfbed1d6-db9b-35c0-ac68-72927052e35d
+  MODULE_TYPE                    = DXE_DRIVER
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = HttpUtilLib|DXE_DRIVER UEFI_APPLICATION
+
+[Sources]
+  DxeHttpUtilLib.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+
+[LibraryClasses]
+  UefiLib
+  UefiBootServicesTableLib
+  BaseLib
+  DebugLib
+  MemoryAllocationLib
+  BaseMemoryLib
+  HpDxeLib
+  HpStrVarArgUtilLib
+  HttpLib
+
+  
+[Protocols]
+  gEfiHttpUtilitiesProtocolGuid
+
+[Depex]
+  gEfiHttpUtilitiesProtocolGuid
diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec
index 5c5a9ee..3861a5a 100644
--- a/MdeModulePkg/MdeModulePkg.dec
+++ b/MdeModulePkg/MdeModulePkg.dec
@@ -4,6 +4,8 @@
 # and libraries instances, which are used for those modules.
 #
 # Copyright (c) 2007 - 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 that accompanies this 
distribution.
 # The full text of the license may be found at
@@ -151,6 +153,10 @@
   #
   PciHostBridgeLib|Include/Library/PciHostBridgeLib.h
 
+  ## @libraryclass  Provides functions to manipulate Http Request/response 
messages fields.
+  #
+  HttpUtilLib|Include/Library/HttpUtilLib.h
+
 [Guids]
   ## MdeModule package token space guid
   # Include/Guid/MdeModulePkgTokenSpace.h
-- 
2.6.3.windows.1

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

Reply via email to