/** @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
-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
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
@param[in] UsingIpv6 Set to TRUE if creating boot option for IPv6.\r
@param[in] Description The description text of the boot option.\r
@param[in] Uri The URI string of the boot file.\r
- \r
+\r
@retval EFI_SUCCESS The boot option is created successfully.\r
@retval Others Failed to create new boot option.\r
\r
if ((StrLen (Uri) != 0) && (StrnCmp (Uri, L"http://", 7) != 0) && (StrnCmp (Uri, L"https://", 8) != 0)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
- \r
+\r
//\r
// Create a new device path by appending the IP node and URI node to\r
// the driver's parent device path\r
}\r
\r
/**\r
- \r
+\r
This function allows the caller to request the current\r
configuration for one or more named elements. The resulting\r
string is in <ConfigAltResp> format. Also, any and all alternative\r
to the most recent "&" before the first\r
failing name / value pair (or the beginning\r
of the string if the failure is in the first\r
- name / value pair) if the request was not successful. \r
+ name / value pair) if the request was not successful.\r
\r
@param[out] Results A null-terminated Unicode string in\r
<ConfigAltResp> format which has all values\r
would result in this type of\r
error. In this case, the\r
Progress parameter would be\r
- set to NULL. \r
+ set to NULL.\r
\r
@retval EFI_NOT_FOUND Routing data doesn't match any\r
known driver. Progress set to the\r
if ((Request != NULL) && !HiiIsConfigHdrMatch (Request, &gHttpBootConfigGuid, mHttpBootConfigStorageName)) {\r
return EFI_NOT_FOUND;\r
}\r
- \r
+\r
ConfigRequestHdr = NULL;\r
ConfigRequest = NULL;\r
AllocatedRequest = FALSE;\r
Results,\r
Progress\r
);\r
- \r
+\r
//\r
// Free the allocated config request string.\r
//\r
}\r
\r
/**\r
- \r
+\r
This function applies changes in a driver's configuration.\r
Input is a Configuration, which has the routing data for this\r
driver followed by name / value configuration pairs. The driver\r
@param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.\r
\r
@param[in] Configuration A null-terminated Unicode string in\r
- <ConfigString> format. \r
- \r
+ <ConfigString> format.\r
+\r
@param[out] Progress A pointer to a string filled in with the\r
offset of the most recent '&' before the\r
first failing name / value pair (or the\r
\r
@retval EFI_SUCCESS The results have been distributed or are\r
awaiting distribution.\r
- \r
+\r
@retval EFI_OUT_OF_RESOURCES Not enough memory to store the\r
parts of the results that must be\r
stored awaiting possible future\r
protocols.\r
- \r
+\r
@retval EFI_INVALID_PARAMETERS Passing in a NULL for the\r
Results parameter would result\r
in this type of error.\r
- \r
+\r
@retval EFI_NOT_FOUND Target for the specified routing data\r
was not found.\r
\r
\r
CallbackInfo = HTTP_BOOT_FORM_CALLBACK_INFO_FROM_CONFIG_ACCESS (This);\r
Private = HTTP_BOOT_PRIVATE_DATA_FROM_CALLBACK_INFO (CallbackInfo);\r
- \r
+\r
BufferSize = sizeof (HTTP_BOOT_CONFIG_IFR_NVDATA);\r
ZeroMem (&CallbackInfo->HttpBootNvData, BufferSize);\r
\r
CallbackInfo->HttpBootNvData.Description,\r
CallbackInfo->HttpBootNvData.Uri\r
);\r
- \r
+\r
return EFI_SUCCESS;\r
}\r
\r
/**\r
- \r
+\r
This function is called to provide results data to the driver.\r
This data consists of a unique key that is used to identify\r
which data is either being passed back or being asked for.\r
@param[in] Action Specifies the type of action taken by the browser.\r
@param[in] QuestionId A unique value which is sent to the original\r
exporting driver so that it can identify the type\r
- of data to expect. The format of the data tends to \r
+ of data to expect. The format of the data tends to\r
vary based on the opcode that generated the callback.\r
@param[in] Type The type of value for the question.\r
@param[in, out] Value A pointer to the data being sent to the original\r
)\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
- \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
}\r
\r
CallbackInfo = HTTP_BOOT_FORM_CALLBACK_INFO_FROM_CONFIG_ACCESS (This);\r
- \r
+\r
if (Action != EFI_BROWSER_ACTION_CHANGING) {\r
return EFI_UNSUPPORTED;\r
}\r
- \r
+\r
switch (QuestionId) {\r
case KEY_INITIATOR_URI:\r
//\r
// Get user input URI string\r
//\r
Uri = HiiGetString (CallbackInfo->RegisteredHandle, Value->string, NULL);\r
- if (Uri == NULL) {\r
- return EFI_UNSUPPORTED;\r
+ if(Uri == NULL) {\r
+ return EFI_INVALID_PARAMETER;\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
+ if (Uri != NULL) {\r
+ FreePool (Uri);\r
+ }\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 (AsciiUri != NULL) {\r
+ FreePool (AsciiUri);\r
}\r
\r
- FreePool (Uri);\r
break;\r
\r
default:\r
break;\r
}\r
\r
- return EFI_SUCCESS;\r
+ return Status;\r
}\r
\r
/**\r
if (CallbackInfo->Initilized) {\r
return EFI_SUCCESS;\r
}\r
- \r
+\r
CallbackInfo->Signature = HTTP_BOOT_FORM_CALLBACK_INFO_SIGNATURE;\r
\r
//\r
CallbackInfo->ConfigAccess.ExtractConfig = HttpBootFormExtractConfig;\r
CallbackInfo->ConfigAccess.RouteConfig = HttpBootFormRouteConfig;\r
CallbackInfo->ConfigAccess.Callback = HttpBootFormCallback;\r
- \r
+\r
//\r
// Install Device Path Protocol and Config Access protocol to driver handle.\r
//\r
Status = NetLibGetMacString (Private->Controller, NULL, &MacString);\r
if (!EFI_ERROR (Status)) {\r
OldMenuString = HiiGetString (\r
- CallbackInfo->RegisteredHandle, \r
- STRING_TOKEN (STR_HTTP_BOOT_CONFIG_FORM_HELP), \r
+ CallbackInfo->RegisteredHandle,\r
+ STRING_TOKEN (STR_HTTP_BOOT_CONFIG_FORM_HELP),\r
NULL\r
);\r
UnicodeSPrint (MenuString, 128, L"%s (MAC:%s)", OldMenuString, MacString);\r
HiiSetString (\r
- CallbackInfo->RegisteredHandle, \r
- STRING_TOKEN (STR_HTTP_BOOT_CONFIG_FORM_HELP), \r
- MenuString, \r
+ CallbackInfo->RegisteredHandle,\r
+ STRING_TOKEN (STR_HTTP_BOOT_CONFIG_FORM_HELP),\r
+ MenuString,\r
NULL\r
);\r
- \r
+\r
FreePool (MacString);\r
FreePool (OldMenuString);\r
\r
CallbackInfo->Initilized = TRUE;\r
return EFI_SUCCESS;\r
}\r
- \r
+\r
Error:\r
\r
HttpBootConfigFormUnload (Private);\r