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