]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/HttpBootDxe/HttpBootConfig.c
NetworkPkg: Add PCD to enable the HTTP connections switch
[mirror_edk2.git] / NetworkPkg / HttpBootDxe / HttpBootConfig.c
index 7c883b8397b00708d58d3d160c18b712b929c324..f32bf18e9d64e6999cfd903ac8670515f45df2f3 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Helper functions for configuring or getting the parameters relating to HTTP Boot.\r
 \r
-Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -446,9 +446,16 @@ HttpBootFormCallback (
   )\r
 {\r
   EFI_INPUT_KEY                   Key;\r
-  UINTN                           Index;\r
   CHAR16                          *Uri;\r
+  UINTN                           UriLen;\r
+  CHAR8                           *AsciiUri;\r
   HTTP_BOOT_FORM_CALLBACK_INFO    *CallbackInfo;\r
+  EFI_STATUS                      Status;\r
+\r
+  Uri      = NULL;\r
+  UriLen   = 0;\r
+  AsciiUri = NULL;\r
+  Status   = EFI_SUCCESS;\r
   \r
   if (This == NULL || Value == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -466,49 +473,63 @@ HttpBootFormCallback (
     // Get user input URI string\r
     //\r
     Uri = HiiGetString (CallbackInfo->RegisteredHandle, Value->string, NULL);\r
-    if (Uri == NULL) {\r
-      return EFI_UNSUPPORTED;\r
-    }\r
 \r
     //\r
-    // Convert the scheme to all lower case.\r
+    // The URI should be either an empty string (for corporate environment) ,or http(s) for home environment.\r
+    // Pop up a message box for the unsupported URI.\r
     //\r
-    for (Index = 0; Index < StrLen (Uri); Index++) {\r
-      if (Uri[Index] == L':') {\r
-        break;\r
+    if (StrLen (Uri) != 0) {\r
+      UriLen = StrLen (Uri) + 1;\r
+      AsciiUri = AllocateZeroPool (UriLen);\r
+      if (AsciiUri == NULL) {\r
+        FreePool (Uri);\r
+        return EFI_OUT_OF_RESOURCES;\r
       }\r
-      if (Uri[Index] >= L'A' && Uri[Index] <= L'Z') {\r
-        Uri[Index] -= (CHAR16)(L'A' - L'a');\r
+\r
+      UnicodeStrToAsciiStrS (Uri, AsciiUri, UriLen);\r
+\r
+      Status = HttpBootCheckUriScheme (AsciiUri);\r
+      \r
+      if (Status == EFI_INVALID_PARAMETER) {\r
+\r
+        DEBUG ((EFI_D_ERROR, "HttpBootFormCallback: %r.\n", Status));\r
+\r
+        CreatePopUp (\r
+          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+          &Key,\r
+          L"ERROR: Unsupported URI!",\r
+          L"Only supports HTTP and HTTPS",\r
+          NULL\r
+          ); \r
+      } else if (Status == EFI_ACCESS_DENIED) {\r
+      \r
+        DEBUG ((EFI_D_ERROR, "HttpBootFormCallback: %r.\n", Status));\r
+      \r
+        CreatePopUp (\r
+          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+          &Key,\r
+          L"ERROR: Unsupported URI!",\r
+          L"HTTP is disabled",\r
+          NULL\r
+          );\r
       }\r
     }\r
 \r
-    //\r
-    // Set the converted URI string back\r
-    //\r
-    HiiSetString (CallbackInfo->RegisteredHandle, Value->string, Uri, NULL);\r
-\r
-    //\r
-    // The URI should be either an empty string (for corporate environment) ,or http(s) for home environment.\r
-    // Pop up a message box for other unsupported URI.\r
-    //\r
-    if ((StrLen (Uri) != 0) && (StrnCmp (Uri, L"http://", 7) != 0) && (StrnCmp (Uri, L"https://", 8) != 0)) {\r
-      CreatePopUp (\r
-        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-        &Key,\r
-        L"ERROR: Unsupported URI!",\r
-        L"Only supports HTTP and HTTPS",\r
-        NULL\r
-        );\r
+    if (Uri != NULL) {\r
+      FreePool (Uri);\r
     }\r
 \r
-    FreePool (Uri);\r
+    if (AsciiUri != NULL) {\r
+      FreePool (AsciiUri);\r
+    }   \r
+    \r
     break;\r
 \r
   default:\r
     break;\r
   }\r
 \r
-  return EFI_SUCCESS;\r
+  return Status;\r
 }\r
 \r
 /**\r