X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=AppPkg%2FApplications%2FSockets%2FWebServer%2FDhcpOptions.c;fp=AppPkg%2FApplications%2FSockets%2FWebServer%2FDhcpOptions.c;h=8eeff45faf3be71e799b73716362df9b9b74e30b;hp=e3e77f354469510ede0d4c1c0391e8763a0bfbb7;hb=6dbd32caf698ceb86fd00face651cdc0e55f3e62;hpb=06c355b42fd112da4a439ba225aa666767d02838 diff --git a/AppPkg/Applications/Sockets/WebServer/DhcpOptions.c b/AppPkg/Applications/Sockets/WebServer/DhcpOptions.c index e3e77f3544..8eeff45faf 100644 --- a/AppPkg/Applications/Sockets/WebServer/DhcpOptions.c +++ b/AppPkg/Applications/Sockets/WebServer/DhcpOptions.c @@ -1,225 +1,222 @@ -/** - @file - Display the DHCP options - - 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. - -**/ - -#include -#include -#include - -#include -#include - -/** - 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 - ) -{ -// EFI_HANDLE Dhcp4Handle; - EFI_DHCP4_MODE_DATA Dhcp4Mode; - UINTN HandleCount; - EFI_DHCP4_PROTOCOL * pDhcp4; - EFI_DHCP4_PACKET * pDhcp4Packet; - EFI_HANDLE * pEnd; - EFI_HANDLE * pHandle; -// EFI_SERVICE_BINDING_PROTOCOL * pService; - EFI_STATUS Status; - - DBG_ENTER ( ); - - // - // Send the DHCP options - // - for ( ; ; ) { - // - // Send the page header - // - Status = HttpPageHeader ( SocketFD, pPort, L"DHCP Options" ); - if ( EFI_ERROR ( Status )) { - break; - } - - // - // Build the header - // - Status = HttpSendAnsiString ( SocketFD, - pPort, - "

" ); - if ( EFI_ERROR ( Status )) { - break; - } - Status = HttpSendUnicodeString ( SocketFD, - pPort, - L"DHCP Options" ); - if ( EFI_ERROR ( Status )) { - break; - } - Status = HttpSendAnsiString ( SocketFD, - pPort, - "

\r\n" ); - if ( EFI_ERROR ( Status )) { - break; - } - - // - // Attempt to locate DHCP clients - // - Status = gBS->LocateHandleBuffer ( ByProtocol, -// &gEfiDhcp4ServiceBindingProtocolGuid, - &gEfiDhcp4ProtocolGuid, - NULL, - &HandleCount, - &pHandle ); - if ( EFI_ERROR ( Status )) { - Status = HttpSendAnsiString ( SocketFD, - pPort, - "DHCP not in use" ); - if ( EFI_ERROR ( Status )) { - break; - } - } - else { - // - // Walk the list of handles - // - pEnd = &pHandle [ HandleCount ]; - while ( pEnd > pHandle ) { -/* - // - // Get the DHCP service binding - // - Status = gBS->OpenProtocol ( *pHandle, - &gEfiDhcp4ServiceBindingProtocolGuid, - &pService, - NULL, - gImageHandle, - EFI_OPEN_PROTOCOL_GET_PROTOCOL ); - if ( EFI_ERROR ( Status )) { - Status = HttpSendAnsiString ( SocketFD, - pPort, - "Failed to open gEfiDhcp4ServiceBindingProtocolGuid" ); - break; - } - - // - // Get the DHCP handle - // - Status = pService->CreateChild ( pService, - &Dhcp4Handle ); - if ( EFI_ERROR ( Status )) { - Status = HttpSendAnsiString ( SocketFD, - pPort, - "Failed to create DHCP4 child" ); - } - else { -*/ - // - // Get the DHCP protocol - // - Status = gBS->OpenProtocol ( *pHandle, -// Dhcp4Handle, - &gEfiDhcp4ProtocolGuid, - (VOID **)&pDhcp4, - NULL, - gImageHandle, - EFI_OPEN_PROTOCOL_GET_PROTOCOL ); - if ( EFI_ERROR ( Status )) { - Status = HttpSendAnsiString ( SocketFD, - pPort, - "Failed to open gEfiDhcp4ProtocolGuid" ); - } - else { - // - // Get the DHCP packet - // - Status = pDhcp4->GetModeData ( pDhcp4, - &Dhcp4Mode ); - if ( EFI_ERROR ( Status )) { - Status = HttpSendAnsiString ( SocketFD, - pPort, - "Failed to get DHCP4 mode" ); - } - else { - // - // Get the last packet - // - pDhcp4Packet = Dhcp4Mode.ReplyPacket; - if ( NULL == pDhcp4Packet ) { - Status = HttpSendAnsiString ( SocketFD, - pPort, - "No DHCP reply received!
DHCP Mode:
" ); - if ( EFI_ERROR ( Status )) { - break; - } - - // - // Display the DHCP mode data - // - Status = HttpSendDump ( SocketFD, - pPort, - sizeof ( Dhcp4Mode ), - (UINT8 *)&Dhcp4Mode ); - } - else { - // - // Display the DHCP packet - // - Status = HttpSendDump ( SocketFD, - pPort, - pDhcp4Packet->Length, - (UINT8 *)&pDhcp4Packet->Dhcp4 ); - } - } -/* - } - - // - // Done with the DHCP protocol - // - pService->DestroyChild ( pService, - Dhcp4Handle ); -*/ - } - - // - // Set the next service binding - // - pHandle += 1; - } - } - - // - // Send the page trailer - // - Status = HttpPageTrailer ( SocketFD, pPort, pbDone ); - break; - } - - // - // Return the operation status - // - DBG_EXIT_STATUS ( Status ); - return Status; -} +/** @file + Display the DHCP options + + 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. + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +**/ +#include +#include +#include + +#include +#include + +/** + 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 + ) +{ +// EFI_HANDLE Dhcp4Handle; + EFI_DHCP4_MODE_DATA Dhcp4Mode; + UINTN HandleCount; + EFI_DHCP4_PROTOCOL * pDhcp4; + EFI_DHCP4_PACKET * pDhcp4Packet; + EFI_HANDLE * pEnd; + EFI_HANDLE * pHandle; +// EFI_SERVICE_BINDING_PROTOCOL * pService; + EFI_STATUS Status; + + DBG_ENTER ( ); + + // + // Send the DHCP options + // + for ( ; ; ) { + // + // Send the page header + // + Status = HttpPageHeader ( SocketFD, pPort, L"DHCP Options" ); + if ( EFI_ERROR ( Status )) { + break; + } + + // + // Build the header + // + Status = HttpSendAnsiString ( SocketFD, + pPort, + "

