blob: 6752475ce22cb4439b2d7972e02c98b46c76ae8f [file] [log] [blame]
/** @file
Header file for HttpLib.
Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _DXE_HTTP_LIB_H_
#define _DXE_HTTP_LIB_H_
#include <Uefi.h>
#include <Library/NetLib.h>
#include <Library/HttpLib.h>
#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <IndustryStandard/Http11.h>
#include <Protocol/HttpUtilities.h>
#define BIT(x) (1 << x)
#define HTTP_VERSION_CRLF_STR " HTTP/1.1\r\n"
#define EMPTY_SPACE " "
#define NET_IS_HEX_CHAR(Ch) \
((('0' <= (Ch)) && ((Ch) <= '9')) || \
(('A' <= (Ch)) && ((Ch) <= 'F')) || \
(('a' <= (Ch)) && ((Ch) <= 'f')))
//
// Field index of the HTTP URL parse result.
//
#define HTTP_URI_FIELD_SCHEME 0
#define HTTP_URI_FIELD_AUTHORITY 1
#define HTTP_URI_FIELD_PATH 2
#define HTTP_URI_FIELD_QUERY 3
#define HTTP_URI_FIELD_FRAGMENT 4
#define HTTP_URI_FIELD_USERINFO 5
#define HTTP_URI_FIELD_HOST 6
#define HTTP_URI_FIELD_PORT 7
#define HTTP_URI_FIELD_MAX 8
#define HTTP_URI_PORT_MAX_NUM 65535
//
// Structure to store the parse result of a HTTP URL.
//
typedef struct {
UINT32 Offset;
UINT32 Length;
} HTTP_URL_FILED_DATA;
typedef struct {
UINT16 FieldBitMap;
HTTP_URL_FILED_DATA FieldData[HTTP_URI_FIELD_MAX];
} HTTP_URL_PARSER;
typedef enum {
UrlParserUrlStart,
UrlParserScheme,
UrlParserSchemeColon, // ":"
UrlParserSchemeColonSlash, // ":/"
UrlParserSchemeColonSlashSlash, // "://"
UrlParserAuthority,
UrlParserAtInAuthority,
UrlParserPath,
UrlParserQueryStart, // "?"
UrlParserQuery,
UrlParserFragmentStart, // "#"
UrlParserFragment,
UrlParserUserInfo,
UrlParserHostStart, // "@"
UrlParserHost,
UrlParserHostIpv6, // "["(Ipv6 address) "]"
UrlParserPortStart, // ":"
UrlParserPort,
UrlParserStateMax
} HTTP_URL_PARSE_STATE;
#endif