\r
#include "DxeHttpLib.h"\r
\r
-\r
-\r
/**\r
Decode a percent-encoded URI component to the ASCII character.\r
\r
EFI_STATUS\r
EFIAPI\r
UriPercentDecode (\r
- IN CHAR8 *Buffer,\r
- IN UINT32 BufferLength,\r
- OUT CHAR8 *ResultBuffer,\r
- OUT UINT32 *ResultLength\r
+ IN CHAR8 *Buffer,\r
+ IN UINT32 BufferLength,\r
+ OUT CHAR8 *ResultBuffer,\r
+ OUT UINT32 *ResultLength\r
)\r
{\r
- UINTN Index;\r
- UINTN Offset;\r
- CHAR8 HexStr[3];\r
+ UINTN Index;\r
+ UINTN Offset;\r
+ CHAR8 HexStr[3];\r
\r
- if (Buffer == NULL || BufferLength == 0 || ResultBuffer == NULL) {\r
+ if ((Buffer == NULL) || (BufferLength == 0) || (ResultBuffer == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- Index = 0;\r
- Offset = 0;\r
+ Index = 0;\r
+ Offset = 0;\r
HexStr[2] = '\0';\r
while (Index < BufferLength) {\r
if (Buffer[Index] == '%') {\r
- if (Index + 1 >= BufferLength || Index + 2 >= BufferLength ||\r
- !NET_IS_HEX_CHAR (Buffer[Index+1]) || !NET_IS_HEX_CHAR (Buffer[Index+2])) {\r
+ if ((Index + 1 >= BufferLength) || (Index + 2 >= BufferLength) ||\r
+ !NET_IS_HEX_CHAR (Buffer[Index+1]) || !NET_IS_HEX_CHAR (Buffer[Index+2]))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
- HexStr[0] = Buffer[Index+1];\r
- HexStr[1] = Buffer[Index+2];\r
- ResultBuffer[Offset] = (CHAR8) AsciiStrHexToUintn (HexStr);\r
- Index += 3;\r
+\r
+ HexStr[0] = Buffer[Index+1];\r
+ HexStr[1] = Buffer[Index+2];\r
+ ResultBuffer[Offset] = (CHAR8)AsciiStrHexToUintn (HexStr);\r
+ Index += 3;\r
} else {\r
ResultBuffer[Offset] = Buffer[Index];\r
Index++;\r
}\r
+\r
Offset++;\r
}\r
\r
- *ResultLength = (UINT32) Offset;\r
+ *ResultLength = (UINT32)Offset;\r
\r
return EFI_SUCCESS;\r
}\r
**/\r
HTTP_URL_PARSE_STATE\r
NetHttpParseAuthorityChar (\r
- IN CHAR8 Char,\r
- IN HTTP_URL_PARSE_STATE State,\r
- IN BOOLEAN *IsRightBracket\r
+ IN CHAR8 Char,\r
+ IN HTTP_URL_PARSE_STATE State,\r
+ IN BOOLEAN *IsRightBracket\r
)\r
{\r
-\r
//\r
// RFC 3986:\r
// The authority component is preceded by a double slash ("//") and is\r
// terminated by the next slash ("/"), question mark ("?"), or number\r
// sign ("#") character, or by the end of the URI.\r
//\r
- if (Char == ' ' || Char == '\r' || Char == '\n') {\r
+ if ((Char == ' ') || (Char == '\r') || (Char == '\n')) {\r
return UrlParserStateMax;\r
}\r
\r
// authority = [ userinfo "@" ] host [ ":" port ]\r
//\r
switch (State) {\r
- case UrlParserUserInfo:\r
- if (Char == '@') {\r
- return UrlParserHostStart;\r
- }\r
- break;\r
+ case UrlParserUserInfo:\r
+ if (Char == '@') {\r
+ return UrlParserHostStart;\r
+ }\r
\r
- case UrlParserHost:\r
- case UrlParserHostStart:\r
- if (Char == '[') {\r
- return UrlParserHostIpv6;\r
- }\r
+ break;\r
\r
- if (Char == ':') {\r
- return UrlParserPortStart;\r
- }\r
+ case UrlParserHost:\r
+ case UrlParserHostStart:\r
+ if (Char == '[') {\r
+ return UrlParserHostIpv6;\r
+ }\r
\r
- return UrlParserHost;\r
+ if (Char == ':') {\r
+ return UrlParserPortStart;\r
+ }\r
\r
- case UrlParserHostIpv6:\r
- if (Char == ']') {\r
- *IsRightBracket = TRUE;\r
- }\r
+ return UrlParserHost;\r
\r
- if (Char == ':' && *IsRightBracket) {\r
- return UrlParserPortStart;\r
- }\r
- return UrlParserHostIpv6;\r
+ case UrlParserHostIpv6:\r
+ if (Char == ']') {\r
+ *IsRightBracket = TRUE;\r
+ }\r
+\r
+ if ((Char == ':') && *IsRightBracket) {\r
+ return UrlParserPortStart;\r
+ }\r
\r
- case UrlParserPort:\r
- case UrlParserPortStart:\r
- return UrlParserPort;\r
+ return UrlParserHostIpv6;\r
+\r
+ case UrlParserPort:\r
+ case UrlParserPortStart:\r
+ return UrlParserPort;\r
\r
- default:\r
- break;\r
+ default:\r
+ break;\r
}\r
\r
return State;\r
**/\r
EFI_STATUS\r
NetHttpParseAuthority (\r
- IN CHAR8 *Url,\r
- IN BOOLEAN FoundAt,\r
- IN OUT HTTP_URL_PARSER *UrlParser\r
+ IN CHAR8 *Url,\r
+ IN BOOLEAN FoundAt,\r
+ IN OUT HTTP_URL_PARSER *UrlParser\r
)\r
{\r
CHAR8 *Char;\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
+ 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, &IsrightBracket);\r
switch (State) {\r
- case UrlParserStateMax:\r
- return EFI_INVALID_PARAMETER;\r
+ case UrlParserStateMax:\r
+ return EFI_INVALID_PARAMETER;\r
\r
- case UrlParserHostStart:\r
- case UrlParserPortStart:\r
- continue;\r
+ case UrlParserHostStart:\r
+ case UrlParserPortStart:\r
+ continue;\r
\r
- case UrlParserUserInfo:\r
- Field = HTTP_URI_FIELD_USERINFO;\r
- break;\r
+ case UrlParserUserInfo:\r
+ Field = HTTP_URI_FIELD_USERINFO;\r
+ break;\r
\r
- case UrlParserHost:\r
- Field = HTTP_URI_FIELD_HOST;\r
- break;\r
+ case UrlParserHost:\r
+ Field = HTTP_URI_FIELD_HOST;\r
+ break;\r
\r
- case UrlParserHostIpv6:\r
- Field = HTTP_URI_FIELD_HOST;\r
- break;\r
+ case UrlParserHostIpv6:\r
+ Field = HTTP_URI_FIELD_HOST;\r
+ break;\r
\r
- case UrlParserPort:\r
- Field = HTTP_URI_FIELD_PORT;\r
- break;\r
+ case UrlParserPort:\r
+ Field = HTTP_URI_FIELD_PORT;\r
+ break;\r
\r
- default:\r
- ASSERT (FALSE);\r
+ default:\r
+ ASSERT (FALSE);\r
}\r
\r
//\r
//\r
// New field start\r
//\r
- UrlParser->FieldBitMap |= BIT (Field);\r
- UrlParser->FieldData[Field].Offset = (UINT32) (Char - Url);\r
+ UrlParser->FieldBitMap |= BIT (Field);\r
+ UrlParser->FieldData[Field].Offset = (UINT32)(Char - Url);\r
UrlParser->FieldData[Field].Length = 1;\r
- OldField = Field;\r
+ OldField = Field;\r
}\r
\r
return EFI_SUCCESS;\r
**/\r
HTTP_URL_PARSE_STATE\r
NetHttpParseUrlChar (\r
- IN CHAR8 Char,\r
- IN HTTP_URL_PARSE_STATE State\r
+ IN CHAR8 Char,\r
+ IN HTTP_URL_PARSE_STATE State\r
)\r
{\r
- if (Char == ' ' || Char == '\r' || Char == '\n') {\r
+ if ((Char == ' ') || (Char == '\r') || (Char == '\n')) {\r
return UrlParserStateMax;\r
}\r
\r
// authority = [ userinfo "@" ] host [ ":" port ]\r
//\r
switch (State) {\r
- case UrlParserUrlStart:\r
- if (Char == '*' || Char == '/') {\r
- return UrlParserPath;\r
- }\r
- return UrlParserScheme;\r
+ case UrlParserUrlStart:\r
+ if ((Char == '*') || (Char == '/')) {\r
+ return UrlParserPath;\r
+ }\r
\r
- case UrlParserScheme:\r
- if (Char == ':') {\r
- return UrlParserSchemeColon;\r
- }\r
- break;\r
+ return UrlParserScheme;\r
\r
- case UrlParserSchemeColon:\r
- if (Char == '/') {\r
- return UrlParserSchemeColonSlash;\r
- }\r
- break;\r
+ case UrlParserScheme:\r
+ if (Char == ':') {\r
+ return UrlParserSchemeColon;\r
+ }\r
\r
- case UrlParserSchemeColonSlash:\r
- if (Char == '/') {\r
- return UrlParserSchemeColonSlashSlash;\r
- }\r
- break;\r
+ break;\r
\r
- case UrlParserAtInAuthority:\r
- if (Char == '@') {\r
- return UrlParserStateMax;\r
- }\r
+ case UrlParserSchemeColon:\r
+ if (Char == '/') {\r
+ return UrlParserSchemeColonSlash;\r
+ }\r
\r
- case UrlParserAuthority:\r
- case UrlParserSchemeColonSlashSlash:\r
- if (Char == '@') {\r
- return UrlParserAtInAuthority;\r
- }\r
- if (Char == '/') {\r
- return UrlParserPath;\r
- }\r
- if (Char == '?') {\r
- return UrlParserQueryStart;\r
- }\r
- if (Char == '#') {\r
- return UrlParserFragmentStart;\r
- }\r
- return UrlParserAuthority;\r
+ break;\r
\r
- case UrlParserPath:\r
- if (Char == '?') {\r
- return UrlParserQueryStart;\r
- }\r
- if (Char == '#') {\r
- return UrlParserFragmentStart;\r
- }\r
- break;\r
+ case UrlParserSchemeColonSlash:\r
+ if (Char == '/') {\r
+ return UrlParserSchemeColonSlashSlash;\r
+ }\r
\r
- case UrlParserQuery:\r
- case UrlParserQueryStart:\r
- if (Char == '#') {\r
- return UrlParserFragmentStart;\r
- }\r
- return UrlParserQuery;\r
+ break;\r
+\r
+ case UrlParserAtInAuthority:\r
+ if (Char == '@') {\r
+ return UrlParserStateMax;\r
+ }\r
\r
- case UrlParserFragmentStart:\r
- return UrlParserFragment;\r
+ case UrlParserAuthority:\r
+ case UrlParserSchemeColonSlashSlash:\r
+ if (Char == '@') {\r
+ return UrlParserAtInAuthority;\r
+ }\r
+\r
+ if (Char == '/') {\r
+ return UrlParserPath;\r
+ }\r
+\r
+ if (Char == '?') {\r
+ return UrlParserQueryStart;\r
+ }\r
+\r
+ if (Char == '#') {\r
+ return UrlParserFragmentStart;\r
+ }\r
+\r
+ return UrlParserAuthority;\r
+\r
+ case UrlParserPath:\r
+ if (Char == '?') {\r
+ return UrlParserQueryStart;\r
+ }\r
+\r
+ if (Char == '#') {\r
+ return UrlParserFragmentStart;\r
+ }\r
+\r
+ break;\r
+\r
+ case UrlParserQuery:\r
+ case UrlParserQueryStart:\r
+ if (Char == '#') {\r
+ return UrlParserFragmentStart;\r
+ }\r
\r
- default:\r
- break;\r
+ return UrlParserQuery;\r
+\r
+ case UrlParserFragmentStart:\r
+ return UrlParserFragment;\r
+\r
+ default:\r
+ break;\r
}\r
\r
return State;\r
}\r
+\r
/**\r
Create a URL parser for the input URL string.\r
\r
EFI_STATUS\r
EFIAPI\r
HttpParseUrl (\r
- IN CHAR8 *Url,\r
- IN UINT32 Length,\r
- IN BOOLEAN IsConnectMethod,\r
- OUT VOID **UrlParser\r
+ IN CHAR8 *Url,\r
+ IN UINT32 Length,\r
+ IN BOOLEAN IsConnectMethod,\r
+ OUT VOID **UrlParser\r
)\r
{\r
HTTP_URL_PARSE_STATE State;\r
\r
Parser = NULL;\r
\r
- if (Url == NULL || Length == 0 || UrlParser == NULL) {\r
+ if ((Url == NULL) || (Length == 0) || (UrlParser == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
State = UrlParserUrlStart;\r
}\r
\r
- Field = HTTP_URI_FIELD_MAX;\r
+ Field = HTTP_URI_FIELD_MAX;\r
OldField = Field;\r
- FoundAt = FALSE;\r
+ FoundAt = FALSE;\r
for (Char = Url; Char < Url + Length; Char++) {\r
//\r
// Update state machine according to next char.\r
State = NetHttpParseUrlChar (*Char, State);\r
\r
switch (State) {\r
- case UrlParserStateMax:\r
- FreePool (Parser);\r
- return EFI_INVALID_PARAMETER;\r
+ case UrlParserStateMax:\r
+ FreePool (Parser);\r
+ return EFI_INVALID_PARAMETER;\r
\r
- case UrlParserSchemeColon:\r
- case UrlParserSchemeColonSlash:\r
- case UrlParserSchemeColonSlashSlash:\r
- case UrlParserQueryStart:\r
- case UrlParserFragmentStart:\r
- //\r
- // Skip all the delimiting char: "://" "?" "@"\r
- //\r
- continue;\r
+ case UrlParserSchemeColon:\r
+ case UrlParserSchemeColonSlash:\r
+ case UrlParserSchemeColonSlashSlash:\r
+ case UrlParserQueryStart:\r
+ case UrlParserFragmentStart:\r
+ //\r
+ // Skip all the delimiting char: "://" "?" "@"\r
+ //\r
+ continue;\r
\r
- case UrlParserScheme:\r
- Field = HTTP_URI_FIELD_SCHEME;\r
- break;\r
+ case UrlParserScheme:\r
+ Field = HTTP_URI_FIELD_SCHEME;\r
+ break;\r
\r
- case UrlParserAtInAuthority:\r
- FoundAt = TRUE;\r
- case UrlParserAuthority:\r
- Field = HTTP_URI_FIELD_AUTHORITY;\r
- break;\r
+ case UrlParserAtInAuthority:\r
+ FoundAt = TRUE;\r
+ case UrlParserAuthority:\r
+ Field = HTTP_URI_FIELD_AUTHORITY;\r
+ break;\r
\r
- case UrlParserPath:\r
- Field = HTTP_URI_FIELD_PATH;\r
- break;\r
+ case UrlParserPath:\r
+ Field = HTTP_URI_FIELD_PATH;\r
+ break;\r
\r
- case UrlParserQuery:\r
- Field = HTTP_URI_FIELD_QUERY;\r
- break;\r
+ case UrlParserQuery:\r
+ Field = HTTP_URI_FIELD_QUERY;\r
+ break;\r
\r
- case UrlParserFragment:\r
- Field = HTTP_URI_FIELD_FRAGMENT;\r
- break;\r
+ case UrlParserFragment:\r
+ Field = HTTP_URI_FIELD_FRAGMENT;\r
+ break;\r
\r
- default:\r
- ASSERT (FALSE);\r
+ default:\r
+ ASSERT (FALSE);\r
}\r
\r
//\r
//\r
// New field start\r
//\r
- Parser->FieldBitMap |= BIT (Field);\r
- Parser->FieldData[Field].Offset = (UINT32) (Char - Url);\r
+ Parser->FieldBitMap |= BIT (Field);\r
+ Parser->FieldData[Field].Offset = (UINT32)(Char - Url);\r
Parser->FieldData[Field].Length = 1;\r
- OldField = Field;\r
+ OldField = Field;\r
}\r
\r
//\r
EFI_STATUS\r
EFIAPI\r
HttpUrlGetHostName (\r
- IN CHAR8 *Url,\r
- IN VOID *UrlParser,\r
- OUT CHAR8 **HostName\r
+ IN CHAR8 *Url,\r
+ IN VOID *UrlParser,\r
+ OUT CHAR8 **HostName\r
)\r
{\r
- CHAR8 *Name;\r
- EFI_STATUS Status;\r
- UINT32 ResultLength;\r
- HTTP_URL_PARSER *Parser;\r
+ CHAR8 *Name;\r
+ EFI_STATUS Status;\r
+ UINT32 ResultLength;\r
+ HTTP_URL_PARSER *Parser;\r
\r
- if (Url == NULL || UrlParser == NULL || HostName == NULL) {\r
+ if ((Url == NULL) || (UrlParser == NULL) || (HostName == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- Parser = (HTTP_URL_PARSER *) UrlParser;\r
+ Parser = (HTTP_URL_PARSER *)UrlParser;\r
\r
if ((Parser->FieldBitMap & BIT (HTTP_URI_FIELD_HOST)) == 0) {\r
return EFI_NOT_FOUND;\r
}\r
\r
Name[ResultLength] = '\0';\r
- *HostName = Name;\r
+ *HostName = Name;\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Get the IPv4 address from a HTTP URL.\r
\r
EFI_STATUS\r
EFIAPI\r
HttpUrlGetIp4 (\r
- IN CHAR8 *Url,\r
- IN VOID *UrlParser,\r
- OUT EFI_IPv4_ADDRESS *Ip4Address\r
+ IN CHAR8 *Url,\r
+ IN VOID *UrlParser,\r
+ OUT EFI_IPv4_ADDRESS *Ip4Address\r
)\r
{\r
- CHAR8 *Ip4String;\r
- EFI_STATUS Status;\r
- UINT32 ResultLength;\r
- HTTP_URL_PARSER *Parser;\r
+ CHAR8 *Ip4String;\r
+ EFI_STATUS Status;\r
+ UINT32 ResultLength;\r
+ HTTP_URL_PARSER *Parser;\r
\r
- if (Url == NULL || UrlParser == NULL || Ip4Address == NULL) {\r
+ if ((Url == NULL) || (UrlParser == NULL) || (Ip4Address == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- Parser = (HTTP_URL_PARSER *) UrlParser;\r
+ Parser = (HTTP_URL_PARSER *)UrlParser;\r
\r
if ((Parser->FieldBitMap & BIT (HTTP_URI_FIELD_HOST)) == 0) {\r
return EFI_NOT_FOUND;\r
}\r
\r
Ip4String[ResultLength] = '\0';\r
- Status = NetLibAsciiStrToIp4 (Ip4String, Ip4Address);\r
+ Status = NetLibAsciiStrToIp4 (Ip4String, Ip4Address);\r
FreePool (Ip4String);\r
\r
return Status;\r
EFI_STATUS\r
EFIAPI\r
HttpUrlGetIp6 (\r
- IN CHAR8 *Url,\r
- IN VOID *UrlParser,\r
- OUT EFI_IPv6_ADDRESS *Ip6Address\r
+ IN CHAR8 *Url,\r
+ IN VOID *UrlParser,\r
+ OUT EFI_IPv6_ADDRESS *Ip6Address\r
)\r
{\r
- CHAR8 *Ip6String;\r
- CHAR8 *Ptr;\r
- UINT32 Length;\r
- EFI_STATUS Status;\r
- UINT32 ResultLength;\r
- HTTP_URL_PARSER *Parser;\r
-\r
- if (Url == NULL || UrlParser == NULL || Ip6Address == NULL) {\r
+ CHAR8 *Ip6String;\r
+ CHAR8 *Ptr;\r
+ UINT32 Length;\r
+ EFI_STATUS Status;\r
+ UINT32 ResultLength;\r
+ HTTP_URL_PARSER *Parser;\r
+\r
+ if ((Url == NULL) || (UrlParser == NULL) || (Ip6Address == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- Parser = (HTTP_URL_PARSER *) UrlParser;\r
+ Parser = (HTTP_URL_PARSER *)UrlParser;\r
\r
if ((Parser->FieldBitMap & BIT (HTTP_URI_FIELD_HOST)) == 0) {\r
return EFI_NOT_FOUND;\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- Ptr = Url + Parser->FieldData[HTTP_URI_FIELD_HOST].Offset;\r
+ Ptr = Url + Parser->FieldData[HTTP_URI_FIELD_HOST].Offset;\r
if ((Ptr[0] != '[') || (Ptr[Length - 1] != ']')) {\r
return EFI_INVALID_PARAMETER;\r
}\r
}\r
\r
Ip6String[ResultLength] = '\0';\r
- Status = NetLibAsciiStrToIp6 (Ip6String, Ip6Address);\r
+ Status = NetLibAsciiStrToIp6 (Ip6String, Ip6Address);\r
FreePool (Ip6String);\r
\r
return Status;\r
EFI_STATUS\r
EFIAPI\r
HttpUrlGetPort (\r
- IN CHAR8 *Url,\r
- IN VOID *UrlParser,\r
- OUT UINT16 *Port\r
+ IN CHAR8 *Url,\r
+ IN VOID *UrlParser,\r
+ OUT UINT16 *Port\r
)\r
{\r
- CHAR8 *PortString;\r
- EFI_STATUS Status;\r
- UINTN Index;\r
- UINTN Data;\r
- UINT32 ResultLength;\r
- HTTP_URL_PARSER *Parser;\r
-\r
- if (Url == NULL || UrlParser == NULL || Port == NULL) {\r
+ CHAR8 *PortString;\r
+ EFI_STATUS Status;\r
+ UINTN Index;\r
+ UINTN Data;\r
+ UINT32 ResultLength;\r
+ HTTP_URL_PARSER *Parser;\r
+\r
+ if ((Url == NULL) || (UrlParser == NULL) || (Port == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
*Port = 0;\r
Index = 0;\r
\r
- Parser = (HTTP_URL_PARSER *) UrlParser;\r
+ Parser = (HTTP_URL_PARSER *)UrlParser;\r
\r
if ((Parser->FieldBitMap & BIT (HTTP_URI_FIELD_PORT)) == 0) {\r
return EFI_NOT_FOUND;\r
Status = EFI_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
- Index ++;\r
+\r
+ Index++;\r
}\r
\r
- Status = AsciiStrDecimalToUintnS (Url + Parser->FieldData[HTTP_URI_FIELD_PORT].Offset, (CHAR8 **) NULL, &Data);\r
+ Status = AsciiStrDecimalToUintnS (Url + Parser->FieldData[HTTP_URI_FIELD_PORT].Offset, (CHAR8 **)NULL, &Data);\r
\r
if (Data > HTTP_URI_PORT_MAX_NUM) {\r
Status = EFI_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
\r
- *Port = (UINT16) Data;\r
+ *Port = (UINT16)Data;\r
\r
ON_EXIT:\r
FreePool (PortString);\r
EFI_STATUS\r
EFIAPI\r
HttpUrlGetPath (\r
- IN CHAR8 *Url,\r
- IN VOID *UrlParser,\r
- OUT CHAR8 **Path\r
+ IN CHAR8 *Url,\r
+ IN VOID *UrlParser,\r
+ OUT CHAR8 **Path\r
)\r
{\r
- CHAR8 *PathStr;\r
- EFI_STATUS Status;\r
- UINT32 ResultLength;\r
- HTTP_URL_PARSER *Parser;\r
+ CHAR8 *PathStr;\r
+ EFI_STATUS Status;\r
+ UINT32 ResultLength;\r
+ HTTP_URL_PARSER *Parser;\r
\r
- if (Url == NULL || UrlParser == NULL || Path == NULL) {\r
+ if ((Url == NULL) || (UrlParser == NULL) || (Path == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- Parser = (HTTP_URL_PARSER *) UrlParser;\r
+ Parser = (HTTP_URL_PARSER *)UrlParser;\r
\r
if ((Parser->FieldBitMap & BIT (HTTP_URI_FIELD_PATH)) == 0) {\r
return EFI_NOT_FOUND;\r
}\r
\r
PathStr[ResultLength] = '\0';\r
- *Path = PathStr;\r
+ *Path = PathStr;\r
return EFI_SUCCESS;\r
}\r
\r
VOID\r
EFIAPI\r
HttpUrlFreeParser (\r
- IN VOID *UrlParser\r
+ IN VOID *UrlParser\r
)\r
{\r
FreePool (UrlParser);\r
EFI_HTTP_HEADER *\r
EFIAPI\r
HttpFindHeader (\r
- IN UINTN HeaderCount,\r
- IN EFI_HTTP_HEADER *Headers,\r
- IN CHAR8 *FieldName\r
+ IN UINTN HeaderCount,\r
+ IN EFI_HTTP_HEADER *Headers,\r
+ IN CHAR8 *FieldName\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
- if (HeaderCount == 0 || Headers == NULL || FieldName == NULL) {\r
+ if ((HeaderCount == 0) || (Headers == NULL) || (FieldName == NULL)) {\r
return NULL;\r
}\r
\r
- for (Index = 0; Index < HeaderCount; Index++){\r
+ for (Index = 0; Index < HeaderCount; Index++) {\r
//\r
// Field names are case-insensitive (RFC 2616).\r
//\r
return &Headers[Index];\r
}\r
}\r
+\r
return NULL;\r
}\r
\r
} HTTP_BODY_PARSE_STATE;\r
\r
typedef struct {\r
- BOOLEAN IgnoreBody; // "MUST NOT" include a message-body\r
- BOOLEAN IsChunked; // "chunked" transfer-coding.\r
- BOOLEAN ContentLengthIsValid;\r
- UINTN ContentLength; // Entity length (not the message-body length), invalid until ContentLengthIsValid is TRUE\r
-\r
- HTTP_BODY_PARSER_CALLBACK Callback;\r
- VOID *Context;\r
- UINTN ParsedBodyLength;\r
- HTTP_BODY_PARSE_STATE State;\r
- UINTN CurrentChunkSize;\r
- UINTN CurrentChunkParsedSize;\r
+ BOOLEAN IgnoreBody; // "MUST NOT" include a message-body\r
+ BOOLEAN IsChunked; // "chunked" transfer-coding.\r
+ BOOLEAN ContentLengthIsValid;\r
+ UINTN ContentLength; // Entity length (not the message-body length), invalid until ContentLengthIsValid is TRUE\r
+\r
+ HTTP_BODY_PARSER_CALLBACK Callback;\r
+ VOID *Context;\r
+ UINTN ParsedBodyLength;\r
+ HTTP_BODY_PARSE_STATE State;\r
+ UINTN CurrentChunkSize;\r
+ UINTN CurrentChunkParsedSize;\r
} HTTP_BODY_PARSER;\r
\r
/**\r
**/\r
UINTN\r
HttpIoHexCharToUintn (\r
- IN CHAR8 Char\r
+ IN CHAR8 Char\r
)\r
{\r
- if (Char >= '0' && Char <= '9') {\r
+ if ((Char >= '0') && (Char <= '9')) {\r
return Char - '0';\r
}\r
\r
**/\r
EFI_STATUS\r
HttpIoParseContentLengthHeader (\r
- IN UINTN HeaderCount,\r
- IN EFI_HTTP_HEADER *Headers,\r
- OUT UINTN *ContentLength\r
+ IN UINTN HeaderCount,\r
+ IN EFI_HTTP_HEADER *Headers,\r
+ OUT UINTN *ContentLength\r
)\r
{\r
- EFI_HTTP_HEADER *Header;\r
+ EFI_HTTP_HEADER *Header;\r
\r
Header = HttpFindHeader (HeaderCount, Headers, HTTP_HEADER_CONTENT_LENGTH);\r
if (Header == NULL) {\r
return EFI_NOT_FOUND;\r
}\r
\r
- return AsciiStrDecimalToUintnS (Header->FieldValue, (CHAR8 **) NULL, ContentLength);\r
+ return AsciiStrDecimalToUintnS (Header->FieldValue, (CHAR8 **)NULL, ContentLength);\r
}\r
\r
/**\r
**/\r
BOOLEAN\r
HttpIoIsChunked (\r
- IN UINTN HeaderCount,\r
- IN EFI_HTTP_HEADER *Headers\r
+ IN UINTN HeaderCount,\r
+ IN EFI_HTTP_HEADER *Headers\r
)\r
{\r
- EFI_HTTP_HEADER *Header;\r
-\r
+ EFI_HTTP_HEADER *Header;\r
\r
Header = HttpFindHeader (HeaderCount, Headers, HTTP_HEADER_TRANSFER_ENCODING);\r
if (Header == NULL) {\r
**/\r
BOOLEAN\r
HttpIoNoMessageBody (\r
- IN EFI_HTTP_METHOD Method,\r
- IN EFI_HTTP_STATUS_CODE StatusCode\r
+ IN EFI_HTTP_METHOD Method,\r
+ IN EFI_HTTP_STATUS_CODE StatusCode\r
)\r
{\r
//\r
EFI_STATUS\r
EFIAPI\r
HttpInitMsgParser (\r
- IN EFI_HTTP_METHOD Method,\r
- IN EFI_HTTP_STATUS_CODE StatusCode,\r
- IN UINTN HeaderCount,\r
- IN EFI_HTTP_HEADER *Headers,\r
- IN HTTP_BODY_PARSER_CALLBACK Callback,\r
- IN VOID *Context,\r
- OUT VOID **MsgParser\r
+ IN EFI_HTTP_METHOD Method,\r
+ IN EFI_HTTP_STATUS_CODE StatusCode,\r
+ IN UINTN HeaderCount,\r
+ IN EFI_HTTP_HEADER *Headers,\r
+ IN HTTP_BODY_PARSER_CALLBACK Callback,\r
+ IN VOID *Context,\r
+ OUT VOID **MsgParser\r
)\r
{\r
- EFI_STATUS Status;\r
- HTTP_BODY_PARSER *Parser;\r
+ EFI_STATUS Status;\r
+ HTTP_BODY_PARSER *Parser;\r
\r
- if (HeaderCount != 0 && Headers == NULL) {\r
+ if ((HeaderCount != 0) && (Headers == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
//\r
// 2. Check whether the message using "chunked" transfer-coding.\r
//\r
- Parser->IsChunked = HttpIoIsChunked (HeaderCount, Headers);\r
+ Parser->IsChunked = HttpIoIsChunked (HeaderCount, Headers);\r
//\r
// 3. Check whether the message has a Content-Length header field.\r
//\r
if (!EFI_ERROR (Status)) {\r
Parser->ContentLengthIsValid = TRUE;\r
}\r
+\r
//\r
// 4. Range header is not supported now, so we won't meet media type "multipart/byteranges".\r
// 5. By server closing the connection\r
EFI_STATUS\r
EFIAPI\r
HttpParseMessageBody (\r
- IN OUT VOID *MsgParser,\r
- IN UINTN BodyLength,\r
- IN CHAR8 *Body\r
+ IN OUT VOID *MsgParser,\r
+ IN UINTN BodyLength,\r
+ IN CHAR8 *Body\r
)\r
{\r
- CHAR8 *Char;\r
- UINTN RemainderLengthInThis;\r
- UINTN LengthForCallback;\r
- UINTN PortionLength;\r
- EFI_STATUS Status;\r
- HTTP_BODY_PARSER *Parser;\r
-\r
- if (BodyLength == 0 || Body == NULL) {\r
+ CHAR8 *Char;\r
+ UINTN RemainderLengthInThis;\r
+ UINTN LengthForCallback;\r
+ UINTN PortionLength;\r
+ EFI_STATUS Status;\r
+ HTTP_BODY_PARSER *Parser;\r
+\r
+ if ((BodyLength == 0) || (Body == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- Parser = (HTTP_BODY_PARSER *) MsgParser;\r
+ Parser = (HTTP_BODY_PARSER *)MsgParser;\r
\r
if (Parser->IgnoreBody) {\r
Parser->State = BodyParserComplete;\r
return Status;\r
}\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
\r
// The message body might be truncated in anywhere, so we need to parse is byte-by-byte.\r
//\r
for (Char = Body; Char < Body + BodyLength; ) {\r
-\r
switch (Parser->State) {\r
- case BodyParserStateMax:\r
- return EFI_ABORTED;\r
+ case BodyParserStateMax:\r
+ return EFI_ABORTED;\r
\r
- case BodyParserBodyIdentity:\r
- //\r
- // Identity transfer-coding, just notify user to save the body data.\r
- //\r
- PortionLength = MIN (\r
- BodyLength,\r
- Parser->ContentLength - Parser->ParsedBodyLength\r
- );\r
- if (PortionLength == 0) {\r
+ case BodyParserBodyIdentity:\r
//\r
- // Got BodyLength, but no ContentLength. Use BodyLength.\r
+ // Identity transfer-coding, just notify user to save the body data.\r
//\r
- PortionLength = BodyLength;\r
- Parser->ContentLength = PortionLength;\r
- }\r
-\r
- if (Parser->Callback != NULL) {\r
- Status = Parser->Callback (\r
- BodyParseEventOnData,\r
- Char,\r
- PortionLength,\r
- Parser->Context\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ PortionLength = MIN (\r
+ BodyLength,\r
+ Parser->ContentLength - Parser->ParsedBodyLength\r
+ );\r
+ if (PortionLength == 0) {\r
+ //\r
+ // Got BodyLength, but no ContentLength. Use BodyLength.\r
+ //\r
+ PortionLength = BodyLength;\r
+ Parser->ContentLength = PortionLength;\r
}\r
- }\r
- Char += PortionLength;\r
- Parser->ParsedBodyLength += PortionLength;\r
- if (Parser->ParsedBodyLength == Parser->ContentLength) {\r
- Parser->State = BodyParserComplete;\r
+\r
if (Parser->Callback != NULL) {\r
Status = Parser->Callback (\r
- BodyParseEventOnComplete,\r
+ BodyParseEventOnData,\r
Char,\r
- 0,\r
+ PortionLength,\r
Parser->Context\r
);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
}\r
- }\r
- break;\r
\r
- case BodyParserChunkSizeStart:\r
- //\r
- // First byte of chunk-size, the chunk-size might be truncated.\r
- //\r
- Parser->CurrentChunkSize = 0;\r
- Parser->State = BodyParserChunkSize;\r
- case BodyParserChunkSize:\r
- if (!NET_IS_HEX_CHAR (*Char)) {\r
- if (*Char == ';') {\r
- Parser->State = BodyParserChunkExtStart;\r
- Char++;\r
- } else if (*Char == '\r') {\r
- Parser->State = BodyParserChunkSizeEndCR;\r
- Char++;\r
- } else {\r
- Parser->State = BodyParserStateMax;\r
+ Char += PortionLength;\r
+ Parser->ParsedBodyLength += PortionLength;\r
+ if (Parser->ParsedBodyLength == Parser->ContentLength) {\r
+ Parser->State = BodyParserComplete;\r
+ if (Parser->Callback != NULL) {\r
+ Status = Parser->Callback (\r
+ BodyParseEventOnComplete,\r
+ Char,\r
+ 0,\r
+ Parser->Context\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+ }\r
}\r
+\r
break;\r
- }\r
\r
- if (Parser->CurrentChunkSize > (((~((UINTN) 0)) - 16) / 16)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- Parser->CurrentChunkSize = Parser->CurrentChunkSize * 16 + HttpIoHexCharToUintn (*Char);\r
- Char++;\r
- break;\r
+ case BodyParserChunkSizeStart:\r
+ //\r
+ // First byte of chunk-size, the chunk-size might be truncated.\r
+ //\r
+ Parser->CurrentChunkSize = 0;\r
+ Parser->State = BodyParserChunkSize;\r
+ case BodyParserChunkSize:\r
+ if (!NET_IS_HEX_CHAR (*Char)) {\r
+ if (*Char == ';') {\r
+ Parser->State = BodyParserChunkExtStart;\r
+ Char++;\r
+ } else if (*Char == '\r') {\r
+ Parser->State = BodyParserChunkSizeEndCR;\r
+ Char++;\r
+ } else {\r
+ Parser->State = BodyParserStateMax;\r
+ }\r
\r
- case BodyParserChunkExtStart:\r
- //\r
- // Ignore all the chunk extensions.\r
- //\r
- if (*Char == '\r') {\r
- Parser->State = BodyParserChunkSizeEndCR;\r
- }\r
- Char++;\r
- break;\r
+ break;\r
+ }\r
+\r
+ if (Parser->CurrentChunkSize > (((~((UINTN)0)) - 16) / 16)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
\r
- case BodyParserChunkSizeEndCR:\r
- if (*Char != '\n') {\r
- Parser->State = BodyParserStateMax;\r
+ Parser->CurrentChunkSize = Parser->CurrentChunkSize * 16 + HttpIoHexCharToUintn (*Char);\r
+ Char++;\r
break;\r
- }\r
- Char++;\r
- if (Parser->CurrentChunkSize == 0) {\r
+\r
+ case BodyParserChunkExtStart:\r
//\r
- // The last chunk has been parsed and now assumed the state\r
- // of HttpBodyParse is ParserLastCRLF. So it need to decide\r
- // whether the rest message is trailer or last CRLF in the next round.\r
+ // Ignore all the chunk extensions.\r
//\r
- Parser->ContentLengthIsValid = TRUE;\r
- Parser->State = BodyParserLastCRLF;\r
- break;\r
- }\r
- Parser->State = BodyParserChunkDataStart;\r
- Parser->CurrentChunkParsedSize = 0;\r
- break;\r
+ if (*Char == '\r') {\r
+ Parser->State = BodyParserChunkSizeEndCR;\r
+ }\r
\r
- case BodyParserLastCRLF:\r
- //\r
- // Judge the byte is belong to the Last CRLF or trailer, and then\r
- // configure the state of HttpBodyParse to corresponding state.\r
- //\r
- if (*Char == '\r') {\r
Char++;\r
- Parser->State = BodyParserLastCRLFEnd;\r
break;\r
- } else {\r
- Parser->State = BodyParserTrailer;\r
+\r
+ case BodyParserChunkSizeEndCR:\r
+ if (*Char != '\n') {\r
+ Parser->State = BodyParserStateMax;\r
+ break;\r
+ }\r
+\r
+ Char++;\r
+ if (Parser->CurrentChunkSize == 0) {\r
+ //\r
+ // The last chunk has been parsed and now assumed the state\r
+ // of HttpBodyParse is ParserLastCRLF. So it need to decide\r
+ // whether the rest message is trailer or last CRLF in the next round.\r
+ //\r
+ Parser->ContentLengthIsValid = TRUE;\r
+ Parser->State = BodyParserLastCRLF;\r
+ break;\r
+ }\r
+\r
+ Parser->State = BodyParserChunkDataStart;\r
+ Parser->CurrentChunkParsedSize = 0;\r
break;\r
- }\r
\r
- case BodyParserLastCRLFEnd:\r
- if (*Char == '\n') {\r
- Parser->State = BodyParserComplete;\r
+ case BodyParserLastCRLF:\r
+ //\r
+ // Judge the byte is belong to the Last CRLF or trailer, and then\r
+ // configure the state of HttpBodyParse to corresponding state.\r
+ //\r
+ if (*Char == '\r') {\r
+ Char++;\r
+ Parser->State = BodyParserLastCRLFEnd;\r
+ break;\r
+ } else {\r
+ Parser->State = BodyParserTrailer;\r
+ break;\r
+ }\r
+\r
+ case BodyParserLastCRLFEnd:\r
+ if (*Char == '\n') {\r
+ Parser->State = BodyParserComplete;\r
+ Char++;\r
+ if (Parser->Callback != NULL) {\r
+ Status = Parser->Callback (\r
+ BodyParseEventOnComplete,\r
+ Char,\r
+ 0,\r
+ Parser->Context\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+ }\r
+\r
+ break;\r
+ } else {\r
+ Parser->State = BodyParserStateMax;\r
+ break;\r
+ }\r
+\r
+ case BodyParserTrailer:\r
+ if (*Char == '\r') {\r
+ Parser->State = BodyParserChunkSizeEndCR;\r
+ }\r
+\r
Char++;\r
+ break;\r
+\r
+ case BodyParserChunkDataStart:\r
+ //\r
+ // First byte of chunk-data, the chunk data also might be truncated.\r
+ //\r
+ RemainderLengthInThis = BodyLength - (Char - Body);\r
+ LengthForCallback = MIN (Parser->CurrentChunkSize - Parser->CurrentChunkParsedSize, RemainderLengthInThis);\r
if (Parser->Callback != NULL) {\r
Status = Parser->Callback (\r
- BodyParseEventOnComplete,\r
+ BodyParseEventOnData,\r
Char,\r
- 0,\r
+ LengthForCallback,\r
Parser->Context\r
);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
}\r
- break;\r
- } else {\r
- Parser->State = BodyParserStateMax;\r
- break;\r
- }\r
\r
- case BodyParserTrailer:\r
- if (*Char == '\r') {\r
- Parser->State = BodyParserChunkSizeEndCR;\r
- }\r
- Char++;\r
- break;\r
+ Char += LengthForCallback;\r
+ Parser->ContentLength += LengthForCallback;\r
+ Parser->CurrentChunkParsedSize += LengthForCallback;\r
+ if (Parser->CurrentChunkParsedSize == Parser->CurrentChunkSize) {\r
+ Parser->State = BodyParserChunkDataEnd;\r
+ }\r
\r
- case BodyParserChunkDataStart:\r
- //\r
- // First byte of chunk-data, the chunk data also might be truncated.\r
- //\r
- RemainderLengthInThis = BodyLength - (Char - Body);\r
- LengthForCallback = MIN (Parser->CurrentChunkSize - Parser->CurrentChunkParsedSize, RemainderLengthInThis);\r
- if (Parser->Callback != NULL) {\r
- Status = Parser->Callback (\r
- BodyParseEventOnData,\r
- Char,\r
- LengthForCallback,\r
- Parser->Context\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ break;\r
+\r
+ case BodyParserChunkDataEnd:\r
+ if (*Char == '\r') {\r
+ Parser->State = BodyParserChunkDataEndCR;\r
+ } else {\r
+ Parser->State = BodyParserStateMax;\r
}\r
- }\r
- Char += LengthForCallback;\r
- Parser->ContentLength += LengthForCallback;\r
- Parser->CurrentChunkParsedSize += LengthForCallback;\r
- if (Parser->CurrentChunkParsedSize == Parser->CurrentChunkSize) {\r
- Parser->State = BodyParserChunkDataEnd;\r
- }\r
- break;\r
\r
- case BodyParserChunkDataEnd:\r
- if (*Char == '\r') {\r
- Parser->State = BodyParserChunkDataEndCR;\r
- } else {\r
- Parser->State = BodyParserStateMax;\r
- }\r
- Char++;\r
- break;\r
+ Char++;\r
+ break;\r
+\r
+ case BodyParserChunkDataEndCR:\r
+ if (*Char != '\n') {\r
+ Parser->State = BodyParserStateMax;\r
+ break;\r
+ }\r
\r
- case BodyParserChunkDataEndCR:\r
- if (*Char != '\n') {\r
- Parser->State = BodyParserStateMax;\r
+ Char++;\r
+ Parser->State = BodyParserChunkSizeStart;\r
break;\r
- }\r
- Char++;\r
- Parser->State = BodyParserChunkSizeStart;\r
- break;\r
\r
- default:\r
- break;\r
+ default:\r
+ break;\r
}\r
-\r
}\r
\r
if (Parser->State == BodyParserStateMax) {\r
BOOLEAN\r
EFIAPI\r
HttpIsMessageComplete (\r
- IN VOID *MsgParser\r
+ IN VOID *MsgParser\r
)\r
{\r
- HTTP_BODY_PARSER *Parser;\r
+ HTTP_BODY_PARSER *Parser;\r
\r
if (MsgParser == NULL) {\r
return FALSE;\r
}\r
\r
- Parser = (HTTP_BODY_PARSER *) MsgParser;\r
+ Parser = (HTTP_BODY_PARSER *)MsgParser;\r
\r
if (Parser->State == BodyParserComplete) {\r
return TRUE;\r
}\r
+\r
return FALSE;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
HttpGetEntityLength (\r
- IN VOID *MsgParser,\r
- OUT UINTN *ContentLength\r
+ IN VOID *MsgParser,\r
+ OUT UINTN *ContentLength\r
)\r
{\r
- HTTP_BODY_PARSER *Parser;\r
+ HTTP_BODY_PARSER *Parser;\r
\r
- if (MsgParser == NULL || ContentLength == NULL) {\r
+ if ((MsgParser == NULL) || (ContentLength == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- Parser = (HTTP_BODY_PARSER *) MsgParser;\r
+ Parser = (HTTP_BODY_PARSER *)MsgParser;\r
\r
if (!Parser->ContentLengthIsValid) {\r
return EFI_NOT_READY;\r
VOID\r
EFIAPI\r
HttpFreeMsgParser (\r
- IN VOID *MsgParser\r
+ IN VOID *MsgParser\r
)\r
{\r
FreePool (MsgParser);\r
}\r
\r
-\r
/**\r
Get the next string, which is distinguished by specified separator.\r
\r
**/\r
CHAR8 *\r
AsciiStrGetNextToken (\r
- IN CONST CHAR8 *String,\r
- IN CHAR8 Separator\r
+ IN CONST CHAR8 *String,\r
+ IN CHAR8 Separator\r
)\r
{\r
- CONST CHAR8 *Token;\r
+ CONST CHAR8 *Token;\r
\r
Token = String;\r
while (TRUE) {\r
if (*Token == 0) {\r
return NULL;\r
}\r
+\r
if (*Token == Separator) {\r
return (CHAR8 *)(Token + 1);\r
}\r
+\r
Token++;\r
}\r
}\r
EFI_STATUS\r
EFIAPI\r
HttpSetFieldNameAndValue (\r
- IN OUT EFI_HTTP_HEADER *HttpHeader,\r
- IN CONST CHAR8 *FieldName,\r
- IN CONST CHAR8 *FieldValue\r
+ IN OUT EFI_HTTP_HEADER *HttpHeader,\r
+ IN CONST CHAR8 *FieldName,\r
+ IN CONST CHAR8 *FieldValue\r
)\r
{\r
- UINTN FieldNameSize;\r
- UINTN FieldValueSize;\r
+ UINTN FieldNameSize;\r
+ UINTN FieldValueSize;\r
\r
- if (HttpHeader == NULL || FieldName == NULL || FieldValue == NULL) {\r
+ if ((HttpHeader == NULL) || (FieldName == NULL) || (FieldValue == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
if (HttpHeader->FieldName != NULL) {\r
FreePool (HttpHeader->FieldName);\r
}\r
+\r
if (HttpHeader->FieldValue != NULL) {\r
FreePool (HttpHeader->FieldValue);\r
}\r
\r
- FieldNameSize = AsciiStrSize (FieldName);\r
+ FieldNameSize = AsciiStrSize (FieldName);\r
HttpHeader->FieldName = AllocateZeroPool (FieldNameSize);\r
if (HttpHeader->FieldName == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
CopyMem (HttpHeader->FieldName, FieldName, FieldNameSize);\r
HttpHeader->FieldName[FieldNameSize - 1] = 0;\r
\r
- FieldValueSize = AsciiStrSize (FieldValue);\r
+ FieldValueSize = AsciiStrSize (FieldValue);\r
HttpHeader->FieldValue = AllocateZeroPool (FieldValueSize);\r
if (HttpHeader->FieldValue == NULL) {\r
FreePool (HttpHeader->FieldName);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
CopyMem (HttpHeader->FieldValue, FieldValue, FieldValueSize);\r
HttpHeader->FieldValue[FieldValueSize - 1] = 0;\r
\r
CHAR8 *\r
EFIAPI\r
HttpGetFieldNameAndValue (\r
- IN CHAR8 *String,\r
- OUT CHAR8 **FieldName,\r
- OUT CHAR8 **FieldValue\r
+ IN CHAR8 *String,\r
+ OUT CHAR8 **FieldName,\r
+ OUT CHAR8 **FieldValue\r
)\r
{\r
CHAR8 *FieldNameStr;\r
CHAR8 *StrPtr;\r
CHAR8 *EndofHeader;\r
\r
- if (String == NULL || FieldName == NULL || FieldValue == NULL) {\r
+ if ((String == NULL) || (FieldName == NULL) || (FieldValue == NULL)) {\r
return NULL;\r
}\r
\r
StrPtr = NULL;\r
EndofHeader = NULL;\r
\r
-\r
//\r
// Check whether the raw HTTP header string is valid or not.\r
//\r
// SP = ' '.\r
// HT = '\t' (Tab).\r
//\r
- FieldNameStr = String;\r
+ FieldNameStr = String;\r
FieldValueStr = AsciiStrGetNextToken (FieldNameStr, ':');\r
if (FieldValueStr == NULL) {\r
return NULL;\r
// Handle FieldValueStr, skip all the preceded LWS.\r
//\r
while (TRUE) {\r
- if (*FieldValueStr == ' ' || *FieldValueStr == '\t') {\r
+ if ((*FieldValueStr == ' ') || (*FieldValueStr == '\t')) {\r
//\r
// Boundary condition check.\r
//\r
- if ((UINTN) EndofHeader - (UINTN) FieldValueStr < 1) {\r
+ if ((UINTN)EndofHeader - (UINTN)FieldValueStr < 1) {\r
//\r
// Wrong String format!\r
//\r
return NULL;\r
}\r
\r
- FieldValueStr ++;\r
+ FieldValueStr++;\r
} else if (*FieldValueStr == '\r') {\r
//\r
// Boundary condition check.\r
//\r
- if ((UINTN) EndofHeader - (UINTN) FieldValueStr < 3) {\r
+ if ((UINTN)EndofHeader - (UINTN)FieldValueStr < 3) {\r
//\r
// No more preceded LWS, so break here.\r
//\r
}\r
\r
if (*(FieldValueStr + 1) == '\n' ) {\r
- if (*(FieldValueStr + 2) == ' ' || *(FieldValueStr + 2) == '\t') {\r
+ if ((*(FieldValueStr + 2) == ' ') || (*(FieldValueStr + 2) == '\t')) {\r
FieldValueStr = FieldValueStr + 3;\r
} else {\r
//\r
// Handle the LWS within the field value.\r
//\r
StrPtr = AsciiStrGetNextToken (StrPtr, '\r');\r
- if (StrPtr == NULL || *StrPtr != '\n') {\r
+ if ((StrPtr == NULL) || (*StrPtr != '\n')) {\r
//\r
// Wrong String format!\r
//\r
//\r
// Get FieldName and FieldValue.\r
//\r
- *FieldName = FieldNameStr;\r
+ *FieldName = FieldNameStr;\r
*FieldValue = FieldValueStr;\r
\r
return StrPtr;\r
IN UINTN FieldCount\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
if (HeaderFields != NULL) {\r
for (Index = 0; Index < FieldCount; Index++) {\r
if (HeaderFields[Index].FieldName != NULL) {\r
FreePool (HeaderFields[Index].FieldName);\r
}\r
+\r
if (HeaderFields[Index].FieldValue != NULL) {\r
FreePool (HeaderFields[Index].FieldValue);\r
}\r
EFI_STATUS\r
EFIAPI\r
HttpGenRequestMessage (\r
- IN CONST EFI_HTTP_MESSAGE *Message,\r
- IN CONST CHAR8 *Url,\r
- OUT CHAR8 **RequestMsg,\r
- OUT UINTN *RequestMsgSize\r
+ IN CONST EFI_HTTP_MESSAGE *Message,\r
+ IN CONST CHAR8 *Url,\r
+ OUT CHAR8 **RequestMsg,\r
+ OUT UINTN *RequestMsgSize\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN StrLength;\r
- CHAR8 *RequestPtr;\r
- UINTN HttpHdrSize;\r
- UINTN MsgSize;\r
- BOOLEAN Success;\r
- VOID *HttpHdr;\r
- EFI_HTTP_HEADER **AppendList;\r
- UINTN Index;\r
- EFI_HTTP_UTILITIES_PROTOCOL *HttpUtilitiesProtocol;\r
+ EFI_STATUS Status;\r
+ UINTN StrLength;\r
+ CHAR8 *RequestPtr;\r
+ UINTN HttpHdrSize;\r
+ UINTN MsgSize;\r
+ BOOLEAN Success;\r
+ VOID *HttpHdr;\r
+ EFI_HTTP_HEADER **AppendList;\r
+ UINTN Index;\r
+ EFI_HTTP_UTILITIES_PROTOCOL *HttpUtilitiesProtocol;\r
\r
Status = EFI_SUCCESS;\r
HttpHdrSize = 0;\r
// 3. If we do not have a Request, HeaderCount should be zero\r
// 4. If we do not have Request and Headers, we need at least a message-body\r
//\r
- if ((Message == NULL || RequestMsg == NULL || RequestMsgSize == NULL) ||\r
- (Message->Data.Request != NULL && Url == NULL) ||\r
- (Message->Data.Request != NULL && Message->HeaderCount == 0) ||\r
- (Message->Data.Request == NULL && Message->HeaderCount != 0) ||\r
- (Message->Data.Request == NULL && Message->HeaderCount == 0 && Message->BodyLength == 0)) {\r
+ if (((Message == NULL) || (RequestMsg == NULL) || (RequestMsgSize == NULL)) ||\r
+ ((Message->Data.Request != NULL) && (Url == NULL)) ||\r
+ ((Message->Data.Request != NULL) && (Message->HeaderCount == 0)) ||\r
+ ((Message->Data.Request == NULL) && (Message->HeaderCount != 0)) ||\r
+ ((Message->Data.Request == NULL) && (Message->HeaderCount == 0) && (Message->BodyLength == 0)))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
Status = gBS->LocateProtocol (\r
&gEfiHttpUtilitiesProtocolGuid,\r
NULL,\r
- (VOID **) &HttpUtilitiesProtocol\r
+ (VOID **)&HttpUtilitiesProtocol\r
);\r
\r
if (EFI_ERROR (Status)) {\r
- DEBUG ((DEBUG_ERROR,"Failed to locate Http Utilities protocol. Status = %r.\n", Status));\r
+ DEBUG ((DEBUG_ERROR, "Failed to locate Http Utilities protocol. Status = %r.\n", Status));\r
return Status;\r
}\r
\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- for(Index = 0; Index < Message->HeaderCount; Index++){\r
+ for (Index = 0; Index < Message->HeaderCount; Index++) {\r
AppendList[Index] = &Message->Headers[Index];\r
}\r
\r
\r
FreePool (AppendList);\r
\r
- if (EFI_ERROR (Status) || HttpHdr == NULL){\r
+ if (EFI_ERROR (Status) || (HttpHdr == NULL)) {\r
return Status;\r
}\r
}\r
MsgSize += HTTP_METHOD_MAXIMUM_LEN + AsciiStrLen (HTTP_VERSION_CRLF_STR) + AsciiStrLen (Url);\r
}\r
\r
-\r
//\r
// If we have a message body to be sent, account for it.\r
//\r
//\r
if (Message->Data.Request != NULL) {\r
switch (Message->Data.Request->Method) {\r
- case HttpMethodGet:\r
- StrLength = sizeof (HTTP_METHOD_GET) - 1;\r
- CopyMem (RequestPtr, HTTP_METHOD_GET, StrLength);\r
- RequestPtr += StrLength;\r
- break;\r
- case HttpMethodPut:\r
- StrLength = sizeof (HTTP_METHOD_PUT) - 1;\r
- CopyMem (RequestPtr, HTTP_METHOD_PUT, StrLength);\r
- RequestPtr += StrLength;\r
- break;\r
- case HttpMethodPatch:\r
- StrLength = sizeof (HTTP_METHOD_PATCH) - 1;\r
- CopyMem (RequestPtr, HTTP_METHOD_PATCH, StrLength);\r
- RequestPtr += StrLength;\r
- break;\r
- case HttpMethodPost:\r
- StrLength = sizeof (HTTP_METHOD_POST) - 1;\r
- CopyMem (RequestPtr, HTTP_METHOD_POST, StrLength);\r
- RequestPtr += StrLength;\r
- break;\r
- case HttpMethodHead:\r
- StrLength = sizeof (HTTP_METHOD_HEAD) - 1;\r
- CopyMem (RequestPtr, HTTP_METHOD_HEAD, StrLength);\r
- RequestPtr += StrLength;\r
- break;\r
- case HttpMethodDelete:\r
- StrLength = sizeof (HTTP_METHOD_DELETE) - 1;\r
- CopyMem (RequestPtr, HTTP_METHOD_DELETE, StrLength);\r
- RequestPtr += StrLength;\r
- break;\r
- default:\r
- ASSERT (FALSE);\r
- Status = EFI_INVALID_PARAMETER;\r
- goto Exit;\r
+ case HttpMethodGet:\r
+ StrLength = sizeof (HTTP_METHOD_GET) - 1;\r
+ CopyMem (RequestPtr, HTTP_METHOD_GET, StrLength);\r
+ RequestPtr += StrLength;\r
+ break;\r
+ case HttpMethodPut:\r
+ StrLength = sizeof (HTTP_METHOD_PUT) - 1;\r
+ CopyMem (RequestPtr, HTTP_METHOD_PUT, StrLength);\r
+ RequestPtr += StrLength;\r
+ break;\r
+ case HttpMethodPatch:\r
+ StrLength = sizeof (HTTP_METHOD_PATCH) - 1;\r
+ CopyMem (RequestPtr, HTTP_METHOD_PATCH, StrLength);\r
+ RequestPtr += StrLength;\r
+ break;\r
+ case HttpMethodPost:\r
+ StrLength = sizeof (HTTP_METHOD_POST) - 1;\r
+ CopyMem (RequestPtr, HTTP_METHOD_POST, StrLength);\r
+ RequestPtr += StrLength;\r
+ break;\r
+ case HttpMethodHead:\r
+ StrLength = sizeof (HTTP_METHOD_HEAD) - 1;\r
+ CopyMem (RequestPtr, HTTP_METHOD_HEAD, StrLength);\r
+ RequestPtr += StrLength;\r
+ break;\r
+ case HttpMethodDelete:\r
+ StrLength = sizeof (HTTP_METHOD_DELETE) - 1;\r
+ CopyMem (RequestPtr, HTTP_METHOD_DELETE, StrLength);\r
+ RequestPtr += StrLength;\r
+ break;\r
+ default:\r
+ ASSERT (FALSE);\r
+ Status = EFI_INVALID_PARAMETER;\r
+ goto Exit;\r
}\r
\r
- StrLength = AsciiStrLen(EMPTY_SPACE);\r
+ StrLength = AsciiStrLen (EMPTY_SPACE);\r
CopyMem (RequestPtr, EMPTY_SPACE, StrLength);\r
RequestPtr += StrLength;\r
\r
// Done\r
//\r
(*RequestMsgSize) = (UINTN)(RequestPtr) - (UINTN)(*RequestMsg);\r
- Success = TRUE;\r
+ Success = TRUE;\r
\r
Exit:\r
\r
if (*RequestMsg != NULL) {\r
FreePool (*RequestMsg);\r
}\r
+\r
*RequestMsg = NULL;\r
return Status;\r
}\r
EFI_HTTP_STATUS_CODE\r
EFIAPI\r
HttpMappingToStatusCode (\r
- IN UINTN StatusCode\r
+ IN UINTN StatusCode\r
)\r
{\r
switch (StatusCode) {\r
- case 100:\r
- return HTTP_STATUS_100_CONTINUE;\r
- case 101:\r
- return HTTP_STATUS_101_SWITCHING_PROTOCOLS;\r
- case 200:\r
- return HTTP_STATUS_200_OK;\r
- case 201:\r
- return HTTP_STATUS_201_CREATED;\r
- case 202:\r
- return HTTP_STATUS_202_ACCEPTED;\r
- case 203:\r
- return HTTP_STATUS_203_NON_AUTHORITATIVE_INFORMATION;\r
- case 204:\r
- return HTTP_STATUS_204_NO_CONTENT;\r
- case 205:\r
- return HTTP_STATUS_205_RESET_CONTENT;\r
- case 206:\r
- return HTTP_STATUS_206_PARTIAL_CONTENT;\r
- case 300:\r
- return HTTP_STATUS_300_MULTIPLE_CHOICES;\r
- case 301:\r
- return HTTP_STATUS_301_MOVED_PERMANENTLY;\r
- case 302:\r
- return HTTP_STATUS_302_FOUND;\r
- case 303:\r
- return HTTP_STATUS_303_SEE_OTHER;\r
- case 304:\r
- return HTTP_STATUS_304_NOT_MODIFIED;\r
- case 305:\r
- return HTTP_STATUS_305_USE_PROXY;\r
- case 307:\r
- return HTTP_STATUS_307_TEMPORARY_REDIRECT;\r
- case 308:\r
- return HTTP_STATUS_308_PERMANENT_REDIRECT;\r
- case 400:\r
- return HTTP_STATUS_400_BAD_REQUEST;\r
- case 401:\r
- return HTTP_STATUS_401_UNAUTHORIZED;\r
- case 402:\r
- return HTTP_STATUS_402_PAYMENT_REQUIRED;\r
- case 403:\r
- return HTTP_STATUS_403_FORBIDDEN;\r
- case 404:\r
- return HTTP_STATUS_404_NOT_FOUND;\r
- case 405:\r
- return HTTP_STATUS_405_METHOD_NOT_ALLOWED;\r
- case 406:\r
- return HTTP_STATUS_406_NOT_ACCEPTABLE;\r
- case 407:\r
- return HTTP_STATUS_407_PROXY_AUTHENTICATION_REQUIRED;\r
- case 408:\r
- return HTTP_STATUS_408_REQUEST_TIME_OUT;\r
- case 409:\r
- return HTTP_STATUS_409_CONFLICT;\r
- case 410:\r
- return HTTP_STATUS_410_GONE;\r
- case 411:\r
- return HTTP_STATUS_411_LENGTH_REQUIRED;\r
- case 412:\r
- return HTTP_STATUS_412_PRECONDITION_FAILED;\r
- case 413:\r
- return HTTP_STATUS_413_REQUEST_ENTITY_TOO_LARGE;\r
- case 414:\r
- return HTTP_STATUS_414_REQUEST_URI_TOO_LARGE;\r
- case 415:\r
- return HTTP_STATUS_415_UNSUPPORTED_MEDIA_TYPE;\r
- case 416:\r
- return HTTP_STATUS_416_REQUESTED_RANGE_NOT_SATISFIED;\r
- case 417:\r
- return HTTP_STATUS_417_EXPECTATION_FAILED;\r
- case 500:\r
- return HTTP_STATUS_500_INTERNAL_SERVER_ERROR;\r
- case 501:\r
- return HTTP_STATUS_501_NOT_IMPLEMENTED;\r
- case 502:\r
- return HTTP_STATUS_502_BAD_GATEWAY;\r
- case 503:\r
- return HTTP_STATUS_503_SERVICE_UNAVAILABLE;\r
- case 504:\r
- return HTTP_STATUS_504_GATEWAY_TIME_OUT;\r
- case 505:\r
- return HTTP_STATUS_505_HTTP_VERSION_NOT_SUPPORTED;\r
-\r
- default:\r
- return HTTP_STATUS_UNSUPPORTED_STATUS;\r
+ case 100:\r
+ return HTTP_STATUS_100_CONTINUE;\r
+ case 101:\r
+ return HTTP_STATUS_101_SWITCHING_PROTOCOLS;\r
+ case 200:\r
+ return HTTP_STATUS_200_OK;\r
+ case 201:\r
+ return HTTP_STATUS_201_CREATED;\r
+ case 202:\r
+ return HTTP_STATUS_202_ACCEPTED;\r
+ case 203:\r
+ return HTTP_STATUS_203_NON_AUTHORITATIVE_INFORMATION;\r
+ case 204:\r
+ return HTTP_STATUS_204_NO_CONTENT;\r
+ case 205:\r
+ return HTTP_STATUS_205_RESET_CONTENT;\r
+ case 206:\r
+ return HTTP_STATUS_206_PARTIAL_CONTENT;\r
+ case 300:\r
+ return HTTP_STATUS_300_MULTIPLE_CHOICES;\r
+ case 301:\r
+ return HTTP_STATUS_301_MOVED_PERMANENTLY;\r
+ case 302:\r
+ return HTTP_STATUS_302_FOUND;\r
+ case 303:\r
+ return HTTP_STATUS_303_SEE_OTHER;\r
+ case 304:\r
+ return HTTP_STATUS_304_NOT_MODIFIED;\r
+ case 305:\r
+ return HTTP_STATUS_305_USE_PROXY;\r
+ case 307:\r
+ return HTTP_STATUS_307_TEMPORARY_REDIRECT;\r
+ case 308:\r
+ return HTTP_STATUS_308_PERMANENT_REDIRECT;\r
+ case 400:\r
+ return HTTP_STATUS_400_BAD_REQUEST;\r
+ case 401:\r
+ return HTTP_STATUS_401_UNAUTHORIZED;\r
+ case 402:\r
+ return HTTP_STATUS_402_PAYMENT_REQUIRED;\r
+ case 403:\r
+ return HTTP_STATUS_403_FORBIDDEN;\r
+ case 404:\r
+ return HTTP_STATUS_404_NOT_FOUND;\r
+ case 405:\r
+ return HTTP_STATUS_405_METHOD_NOT_ALLOWED;\r
+ case 406:\r
+ return HTTP_STATUS_406_NOT_ACCEPTABLE;\r
+ case 407:\r
+ return HTTP_STATUS_407_PROXY_AUTHENTICATION_REQUIRED;\r
+ case 408:\r
+ return HTTP_STATUS_408_REQUEST_TIME_OUT;\r
+ case 409:\r
+ return HTTP_STATUS_409_CONFLICT;\r
+ case 410:\r
+ return HTTP_STATUS_410_GONE;\r
+ case 411:\r
+ return HTTP_STATUS_411_LENGTH_REQUIRED;\r
+ case 412:\r
+ return HTTP_STATUS_412_PRECONDITION_FAILED;\r
+ case 413:\r
+ return HTTP_STATUS_413_REQUEST_ENTITY_TOO_LARGE;\r
+ case 414:\r
+ return HTTP_STATUS_414_REQUEST_URI_TOO_LARGE;\r
+ case 415:\r
+ return HTTP_STATUS_415_UNSUPPORTED_MEDIA_TYPE;\r
+ case 416:\r
+ return HTTP_STATUS_416_REQUESTED_RANGE_NOT_SATISFIED;\r
+ case 417:\r
+ return HTTP_STATUS_417_EXPECTATION_FAILED;\r
+ case 500:\r
+ return HTTP_STATUS_500_INTERNAL_SERVER_ERROR;\r
+ case 501:\r
+ return HTTP_STATUS_501_NOT_IMPLEMENTED;\r
+ case 502:\r
+ return HTTP_STATUS_502_BAD_GATEWAY;\r
+ case 503:\r
+ return HTTP_STATUS_503_SERVICE_UNAVAILABLE;\r
+ case 504:\r
+ return HTTP_STATUS_504_GATEWAY_TIME_OUT;\r
+ case 505:\r
+ return HTTP_STATUS_505_HTTP_VERSION_NOT_SUPPORTED;\r
+\r
+ default:\r
+ return HTTP_STATUS_UNSUPPORTED_STATUS;\r
}\r
}\r
\r
BOOLEAN\r
EFIAPI\r
HttpIsValidHttpHeader (\r
- IN CHAR8 *DeleteList[],\r
- IN UINTN DeleteCount,\r
- IN CHAR8 *FieldName\r
+ IN CHAR8 *DeleteList[],\r
+ IN UINTN DeleteCount,\r
+ IN CHAR8 *FieldName\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
if (FieldName == NULL) {\r
return FALSE;\r
return TRUE;\r
}\r
\r
-\r
/**\r
Create a HTTP_IO_HEADER to hold the HTTP header items.\r
\r
**/\r
HTTP_IO_HEADER *\r
HttpIoCreateHeader (\r
- UINTN MaxHeaderCount\r
+ UINTN MaxHeaderCount\r
)\r
{\r
- HTTP_IO_HEADER *HttpIoHeader;\r
+ HTTP_IO_HEADER *HttpIoHeader;\r
\r
if (MaxHeaderCount == 0) {\r
return NULL;\r
}\r
\r
HttpIoHeader->MaxHeaderCount = MaxHeaderCount;\r
- HttpIoHeader->Headers = (EFI_HTTP_HEADER *) (HttpIoHeader + 1);\r
+ HttpIoHeader->Headers = (EFI_HTTP_HEADER *)(HttpIoHeader + 1);\r
\r
return HttpIoHeader;\r
}\r
**/\r
VOID\r
HttpIoFreeHeader (\r
- IN HTTP_IO_HEADER *HttpIoHeader\r
+ IN HTTP_IO_HEADER *HttpIoHeader\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
if (HttpIoHeader != NULL) {\r
if (HttpIoHeader->HeaderCount != 0) {\r
FreePool (HttpIoHeader->Headers[Index].FieldValue);\r
}\r
}\r
+\r
FreePool (HttpIoHeader);\r
}\r
}\r
**/\r
EFI_STATUS\r
HttpIoSetHeader (\r
- IN HTTP_IO_HEADER *HttpIoHeader,\r
- IN CHAR8 *FieldName,\r
- IN CHAR8 *FieldValue\r
+ IN HTTP_IO_HEADER *HttpIoHeader,\r
+ IN CHAR8 *FieldName,\r
+ IN CHAR8 *FieldValue\r
)\r
{\r
- EFI_HTTP_HEADER *Header;\r
- UINTN StrSize;\r
- CHAR8 *NewFieldValue;\r
+ EFI_HTTP_HEADER *Header;\r
+ UINTN StrSize;\r
+ CHAR8 *NewFieldValue;\r
\r
- if (HttpIoHeader == NULL || FieldName == NULL || FieldValue == NULL) {\r
+ if ((HttpIoHeader == NULL) || (FieldName == NULL) || (FieldValue == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
if (HttpIoHeader->HeaderCount >= HttpIoHeader->MaxHeaderCount) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
Header = &HttpIoHeader->Headers[HttpIoHeader->HeaderCount];\r
\r
- StrSize = AsciiStrSize (FieldName);\r
+ StrSize = AsciiStrSize (FieldName);\r
Header->FieldName = AllocatePool (StrSize);\r
if (Header->FieldName == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
CopyMem (Header->FieldName, FieldName, StrSize);\r
Header->FieldName[StrSize -1] = '\0';\r
\r
- StrSize = AsciiStrSize (FieldValue);\r
+ StrSize = AsciiStrSize (FieldValue);\r
Header->FieldValue = AllocatePool (StrSize);\r
if (Header->FieldValue == NULL) {\r
FreePool (Header->FieldName);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
CopyMem (Header->FieldValue, FieldValue, StrSize);\r
Header->FieldValue[StrSize -1] = '\0';\r
\r
//\r
// Update an existing one.\r
//\r
- StrSize = AsciiStrSize (FieldValue);\r
+ StrSize = AsciiStrSize (FieldValue);\r
NewFieldValue = AllocatePool (StrSize);\r
if (NewFieldValue == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
CopyMem (NewFieldValue, FieldValue, StrSize);\r
NewFieldValue[StrSize -1] = '\0';\r
\r
if (Header->FieldValue != NULL) {\r
FreePool (Header->FieldValue);\r
}\r
+\r
Header->FieldValue = NewFieldValue;\r
}\r
\r