1 /** 2 @file 3 Ports response page 4 5 Copyright (c) 2011-2012, Intel Corporation 6 All rights reserved. This program and the accompanying materials 7 are licensed and made available under the terms and conditions of the BSD License 8 which accompanies this distribution. The full text of the license may be found at 9 http://opensource.org/licenses/bsd-license.php 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 14 **/ 15 16 #include <WebServer.h> 17 18 19 /** 20 Respond with the Ports page 21 22 @param [in] SocketFD The socket's file descriptor to add to the list. 23 @param [in] pPort The WSDT_PORT structure address 24 @param [out] pbDone Address to receive the request completion status 25 26 @retval EFI_SUCCESS The request was successfully processed 27 28 **/ 29 EFI_STATUS 30 PortsPage ( 31 IN int SocketFD, 32 IN WSDT_PORT * pPort, 33 OUT BOOLEAN * pbDone 34 ) 35 { 36 socklen_t AddressLength; 37 struct sockaddr_in6 LocalAddress; 38 DT_WEB_SERVER * pWebServer; 39 EFI_STATUS Status; 40 41 DBG_ENTER ( ); 42 43 // 44 // Send the Hello World page 45 // 46 pWebServer = &mWebServer; 47 for ( ; ; ) { 48 // 49 // Send the page header 50 // 51 Status = HttpPageHeader ( SocketFD, pPort, L"Ports" ); 52 if ( EFI_ERROR ( Status )) { 53 break; 54 } 55 56 // 57 // Send the page body 58 // 59 Status = HttpSendAnsiString ( SocketFD, 60 pPort, 61 "<h1>Web-Server Ports</h1>\r\n" ); 62 if ( EFI_ERROR ( Status )) { 63 break; 64 } 65 66 // 67 // Check for TCP v4 68 // 69 if ( -1 != pWebServer->HttpListenPort ) { 70 AddressLength = sizeof ( LocalAddress ); 71 if ( 0 == getsockname ( pWebServer->HttpListenPort, 72 (struct sockaddr *)&LocalAddress, 73 &AddressLength )) { 74 Status = HttpSendAnsiString ( SocketFD, 75 pPort, 76 "<a href=\"http://" ); 77 if ( EFI_ERROR ( Status )) { 78 break; 79 } 80 Status = HttpSendIpAddress ( SocketFD, 81 pPort, 82 &LocalAddress ); 83 if ( EFI_ERROR ( Status )) { 84 break; 85 } 86 Status = HttpSendAnsiString ( SocketFD, 87 pPort, 88 "\">Tcp4</a><br>\r\n" ); 89 if ( EFI_ERROR ( Status )) { 90 break; 91 } 92 } 93 } 94 95 // 96 // Check for TCP v6 97 // 98 if ( -1 != pWebServer->HttpListenPort6 ) { 99 AddressLength = sizeof ( LocalAddress ); 100 if ( 0 == getsockname ( pWebServer->HttpListenPort6, 101 (struct sockaddr *)&LocalAddress, 102 &AddressLength )) { 103 Status = HttpSendAnsiString ( SocketFD, 104 pPort, 105 "<a href=\"http://" ); 106 if ( EFI_ERROR ( Status )) { 107 break; 108 } 109 Status = HttpSendIpAddress ( SocketFD, 110 pPort, 111 &LocalAddress ); 112 if ( EFI_ERROR ( Status )) { 113 break; 114 } 115 Status = HttpSendAnsiString ( SocketFD, 116 pPort, 117 "\">Tcp6</a><br>\r\n" ); 118 if ( EFI_ERROR ( Status )) { 119 break; 120 } 121 } 122 } 123 124 // 125 // Send the page trailer 126 // 127 Status = HttpPageTrailer ( SocketFD, pPort, pbDone ); 128 break; 129 } 130 131 // 132 // Return the operation status 133 // 134 DBG_EXIT_STATUS ( Status ); 135 return Status; 136 } 137