/** @file
Header file for HttpLib.
Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.
(C) Copyright 2016 Hewlett Packard Enterprise Development LP
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _DXE_HTTP_LIB_H_
#define _DXE_HTTP_LIB_H_
#include
#include
#include
#include
#include
#include
#include
#include
#include
#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