UrlParserUserInfo,\r
UrlParserHostStart, // "@"\r
UrlParserHost,\r
+ UrlParserHostIpv6, // "["(Ipv6 address) "]"\r
UrlParserPortStart, // ":"\r
UrlParserPort,\r
UrlParserStateMax\r
\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
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 == TRUE) {\r
+ return UrlParserPortStart;\r
+ }\r
+ return UrlParserHostIpv6;\r
+ \r
case UrlParserPort:\r
case UrlParserPortStart:\r
return UrlParserPort;\r
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
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
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