]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.c
MdeModulePkg: Clean code to follow C Coding style.
[mirror_edk2.git] / MdeModulePkg / Library / DxeHttpLib / DxeHttpLib.c
index aeb52d0088578bcabf9f2cd952271cd944f949ce..49fa80ba8c30d6a6bae20c299e90141b8b7c97d1 100644 (file)
@@ -70,6 +70,7 @@ typedef enum {
   UrlParserUserInfo,\r
   UrlParserHostStart,     // "@"\r
   UrlParserHost,\r
+  UrlParserHostIpv6,      // "["(Ipv6 address) "]"\r
   UrlParserPortStart,     // ":"\r
   UrlParserPort,\r
   UrlParserStateMax\r
@@ -138,13 +139,16 @@ UriPercentDecode (
 \r
   @param[in]       Char           Next character.\r
   @param[in]       State          Current value of the parser state machine.\r
+  @param[in]       IsRightBracket TRUE if there is an sign ']' in the authority component and \r
+                                  indicates the next part is ':' before Port.                                \r
 \r
   @return          Updated state value.\r
 **/\r
 HTTP_URL_PARSE_STATE\r
 NetHttpParseAuthorityChar (\r
   IN  CHAR8                  Char,\r
-  IN  HTTP_URL_PARSE_STATE   State\r
+  IN  HTTP_URL_PARSE_STATE   State,\r
+  IN  BOOLEAN                *IsRightBracket\r
   )\r
 {\r
 \r
@@ -169,12 +173,27 @@ NetHttpParseAuthorityChar (
     break;\r
 \r
   case UrlParserHost:\r
-  case UrlParserHostStart:\r
+  case UrlParserHostStart:  \r
+    if (Char == '[') {\r
+      return UrlParserHostIpv6;\r
+    }\r
+    \r
     if (Char == ':') {\r
       return UrlParserPortStart;\r
     }\r
+    \r
     return UrlParserHost;\r
-\r
+    \r
+  case UrlParserHostIpv6:  \r
+    if (Char == ']') {\r
+      *IsRightBracket = TRUE;\r
+    }\r
+    \r
+    if (Char == ':' && *IsRightBracket) {\r
+      return UrlParserPortStart;\r
+    }\r
+    return UrlParserHostIpv6;\r
+    \r
   case UrlParserPort:\r
   case UrlParserPortStart:\r
     return UrlParserPort;\r
@@ -210,6 +229,7 @@ NetHttpParseAuthority (
   HTTP_URL_PARSE_STATE  State;\r
   UINT32                Field;\r
   UINT32                OldField;\r
+  BOOLEAN               IsrightBracket;\r
   \r
   ASSERT ((UrlParser->FieldBitMap & BIT (HTTP_URI_FIELD_AUTHORITY)) != 0);\r
 \r
@@ -222,12 +242,13 @@ NetHttpParseAuthority (
     State = UrlParserHost;\r
   }\r
 \r
+  IsrightBracket = FALSE;\r
   Field = HTTP_URI_FIELD_MAX;\r
   OldField = Field;\r
   Authority = Url + UrlParser->FieldData[HTTP_URI_FIELD_AUTHORITY].Offset;\r
   Length = UrlParser->FieldData[HTTP_URI_FIELD_AUTHORITY].Length;\r
   for (Char = Authority; Char < Authority + Length; Char++) {\r
-    State = NetHttpParseAuthorityChar (*Char, State);\r
+    State = NetHttpParseAuthorityChar (*Char, State, &IsrightBracket);\r
     switch (State) {\r
     case UrlParserStateMax:\r
       return EFI_INVALID_PARAMETER;\r
@@ -243,6 +264,10 @@ NetHttpParseAuthority (
     case UrlParserHost:\r
       Field = HTTP_URI_FIELD_HOST;\r
       break;\r
+\r
+    case UrlParserHostIpv6:\r
+      Field = HTTP_URI_FIELD_HOST;\r
+      break;\r
       \r
     case UrlParserPort:\r
       Field = HTTP_URI_FIELD_PORT;\r