[edk2] [patch 2/2] NetworkPkg:Add a new error status code EFI_HTTP_ERROR

2016-01-26 Thread Zhang Lubo
Add a new error status code EFI_HTTP_ERROR in corresponding with the UEFI 2.6 
spec, when
EFI_HTTP_PROTOCOL.Response() is called and the protocol interface encounter a 
HTTP error,
it should return the new error status to the caller.

Cc: Fu Siyuan 
Cc: Ye Ting 
Cc: Wu Jiaxin 
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Zhang Lubo 
---
 NetworkPkg/HttpBootDxe/HttpBootSupport.c |  4 +---
 NetworkPkg/HttpDxe/HttpImpl.c| 10 +-
 NetworkPkg/HttpDxe/HttpImpl.h|  1 +
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/NetworkPkg/HttpBootDxe/HttpBootSupport.c 
b/NetworkPkg/HttpBootDxe/HttpBootSupport.c
index f9bbe4b..38743c6 100644
--- a/NetworkPkg/HttpBootDxe/HttpBootSupport.c
+++ b/NetworkPkg/HttpBootDxe/HttpBootSupport.c
@@ -974,13 +974,11 @@ HttpIoRecvResponse (
   Status = HttpIo->RspToken.Status;
   if (!EFI_ERROR (Status)) {
 ResponseData->HeaderCount = HttpIo->RspToken.Message->HeaderCount;
 ResponseData->Headers = HttpIo->RspToken.Message->Headers;
 ResponseData->BodyLength  = HttpIo->RspToken.Message->BodyLength;
-  }
-  
-  if (RecvMsgHeader) {
+  } else if (Status == EFI_HTTP_ERROR) {
 StatusCode = HttpIo->RspToken.Message->Data.Response->StatusCode;
 HttpBootPrintErrorMessage (StatusCode);
   }
 
   return Status;
diff --git a/NetworkPkg/HttpDxe/HttpImpl.c b/NetworkPkg/HttpDxe/HttpImpl.c
index aee3de5..3ea95b6 100644
--- a/NetworkPkg/HttpDxe/HttpImpl.c
+++ b/NetworkPkg/HttpDxe/HttpImpl.c
@@ -814,10 +814,12 @@ HttpBodyParserCallback (
 
   @retval EFI_SUCCESS Allocation succeeded.
   @retval EFI_OUT_OF_RESOURCESFailed to complete the opration due to lack 
of resources.
   @retval EFI_NOT_READY   Can't find a corresponding Tx4Token/Tx6Token 
or 
   the EFI_HTTP_UTILITIES_PROTOCOL is not 
available.
+  @retval EFI_HTTP_ERROR  A HTTP error occurred during the network 
operation. The response 
+  status code is returned in Token->Message-> 
Response->StatusCode.
 
 **/
 EFI_STATUS
 HttpResponseWorker (
   IN  HTTP_TOKEN_WRAP   *Wrap
@@ -973,12 +975,16 @@ HttpResponseWorker (
   goto Error;
 }
 
 FreePool (HttpHeaders);
 HttpHeaders = NULL;
-
+
 HttpMsg->Data.Response->StatusCode = HttpMappingToStatusCode (StatusCode);
+if (StatusCode >= HTTP_ERROR_STATUS) {
+  Status = EFI_HTTP_ERROR;
+  goto Error;
+}
 
 //
 // Init message-body parser by header information.  
 //
 Status = EFI_NOT_READY;
@@ -1189,10 +1195,12 @@ Error:
   Token->Message->Data is NULL, but a previous 
call to
   Response() has not been completed 
successfully.
   @retval EFI_OUT_OF_RESOURCESCould not allocate enough system resources.
   @retval EFI_ACCESS_DENIED   An open TCP connection is not present with 
the host
   specified by response URL.
+  @retval EFI_HTTP_ERROR  A HTTP error occurred during the network 
operation. The response 
+  status code is returned in Token->Message-> 
Response->StatusCode.
 **/
 EFI_STATUS
 EFIAPI
 EfiHttpResponse (
   IN  EFI_HTTP_PROTOCOL *This,
diff --git a/NetworkPkg/HttpDxe/HttpImpl.h b/NetworkPkg/HttpDxe/HttpImpl.h
index afbe982..5c159fc 100644
--- a/NetworkPkg/HttpDxe/HttpImpl.h
+++ b/NetworkPkg/HttpDxe/HttpImpl.h
@@ -14,10 +14,11 @@
 **/
 
 #ifndef __EFI_HTTP_IMPL_H__
 #define __EFI_HTTP_IMPL_H__
 
+#define HTTP_ERROR_STATUS300
 #define HTTP_DEFAULT_PORT80
 #define HTTP_END_OF_HDR_STR  "\r\n\r\n"
 #define HTTP_CRLF_STR"\r\n"
 #define HTTP_VERSION_STR "HTTP/1.1"
 #define HTTP_VERSION_CRLF_STR" HTTP/1.1\r\n"
-- 
1.9.5.msysgit.1

___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


Re: [edk2] [patch 2/2] NetworkPkg:Add a new error status code EFI_HTTP_ERROR

2016-01-27 Thread Wu, Jiaxin
Reviewed-by: Jiaxin Wu 


-Original Message-
From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Zhang 
Lubo
Sent: Wednesday, January 27, 2016 3:28 PM
To: edk2-devel@lists.01.org
Cc: Ye, Ting; Fu, Siyuan; Wu, Jiaxin
Subject: [edk2] [patch 2/2] NetworkPkg:Add a new error status code 
EFI_HTTP_ERROR

Add a new error status code EFI_HTTP_ERROR in corresponding with the UEFI 2.6 
spec, when
EFI_HTTP_PROTOCOL.Response() is called and the protocol interface encounter a 
HTTP error, it should return the new error status to the caller.

Cc: Fu Siyuan 
Cc: Ye Ting 
Cc: Wu Jiaxin 
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Zhang Lubo 
---
 NetworkPkg/HttpBootDxe/HttpBootSupport.c |  4 +---
 NetworkPkg/HttpDxe/HttpImpl.c| 10 +-
 NetworkPkg/HttpDxe/HttpImpl.h|  1 +
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/NetworkPkg/HttpBootDxe/HttpBootSupport.c 
b/NetworkPkg/HttpBootDxe/HttpBootSupport.c
index f9bbe4b..38743c6 100644
--- a/NetworkPkg/HttpBootDxe/HttpBootSupport.c
+++ b/NetworkPkg/HttpBootDxe/HttpBootSupport.c
@@ -974,13 +974,11 @@ HttpIoRecvResponse (
   Status = HttpIo->RspToken.Status;
   if (!EFI_ERROR (Status)) {
 ResponseData->HeaderCount = HttpIo->RspToken.Message->HeaderCount;
 ResponseData->Headers = HttpIo->RspToken.Message->Headers;
 ResponseData->BodyLength  = HttpIo->RspToken.Message->BodyLength;
-  }
-
-  if (RecvMsgHeader) {
+  } else if (Status == EFI_HTTP_ERROR) {
 StatusCode = HttpIo->RspToken.Message->Data.Response->StatusCode;
 HttpBootPrintErrorMessage (StatusCode);
   }
 
   return Status;
diff --git a/NetworkPkg/HttpDxe/HttpImpl.c b/NetworkPkg/HttpDxe/HttpImpl.c 
index aee3de5..3ea95b6 100644
--- a/NetworkPkg/HttpDxe/HttpImpl.c
+++ b/NetworkPkg/HttpDxe/HttpImpl.c
@@ -814,10 +814,12 @@ HttpBodyParserCallback (
 
   @retval EFI_SUCCESS Allocation succeeded.
   @retval EFI_OUT_OF_RESOURCESFailed to complete the opration due to lack 
of resources.
   @retval EFI_NOT_READY   Can't find a corresponding Tx4Token/Tx6Token 
or 
   the EFI_HTTP_UTILITIES_PROTOCOL is not 
available.
+  @retval EFI_HTTP_ERROR  A HTTP error occurred during the network 
operation. The response 
+  status code is returned in Token->Message-> 
Response->StatusCode.
 
 **/
 EFI_STATUS
 HttpResponseWorker (
   IN  HTTP_TOKEN_WRAP   *Wrap
@@ -973,12 +975,16 @@ HttpResponseWorker (
   goto Error;
 }
 
 FreePool (HttpHeaders);
 HttpHeaders = NULL;
-
+
 HttpMsg->Data.Response->StatusCode = HttpMappingToStatusCode (StatusCode);
+if (StatusCode >= HTTP_ERROR_STATUS) {
+  Status = EFI_HTTP_ERROR;
+  goto Error;
+}
 
 //
 // Init message-body parser by header information.  
 //
 Status = EFI_NOT_READY;
@@ -1189,10 +1195,12 @@ Error:
   Token->Message->Data is NULL, but a previous 
call to
   Response() has not been completed 
successfully.
   @retval EFI_OUT_OF_RESOURCESCould not allocate enough system resources.
   @retval EFI_ACCESS_DENIED   An open TCP connection is not present with 
the host
   specified by response URL.
+  @retval EFI_HTTP_ERROR  A HTTP error occurred during the network 
operation. The response 
+  status code is returned in Token->Message-> 
Response->StatusCode.
 **/
 EFI_STATUS
 EFIAPI
 EfiHttpResponse (
   IN  EFI_HTTP_PROTOCOL *This,
diff --git a/NetworkPkg/HttpDxe/HttpImpl.h b/NetworkPkg/HttpDxe/HttpImpl.h 
index afbe982..5c159fc 100644
--- a/NetworkPkg/HttpDxe/HttpImpl.h
+++ b/NetworkPkg/HttpDxe/HttpImpl.h
@@ -14,10 +14,11 @@
 **/
 
 #ifndef __EFI_HTTP_IMPL_H__
 #define __EFI_HTTP_IMPL_H__
 
+#define HTTP_ERROR_STATUS300
 #define HTTP_DEFAULT_PORT80
 #define HTTP_END_OF_HDR_STR  "\r\n\r\n"
 #define HTTP_CRLF_STR"\r\n"
 #define HTTP_VERSION_STR "HTTP/1.1"
 #define HTTP_VERSION_CRLF_STR" HTTP/1.1\r\n"
--
1.9.5.msysgit.1

___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


Re: [edk2] [patch 2/2] NetworkPkg:Add a new error status code EFI_HTTP_ERROR

2016-01-27 Thread Fu, Siyuan
Hi, Lubo

The "goto Error" in below code skips the body receive logic, while most of the 
error response message are allowed to have a message body according to RFC.
+if (StatusCode >= HTTP_ERROR_STATUS) {
+  Status = EFI_HTTP_ERROR;
+  goto Error;
+}

Siyuan

-Original Message-
From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Zhang 
Lubo
Sent: Wednesday, January 27, 2016 3:28 PM
To: edk2-devel@lists.01.org
Cc: Ye, Ting ; Fu, Siyuan ; Wu, Jiaxin 

Subject: [edk2] [patch 2/2] NetworkPkg:Add a new error status code 
EFI_HTTP_ERROR

Add a new error status code EFI_HTTP_ERROR in corresponding with the UEFI 2.6 
spec, when
EFI_HTTP_PROTOCOL.Response() is called and the protocol interface encounter a 
HTTP error, it should return the new error status to the caller.

Cc: Fu Siyuan 
Cc: Ye Ting 
Cc: Wu Jiaxin 
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Zhang Lubo 
---
 NetworkPkg/HttpBootDxe/HttpBootSupport.c |  4 +---
 NetworkPkg/HttpDxe/HttpImpl.c| 10 +-
 NetworkPkg/HttpDxe/HttpImpl.h|  1 +
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/NetworkPkg/HttpBootDxe/HttpBootSupport.c 
b/NetworkPkg/HttpBootDxe/HttpBootSupport.c
index f9bbe4b..38743c6 100644
--- a/NetworkPkg/HttpBootDxe/HttpBootSupport.c
+++ b/NetworkPkg/HttpBootDxe/HttpBootSupport.c
@@ -974,13 +974,11 @@ HttpIoRecvResponse (
   Status = HttpIo->RspToken.Status;
   if (!EFI_ERROR (Status)) {
 ResponseData->HeaderCount = HttpIo->RspToken.Message->HeaderCount;
 ResponseData->Headers = HttpIo->RspToken.Message->Headers;
 ResponseData->BodyLength  = HttpIo->RspToken.Message->BodyLength;
-  }
-
-  if (RecvMsgHeader) {
+  } else if (Status == EFI_HTTP_ERROR) {
 StatusCode = HttpIo->RspToken.Message->Data.Response->StatusCode;
 HttpBootPrintErrorMessage (StatusCode);
   }
 
   return Status;
diff --git a/NetworkPkg/HttpDxe/HttpImpl.c b/NetworkPkg/HttpDxe/HttpImpl.c 
index aee3de5..3ea95b6 100644
--- a/NetworkPkg/HttpDxe/HttpImpl.c
+++ b/NetworkPkg/HttpDxe/HttpImpl.c
@@ -814,10 +814,12 @@ HttpBodyParserCallback (
 
   @retval EFI_SUCCESS Allocation succeeded.
   @retval EFI_OUT_OF_RESOURCESFailed to complete the opration due to lack 
of resources.
   @retval EFI_NOT_READY   Can't find a corresponding Tx4Token/Tx6Token 
or 
   the EFI_HTTP_UTILITIES_PROTOCOL is not 
available.
+  @retval EFI_HTTP_ERROR  A HTTP error occurred during the network 
operation. The response 
+  status code is returned in Token->Message-> 
Response->StatusCode.
 
 **/
 EFI_STATUS
 HttpResponseWorker (
   IN  HTTP_TOKEN_WRAP   *Wrap
@@ -973,12 +975,16 @@ HttpResponseWorker (
   goto Error;
 }
 
 FreePool (HttpHeaders);
 HttpHeaders = NULL;
-
+
 HttpMsg->Data.Response->StatusCode = HttpMappingToStatusCode (StatusCode);
+if (StatusCode >= HTTP_ERROR_STATUS) {
+  Status = EFI_HTTP_ERROR;
+  goto Error;
+}
 
 //
 // Init message-body parser by header information.  
 //
 Status = EFI_NOT_READY;
@@ -1189,10 +1195,12 @@ Error:
   Token->Message->Data is NULL, but a previous 
call to
   Response() has not been completed 
successfully.
   @retval EFI_OUT_OF_RESOURCESCould not allocate enough system resources.
   @retval EFI_ACCESS_DENIED   An open TCP connection is not present with 
the host
   specified by response URL.
+  @retval EFI_HTTP_ERROR  A HTTP error occurred during the network 
operation. The response 
+  status code is returned in Token->Message-> 
Response->StatusCode.
 **/
 EFI_STATUS
 EFIAPI
 EfiHttpResponse (
   IN  EFI_HTTP_PROTOCOL *This,
diff --git a/NetworkPkg/HttpDxe/HttpImpl.h b/NetworkPkg/HttpDxe/HttpImpl.h 
index afbe982..5c159fc 100644
--- a/NetworkPkg/HttpDxe/HttpImpl.h
+++ b/NetworkPkg/HttpDxe/HttpImpl.h
@@ -14,10 +14,11 @@
 **/
 
 #ifndef __EFI_HTTP_IMPL_H__
 #define __EFI_HTTP_IMPL_H__
 
+#define HTTP_ERROR_STATUS300
 #define HTTP_DEFAULT_PORT80
 #define HTTP_END_OF_HDR_STR  "\r\n\r\n"
 #define HTTP_CRLF_STR"\r\n"
 #define HTTP_VERSION_STR "HTTP/1.1"
 #define HTTP_VERSION_CRLF_STR" HTTP/1.1\r\n"
--
1.9.5.msysgit.1

___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel