AsciiPrint ("\n");\r
\r
switch (StatusCode) {\r
- case HTTP_STATUS_300_MULTIPLE_CHIOCES:\r
+ case HTTP_STATUS_300_MULTIPLE_CHOICES:\r
AsciiPrint ("\n Redirection: 300 Multiple Choices");\r
break; \r
\r
HttpIo->IsRxDone = FALSE;\r
}\r
\r
- if (!EFI_ERROR (HttpIo->RspToken.Status) && HttpIo->Callback != NULL) {\r
+ if ((HttpIo->Callback != NULL) && \r
+ (HttpIo->RspToken.Status == EFI_SUCCESS || HttpIo->RspToken.Status == EFI_HTTP_ERROR)) {\r
Status = HttpIo->Callback (\r
HttpIoResponse,\r
HttpIo->RspToken.Message,\r
// Return EFI_INVALID_PARAMETER if the URI is not HTTP or HTTPS.\r
//\r
if ((AsciiStrnCmp (Uri, "http://", 7) != 0) && (AsciiStrnCmp (Uri, "https://", 8) != 0)) {\r
+ AsciiPrint ("\n Error: Invalid URI address.\n");\r
DEBUG ((EFI_D_ERROR, "HttpBootCheckUriScheme: Invalid Uri.\n"));\r
return EFI_INVALID_PARAMETER;\r
}\r
// HTTP is disabled, return EFI_ACCESS_DENIED if the URI is HTTP.\r
//\r
if (!PcdGetBool (PcdAllowHttpConnections) && (AsciiStrnCmp (Uri, "http://", 7) == 0)) {\r
+ AsciiPrint ("\n Error: Access forbidden, only HTTPS connection is allowed.\n");\r
DEBUG ((EFI_D_ERROR, "HttpBootCheckUriScheme: HTTP is disabled.\n"));\r
return EFI_ACCESS_DENIED;\r
}\r
return Status;\r
}\r
\r
+/**\r
+ Indicate if the HTTP status code indicates a redirection.\r
+ \r
+ @param[in] StatusCode HTTP status code from server.\r
+\r
+ @return TRUE if it's redirection.\r
+\r
+**/\r
+BOOLEAN\r
+HttpBootIsHttpRedirectStatusCode (\r
+ IN EFI_HTTP_STATUS_CODE StatusCode\r
+ )\r
+{\r
+ if (StatusCode == HTTP_STATUS_301_MOVED_PERMANENTLY ||\r
+ StatusCode == HTTP_STATUS_302_FOUND ||\r
+ StatusCode == HTTP_STATUS_307_TEMPORARY_REDIRECT ||\r
+ StatusCode == HTTP_STATUS_308_PERMANENT_REDIRECT) {\r
+ return TRUE;\r
+ }\r
+\r
+ return FALSE;\r
+}\r