]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/HttpDxe/HttpProto.c
NetworkPkg: Httpboot will fail the 2nd time result by wrong TCP state.
[mirror_edk2.git] / NetworkPkg / HttpDxe / HttpProto.c
index 39837a3c827dd53d5a13fd096db070cc329f77c5..999695125e5152554d3c3f2426d97549fab0a37d 100644 (file)
@@ -1179,7 +1179,7 @@ HttpConnectTcp4 (
   EFI_TCP4_CONNECTION_STATE Tcp4State;\r
 \r
 \r
-  if (HttpInstance->State != HTTP_STATE_TCP_CONFIGED || HttpInstance->Tcp4 == NULL) {\r
+  if (HttpInstance->State < HTTP_STATE_TCP_CONFIGED || HttpInstance->Tcp4 == NULL) {\r
     return EFI_NOT_READY;\r
   }\r
 \r
@@ -1196,9 +1196,11 @@ HttpConnectTcp4 (
     return Status;\r
   }\r
 \r
-  if (Tcp4State > Tcp4StateEstablished) {\r
+  if (Tcp4State == Tcp4StateEstablished) {\r
+    return EFI_SUCCESS;\r
+  } else if (Tcp4State > Tcp4StateEstablished ) {\r
     HttpCloseConnection(HttpInstance);\r
-  }  \r
+  }\r
 \r
   return HttpCreateConnection (HttpInstance);\r
 }\r
@@ -1221,7 +1223,7 @@ HttpConnectTcp6 (
   EFI_STATUS                Status;\r
   EFI_TCP6_CONNECTION_STATE Tcp6State;\r
 \r
-  if (HttpInstance->State != HTTP_STATE_TCP_CONFIGED || HttpInstance->Tcp6 == NULL) {\r
+  if (HttpInstance->State < HTTP_STATE_TCP_CONFIGED || HttpInstance->Tcp6 == NULL) {\r
     return EFI_NOT_READY;\r
   }\r
 \r
@@ -1239,8 +1241,10 @@ HttpConnectTcp6 (
      return Status;\r
   }\r
 \r
-  if (Tcp6State > Tcp6StateEstablished) {\r
-    HttpCloseConnection (HttpInstance);\r
+  if (Tcp6State == Tcp6StateEstablished) {\r
+    return EFI_SUCCESS;\r
+  } else if (Tcp6State > Tcp6StateEstablished ) {\r
+    HttpCloseConnection(HttpInstance);\r
   }\r
 \r
   return HttpCreateConnection (HttpInstance);\r
@@ -1251,6 +1255,7 @@ HttpConnectTcp6 (
 \r
   @param[in]  HttpInstance       The HTTP instance private data.\r
   @param[in]  Wrap               The HTTP token's wrap data.\r
+  @param[in]  Configure          The Flag indicates whether the first time to initialize Tcp.\r
 \r
   @retval EFI_SUCCESS            The initialization of TCP instance is done. \r
   @retval Others                 Other error as indicated.\r
@@ -1259,7 +1264,8 @@ HttpConnectTcp6 (
 EFI_STATUS\r
 HttpInitTcp (\r
   IN  HTTP_PROTOCOL    *HttpInstance,\r
-  IN  HTTP_TOKEN_WRAP  *Wrap\r
+  IN  HTTP_TOKEN_WRAP  *Wrap,\r
+  IN  BOOLEAN          Configure\r
   )\r
 {\r
   EFI_STATUS           Status;\r
@@ -1269,10 +1275,13 @@ HttpInitTcp (
     //\r
     // Configure TCP instance.\r
     //\r
-    Status = HttpConfigureTcp4 (HttpInstance, Wrap);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
+    if (Configure) {\r
+      Status = HttpConfigureTcp4 (HttpInstance, Wrap);\r
+      if (EFI_ERROR (Status)) {\r
+        return Status;\r
+      }\r
     }\r
+\r
     //\r
     // Connect TCP.\r
     //\r
@@ -1284,10 +1293,13 @@ HttpInitTcp (
     //\r
     // Configure TCP instance.\r
     //\r
-    Status = HttpConfigureTcp6 (HttpInstance, Wrap);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
+    if (Configure) {\r
+      Status = HttpConfigureTcp6 (HttpInstance, Wrap);\r
+      if (EFI_ERROR (Status)) {\r
+        return Status;\r
+      }\r
     }\r
+\r
     //\r
     // Connect TCP.\r
     //\r