Version 1.30, Last modified 04/05/2006
The pseudo code specification provided is a description of the actual work that needs to be implemented. This is required so that results will be comparable. Any dynamic implementation must follow the specification exactly. This means that all operations specified, such as loops and searches, should be executed for each request. Unless otherwise specified, results or intermediate results from previous operations or requests should not be cached.
To provide the flexibility needed to implement this code on any platform and in any desired scripting language, the subroutines listed in the pseudo code may be inlined or subdivided into smaller subroutines as long as the algorithms implemented by the subroutines are performed exactly as described.
The dynamic operations must be executed by separate dynamic modules. The dynamic code must be written in a widely-used scripting language. Script implementations in PHP and JSP are supplied with the kit.
Note: Directories are specified in this document with a forward slash, '/', however, this in no way implies that one has to follow this convention. Use what works on one's operating system.
1.1.2 Specification of Return Formats
All of the dynamic requests return one of the following types of HTML pages to the client. These formats must be followed precisely for the client software to understand the returned pages. This includes the blank line between the headers and the <html> tag.
Square brackets, [], are used to denote either a looping construct (If/Else/End If, Foreach, etc.), or where appropriate text should be substituted. This text should contain only the required information. The text may NOT be padded in any way to create a fixed length field.
Curly braces, {}, are used to denote an array that can contain multiple variables inside of it. Arrays are not strictly required for implementing these constructs; they are used to indicate a logical grouping of variables.
Extra headers required by the web server are allowed. The formats simply show the minimum required by the benchmark.
HTTP 200 OK Content-type: text/html Cache-Control: no-cache <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Login</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_LoginMessage"> <tr><th>Message</th></tr> <tr><td>[MESSAGE]</td></tr> </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Login</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> <form action="login.php" method="POST"> <table border="0" align="center"> <tr> <td align="right">User ID: <td><input type="text" name="userid"> <tr> <td align="right">Password: <td><input type="password" name="password"> <tr> <td align="center" colspan="2"><input type="submit" value="Login"> </table> </form> <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> </body> </html>
HTTP 200 OK Content-type: text/html Cache-Control: no-cache <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Message</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>Message</th></tr> <tr><td>[MESSAGE]</td></tr> </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Message</font></b></td> </tr> </table> </body> </html>
<ul> <li><a href="account_summary.php">Account Summary</a> <li><a href="check_detail_input.php">Check Detail</a> <li><a href="profile.php">Change Profile</a> <li><a href="transfer.php">Transfer Money</a> <li>Bill Pay <ul> <li><a href="add_payee.php">Add Payee</a> <li><a href="bill_pay.php">Quick Pay</a> <li><a href="bill_pay_status_input.php">Check Status</a> </ul> <li><a href="order_check.php">Order Check</a> <li><a href="logout.php">Logout</a> </ul>
[If BESIM_COUNT > 1] (NOTE: BESIM_COUNT defined from the init page below) Seed random number generator (if necessary) Select a BESIM_HOST and BESIM_PORT to use below (random or round-robin) [End If] Open (or reuse a previously opened) socket to BeSim [If HTTP request to "http://' + BESIM_HOST + ':' + BESIM_PORT + BESIM_URI + "?1&[REQUEST]" unsuccessful] Report Error Message = 'Failed to open BeSim stream', ErrorLevel = 'error' Return empty array [End If] Skip past '<pre>' tag in BESIM response Set Errno = [First line in BESIM response after '<pre>' line] [If Errno not 0] Report Error Message = 'BeSim returned with an error number: ' + Errno, Errorlevel = 'error' Return empty array [End If] [Foreach line in BESIM response until line == '</pre>'] BESIM_RESULTS_ARRAY += line; [End Foreach] Return BESIM_RESULTS_ARRAY
1.2.2 Pseudocode for the init page
GET /bank/init.php?BESIM_HOST=besimhost1+besimhost2&BESIM_PORT=81+82\ &BESIM_URI=/BeSim/specweb2005_besim&BESIM_PERSISTENT=true\ &PADDING_DIR=/data/SPECweb2005/bank/dynamic_padding/\
&SMARTY_DIR=/data/SPECweb2005/assl/Smarty2.6.2/libs/\ &SMARTY_SUPPORT_DIR=/data/SPECweb2005/support/\
&SEND_CONTENT_LENGTH=true
[Foreach name, value pair in QUERYSTRING] Set name = value (NOTE: these must persist across script executions) [End Foreach] Set BESIM_COUNT = [# BESIM_HOST/BESIM_PORT pairs] Set SERVER_TIME = [# milliseconds since the Unix Epoch] Return Page with HTML = <html> <head> <title>SPECweb2005 Ecommerce Workload Init</title> </head> <body> <P>SERVER_SOFTWARE = [Substitute web server variable: "SERVER_SOFTWARE"]</P> <P>REMOTE_ADDR = [Substitute web server variable: "REMOTE_ADDR"]</P> <P>SCRIPT_NAME = [Substitute web server variable: "SCRIPT_NAME"]</P> <P>QUERY_STRING = [Substitute web server variable: "QUERY_STRING"]</P> <P>SERVER_TIME = [SERVER_TIME]</P> </body> </html>
Sample requests: GET /bank/login.php HTTP/1.1 or POST /bank/login.php HTTP/1.1 [rest of HTTP headers] Content-Type: application/x-www-form-urlencoded Content-Length: 19 userid=6&password=6
Set MESSAGE = '' [If {POST_DATA['userid']} and {POST_DATA['password']} are not set] [No-op] [Else If {POST_DATA['userid']} or {POST_DATA['password']} are empty] Set MESSAGE = 'No empty user id or password allowed!' [Else] Set REAL_PASSWORD, ERROR_NUM = [BESIM query with REQUEST = '1&' + {POST_DATA['userid']}] [If ERROR_NUM not 0] REAL_PASSWORD = '' [End If] Set FORM_PASSWORD = [MD5 hash of {POST_DATA['password']}] [If REAL_PASSWORD equivalent to FORM_PASSWORD] Set ACCOUNT_BALANCE_ARRAY, ERROR_NUM = [BESIM query with REQUEST = '2&' + {POST_DATA['userid']}] Return Page with HTML = <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Welcome</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{POST_DATA['userid']}</td></tr> </table> <table summary="SPECweb2005_Acct_Balance" cellpadding=3 border=1> <tr> <th>Account</th> <th>Type</th> <th>Balance</th> </tr> [Foreach account in ACCOUNT_BALANCE_ARRAY] <tr><td>{account[accountno]}</td> <td>[If {account[type]} == "1"] Checking [Else If {account[type]} == "2"] Saving [Else] Other [End If]</td> <td>{account[balance]}</td> </tr> [End Foreach] </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Welcome User</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> [Include Menu Template] <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/welcome]</pre> </body> </html> Set {SESSION_ARRAY['userid']} = {POST_DATA['userid']} [EXIT] [Else] Set MESSAGE = 'Incorrect user id or password!' [End If] [End If] Return Login Page Template
Sample request: GET /bank/account_summary.php HTTP/1.1
[If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] Set ACCOUNT_SUMMARY_ARRAY, ERROR_NUM = [BESIM query with REQUEST = '3&' + {POST_DATA['userid']}] [If ERROR_NUM == 0] Return Page with HTML = <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Account Summary</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{SESSION_ARRAY['userid']}</td></tr> </table> <table summary="SPECweb2005_Acct_Summary" cellpadding=3 border=1> <tr> <th>Account</th> <th>Type</th> <th>Current Balance</th> <th>Total Deposits</th> <th>Average Deposit</th> <th>Total Withdraws</th> <th>Average Withdraws</th> </tr> [Foreach account in ACCOUNT_SUMMARY_ARRAY] <tr> <td>{account[Acct_#]}</td> <td>[If {account[Type]} == "1"] Checking [Else If {account[Type]} == "2"] Saving [Else] Other [End If]</td> <td>{account[Balance]}</td> <td>{account[TotalDeposit]}</td> <td>{account[AvgDeposit]}</td> <td>{account[TotalWithdrawal]}</td> <td>{account[AvgWithdrawal]}</td> </tr> [End Foreach] </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Account Summary</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> [Include Menu Template] <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/account_summary]</pre> </body> </html> [Else] Return Message Page Template with MESSAGE = 'Error code: [ERROR_NUM]' [End If]
Sample requests: GET /bank/check_detail_input.php HTTP/1.1
[If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Check Detail</title> </head> <body bgcolor="white"> <table width="100%"> <tr valign="middle"> <td width="200" bgcolor="#f0f0f0"> Welcome {SESSION_ARRAY['userid']}! [Include Menu Template] <td> <center> <form method="get" action="[check_detail_html filename]"> <table cellpadding=3> <tr> <td>Check Number:</td> <td><input type="text" name="check_no"></td> </table> <input type="submit" value="Submit"> </form> </center> </table> </body> </html>
Sample requests: GET /bank/check_detail_html.php?check_no=6 HTTP/1.1
[If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] [If QUERYSTRING['check_no'] not set] Return Message Page Template with MESSAGE = 'Empty check number' [EXIT] [End If] Set CHECK_IMAGE_ARRAY, ERROR_NUM = [BESIM query with REQUEST = '4&' + {SESSION_ARRAY['userid']} + QUERYSTRING['check_no']] [If ERROR_NUM == 0] Return Page with HTML = <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Check Detail Output</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{SESSION_ARRAY['userid']}</td></tr> </table> <table summary="SPECweb2005_Check_Details" align="center" cellpadding=3 border=1> <tr> <th>Account Number:</th> <td>CHECK_IMAGE_ARRAY[Acct]</td> </tr> <tr> <th>Check Number:</th> <td>{QUERYSTRING['check_no']}</td> </tr> <tr> <th>Front Image:</th> <td><img alt="front image" src="[check_detail_image filename]?side=front&check_no={QUERYSTRING['check_no']}"></td> </tr> <tr> <th>Back Image:</th> <td><img alt="back image" src="[check_detail_image filename]?side=back&check_no={QUERYSTRING['check_no']}"></td> </tr> </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Check Details Output</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> [Include Menu Template] <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/check_detail_html]</pre> </body> </html>
[Else] Return Message Page Template with MESSAGE = 'Error Code: [ERROR_NUM]' [End If]
Sample requests: GET /bank/check_detail_image.php?side=front&check_no=6 HTTP/1.1 GET /bank/check_detail_image.php?side=back&check_no=6 HTTP/1.1
[If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] [If QUERYSTRING['side'] not "front" and QUERYSTRING['side'] not "back"] Return Message Page Template with MESSAGE = 'Wrong side' [EXIT] [End If] [If QUERYSTRING['check_no'] not set] Return Message Page Template with MESSAGE = 'No empty check number allowed' [EXIT] [End If] Set CHECK_IMAGE_ARRAY, ERROR_NUM = [BESIM query with REQUEST = '4&' + {SESSION_ARRAY['userid']} + QUERYSTRING['check_no']] [If ERROR_NUM == 0] [If QUERYSTRING['side'] == "front"] [Send contents of CHECK_IMAGE_ARRAY[FrontURL]] [Else] [Send contents of CHECK_IMAGE_ARRAY[BackURL]] [End If] [Else] Return Message Page Template with MESSAGE = 'Error Code: [ERROR_NUM]' [End If]
Sample requests: GET /bank/bill_pay.php?userid=39 HTTP/1.1
[If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] Set PAYEE_ARRAY, ERROR_NUM = [BESIM query with REQUEST = '5&' + {SESSION_ARRAY['userid']} [Foreach payee in PAYEE_ARRAY] payee[Date] = [ISO-8601 formatted payee[Date]] (i.e. '20050204' => '2005/02/04') [End Foreach] Return Page with HTML = <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Bill Pay</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{SESSION_ARRAY['userid']}</td></tr> </table> <table summary="SPECweb2005_Last_Payment" cellpadding=3 border=1> <tr> <th>Payee</th> <th>Date</th> <th>Amount</th> </tr> [Foreach payee in PAYEE_ARRAY] <tr> <td>{payee[PayeeId]}</td> <td>{payee[Date]}</td> <td>{payee[Payment]}</td> </tr> [End Foreach] </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Bill Pay</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> [Include Menu Template] <form method="post" action="[quick_pay page filename]"> <b>Schedule for next payment</b> <table cellpadding=3 border=1> <tr> <th>Payee</th> <th>Date</th> <th>Amount</th> </tr> <tr> <td><input type="text" name="payee[0]"></td> <td><input type="text" name="date[0]"></td> <td><input type="text" name="amount[0]"></td> </tr> <tr> <td><input type="text" name="payee[1]"></td> <td><input type="text" name="date[1]"></td> <td><input type="text" name="amount[1]"></td> </tr> <tr> <td><input type="text" name="payee[2]"></td> <td><input type="text" name="date[2]"></td> <td><input type="text" name="amount[2]"></td> </tr> <tr> <td><input type="text" name="payee[3]"></td> <td><input type="text" name="date[3]"></td> <td><input type="text" name="amount[3]"></td> </tr> <tr> <td><input type="text" name="payee[4]"></td> <td><input type="text" name="date[4]"></td> <td><input type="text" name="amount[4]"></td> </tr> </table> <b>Note:</b> Date in yyyy-mm-dd format (ISO-8601).<br> <input type="submit" value="Submit"> </form> <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/bill_pay]</pre> </body> </html>
Sample requests: POST /bank/quick_pay.php HTTP/1.1 [..] Content-Type: application/x-www-form-urlencoded Content-Length: 46 payee[0]=1&date[0]=2005-02-11&amount[0]=100.00
[If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] [If {POST_DATA['payee']} is empty OR {POST_DATA['payee']} not an array] Return Message Page Template with MESSAGE = 'No payee selected' [EXIT] [End If] [If {POST_DATA['date']} is empty OR {POST_DATA['date']} not an array] Return Message Page Template with MESSAGE = 'No date selected' [EXIT] [End If] [If {POST_DATA['amount']} is empty OR {POST_DATA['amount']} not an array] Return Message Page Template with MESSAGE = 'No amount selected' [EXIT] [End If] [Foreach {POST_DATA['payee']} as index, ID] [If ID is empty] Skip to next payee [End If] [If {POST_DATA['date'][index]} is empty] MESSAGE += "Failed: payee=[ID] Reason: No date" Skip to next payee [End If] [If {POST_DATA['date'][index]} is not in yyyy-mm-dd format] MESSAGE += "Failed: payee=[ID] Reason: Invalid date format" Skip to next payee [End If] [If {POST_DATA['date'][index]} is earlier than today's date] MESSAGE += "Failed: payee=[ID] Reason: Tried to schedule payment earlier than today" Skip to next payee [End If] [If {POST_DATA['amount'][index]} is empty] MESSAGE += "Failed: payee=[ID] Reason: No amount" Skip to next payee [End If] [If {POST_DATA['amount'][index]} <= 0.0] MESSAGE += "Failed: payee=[ID] Reason: Illegal amount" Skip to next payee [End If] Set QUICKPAY_CONFIRMATION, ERROR_NUM = [BESIM query with REQUEST = '7&' + {SESSION_ARRAY['userid']} + '&' + ID + '&' + \ {POST_DATA['date'][index]} + '&' + {POST_DATA['amount'][index]}] [If ERROR_NUM > 0] MESSAGE += "Failed: payee=[ID] Error code: [ERROR_NUM]" Skip to next payee [End If] MESSAGE += "Scheduled: payee=[ID], date={POST_DATA['date'][index]}, amount={POST_DATA['amount'][index]}" [End Foreach] Return Page with HTML = <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Quick Pay Result</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{SESSION_ARRAY['userid']}</td></tr> </table> <table summary="SPECweb2005_Quick_Pay_Result"> <tr><th>Payment Schedule Result</th></tr> [Foreach line in MESSAGE] <tr><td>[line]</td></tr> [End Foreach] <tr><td>Confirmation Code</td></tr> <tr><td>{QUICKPAY_CONFIRMATION['ConfirmationNum']}</td></tr> </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Quick Pay Result</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> [Include Menu Template] <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/quick_pay]</pre> </body> </html>
Sample requests: GET /bank/add_payee.php?userid=0000000079 HTTP/1.1 [If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] Return Page with HTML = <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Add Payee</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{SESSION_ARRAY['userid']}</td></tr> </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Add Payee</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> [Include Menu Template] <b>Please fill out ALL fields:</b> <form method="post" action="[post_payee page]"> <table cellpadding=3 border=1> <tr> <td><b>Nickname<br> (serve as id, no duplication):</b></td> <td><input type="text" name="payee_id"></td> <tr> <td><b>Name:</b></td> <td><input type="text" name="name"></td> <tr> <td><b>Street Address:</b></td> <td><textarea name="street" rows=3 cols=20></textarea></td> <tr> <td><b>City:</b></td> <td><input type="text" name="city"></td> <tr> <td><b>State:</b></td> <td><input type="text" name="state" size=2 maxlength=2></td> <tr> <td><b>Zip:</b></td> <td><input type="text" name="zip" size=5 maxlength=5></td> <tr> <td><b>Phone:</b></td> <td><input type="text" name="phone"></td> </table> <input type="submit" value="Submit"> </form> <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/add_payee]</pre> </body> </html>
Sample request: POST /bank/post_payee.php HTTP/1.1 [..] Content-type: application/x-www-form-urlencoded Content-Length: 91 payee_id=1&name=IRS&street=7065+Aspen Rd&city=Wayland&state=DE&zip=62299&phone=123-555-1212
[If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] [If any of these POST_DATA fields are empty: payee_id, name, street, city, zip, state, phone] Return Message Page Template with MESSAGE = 'No fields should be left blank' [EXIT] [End If] Set ADDPAYEE_CONFIRMATION, ERROR_NUM = [BESIM query with REQUEST = '6&' + {SESSION_ARRAY['userid']} + '&' + {POST_DATA['payee_id']} + '&' + {POST_DATA['name']} + '&' + {POST_DATA['street']} + '&' + {POST_DATA['city']} + '&' + {POST_DATA['state']} + '&' + {POST_DATA['zip']} + '&' + {POST_DATA['phone']} [If ERROR_NUM not 0] Return Message Page Template with MESSAGE = 'Error code: [ERROR_NUM]' [EXIT] [End If] Set MESSAGE = "Payee " + POST_DATA['payee_id'] + " succesfully added" Return Page with HTML = <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Post Payee</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{SESSION_ARRAY['userid']}</td></tr> </table> <table summary="SPECweb2005_Payee_Added"> <tr><th>Message</th></tr> <tr><td>[MESSAGE]</td></tr> <tr><td>Confirmation Code</td></tr> <tr><td>[ADDPAYEE_CONFIRMATION]</td></tr> </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Post Payee</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> [Include Menu Template] <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/post_payee]</pre> </body> </html>
Sample request: GET /bank/bill_pay_status_input.php HTTP/1.1 [If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] Return Page with HTML = <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Bill Pay Status</title> </head> <body bgcolor="white"> <table width="100%"> <tr valign="middle"> <td width="200" bgcolor="#f0f0f0"> Welcome {SESSION_ARRAY['userid']}! [Include Menu Template] <td> <center> <form method="get" action="[bill_pay_status_output page]"> <table cellpadding=3 border=0> <tr> <td align="right">Start Date (yyyy-mm-dd):</td> <td><input type="text" name="start"></td> <tr> <td align="right">End Date (yyyy-mm-dd):</td> <td><input type="text" name="end"></td> </table> <input type="submit" value="Submit"> </form> </center> </table> </body> </html>
Sample request: GET /bank/bill_pay_status_output.php?userid=39&start=2005-01-9&end=2005-02-09 HTTP/1.1 [If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] [If QUERYSTRING['start'] not set or QUERYSTRING['start'] not in yyyy-mm-dddd format] Return Message Page Template with MESSAGE = 'illegal start date' [EXIT] [End If] Set START_DATE = [Format QUERYSTRING['start'] into yyyymmdddd format (no dashes)] [If QUERYSTRING['end'] not set or QUERYSTRING['end'] not in yyyy-mm-dddd format] Return Message Page Template with MESSAGE = 'illegal end date' [EXIT] [End If] Set END_DATE = [Format QUERYSTRING['end'] into yyyymmdddd format (no dashes)] Set BILL_PAY_STATUS_ARRAY, ERROR_NUM = [BESIM query with REQUEST = '8&' + {SESSION_ARRAY['userid']}] + '&' \ + START_DATE + '&' + END_DATE [If ERROR_NUM not 0] Return Message Page Template with MESSAGE = 'Error Code: [ERROR_NUM]' [EXIT] [End If] Return Page with HTML = <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Bill Pay Status</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{SESSION_ARRAY['userid']}</td></tr> </table> <table summary="SPECweb2005_Bill_Pay_Status_Result" cellpadding=3 border=1 > <tr> <th>Payee</th> <th>Date</th> <th>Amount</th> <th>Status</th> [Foreach bill_pay_line in BILL_PAY_STATUS_ARRAY] <tr> <td>{bill_pay_line['PayeeId']}</td> <td>{bill_pay_line['Date']}</td> <td align="right">{bill_pay_line['Amount']}</td> <td>Pending</td> </tr> [End Foreach] </tr> </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Bill Pay Status</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> [Include Menu Template] <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/bill_pay_status_output]</pre> </body> </html>
Sample request: GET /bank/profile.php?userid=90 HTTP/1.1 [If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] Set PROFILE_ARRAY, ERROR_NUM = [BESIM query with REQUEST = '9&' + {SESSION_ARRAY['userid']}] [If ERROR_NUM not 0] Return Message Page Template with MESSAGE = 'Error Code: [ERROR_NUM]' [EXIT] [End If] Return Page with HTML = <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Profile</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{SESSION_ARRAY['userid']}</td></tr> </table> <table summary="SPECweb2005_Profile" cellpadding=3> <tr> <th>Address</th> <td>{PROFILE_ARRAY['Address']}</td> </tr> <tr> <th>City </th> <td>{PROFILE_ARRAY['City']}</td> </tr> <tr> <th>State </th> <td>{PROFILE_ARRAY['State']}</td> </tr> <tr> <th>Zip </th> <td>{PROFILE_ARRAY['Zip']}</td> </tr> <tr> <th>Phone </th> <td>{PROFILE_ARRAY['Phone']}</td> </tr> <tr> <th>Email </th> <td>{PROFILE_ARRAY['Email']}</td> </tr> </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Profile</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> [Include Menu Template] <form method="post" action="[change_profile page]"> <table cellpadding=3> <tr> <td>Address</td> <td><textarea name="address" rows=3 cols=40></textarea></td> <tr> <td>City </td> <td><input type="text" name="city"> </td> <tr> <td>State </td> <td><input type="text" name="state"> </td> <tr> <td>Zip </td> <td><input type="text" name="zip"> </td> <tr> <td>Phone </td> <td><input type="text" name="phone"> </td> <tr> <td>Email </td> <td><input type="text" name="email"> </td> </table> <input type="submit" value="Submit"> </form> <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/profile]</pre> </body> </html>
Sample request: POST /bank/change_profile.php HTTP/1.1 [..] Content-Length: 107 address=1389+Olive Cirle&city=Wayland&state=OH&zip=59187&phone=phone=123-555-1212&email=customer663@isp.net [If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] [If any of these POST_DATA fields are empty: address, city, state, zip, phone, email] Set MESSAGE = 'Profile update failed: you submitted empty fields' [Else] Set CHANGE_PROFILE_CONFIRMATION, ERROR_NUM = [BESIM query with REQUEST = '10&' + {SESSION_ARRAY['userid']} + '&' + \ {POST_DATA['address']} + '&' + {POST_DATA['city']} + '&' + \ {POST_DATA['state']} + '&' + {POST_DATA['zip']} + '&' + \ {POST_DATA['phone']} + '&' + {POST_DATA['email']}] [End If] [If ERROR_NUM not 0] Set MESSAGE = 'Update profile failed' [Else] Set MESSAGE = 'Profile Changed.' [End If] Return Page with HTML = <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Profile Changed</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{SESSION_ARRAY['userid']}</td></tr> </table> <table summary="SPECweb2005_Profile_Changed"> <tr><th>Message</th></tr> <tr><td>[MESSAGE]</td></tr> <tr><td>Confirmation Code</td></tr> <tr><td>[CHANGE_PROFILE_CONFIRMATION]</td></tr> </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Profile Changed</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> [Include Menu Template] <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/change_profile]</pre> </body> </html>
Sample request: GET /bank/order_check.php?userid=76 HTTP/1.1 [If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] Set ACCOUNT_BALANCE_ARRAY, ERROR_NUM = [BESIM query with REQUEST = '2&' + {SESSION_ARRAY['userid']}] Return Page with HTML = <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Order Checks</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{SESSION_ARRAY['userid']}</td></tr> </table> <table summary="SPECweb2005_Acct_Balance" cellpadding=3 border=1> <tr> <th>Account</th> <th>Type</th> <th>Balance</th> </tr> [Foreach account in ACCOUNT_BALANCE_ARRAY] <tr><td>{account[accountno]}</td> <td>[If {account[type]} == "1"] Checking [Else If {account[type]} == "2"] Saving [Else] Other [End If]</td> <td>{account[balance]}</td> </tr> [End Foreach] </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Order Checks</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> [Include Menu Template] <form method="post" action="[place_check_order page]"> <b>Please choose the check design below:</b><br> <table cellpadding="5" border=1> <tr> <td><input type="radio" name="check_design" value="1"> <img src="images/check_01.jpg" align="middle" alt="check design #1"></td> <td><input type="radio" name="check_design" value="2"> <img src="images/check_02.jpg" align="middle" alt="check design #2"></td> <tr> <td><input type="radio" name="check_design" value="3"> <img src="images/check_03.jpg" align="middle" alt="check design #1"></td> <td><input type="radio" name="check_design" value="4"> <img src="images/check_04.jpg" align="middle" alt="check design #4"></td> <tr> <td><input type="radio" name="check_design" value="5"> <img src="images/check_05.jpg" align="middle" alt="check design #5"></td> <td><input type="radio" name="check_design" value="6"> <img src="images/check_06.jpg" align="middle" alt="check design #6"></td> <tr> <td><input type="radio" name="check_design" value="7"> <img src="images/check_07.jpg" align="middle" alt="check design #7"></td> <td><input type="radio" name="check_design" value="8"> <img src="images/check_08.jpg" align="middle" alt="check design #8"></td> <tr> <td><input type="radio" name="check_design" value="9"> <img src="images/check_09.jpg" align="middle" alt="check design #9"></td> <td><input type="radio" name="check_design" value="10"> <img src="images/check_10.jpg" align="middle" alt="check design #10"></td> </table> <b>Number of checks: </b><input type="text" name="number"><br> <b>Charge account: </b><input type="text" name="account_no"><br> <input type="submit" value="Submit"> </form> <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/order_check]</pre> </body> </html>
Sample request: POST /bank/place_check_order.php HTTP/1.1 [..] Content-Length: 57 userid=76&check_design=5&number=300&account_no=0477284100
[If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] [If {POST_DATA['number']} is empty] Return Message Page Template with MESSAGE = 'Empty number' [EXIT] [End If] [If {POST_DATA['check_design']} is empty] Return Message Page Template with MESSAGE = 'You did not select check design' [EXIT] [End If] [If {POST_DATA['account_no']} is empty] Return Message Page Template with MESSAGE = 'You did not specify account' [EXIT] [End If] [If {POST_DATA['number']} <= 0] Return Message Page Template with MESSAGE = 'Invalid number' [EXIT] [End If] [If {POST_DATA['check_design']} <= 0 or {POST_DATA['check_design']} > 10] Return Message Page Template with MESSAGE = 'Invalid design' [EXIT] [End If]
Set TOTAL_PRICE = {POST_DATA['number']} * 1.0 (to convert to dollar value) Set PLACE_CHECK_ORDER_CONFIRMATION, ERROR_NUM = [BESIM query with REQUEST = '11&' + {SESSION_ARRAY['userid']} + '&' + \ {POST_DATA['account_no']} + '&' + TOTAL_PRICE] [If ERROR_NUM not 0] Return Message Page Template with MESSAGE = 'Error code: [ERROR_NUM]' [EXIT] [End If] Return Page with HTML = <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Place Check Order Result</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{SESSION_ARRAY['userid']}</td></tr> </table> <table summary="SPECweb2005_Place_Check_Order"> <tr><th>Message</th></tr> <tr><td>Check order placed successfully</td></tr> <tr><td>Confirmation Code</td></tr> <tr><td>[PLACE_CHECK_ORDER_CONFIRMATION]</td></tr> </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Place Check Order Result</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> [Include Menu Template] <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/place_check_order]</pre> </body> </html>
Sample request: GET /bank/transfer.php HTTP/1.1
[If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] Set ACCOUNT_BALANCE_ARRAY, ERROR_NUM = [BESIM query with REQUEST = '2&' + {SESSION_ARRAY['userid']}] Return Page with HTML =
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Transfer Money</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{SESSION_ARRAY['userid']}</td></tr> </table> <table summary="SPECweb2005_Acct_Balance" cellpadding=3 border=1> <tr> <th>Account</th> <th>Type</th> <th>Balance</th> </tr> [Foreach account in ACCOUNT_BALANCE_ARRAY] <tr><td>{account[accountno]}</td> <td>[If {account[type]} == "1"] Checking [Else If {account[type]} == "2"] Saving [Else] Other [End If]</td> <td>{account[balance]}</td> </tr> [End Foreach] </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Transfer Money</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> [Include Menu Template] <form method="post" action="[post_transfer page]"> <table cellpadding=3> <tr> <th>From account</th> <td><input type="text" name="from"></td> <tr> <th>To account</th> <td><input type="text" name="to"></td> <tr> <th>Amount</th> <td><input type="text" name="amount"></td> </table> <input type="submit" value="Submit"> </form> <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/transfer]</pre> </body> </html>
Sample request: POST /bank/post_transfer.php HTTP/1.1 [..] Content-type: application/x-www-form-urlencoded Content-Length: 42 from=0374113716&to=0489888599&amount=50.00
[If {SESSION_ARRAY['userid']} not set] Set MESSAGE = 'Please login' Return Login Page Template [End If] [If {POST_DATA['amount']} is empty or {POST_DATA['amount']} is not numeric] Return Message Page Template with MESSAGE = 'Invalid Amount' [EXIT] [End If] AMOUNT = [{POST_DATA['amount']} converted to floating point value] [If AMOUNT <= 0.0] Return Message Page Template with MESSAGE = 'Amount must be greater than 0' [EXIT] [End If] [If {POST_DATA['to']} == {POST_DATA['from']}] Return Message Page Template with MESSAGE = 'Transfer from and to the same account not allowed' [EXIT] [End If] Set DATE = [Local date formatted in "YYYYmmdd", i.e. 20050228] Set POST_TRANSFER_ARRAY, ERROR_NUM = [BESIM query with REQUEST = '12&' + {SESSION_ARRAY['userid']} + '&' + \ {POST_DATA['from']} + '&' + AMOUNT + '&' {POST_DATA['to']} + '&' + DATE] [If ERROR_NUM not 0] Return Message Page Template with MESSAGE = 'Error Code: [ERROR_NUM]' [EXIT] [End If] Return Page with HTML =
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Transfer Result</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{SESSION_ARRAY['userid']}</td></tr> </table> <table summary="SPECweb2005_Transfer_Summary" cellpadding=3 border=1> <tr> <th>From</th> <th>To</th> <th>Amount</th> </tr> <tr> <td>{POST_DATA['from']}</td> <td>{POST_DATA['to']}</td> <td>[AMOUNT]</td> </tr> </table> <table summary="SPECweb2005_Acct_Balance" cellpadding=3 border=1> <tr> <th>Account</th> <th>New Balance</th> </tr> [Foreach account in POST_TRANSFER_ARRAY] <tr> <td>{account[Acct_#]}</td> <td>{account[Balance]}</td> </tr> [End Foreach] </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Transfer Result</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> [Include Menu Template] <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/post_transfer]</pre> </body> </html>
Sample request: GET /bank/logout.php?userid=6 HTTP/1.1
Return Page with HTML = <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SPECweb2005: Logout</title> </head> <body bgcolor="white"> <!-- SPECweb2005 Dynamic Data Area --> <table summary="SPECweb2005_User_Id"> <tr><th>User ID</th></tr> <tr><td>{SESSION_ARRAY['userid']}</td></tr> </table> <!-- SPECweb2005 Displayable Page Title --> <table> <tr> <td><b><font color="#9400d3">SPECweb2005: Logout</font></b></td> </tr> </table> <!-- SPECweb2005 User Action Area --> <center>You may <a href="[login page]">login</a> again. </center> <!-- SPECweb2005 Image References --> <!-- SPECweb2005 Embedded Text --> <pre> [Include [PADDING_DIRECTORY]/logout]</pre> </body> </html> Destroy all session state information
Copyright © 2005-2006 Standard Performance Evaluation Corporation. All rights reserved.