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
IndexPage(IN int SocketFD,IN WSDT_PORT * pPort,OUT BOOLEAN * pbDone)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