]> git.proxmox.com Git - mirror_edk2.git/blobdiff - AppPkg/Applications/Sockets/WebServer/WebServer.h
Add Socket Library applications.
[mirror_edk2.git] / AppPkg / Applications / Sockets / WebServer / WebServer.h
diff --git a/AppPkg/Applications/Sockets/WebServer/WebServer.h b/AppPkg/Applications/Sockets/WebServer/WebServer.h
new file mode 100644 (file)
index 0000000..6078df0
--- /dev/null
@@ -0,0 +1,1105 @@
+/** @file\r
+  Definitions for the web server.\r
+\r
+  Copyright (c) 2011, Intel Corporation\r
+  All rights reserved. This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef _WEB_SERVER_H_\r
+#define _WEB_SERVER_H_\r
+\r
+#include <errno.h>\r
+#include <Uefi.h>\r
+\r
+#include <Guid/EventGroup.h>\r
+\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/PcdLib.h>\r
+#include <Library/UefiApplicationEntryPoint.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/UefiLib.h>\r
+#include <Protocol/BlockIo.h>\r
+\r
+#include <netinet/in.h>\r
+\r
+#include <sys/EfiSysCall.h>\r
+#include <sys/poll.h>\r
+#include <sys/socket.h>\r
+\r
+#pragma warning ( disable : 4054 )\r
+#pragma warning ( disable : 4152 )\r
+\r
+//------------------------------------------------------------------------------\r
+//  Pages\r
+//------------------------------------------------------------------------------\r
+\r
+#define PAGE_ACPI_DSDT                  L"/DSDT"\r
+#define PAGE_ACPI_FADT                  L"/FADT"\r
+#define PAGE_ACPI_RSDP_10B              L"/RSDP1.0b"\r
+#define PAGE_ACPI_RSDP_30               L"/RSDP3.0"\r
+#define PAGE_ACPI_RSDT                  L"/RSDT"\r
+#define PAGE_BOOT_SERVICES_TABLE        L"/BootServicesTable"\r
+#define PAGE_CONFIGURATION_TABLE        L"/ConfigurationTable"\r
+#define PAGE_DXE_SERVICES_TABLE         L"/DxeServicesTable"\r
+#define PAGE_RUNTIME_SERVICES_TABLE     L"/RuntimeServicesTable"\r
+\r
+//------------------------------------------------------------------------------\r
+//  Signatures\r
+//------------------------------------------------------------------------------\r
+\r
+#define DSDT_SIGNATURE        0x54445344\r
+#define FADT_SIGNATURE        0x50434146\r
+\r
+//------------------------------------------------------------------------------\r
+//  Macros\r
+//------------------------------------------------------------------------------\r
+\r
+#if defined(_MSC_VER)           /* Handle Microsoft VC++ compiler specifics. */\r
+#define DBG_ENTER()             DEBUG (( DEBUG_INFO, "Entering " __FUNCTION__ "\n" )) ///<  Display routine entry\r
+#define DBG_EXIT()              DEBUG (( DEBUG_INFO, "Exiting " __FUNCTION__ "\n" ))  ///<  Display routine exit\r
+#define DBG_EXIT_DEC(Status)    DEBUG (( DEBUG_INFO, "Exiting " __FUNCTION__ ", Status: %d\n", Status ))      ///<  Display routine exit with decimal value\r
+#define DBG_EXIT_HEX(Status)    DEBUG (( DEBUG_INFO, "Exiting " __FUNCTION__ ", Status: 0x%08x\n", Status ))  ///<  Display routine exit with hex value\r
+#define DBG_EXIT_STATUS(Status) DEBUG (( DEBUG_INFO, "Exiting " __FUNCTION__ ", Status: %r\n", Status ))      ///<  Display routine exit with status value\r
+#define DBG_EXIT_TF(Status)     DEBUG (( DEBUG_INFO, "Exiting " __FUNCTION__ ", returning %s\n", (FALSE == Status) ? L"FALSE" : L"TRUE" ))  ///<  Display routine with TRUE/FALSE value\r
+#else   //  _MSC_VER\r
+#define DBG_ENTER()\r
+#define DBG_EXIT()\r
+#define DBG_EXIT_DEC(Status)\r
+#define DBG_EXIT_HEX(Status)\r
+#define DBG_EXIT_STATUS(Status)\r
+#define DBG_EXIT_TF(Status)\r
+#endif  //  _MSC_VER\r
+\r
+#define DIM(x)    ( sizeof ( x ) / sizeof ( x[0] ))   ///<  Compute the number of entries in an array\r
+\r
+//------------------------------------------------------------------------------\r
+//  Constants\r
+//------------------------------------------------------------------------------\r
+\r
+#define DEBUG_SOCKET_POLL       0x00080000  ///<  Display the socket poll messages\r
+#define DEBUG_PORT_WORK         0x00040000  ///<  Display the port work messages\r
+#define DEBUG_SERVER_TIMER      0x00020000  ///<  Display the socket poll messages\r
+#define DEBUG_HTTP_PORT         0x00010000  ///<  Display HTTP port related messages\r
+#define DEBUG_REQUEST           0x00008000  ///<  Display the HTTP request messages\r
+\r
+#define HTTP_PORT_POLL_DELAY  ( 2 * 1000 )  ///<  Delay in milliseconds for attempts to open the HTTP port\r
+#define CLIENT_POLL_DELAY     50            ///<  Delay in milliseconds between client polls\r
+\r
+#define TPL_WEB_SERVER        TPL_CALLBACK  ///<  TPL for routine synchronization\r
+\r
+/**\r
+  Verify new TPL value\r
+\r
+  This macro which is enabled when debug is enabled verifies that\r
+  the new TPL value is >= the current TPL value.\r
+**/\r
+#ifdef VERIFY_TPL\r
+#undef VERIFY_TPL\r
+#endif  //  VERIFY_TPL\r
+\r
+#if !defined(MDEPKG_NDEBUG)\r
+\r
+#define VERIFY_TPL(tpl)                           \\r
+{                                                 \\r
+  EFI_TPL PreviousTpl;                            \\r
+                                                  \\r
+  PreviousTpl = gBS->RaiseTPL ( TPL_HIGH_LEVEL ); \\r
+  gBS->RestoreTPL ( PreviousTpl );                \\r
+  if ( PreviousTpl > tpl ) {                      \\r
+    DEBUG (( DEBUG_ERROR, "Current TPL: %d, New TPL: %d\r\n", PreviousTpl, tpl ));  \\r
+    ASSERT ( PreviousTpl <= tpl );                \\r
+  }                                               \\r
+}\r
+\r
+#else   //  MDEPKG_NDEBUG\r
+\r
+#define VERIFY_TPL(tpl)\r
+\r
+#endif  //  MDEPKG_NDEBUG\r
+\r
+#define WEB_SERVER_SIGNATURE        SIGNATURE_32('W','e','b','S') ///<  DT_WEB_SERVER memory signature\r
+\r
+#define SPACES_ADDRESS_TO_DATA      2\r
+#define BYTES_ON_A_LINE             16\r
+#define SPACES_BETWEEN_BYTES        1\r
+#define SPACES_DATA_TO_ASCII        2\r
+\r
+\r
+//------------------------------------------------------------------------------\r
+// Protocol Declarations\r
+//------------------------------------------------------------------------------\r
+\r
+extern EFI_COMPONENT_NAME_PROTOCOL gComponentName;    ///<  Component name protocol declaration\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gComponentName2;  ///<  Component name 2 protocol declaration\r
+extern EFI_DRIVER_BINDING_PROTOCOL gDriverBinding;    ///<  Driver binding protocol declaration\r
+\r
+//------------------------------------------------------------------------------\r
+//  Data Types\r
+//------------------------------------------------------------------------------\r
+\r
+/**\r
+  Port control structure\r
+**/\r
+typedef struct {\r
+  //\r
+  //  Buffer management\r
+  //\r
+  size_t    RequestLength;      ///<  Request length in bytes\r
+  size_t    TxBytes;            ///<  Bytes in the TX buffer\r
+  UINT8     Request [ 65536 ];  ///<  Page request\r
+  UINT8     RxBuffer [ 65536 ]; ///<  Receive buffer\r
+  UINT8     TxBuffer [ 65536 ]; ///<  Transmit buffer\r
+} WSDT_PORT;\r
+\r
+/**\r
+  Web server control structure\r
+**/\r
+typedef struct {\r
+  UINTN Signature;              ///<  Structure identification\r
+\r
+  //\r
+  //  Image attributes\r
+  //\r
+  EFI_HANDLE ImageHandle;       ///<  Image handle\r
+\r
+  //\r
+  //  HTTP port management\r
+  //\r
+  BOOLEAN   bTimerRunning;      ///<  Port creation timer status\r
+  EFI_EVENT TimerEvent;         ///<  Timer to open HTTP port\r
+  int       HttpListenPort;     ///<  File descriptor for the HTTP listen port\r
+\r
+  //\r
+  //  Client port management\r
+  //\r
+  nfds_t    MaxEntries;         ///<  Maximum entries in the PortList array\r
+  nfds_t    Entries;            ///<  The current number of entries in the PortList array\r
+  struct pollfd * pFdList;      ///<  List of socket file descriptors\r
+  WSDT_PORT ** ppPortList;      ///<  List of port management structures\r
+} DT_WEB_SERVER;\r
+\r
+//#define SERVER_FROM_SERVICE(a) CR(a, DT_WEB_SERVER, ServiceBinding, WEB_SERVER_SIGNATURE) ///< Locate DT_LAYER from service binding\r
+\r
+extern DT_WEB_SERVER mWebServer;\r
+\r
+/**\r
+  Process an HTTP request\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(* PFN_RESPONSE) (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Data structure to delcare page support routines\r
+**/\r
+typedef struct {\r
+  UINT16 * pPageName;         ///<  Name of the page\r
+  PFN_RESPONSE pfnResponse;   ///<  Routine to generate the response\r
+  UINT16 * pDescription;      ///<  Description of the page\r
+} DT_PAGE;\r
+\r
+extern CONST DT_PAGE mPageList [];  ///<  List of pages\r
+extern CONST UINTN mPageCount;      ///<  Number of pages\r
+\r
+//------------------------------------------------------------------------------\r
+// Web Pages\r
+//------------------------------------------------------------------------------\r
+\r
+/**\r
+  Respond with the ACPI DSDT table\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+AcpiDsdtPage (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Respond with the ACPI FADT table\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+AcpiFadtPage (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Respond with the ACPI RSDP 1.0b table\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+AcpiRsdp10Page (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Respond with the ACPI RSDP 3.0 table\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+AcpiRsdp30Page (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Respond with the ACPI RSDT table\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+AcpiRsdtPage (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Respond with the boot services table\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+BootServicesTablePage (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Respond with the configuration tables\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+ConfigurationTablePage (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Respond with the DHCP options\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+DhcpOptionsPage (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Respond with the DXE services table\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+DxeServicesTablePage (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Respond with the firmware status\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+FirmwarePage (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Respond with the handles in the system\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+HandlePage (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Respond with the Hello World page\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+HelloPage (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Respond with the list of known pages\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+IndexPage (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Page to reboot the system\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+RebootPage (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Respond with the runtime services table\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+RuntimeSservicesTablePage (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Respond with the system table\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+SystemTablePage (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN * pbDone\r
+  );\r
+\r
+//------------------------------------------------------------------------------\r
+// Support routines\r
+//------------------------------------------------------------------------------\r
+\r
+/**\r
+  Display the EFI Table Header\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] pHeader       Address of the EFI_TABLE_HEADER structure\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+EfiTableHeader (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN EFI_TABLE_HEADER * pHeader\r
+  );\r
+\r
+/**\r
+  Buffer the HTTP page header\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] pTitle        A zero terminated Unicode title string\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+HttpPageHeader (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN CONST CHAR16 * pTitle\r
+  );\r
+\r
+/**\r
+  Buffer and send the HTTP page trailer\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+HttpPageTrailer (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Process an HTTP request\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+HttpRequest (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN BOOLEAN * pbDone\r
+  );\r
+\r
+/**\r
+  Buffer data for sending\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] LengthInBytes Length of valid data in the buffer\r
+  @param [in] pBuffer       Buffer of data to send\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+HttpSend (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN size_t LengthInBytes,\r
+  IN CONST UINT8 * pBuffer\r
+  );\r
+\r
+/**\r
+  Send an ANSI string\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] pString       A zero terminated Unicode string\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+HttpSendAnsiString (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN CONST char * pString\r
+  );\r
+\r
+/**\r
+  Buffer a single byte\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] Data          The data byte to send\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+HttpSendByte (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN UINT8 Data\r
+  );\r
+\r
+/**\r
+  Display a character\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] Character     Character to display\r
+  @param [in] pReplacement  Replacement character string\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+HttpSendCharacter (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN CHAR8 Character,\r
+  IN CHAR8 * pReplacement\r
+  );\r
+\r
+/**\r
+  Send a buffer dump\r
+  \r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] ByteCount     The number of bytes to display\r
+  @param [in] pData         Address of the byte array\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+HttpSendDump (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN UINTN ByteCount,\r
+  IN CONST UINT8 * pData\r
+  );\r
+\r
+/**\r
+  Display a row containing a GUID value\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] pGuid         Address of the GUID to display\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+HttpSendGuid (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN CONST EFI_GUID * pGuid\r
+  );\r
+\r
+/**\r
+  Output a hex value to the HTML page\r
+\r
+  @param [in] SocketFD    Socket file descriptor\r
+  @param [in] pPort       The WSDT_PORT structure address\r
+  @param [in] Bits        Number of bits to display\r
+  @param [in] Value       Value to display\r
+\r
+  @retval EFI_SUCCESS Successfully displayed the address\r
+**/\r
+EFI_STATUS\r
+HttpSendHexBits (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN INT32 Bits,\r
+  IN UINT64 Value\r
+  );\r
+\r
+/**\r
+  Output a hex value to the HTML page\r
+\r
+  @param [in] SocketFD    Socket file descriptor\r
+  @param [in] pPort       The WSDT_PORT structure address\r
+  @param [in] Value       Value to display\r
+\r
+  @retval EFI_SUCCESS Successfully displayed the address\r
+**/\r
+EFI_STATUS\r
+HttpSendHexValue (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN UINT64 Value\r
+  );\r
+\r
+/**\r
+  Output an IP address to the HTML page\r
+\r
+  @param [in] SocketFD    Socket file descriptor\r
+  @param [in] pPort       The WSDT_PORT structure address\r
+  @param [in] pAddress    Address of the socket address\r
+\r
+  @retval EFI_SUCCESS Successfully displayed the address\r
+**/\r
+EFI_STATUS\r
+HttpSendIpAddress (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN struct sockaddr_in * pAddress\r
+  );\r
+\r
+/**\r
+  Send a Unicode string\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] pString       A zero terminated Unicode string\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+HttpSendUnicodeString (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN CONST UINT16 * pString\r
+  );\r
+\r
+/**\r
+  Output a value to the HTML page\r
+\r
+  @param [in] SocketFD    Socket file descriptor\r
+  @param [in] pPort       The WSDT_PORT structure address\r
+  @param [in] Value       Value to display\r
+\r
+  @retval EFI_SUCCESS Successfully displayed the address\r
+**/\r
+EFI_STATUS\r
+HttpSendValue (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN UINT64 Value\r
+  );\r
+\r
+/**\r
+  Display a row containing a decimal value\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] pName         Address of a zero terminated name string\r
+  @param [in] Value         The value to display\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+RowDecimalValue (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN CONST CHAR8 * pName,\r
+  IN UINT64 Value\r
+  );\r
+\r
+/**\r
+  Display a row containing a GUID value\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] pName         Address of a zero terminated name string\r
+  @param [in] pGuid         Address of the GUID to display\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+RowGuid (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN CONST CHAR8 * pName,\r
+  IN CONST EFI_GUID * pGuid\r
+  );\r
+\r
+/**\r
+  Display a row containing a hex value\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] pName         Address of a zero terminated name string\r
+  @param [in] Value         The value to display\r
+  @param [in] pWebPage      Address of a zero terminated web page name\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+RowHexValue (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN CONST CHAR8 * pName,\r
+  IN UINT64 Value,\r
+  IN CONST CHAR16 * pWebPage\r
+  );\r
+\r
+/**\r
+  Display a row containing a pointer\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] pName         Address of a zero terminated name string\r
+  @param [in] pAddress      The address to display\r
+  @param [in] pWebPage      Address of a zero terminated web page name\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+RowPointer (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN CONST CHAR8 * pName,\r
+  IN CONST VOID * pAddress,\r
+  IN CONST CHAR16 * pWebPage\r
+  );\r
+\r
+/**\r
+  Display a row containing a revision\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] pName         Address of a zero terminated name string\r
+  @param [in] Revision      The revision to display\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+RowRevision (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN CONST CHAR8 * pName,\r
+  IN UINT32 Revision\r
+  );\r
+\r
+/**\r
+  Display a row containing a unicode string\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] pName         Address of a zero terminated name string\r
+  @param [in] pString       Address of a zero terminated unicode string\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+RowUnicodeString (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN CONST CHAR8 * pName,\r
+  IN CONST CHAR16 * pString\r
+  );\r
+\r
+/**\r
+  Start the table page\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [in] pName         Address of a zero terminated name string\r
+  @param [in] pTable        Address of the table\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+TableHeader (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  IN CONST CHAR16 * pName,\r
+  IN CONST VOID * pTable\r
+  );\r
+\r
+/**\r
+  End the table page\r
+\r
+  @param [in] SocketFD      The socket's file descriptor to add to the list.\r
+  @param [in] pPort         The WSDT_PORT structure address\r
+  @param [out] pbDone       Address to receive the request completion status\r
+\r
+  @retval EFI_SUCCESS       The request was successfully processed\r
+\r
+**/\r
+EFI_STATUS\r
+TableTrailer (\r
+  IN int SocketFD,\r
+  IN WSDT_PORT * pPort,\r
+  OUT BOOLEAN *pbDone\r
+  );\r
+\r
+/**\r
+  HTTP port creation timer routine\r
+\r
+  This routine polls the socket layer waiting for the initial network connection\r
+  which will enable the creation of the HTTP port.  The socket layer will manage\r
+  the coming and going of the network connections after that until the last network\r
+  connection is broken.\r
+\r
+  @param [in] pWebServer  The web server control structure address.\r
+\r
+**/\r
+VOID\r
+WebServerTimer (\r
+  IN DT_WEB_SERVER * pWebServer\r
+  );\r
+\r
+/**\r
+  Start the web server port creation timer\r
+\r
+  @param [in] pWebServer  The web server control structure address.\r
+\r
+  @retval EFI_SUCCESS         The timer was successfully started.\r
+  @retval EFI_ALREADY_STARTED The timer is already running.\r
+  @retval Other               The timer failed to start.\r
+\r
+**/\r
+EFI_STATUS\r
+WebServerTimerStart (\r
+  IN DT_WEB_SERVER * pWebServer\r
+  );\r
+\r
+/**\r
+  Stop the web server port creation timer\r
+\r
+  @param [in] pWebServer  The web server control structure address.\r
+\r
+  @retval EFI_SUCCESS   The HTTP port timer is stopped\r
+  @retval Other         Failed to stop the HTTP port timer\r
+\r
+**/\r
+EFI_STATUS\r
+WebServerTimerStop (\r
+  IN DT_WEB_SERVER * pWebServer\r
+  );\r
+\r
+//------------------------------------------------------------------------------\r
+// Driver Binding Protocol Support\r
+//------------------------------------------------------------------------------\r
+\r
+/**\r
+  Stop this driver on Controller by removing NetworkInterfaceIdentifier protocol and\r
+  closing the DevicePath and PciIo protocols on Controller.\r
+\r
+  @param [in] pThis                Protocol instance pointer.\r
+  @param [in] Controller           Handle of device to stop driver on.\r
+  @param [in] NumberOfChildren     How many children need to be stopped.\r
+  @param [in] pChildHandleBuffer   Not used.\r
+\r
+  @retval EFI_SUCCESS          This driver is removed Controller.\r
+  @retval EFI_DEVICE_ERROR     The device could not be stopped due to a device error.\r
+  @retval other                This driver was not removed from this device.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+DriverStop (\r
+  IN  EFI_DRIVER_BINDING_PROTOCOL * pThis,\r
+  IN  EFI_HANDLE Controller,\r
+  IN  UINTN NumberOfChildren,\r
+  IN  EFI_HANDLE * pChildHandleBuffer\r
+  );\r
+\r
+//------------------------------------------------------------------------------\r
+// EFI Component Name Protocol Support\r
+//------------------------------------------------------------------------------\r
+\r
+/**\r
+  Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+  This function retrieves the user readable name of a driver in the form of a\r
+  Unicode string. If the driver specified by This has a user readable name in\r
+  the language specified by Language, then a pointer to the driver name is\r
+  returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+  by This does not support the language specified by Language,\r
+  then EFI_UNSUPPORTED is returned.\r
+\r
+  @param [in] pThis             A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+                                EFI_COMPONENT_NAME_PROTOCOL instance.\r
+  @param [in] pLanguage         A pointer to a Null-terminated ASCII string\r
+                                array indicating the language. This is the\r
+                                language of the driver name that the caller is\r
+                                requesting, and it must match one of the\r
+                                languages specified in SupportedLanguages. The\r
+                                number of languages supported by a driver is up\r
+                                to the driver writer. Language is specified\r
+                                in RFC 3066 or ISO 639-2 language code format.\r
+  @param [out] ppDriverName     A pointer to the Unicode string to return.\r
+                                This Unicode string is the name of the\r
+                                driver specified by This in the language\r
+                                specified by Language.\r
+\r
+  @retval EFI_SUCCESS           The Unicode string for the Driver specified by\r
+                                This and the language specified by Language was\r
+                                returned in DriverName.\r
+  @retval EFI_INVALID_PARAMETER Language is NULL.\r
+  @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+  @retval EFI_UNSUPPORTED       The driver specified by This does not support\r
+                                the language specified by Language.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+GetDriverName (\r
+  IN  EFI_COMPONENT_NAME_PROTOCOL * pThis,\r
+  IN  CHAR8 * pLanguage,\r
+  OUT CHAR16 ** ppDriverName\r
+  );\r
+\r
+\r
+/**\r
+  Retrieves a Unicode string that is the user readable name of the controller\r
+  that is being managed by a driver.\r
+\r
+  This function retrieves the user readable name of the controller specified by\r
+  ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+  driver specified by This has a user readable name in the language specified by\r
+  Language, then a pointer to the controller name is returned in ControllerName,\r
+  and EFI_SUCCESS is returned.  If the driver specified by This is not currently\r
+  managing the controller specified by ControllerHandle and ChildHandle,\r
+  then EFI_UNSUPPORTED is returned.  If the driver specified by This does not\r
+  support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+  @param [in] pThis             A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+                                EFI_COMPONENT_NAME_PROTOCOL instance.\r
+  @param [in] ControllerHandle  The handle of a controller that the driver\r
+                                specified by This is managing.  This handle\r
+                                specifies the controller whose name is to be\r
+                                returned.\r
+  @param [in] ChildHandle       The handle of the child controller to retrieve\r
+                                the name of.  This is an optional parameter that\r
+                                may be NULL.  It will be NULL for device\r
+                                drivers.  It will also be NULL for a bus drivers\r
+                                that wish to retrieve the name of the bus\r
+                                controller.  It will not be NULL for a bus\r
+                                driver that wishes to retrieve the name of a\r
+                                child controller.\r
+  @param [in] pLanguage         A pointer to a Null-terminated ASCII string\r
+                                array indicating the language.  This is the\r
+                                language of the driver name that the caller is\r
+                                requesting, and it must match one of the\r
+                                languages specified in SupportedLanguages. The\r
+                                number of languages supported by a driver is up\r
+                                to the driver writer. Language is specified in\r
+                                RFC 3066 or ISO 639-2 language code format.\r
+  @param [out] ppControllerName A pointer to the Unicode string to return.\r
+                                This Unicode string is the name of the\r
+                                controller specified by ControllerHandle and\r
+                                ChildHandle in the language specified by\r
+                                Language from the point of view of the driver\r
+                                specified by This.\r
+\r
+  @retval EFI_SUCCESS           The Unicode string for the user readable name in\r
+                                the language specified by Language for the\r
+                                driver specified by This was returned in\r
+                                DriverName.\r
+  @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+                                EFI_HANDLE.\r
+  @retval EFI_INVALID_PARAMETER Language is NULL.\r
+  @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+  @retval EFI_UNSUPPORTED       The driver specified by This is not currently\r
+                                managing the controller specified by\r
+                                ControllerHandle and ChildHandle.\r
+  @retval EFI_UNSUPPORTED       The driver specified by This does not support\r
+                                the language specified by Language.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+GetControllerName (\r
+  IN  EFI_COMPONENT_NAME_PROTOCOL * pThis,\r
+  IN  EFI_HANDLE ControllerHandle,\r
+  IN OPTIONAL EFI_HANDLE ChildHandle,\r
+  IN  CHAR8 * pLanguage,\r
+  OUT CHAR16 ** ppControllerName\r
+  );\r
+\r
+//------------------------------------------------------------------------------\r
+\r
+#endif  //  _WEB_SERVER_H_\r