/** @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