Home | History | Annotate | Download | only in WebServer
      1 /**
      2   @file
      3   Generate the list of known pages.
      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 list of known pages
     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 IndexPage (
     31   IN int SocketFD,
     32   IN WSDT_PORT * pPort,
     33   OUT BOOLEAN * pbDone
     34   )
     35 {
     36   CONST DT_PAGE * pPage;
     37   CONST DT_PAGE * pPageEnd;
     38   EFI_STATUS Status;
     39 
     40   DBG_ENTER ( );
     41 
     42   //
     43   //  Send the index page
     44   //
     45   for ( ; ; ) {
     46     //
     47     //  Send the page header
     48     //
     49     Status = HttpPageHeader ( SocketFD, pPort, L"Index" );
     50     if ( EFI_ERROR ( Status )) {
     51       break;
     52     }
     53 
     54     //
     55     //  Build the table header
     56     //
     57     Status = HttpSendAnsiString ( SocketFD,
     58                                   pPort,
     59                                   "<h1>UEFI Web Server</h1>\r\n"
     60                                   "<table border=\"1\">\r\n"
     61                                   "  <tr bgcolor=\"c0c0ff\"><th>Page</th><th>Description</th></tr>\r\n" );
     62     if ( EFI_ERROR ( Status )) {
     63       break;
     64     }
     65 
     66     //
     67     //  Walk the list of pages
     68     //  Skip the first page
     69     //
     70     pPage = &mPageList[0];
     71     pPageEnd = &pPage[mPageCount];
     72     pPage += 1;
     73     while ( pPageEnd > pPage ) {
     74       //
     75       //  Build the table entry for this page
     76       //
     77       Status = HttpSendAnsiString ( SocketFD,
     78                                     pPort,
     79                                     "<tr><td><a target=\"_blank\" href=\"" );
     80       if ( EFI_ERROR ( Status )) {
     81         break;
     82       }
     83       Status = HttpSendUnicodeString ( SocketFD,
     84                                        pPort,
     85                                        &pPage->pPageName[1]);
     86       if ( EFI_ERROR ( Status )) {
     87         break;
     88       }
     89       Status = HttpSendAnsiString ( SocketFD,
     90                                     pPort,
     91                                     "\">" );
     92       if ( EFI_ERROR ( Status )) {
     93         break;
     94       }
     95       Status = HttpSendUnicodeString ( SocketFD,
     96                                        pPort,
     97                                        &pPage->pPageName[1]);
     98       if ( EFI_ERROR ( Status )) {
     99         break;
    100       }
    101       Status = HttpSendAnsiString ( SocketFD,
    102                                     pPort,
    103                                     "</a></td><td>" );
    104       if ( EFI_ERROR ( Status )) {
    105         break;
    106       }
    107       Status = HttpSendUnicodeString ( SocketFD,
    108                                        pPort,
    109                                        pPage->pDescription );
    110       if ( EFI_ERROR ( Status )) {
    111         break;
    112       }
    113       Status = HttpSendAnsiString ( SocketFD,
    114                                     pPort,
    115                                     "</td></tr>\r\n" );
    116       if ( EFI_ERROR ( Status )) {
    117         break;
    118       }
    119 
    120       //
    121       //  Set the next page
    122       //
    123       pPage += 1;
    124     }
    125     if ( EFI_ERROR ( Status )) {
    126       break;
    127     }
    128 
    129     //
    130     //  Build the table trailer
    131     //
    132     Status = HttpSendAnsiString ( SocketFD,
    133                                   pPort,
    134                                   "</table>\r\n" );
    135     if ( EFI_ERROR ( Status )) {
    136       break;
    137     }
    138 
    139     //
    140     //  Send the page trailer
    141     //
    142     Status = HttpPageTrailer ( SocketFD, pPort, pbDone );
    143     break;
    144   }
    145 
    146   //
    147   //  Return the operation status
    148   //
    149   DBG_EXIT_STATUS ( Status );
    150   return Status;
    151 }
    152