/** @file
  VFR file used by the HTTP Boot configuration component.

  Copyright (c) 2016 - 2018, 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 "HttpBootConfigNVDataStruc.h"


formset
  guid   = HTTP_BOOT_CONFIG_GUID,
  title  = STRING_TOKEN(STR_HTTP_BOOT_CONFIG_FORM_TITLE),
  help   = STRING_TOKEN(STR_HTTP_BOOT_CONFIG_FORM_HELP),

  varstore HTTP_BOOT_CONFIG_IFR_NVDATA,
    name = HTTP_BOOT_CONFIG_IFR_NVDATA,
    guid = HTTP_BOOT_CONFIG_GUID;

  form formid = FORMID_MAIN_FORM,
    title  = STRING_TOKEN(STR_HTTP_BOOT_CONFIG_FORM_TITLE);

    string  varid   = HTTP_BOOT_CONFIG_IFR_NVDATA.Description,
            prompt  = STRING_TOKEN(STR_BOOT_DESCRIPTION_PROMPT),
            help    = STRING_TOKEN(STR_NULL_STRING),
            minsize = DESCRIPTION_STR_MIN_SIZE,
            maxsize = DESCRIPTION_STR_MAX_SIZE,
    endstring;

    oneof varid  = HTTP_BOOT_CONFIG_IFR_NVDATA.IpVersion,
          prompt = STRING_TOKEN(STR_HTTP_BOOT_IP_VERSION_PROMPT),
          help   = STRING_TOKEN(STR_HTTP_BOOT_IP_VERSION_HELP),
          option text = STRING_TOKEN(STR_HTTP_BOOT_IP_VERSION_4),   value = HTTP_BOOT_IP_VERSION_4,   flags = DEFAULT;
          option text = STRING_TOKEN(STR_HTTP_BOOT_IP_VERSION_6),   value = HTTP_BOOT_IP_VERSION_6,   flags = 0;
    endoneof;

    string  varid   = HTTP_BOOT_CONFIG_IFR_NVDATA.Uri,
            prompt  = STRING_TOKEN(STR_BOOT_URI_PROMPT),
            help    = STRING_TOKEN(STR_BOOT_URI_HELP),
            flags   = INTERACTIVE,
            key     = KEY_INITIATOR_URI,
            minsize = URI_STR_MIN_SIZE,
            maxsize = URI_STR_MAX_SIZE,
    endstring;
  endform;

endformset;
