]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/HttpBootDxe/HttpBootDhcp4.c
NetworkPkg: Add URI configuration form to HTTP boot driver.
[mirror_edk2.git] / NetworkPkg / HttpBootDxe / HttpBootDhcp4.c
index 9a947a6ea63ca1ac36aa671c8c47ee922e0da74f..b9c8084e11d792ee1fe43ac8ca83b34f6bfd0dc8 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Functions implementation related with DHCPv4 for HTTP boot driver.\r
 \r
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials are licensed and made available under \r
 the terms and conditions of the BSD License that accompanies this distribution.  \r
 The full text of the license may be found at\r
@@ -395,7 +395,11 @@ HttpBootParseDhcp4Packet (
   //\r
   if (IsHttpOffer) {\r
     if (IpExpressedUri) {\r
-      OfferType = IsProxyOffer ? HttpOfferTypeProxyIpUri : HttpOfferTypeDhcpIpUri;\r
+      if (IsProxyOffer) {\r
+        OfferType = HttpOfferTypeProxyIpUri;\r
+      } else {\r
+        OfferType = IsDnsOffer ? HttpOfferTypeDhcpIpUriDns : HttpOfferTypeDhcpIpUri;\r
+      }\r
     } else {\r
       if (!IsProxyOffer) {\r
         OfferType = IsDnsOffer ? HttpOfferTypeDhcpNameUriDns : HttpOfferTypeDhcpNameUri;\r
@@ -473,46 +477,81 @@ HttpBootSelectDhcpOffer (
 {\r
   Private->SelectIndex = 0;\r
   Private->SelectProxyType = HttpOfferTypeMax;\r
-  \r
-  //\r
-  // Priority1: HttpOfferTypeDhcpIpUri                           \r
-  // Priority2: HttpOfferTypeDhcpNameUriDns                      \r
-  // Priority3: HttpOfferTypeDhcpOnly + HttpOfferTypeProxyIpUri  \r
-  // Priority4: HttpOfferTypeDhcpDns  + HttpOfferTypeProxyIpUri  \r
-  // Priority5: HttpOfferTypeDhcpDns  + HttpOfferTypeProxyNameUri\r
-  // Priority6: HttpOfferTypeDhcpDns  + HttpOfferTypeDhcpNameUri \r
-  //    \r
-  if (Private->OfferCount[HttpOfferTypeDhcpIpUri] > 0) {\r
+\r
+  if (Private->FilePathUri != NULL) {\r
+    //\r
+    // We are in home environment, the URI is already specified.\r
+    // Just need to choose a DHCP offer.\r
+    // The offer with DNS server address takes priority here.\r
+    //\r
+    if (Private->OfferCount[HttpOfferTypeDhcpDns] > 0) {\r
+      \r
+      Private->SelectIndex = Private->OfferIndex[HttpOfferTypeDhcpDns][0] + 1;\r
+      \r
+    } else if (Private->OfferCount[HttpOfferTypeDhcpIpUriDns] > 0) {\r
     \r
-    Private->SelectIndex = Private->OfferIndex[HttpOfferTypeDhcpIpUri][0] + 1;\r
+      Private->SelectIndex = Private->OfferIndex[HttpOfferTypeDhcpIpUriDns][0] + 1;\r
+      \r
+    } else if (Private->OfferCount[HttpOfferTypeDhcpNameUriDns] > 0) {\r
     \r
-  } else if (Private->OfferCount[HttpOfferTypeDhcpNameUriDns] > 0) {\r
-  \r
-    Private->SelectIndex = Private->OfferIndex[HttpOfferTypeDhcpNameUriDns][0] + 1;\r
+      Private->SelectIndex = Private->OfferIndex[HttpOfferTypeDhcpNameUriDns][0] + 1;\r
+      \r
+    }  else if (Private->OfferCount[HttpOfferTypeDhcpOnly] > 0) {\r
     \r
-  } else if (Private->OfferCount[HttpOfferTypeDhcpOnly] > 0 &&\r
-             Private->OfferCount[HttpOfferTypeProxyIpUri] > 0) {\r
-             \r
-    Private->SelectIndex     = Private->OfferIndex[HttpOfferTypeDhcpOnly][0] + 1;\r
-    Private->SelectProxyType = HttpOfferTypeProxyIpUri;\r
+      Private->SelectIndex = Private->OfferIndex[HttpOfferTypeDhcpOnly][0] + 1;\r
+      \r
+    }  else if (Private->OfferCount[HttpOfferTypeDhcpIpUri] > 0) {\r
     \r
-  } else if (Private->OfferCount[HttpOfferTypeDhcpDns] > 0 &&\r
-             Private->OfferCount[HttpOfferTypeProxyIpUri] > 0) {\r
-             \r
-    Private->SelectIndex     = Private->OfferIndex[HttpOfferTypeDhcpDns][0] + 1;\r
-    Private->SelectProxyType = HttpOfferTypeProxyIpUri;\r
+      Private->SelectIndex = Private->OfferIndex[HttpOfferTypeDhcpIpUri][0] + 1;\r
+    }\r
     \r
-  } else if (Private->OfferCount[HttpOfferTypeDhcpDns] > 0 &&\r
-             Private->OfferCount[HttpOfferTypeProxyNameUri] > 0) {\r
-             \r
-    Private->SelectIndex     = Private->OfferIndex[HttpOfferTypeDhcpDns][0] + 1;\r
-    Private->SelectProxyType = HttpOfferTypeProxyNameUri;\r
+  } else {\r
+    //\r
+    // We are in corporate environment.\r
+    //\r
+    // Priority1: HttpOfferTypeDhcpIpUri or HttpOfferTypeDhcpIpUriDns\r
+    // Priority2: HttpOfferTypeDhcpNameUriDns                      \r
+    // Priority3: HttpOfferTypeDhcpOnly + HttpOfferTypeProxyIpUri  \r
+    // Priority4: HttpOfferTypeDhcpDns  + HttpOfferTypeProxyIpUri  \r
+    // Priority5: HttpOfferTypeDhcpDns  + HttpOfferTypeProxyNameUri\r
+    // Priority6: HttpOfferTypeDhcpDns  + HttpOfferTypeDhcpNameUri \r
+    //    \r
+    if (Private->OfferCount[HttpOfferTypeDhcpIpUri] > 0) {\r
+      \r
+      Private->SelectIndex = Private->OfferIndex[HttpOfferTypeDhcpIpUri][0] + 1;\r
+      \r
+    } else if (Private->OfferCount[HttpOfferTypeDhcpIpUriDns] > 0) {\r
+      \r
+      Private->SelectIndex = Private->OfferIndex[HttpOfferTypeDhcpIpUriDns][0] + 1;\r
+      \r
+    }else if (Private->OfferCount[HttpOfferTypeDhcpNameUriDns] > 0) {\r
     \r
-  } else if (Private->OfferCount[HttpOfferTypeDhcpDns] > 0 &&\r
-             Private->OfferCount[HttpOfferTypeDhcpNameUri] > 0) {\r
-             \r
-    Private->SelectIndex     = Private->OfferIndex[HttpOfferTypeDhcpDns][0] + 1;\r
-    Private->SelectProxyType = HttpOfferTypeDhcpNameUri;\r
+      Private->SelectIndex = Private->OfferIndex[HttpOfferTypeDhcpNameUriDns][0] + 1;\r
+      \r
+    } else if (Private->OfferCount[HttpOfferTypeDhcpOnly] > 0 &&\r
+               Private->OfferCount[HttpOfferTypeProxyIpUri] > 0) {\r
+               \r
+      Private->SelectIndex     = Private->OfferIndex[HttpOfferTypeDhcpOnly][0] + 1;\r
+      Private->SelectProxyType = HttpOfferTypeProxyIpUri;\r
+      \r
+    } else if (Private->OfferCount[HttpOfferTypeDhcpDns] > 0 &&\r
+               Private->OfferCount[HttpOfferTypeProxyIpUri] > 0) {\r
+               \r
+      Private->SelectIndex     = Private->OfferIndex[HttpOfferTypeDhcpDns][0] + 1;\r
+      Private->SelectProxyType = HttpOfferTypeProxyIpUri;\r
+      \r
+    } else if (Private->OfferCount[HttpOfferTypeDhcpDns] > 0 &&\r
+               Private->OfferCount[HttpOfferTypeProxyNameUri] > 0) {\r
+               \r
+      Private->SelectIndex     = Private->OfferIndex[HttpOfferTypeDhcpDns][0] + 1;\r
+      Private->SelectProxyType = HttpOfferTypeProxyNameUri;\r
+      \r
+    } else if (Private->OfferCount[HttpOfferTypeDhcpDns] > 0 &&\r
+               Private->OfferCount[HttpOfferTypeDhcpNameUri] > 0) {\r
+               \r
+      Private->SelectIndex     = Private->OfferIndex[HttpOfferTypeDhcpDns][0] + 1;\r
+      Private->SelectProxyType = HttpOfferTypeDhcpNameUri;\r
+    }\r
   }\r
 }\r
 \r