" ); + if ( EFI_ERROR ( Status )) { + break; + } + Status = HttpSendUnicodeString ( SocketFD, + pPort, + L"DHCP Options" ); + if ( EFI_ERROR ( Status )) { + break; + } + Status = HttpSendAnsiString ( SocketFD, + pPort, + "

\r\n" ); + if ( EFI_ERROR ( Status )) { + break; + } + + // + // Attempt to locate DHCP clients + // + Status = gBS->LocateHandleBuffer ( ByProtocol, +// &gEfiDhcp4ServiceBindingProtocolGuid, + &gEfiDhcp4ProtocolGuid, + NULL, + &HandleCount, + &pHandle ); + if ( EFI_ERROR ( Status )) { + Status = HttpSendAnsiString ( SocketFD, + pPort, + "DHCP not in use" ); + if ( EFI_ERROR ( Status )) { + break; + } + } + else { + // + // Walk the list of handles + // + pEnd = &pHandle [ HandleCount ]; + while ( pEnd > pHandle ) { +/* + // + // Get the DHCP service binding + // + Status = gBS->OpenProtocol ( *pHandle, + &gEfiDhcp4ServiceBindingProtocolGuid, + &pService, + NULL, + gImageHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL ); + if ( EFI_ERROR ( Status )) { + Status = HttpSendAnsiString ( SocketFD, + pPort, + "Failed to open gEfiDhcp4ServiceBindingProtocolGuid" ); + break; + } + + // + // Get the DHCP handle + // + Status = pService->CreateChild ( pService, + &Dhcp4Handle ); + if ( EFI_ERROR ( Status )) { + Status = HttpSendAnsiString ( SocketFD, + pPort, + "Failed to create DHCP4 child" ); + } + else { +*/ + // + // Get the DHCP protocol + // + Status = gBS->OpenProtocol ( *pHandle, +// Dhcp4Handle, + &gEfiDhcp4ProtocolGuid, + (VOID **)&pDhcp4, + NULL, + gImageHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL ); + if ( EFI_ERROR ( Status )) { + Status = HttpSendAnsiString ( SocketFD, + pPort, + "Failed to open gEfiDhcp4ProtocolGuid" ); + } + else { + // + // Get the DHCP packet + // + Status = pDhcp4->GetModeData ( pDhcp4, + &Dhcp4Mode ); + if ( EFI_ERROR ( Status )) { + Status = HttpSendAnsiString ( SocketFD, + pPort, + "Failed to get DHCP4 mode" ); + } + else { + // + // Get the last packet + // + pDhcp4Packet = Dhcp4Mode.ReplyPacket; + if ( NULL == pDhcp4Packet ) { + Status = HttpSendAnsiString ( SocketFD, + pPort, + "No DHCP reply received!
DHCP Mode:
" ); + if ( EFI_ERROR ( Status )) { + break; + } + + // + // Display the DHCP mode data + // + Status = HttpSendDump ( SocketFD, + pPort, + sizeof ( Dhcp4Mode ), + (UINT8 *)&Dhcp4Mode ); + } + else { + // + // Display the DHCP packet + // + Status = HttpSendDump ( SocketFD, + pPort, + pDhcp4Packet->Length, + (UINT8 *)&pDhcp4Packet->Dhcp4 ); + } + } +/* + } + + // + // Done with the DHCP protocol + // + pService->DestroyChild ( pService, + Dhcp4Handle ); +*/ + } + + // + // Set the next service binding + // + pHandle += 1; + } + } + + // + // Send the page trailer + // + Status = HttpPageTrailer ( SocketFD, pPort, pbDone ); + break; + } + + // + // Return the operation status + // + DBG_EXIT_STATUS ( Status ); + return Status; +}