//\r
BufferSize = sizeof (HTTP_BOOT_CONFIG_IFR_NVDATA);\r
ZeroMem (&CallbackInfo->HttpBootNvData, BufferSize);\r
+ StrCpyS (CallbackInfo->HttpBootNvData.Description, DESCRIPTION_STR_MAX_SIZE / sizeof (CHAR16), HTTP_BOOT_DEFAULT_DESCRIPTION_STR);\r
\r
ConfigRequest = Request;\r
if ((Request == NULL) || (StrStr (Request, L"OFFSET") == NULL)) {\r
Results,\r
Progress\r
);\r
- ASSERT_EFI_ERROR (Status);\r
\r
//\r
// Free the allocated config request string.\r
//\r
// Create a new boot option according to the configuration data.\r
//\r
- Status = HttpBootAddBootOption (\r
- Private,\r
- (CallbackInfo->HttpBootNvData.IpVersion == HTTP_BOOT_IP_VERSION_6) ? TRUE : FALSE,\r
- CallbackInfo->HttpBootNvData.Description,\r
- CallbackInfo->HttpBootNvData.Uri\r
- );\r
+ HttpBootAddBootOption (\r
+ Private,\r
+ (CallbackInfo->HttpBootNvData.IpVersion == HTTP_BOOT_IP_VERSION_6) ? TRUE : FALSE,\r
+ CallbackInfo->HttpBootNvData.Description,\r
+ CallbackInfo->HttpBootNvData.Uri\r
+ );\r
\r
- return Status;\r
+ return EFI_SUCCESS;\r
}\r
\r
/**\r
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest\r
)\r
{\r
- return EFI_UNSUPPORTED;\r
+ EFI_INPUT_KEY Key;\r
+ UINTN Index;\r
+ CHAR16 *Uri;\r
+ HTTP_BOOT_FORM_CALLBACK_INFO *CallbackInfo;\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
+ if (Action != EFI_BROWSER_ACTION_CHANGING) {\r
+ return EFI_UNSUPPORTED;\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
+\r
+ //\r
+ // Convert the scheme to all lower case.\r
+ //\r
+ for (Index = 0; Index < StrLen (Uri); Index++) {\r
+ if (Uri[Index] == L':') {\r
+ break;\r
+ }\r
+ if (Uri[Index] >= L'A' && Uri[Index] <= L'Z') {\r
+ Uri[Index] -= (CHAR16)(L'A' - L'a');\r
+ }\r
+ }\r
+\r
+ //\r
+ // Set the converted URI string back\r
+ //\r
+ HiiSetString (CallbackInfo->RegisteredHandle, Value->string, Uri, NULL);\r
+\r
+ //\r
+ // We only accept http and https, pop up a message box for unsupported URI.\r
+ //\r
+ if ((StrnCmp (Uri, L"http://", 7) != 0) && (StrnCmp (Uri, L"https://", 7) != 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
+ }\r
+\r
+ FreePool (Uri);\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+ return EFI_SUCCESS;\r
}\r
\r
/**\r
\r
#include <Guid/HttpBootConfigHii.h>\r
\r
-#define HTTP_BOOT_IP_VERSION_4 0\r
-#define HTTP_BOOT_IP_VERSION_6 1\r
+#define HTTP_BOOT_IP_VERSION_4 0\r
+#define HTTP_BOOT_IP_VERSION_6 1\r
\r
//\r
// Macros used for an IPv4 or an IPv6 address.\r
//\r
-#define URI_STR_MIN_SIZE 8\r
-#define URI_STR_MAX_SIZE 255\r
+#define URI_STR_MIN_SIZE 8\r
+#define URI_STR_MAX_SIZE 255\r
+\r
+#define DESCRIPTION_STR_MIN_SIZE 6\r
+#define DESCRIPTION_STR_MAX_SIZE 75\r
\r
#define CONFIGURATION_VARSTORE_ID 0x1234\r
\r
-#define FORMID_MAIN_FORM 1\r
+#define FORMID_MAIN_FORM 1\r
+\r
+#define KEY_INITIATOR_URI 0x101\r
+\r
+#define HTTP_BOOT_DEFAULT_DESCRIPTION_STR L"UEFI HTTP"\r
\r
#pragma pack(1)\r
typedef struct _HTTP_BOOT_CONFIG_IFR_NVDATA {\r
UINT8 IpVersion;\r
UINT8 Padding;\r
- CHAR16 Description[URI_STR_MAX_SIZE];\r
+ CHAR16 Description[DESCRIPTION_STR_MAX_SIZE];\r
CHAR16 Uri[URI_STR_MAX_SIZE];\r
} HTTP_BOOT_CONFIG_IFR_NVDATA;\r
#pragma pack()\r
string varid = HTTP_BOOT_CONFIG_IFR_NVDATA.Description,\r
prompt = STRING_TOKEN(STR_BOOT_DESCRIPTION_PROMPT),\r
help = STRING_TOKEN(STR_NULL_STRING),\r
- minsize = 6,\r
- maxsize = 75,\r
+ minsize = DESCRIPTION_STR_MIN_SIZE,\r
+ maxsize = DESCRIPTION_STR_MAX_SIZE,\r
endstring;\r
\r
oneof varid = HTTP_BOOT_CONFIG_IFR_NVDATA.IpVersion,\r
string varid = HTTP_BOOT_CONFIG_IFR_NVDATA.Uri,\r
prompt = STRING_TOKEN(STR_BOOT_URI_PROMPT),\r
help = STRING_TOKEN(STR_BOOT_URI_HELP),\r
+ flags = INTERACTIVE,\r
+ key = KEY_INITIATOR_URI,\r
minsize = URI_STR_MIN_SIZE,\r
maxsize = URI_STR_MAX_SIZE,\r
endstring;\r