]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/DnsDxe/DnsProtocol.c
NetworkPkg: Removing or adding some ASSERT statement
[mirror_edk2.git] / NetworkPkg / DnsDxe / DnsProtocol.c
index 70857c2b2f49290a9c58f62bd6f257aa258c33d0..a3f3de9766197c5a9464a0289997d520a41a3946 100644 (file)
@@ -329,6 +329,8 @@ Dns4HostNameToIp (
   LIST_ENTRY            *Entry;\r
   LIST_ENTRY            *Next;\r
   \r
+  CHAR8                 *QueryName;\r
+  \r
   DNS4_TOKEN_ENTRY      *TokenEntry;\r
   NET_BUF               *Packet;\r
   \r
@@ -336,6 +338,7 @@ Dns4HostNameToIp (
   \r
   Status     = EFI_SUCCESS;\r
   Item       = NULL;\r
+  QueryName  = NULL;\r
   TokenEntry = NULL;\r
   Packet     = NULL;\r
   \r
@@ -438,10 +441,19 @@ Dns4HostNameToIp (
   TokenEntry->QueryHostName = HostName;\r
   TokenEntry->Token = Token;\r
 \r
+  //\r
+  // Construct QName.\r
+  //\r
+  QueryName = DnsFillinQNameForQueryIp (TokenEntry->QueryHostName);\r
+  if (QueryName == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto ON_EXIT;\r
+  }\r
+  \r
   //\r
   // Construct DNS Query Packet.\r
   //\r
-  Status = ConstructDNSQueryIp (Instance, TokenEntry->QueryHostName, DNS_TYPE_A, &Packet);\r
+  Status = ConstructDNSQuery (Instance, QueryName, DNS_TYPE_A, DNS_CLASS_INET, &Packet);\r
   if (EFI_ERROR (Status)) {\r
     if (TokenEntry != NULL) {\r
       FreePool (TokenEntry);\r
@@ -450,6 +462,8 @@ Dns4HostNameToIp (
     goto ON_EXIT;\r
   }\r
 \r
+  ASSERT (Packet != NULL);\r
+\r
   //\r
   // Save the token into the Dns4TxTokens map.\r
   //\r
@@ -477,6 +491,10 @@ Dns4HostNameToIp (
   }\r
   \r
 ON_EXIT:\r
+  if (QueryName != NULL) {\r
+    FreePool (QueryName);\r
+  }\r
+  \r
   gBS->RestoreTPL (OldTpl);\r
   return Status;\r
 }\r
@@ -544,7 +562,112 @@ Dns4GeneralLookUp (
   IN  EFI_DNS4_COMPLETION_TOKEN        *Token\r
   )\r
 {\r
-  return EFI_UNSUPPORTED;\r
+  EFI_STATUS            Status;\r
+  \r
+  DNS_INSTANCE          *Instance;\r
+  \r
+  EFI_DNS4_CONFIG_DATA  *ConfigData;\r
+  \r
+  DNS4_TOKEN_ENTRY      *TokenEntry;\r
+  NET_BUF               *Packet;\r
+  \r
+  EFI_TPL               OldTpl;\r
+  \r
+  Status     = EFI_SUCCESS;\r
+  TokenEntry = NULL;\r
+  Packet     = NULL;\r
+  \r
+  //\r
+  // Validate the parameters\r
+  //\r
+  if ((This == NULL) || (QName == NULL) || Token == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  \r
+  OldTpl   = gBS->RaiseTPL (TPL_CALLBACK);\r
+  \r
+  Instance = DNS_INSTANCE_FROM_THIS_PROTOCOL4 (This);\r
+  \r
+  ConfigData = &(Instance->Dns4CfgData);\r
+  \r
+  Instance->MaxRetry = ConfigData->RetryCount;\r
+  \r
+  Token->Status = EFI_NOT_READY;\r
+  Token->RetryCount = 0;\r
+  Token->RetryInterval = ConfigData->RetryInterval;\r
+\r
+  if (Instance->State != DNS_STATE_CONFIGED) {\r
+    Status = EFI_NOT_STARTED;\r
+    goto ON_EXIT;\r
+  }\r
+\r
+  //\r
+  // Check the MaxRetry and RetryInterval values.\r
+  //\r
+  if (Instance->MaxRetry == 0) {\r
+    Instance->MaxRetry = DNS_DEFAULT_RETRY;\r
+  }\r
+\r
+  if (Token->RetryInterval < DNS_DEFAULT_TIMEOUT) {\r
+    Token->RetryInterval = DNS_DEFAULT_TIMEOUT;\r
+  }\r
+\r
+  //\r
+  // Construct DNS TokenEntry.\r
+  //\r
+  TokenEntry = AllocateZeroPool (sizeof(DNS4_TOKEN_ENTRY));\r
+  if (TokenEntry == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto ON_EXIT;\r
+  }\r
+  \r
+  TokenEntry->PacketToLive = Token->RetryInterval;\r
+  TokenEntry->GeneralLookUp = TRUE;\r
+  TokenEntry->Token = Token;\r
+\r
+  //\r
+  // Construct DNS Query Packet.\r
+  //\r
+  Status = ConstructDNSQuery (Instance, QName, QType, QClass, &Packet);\r
+  if (EFI_ERROR (Status)) {\r
+    if (TokenEntry != NULL) {\r
+      FreePool (TokenEntry);\r
+    }\r
+    \r
+    goto ON_EXIT;\r
+  }\r
+\r
+  ASSERT (Packet != NULL);\r
+\r
+  //\r
+  // Save the token into the Dns4TxTokens map.\r
+  //\r
+  Status = NetMapInsertTail (&Instance->Dns4TxTokens, TokenEntry, Packet);\r
+  if (EFI_ERROR (Status)) {\r
+    if (TokenEntry != NULL) {\r
+      FreePool (TokenEntry);\r
+    }\r
+    \r
+    NetbufFree (Packet);\r
+    \r
+    goto ON_EXIT;\r
+  }\r
+  \r
+  //\r
+  // Dns Query Ip\r
+  //\r
+  Status = DoDnsQuery (Instance, Packet);\r
+  if (EFI_ERROR (Status)) {\r
+    if (TokenEntry != NULL) {\r
+      FreePool (TokenEntry);\r
+    }\r
+    \r
+    NetbufFree (Packet);\r
+  }\r
+  \r
+ON_EXIT:\r
+  gBS->RestoreTPL (OldTpl);\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -978,6 +1101,8 @@ Dns6HostNameToIp (
   LIST_ENTRY            *Entry;\r
   LIST_ENTRY            *Next;\r
   \r
+  CHAR8                 *QueryName;\r
+  \r
   DNS6_TOKEN_ENTRY      *TokenEntry;\r
   NET_BUF               *Packet;\r
   \r
@@ -985,6 +1110,7 @@ Dns6HostNameToIp (
   \r
   Status     = EFI_SUCCESS;\r
   Item       = NULL;\r
+  QueryName  = NULL;\r
   TokenEntry = NULL;\r
   Packet     = NULL;\r
 \r
@@ -1087,10 +1213,20 @@ Dns6HostNameToIp (
   TokenEntry->QueryHostName = HostName;\r
   TokenEntry->Token = Token;\r
 \r
+\r
+  //\r
+  // Construct QName.\r
+  //\r
+  QueryName = DnsFillinQNameForQueryIp (TokenEntry->QueryHostName);\r
+  if (QueryName == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto ON_EXIT;\r
+  }\r
+  \r
   //\r
   // Construct DNS Query Packet.\r
   //\r
-  Status = ConstructDNSQueryIp (Instance, TokenEntry->QueryHostName, DNS_TYPE_AAAA, &Packet);\r
+  Status = ConstructDNSQuery (Instance, QueryName, DNS_TYPE_AAAA, DNS_CLASS_INET, &Packet);\r
   if (EFI_ERROR (Status)) {\r
     if (TokenEntry != NULL) {\r
       FreePool (TokenEntry);\r
@@ -1099,6 +1235,8 @@ Dns6HostNameToIp (
     goto ON_EXIT;\r
   }\r
 \r
+  ASSERT (Packet != NULL);\r
+\r
   //\r
   // Save the token into the Dns6TxTokens map.\r
   //\r
@@ -1126,6 +1264,10 @@ Dns6HostNameToIp (
   }\r
   \r
 ON_EXIT:\r
+  if (QueryName != NULL) {\r
+    FreePool (QueryName);\r
+  }\r
+  \r
   gBS->RestoreTPL (OldTpl);\r
   return Status;\r
 }\r
@@ -1193,7 +1335,112 @@ Dns6GeneralLookUp (
   IN  EFI_DNS6_COMPLETION_TOKEN         *Token\r
   )\r
 {\r
-  return EFI_UNSUPPORTED;\r
+  EFI_STATUS            Status;\r
+  \r
+  DNS_INSTANCE          *Instance;\r
+  \r
+  EFI_DNS6_CONFIG_DATA  *ConfigData;\r
+  \r
+  DNS6_TOKEN_ENTRY      *TokenEntry;\r
+  NET_BUF               *Packet;\r
+  \r
+  EFI_TPL               OldTpl;\r
+  \r
+  Status     = EFI_SUCCESS;\r
+  TokenEntry = NULL;\r
+  Packet     = NULL;\r
+  \r
+  //\r
+  // Validate the parameters\r
+  //\r
+  if ((This == NULL) || (QName == NULL) || Token == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  \r
+  OldTpl   = gBS->RaiseTPL (TPL_CALLBACK);\r
+  \r
+  Instance = DNS_INSTANCE_FROM_THIS_PROTOCOL6 (This);\r
+  \r
+  ConfigData = &(Instance->Dns6CfgData);\r
+  \r
+  Instance->MaxRetry = ConfigData->RetryCount;\r
+  \r
+  Token->Status = EFI_NOT_READY;\r
+  Token->RetryCount = 0;\r
+  Token->RetryInterval = ConfigData->RetryInterval;\r
+\r
+  if (Instance->State != DNS_STATE_CONFIGED) {\r
+    Status = EFI_NOT_STARTED;\r
+    goto ON_EXIT;\r
+  }\r
+\r
+  //\r
+  // Check the MaxRetry and RetryInterval values.\r
+  //\r
+  if (Instance->MaxRetry == 0) {\r
+    Instance->MaxRetry = DNS_DEFAULT_RETRY;\r
+  }\r
+\r
+  if (Token->RetryInterval < DNS_DEFAULT_TIMEOUT) {\r
+    Token->RetryInterval = DNS_DEFAULT_TIMEOUT;\r
+  }\r
+\r
+  //\r
+  // Construct DNS TokenEntry.\r
+  //\r
+  TokenEntry = AllocateZeroPool (sizeof(DNS6_TOKEN_ENTRY));\r
+  if (TokenEntry == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto ON_EXIT;\r
+  }\r
+  \r
+  TokenEntry->PacketToLive = Token->RetryInterval;\r
+  TokenEntry->GeneralLookUp = TRUE;\r
+  TokenEntry->Token = Token;\r
+\r
+  //\r
+  // Construct DNS Query Packet.\r
+  //\r
+  Status = ConstructDNSQuery (Instance, QName, QType, QClass, &Packet);\r
+  if (EFI_ERROR (Status)) {\r
+    if (TokenEntry != NULL) {\r
+      FreePool (TokenEntry);\r
+    }\r
+    \r
+    goto ON_EXIT;\r
+  }\r
+\r
+  ASSERT (Packet != NULL);\r
+\r
+  //\r
+  // Save the token into the Dns6TxTokens map.\r
+  //\r
+  Status = NetMapInsertTail (&Instance->Dns6TxTokens, TokenEntry, Packet);\r
+  if (EFI_ERROR (Status)) {\r
+    if (TokenEntry != NULL) {\r
+      FreePool (TokenEntry);\r
+    }\r
+    \r
+    NetbufFree (Packet);\r
+    \r
+    goto ON_EXIT;\r
+  }\r
+  \r
+  //\r
+  // Dns Query Ip\r
+  //\r
+  Status = DoDnsQuery (Instance, Packet);\r
+  if (EFI_ERROR (Status)) {\r
+    if (TokenEntry != NULL) {\r
+      FreePool (TokenEntry);\r
+    }\r
+    \r
+    NetbufFree (Packet);\r
+  }\r
+  \r
+ON_EXIT:\r
+  gBS->RestoreTPL (OldTpl);\r
+  return Status;\r
 }\r
 \r
 /**\r