Commit 241bedb6 authored by Gabor Hudiczius's avatar Gabor Hudiczius
Browse files

rtwi-0.1.0-070830

parent 80375943
requirements:
-rtorrent 0.7.7
-rtorrent 0.7.8, compiled with "--with-xmlrpc-c"
-xmlrpc >= 1.07
-some webserver
-php5, with the following extensions:
-xsl
......@@ -7,23 +8,58 @@ requirements:
installation:
to install xmlrpc, get the source from here: http://sourceforge.net/project/showfiles.php?group_id=16847
in my case, i could only compile the 1.11.00 version (due to a known bug, you may try to configure with --disable-cplusplus)
of course, you can try any version, over 1.07
follow the next steps, as root:
cd /usr/src
wget http://dfn.dl.sourceforge.net/sourceforge/xmlrpc-c/xmlrpc-c-1.11.00.tgz
tar xvf xmlrpc-c-1.11.00.tgz
cd xmlrpc-c-1.11.00
./configure --disable-cplusplus
make
make install
to get the svn for libtorrent, and rtorrent, you have to previously installed svn (apt-get install svn, ford debian, ubuntu)
to install libtorrent, follow the next steps, as a root:
mkdir /usr/src/libtorrent
svn co svn://rakshasa.no/libtorrent/trunk/libtorrent /usr/src/libtorrent
cd /usr/src/libtorrent
./autogen.sh
./configure
make
make install
to install rtorrent, follow the next steps, as a root:
mkdir /usr/src/rtorrent
svn co svn://rakshasa.no/libtorrent/trunk/rtorrent /usr/src/rtorrent
cd /usr/src/rtorrent
./autogen.sh
./configure --with-xmlrpc-c
make
make install
now, after everything's done
-extract the rtwi-xxxxxx.tar.gz to some place where your webserver can see it
-open the includes/config.php.inc, and edit the next lines:
-$abs_path
-$domain
-$subdomain
-$site_path
-$include_path (if you move the includes directory)
-$abs_path (the absolute path of your webroot, i.e.: "/var/www")
-$domain (your domain, i.e.: "example.com")
-$site_path (the relative path of the rtwi-xxxx directory, or whatever you renamed it, within your webroot, i.e.: "/rtwi/", if it's absolute path is /var/www/rtwi/)
-$include_path (if you move the includes directory, or eave it untouched, i.e.: "/includes")
-if your php interpreter does not handle .html files (only .php) set the $default_ext variable to "php", and rename the index.html to index.php
-you can find an example .rtorrent.rc file here: http://libtorrent.rakshasa.no/browser/trunk/rtorrent/doc/rtorrent.rc?rev=latest
-if you don't have a .rtorrent.rc file, create one in each user's home directory
-open .rtorrent.rc, and edit them (for each user)
-add this line to your .rtorrent.rc "scgi_port = 127.0.0.1:12345" where 12345 can be replaced by your choice, and restart rtorrent
-if you have more than one user, set a different port for each user's .rtorrent.rc file
-if you have more than one user, set a different port for each user's .rtorrent.rc file (be aware, to set different session directories for the users)
-adding users:
-find row 44, and change it:
-replace "username" with the actual linux username
-replace "sha1has of the password" with thre hash of the choosen password for the webui (you can generate the sha1 hash here => http://www.johnmaguire.us/tools/hashcalc/index.php)
-replace "36100", with the port, you've set in the .rtorrent.rc file
-replace "userX" with the actual linux username (keep the quotes)
-replace "1234567890abcdef1234567890abcdef12345678" with the sha1 hash of the choosen password for the webui (you can generate the sha1 hash here => http://www.johnmaguire.us/tools/hashcalc/index.php)
-replace "12345", with the port, you've set in the user's .rtorrent.rc file
-keep the quotes in the last three steps
-if you have more than one user, you have to do these steps, for each one of them, sop you'll get something like this:
$users = array(
"user1" => array( "pass" => "1234567890abcdef1234567890abcdef12345678", "port" => "12345" ),
......@@ -35,4 +71,4 @@ installation:
bug reports, whishlist, suggestions, anything: ghudiczius@gmail.com
p.s.: sorry, for this loosy manual, and my even worse english :)
\ No newline at end of file
p.s.: sorry, for this loosy manual, and my even worse english :)
......@@ -8,15 +8,14 @@
$default_ext = "html";
// paths
$abs_path = "/var/www"; // webroot (with heading slash)
$domain = "cyla.homelinux.net"; // site domain (or ip)
$subdomain = "rtwi"; // subdomain (if exists)
$site_path = "/"; // site path (with heading and trailing slash)
$include_path = "includes"; // include path (include files can be found here)
$abs_path = "/var/www"; // webroot (with heading slash) -- change this, if neccessary
$domain = "rtwi.cyla.homelinux.net"; // site domain (or ip) -- change this, if neccessary
$site_path = "/"; // site path (with heading and trailing slash) -- change this, if neccessary
$include_path = "includes"; // include path (include files can be found here)
// URLs
$url = array(
"base" => "http://{$subdomain}.{$domain}{$site_path}", // base url (if you do not have a subdomain, you might want to edit this line)
"base" => "http://{$domain}{$site_path}", // base url
"index" => "index.{$default_ext}", // index page
"input" => "input.php", // input file (for forms)
);
......@@ -39,9 +38,10 @@ $xmlrpc_array = array(
// home directories (with heading and trailing slash)
$home_path = "/home/";
// array of users, each, with the sha1 hash of the password, and the scgi port of the rtorrent
// array of users, each, with the sha1 hash of the password, and the scgi port of the rtorrent -- you can add users here
$users = array(
"username" => array( "pass" => "sha1has of the password", "port" => "36100" ),
// "username" => array( "pass" => "7e240de74fb1ed08fa08d38063f6a6a91462a815", "port" => "36100" ),
"cyla" => array( "pass" => "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8", "port" => "36100" ),
);
/*******************************
......
......@@ -5,6 +5,8 @@ $message = array(
"succlogin" => "You have been logged in successfully",
"succlogout" => "You have been logged out successfully",
"noconn" => "No connection",
"nohashfound" => "No torrents found for this hash",
"noidfound" => "No id was given",
......@@ -61,6 +63,10 @@ $message = array(
"no" => "No",
"yes" => "Yes",
"disabled" => "Disabled",
"enabled" => "Enabled",
"notset" => "Not set",
"d_connection_current_leech" => "Leeching",
"d_connection_current_seed" => "Seeding",
"d_ignore_commands_0" => "Not ignoring commands",
......@@ -90,8 +96,6 @@ $message = array(
"f_priority_0" => "Off",
"f_priority_1" => "Normal",
"f_priority_2" => "High",
"safe_sync_0" => "No",
"safe_sync_1" => "Yes",
"t_enabled_0" => "Disabled",
"t_enabled_1" => "Enabled",
"t_is_open_0" => "Closed",
......@@ -99,6 +103,10 @@ $message = array(
"t_type_1" => "TCP",
"t_type_2" => "UDP",
"bind_0000" => "Not set",
"ip_0000" => "All IP addresses",
"proxy_address_000" => "Not set",
"pics" => "rTWi - The rTorrent Web interface",
);
......@@ -145,12 +153,6 @@ $label = array(
"refresh" => "Refresh",
"selectrefreshrate" => "Select refresh rate",
);
?>
\ No newline at end of file
This diff is collapsed.
......@@ -23,7 +23,7 @@ function xmlrpc_call( &$xmlrpc_array, &$request ) {
}
error_reporting( E_ALL );
//error_reporting( E_ALL && ~E_NOTICE );
//error_reporting( E_ALL ^ E_NOTICE );
session_start();
if ( !isset( $_SESSION["rtwi_rights"] ) ) {
......@@ -596,6 +596,9 @@ switch ( $_REQUEST["mod"] ) {
$request = xmlrpc_encode_request( "f.set_priority", array( $hash, $id, $filepriority ) );
$response = xmlrpc_call( $xmlrpc_array, $request );
$request = xmlrpc_encode_request( "d.update_priorities ", array( $hash ) );
$response = xmlrpc_call( $xmlrpc_array, $request );
sleep( 1 );
$_SESSION["rtwi_err"] = "succfileprioritychange";
......
......@@ -343,7 +343,7 @@ img.icon {
.fchunks {
float: right;
width: 5.5em;
width: 6.5em;
margin: 0 0 0 .5em;
text-align: right;
background: #eeeeee;
......
......@@ -45,7 +45,7 @@
<xsl:text>Info hash:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="sha1_hash" />
<xsl:value-of select="d_hash" />
</div>
<div class="clr"></div>
</li>
......@@ -99,7 +99,9 @@
<xsl:text> / </xsl:text>
<xsl:value-of select="d_chunks_hashed" />
<xsl:text> * </xsl:text>
<xsl:value-of select="d_chunk_size" />
<xsl:value-of select="d_chunk_size/@value" />
<xsl:text> </xsl:text>
<xsl:value-of select="d_chunk_size/@suffix" />
</div>
<div class="clr"></div>
</li>
......@@ -121,17 +123,6 @@
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>Max memory usage:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="/root/torrents/max_memory_usage/@value" />
<xsl:text> </xsl:text>
<xsl:value-of select="/root/torrents/max_memory_usage/@suffix" />
</div>
<div class="clr"></div>
</li>
<li class="line spacer">
<div class="infoleft">
<xsl:text>Free diskspace:</xsl:text>
......@@ -161,7 +152,7 @@
</div>
<div class="clr"></div>
</li>
<li class="line">
<li class="line spacer">
<div class="infoleft">
<xsl:text>Seeders:</xsl:text>
</div>
......@@ -200,7 +191,7 @@
</div>
<div class="clr"></div>
</li>
<li class="line spacer">
<li class="line">
<div class="infoleft">
<xsl:text>Skipped:</xsl:text>
</div>
......@@ -215,37 +206,6 @@
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>Safe sync:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="/root/torrents/safe_sync/@value" />
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>Send buffer:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="/root/torrents/receive_buffer_size/@value" />
<xsl:text> </xsl:text>
<xsl:value-of select="/root/torrents/receive_buffer_size/@suffix" />
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>Receive buffer:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="/root/torrents/receive_buffer_size/@value" />
<xsl:text> </xsl:text>
<xsl:value-of select="/root/torrents/receive_buffer_size/@suffix" />
</div>
<div class="clr"></div>
</li>
</xsl:template>
<xsl:template match="torrent_files_root">
......@@ -280,7 +240,7 @@
</xsl:template>
<xsl:template match="file">
<li>
<li onmouseover="this.style.background='#eeeeee';" onmouseout="this.style.background='';">
<div class="fname">
<span title="Last touched: {f_last_touched}">
<xsl:value-of select="@filename" />
......
......@@ -21,16 +21,16 @@
<meta http-equiv="refresh" content="{/root/torrents/@refreshrate}; url={curl}" />
</xsl:when>
</xsl:choose>
<meta name="author" content="{/root/label/author}" />
<meta name="description" content="{/root/label/description}" />
<meta name="keywords" content="{/root/label/keywords}" />
<meta name="author" content="{/root/labels/author}" />
<meta name="description" content="{/root/labels/description}" />
<meta name="keywords" content="{/root/labels/keywords}" />
<meta name="doc-type" content="web page" />
<meta name="rating" content="general" />
<meta name="robots" content="all" />
<link rel="stylesheet" type="text/css" href="themes/default_ajax/inc/style.css" />
<script type="text/javascript" src="themes/default_ajax/inc/afunc.js"></script>
<script type="text/javascript" src="themes/default_ajax/inc/hfunc.js"></script>
<title><xsl:value-of select="/root/label/title" /></title>
<title><xsl:value-of select="/root/labels/title" /></title>
</head>
<body onload="toggle( '{/root/mod}_{/root/page}' );">
<div id="top">
......@@ -63,6 +63,7 @@
</xsl:when>
</xsl:choose>
<li><a href="?mod=addtorrent" title="Add torrent">Add torrent</a></li>
<li><a href="?mod=serverinfo" title="Server info">Server info</a></li>
<li><a href="{/root/iurl}?mod=logout" title="Logout">Logout</a></li>
</ul>
</div>
......@@ -126,7 +127,7 @@
<div class="tufright">
<input type="hidden" name="dlpath" value="{@path}" />
<ul class="tufupload">
<li>
<li onmouseover="this.style.background='#eeeeee';" onmouseout="this.style.background='';">
<div class="tufpath">
<a href="?mod=addtorrent&amp;path={@ppath}">..</a>
</div>
......@@ -160,6 +161,7 @@
<xsl:apply-templates select="torrent_info_root" />
<xsl:apply-templates select="torrent_files_root" />
<xsl:apply-templates select="torrent_trackers_root" />
<xsl:apply-templates select="server_info" />
<li class="tline last">
<div class="tthrottle">
<xsl:text>[Throttle </xsl:text>
......@@ -275,7 +277,7 @@
<img class="icon" src="themes/default_ajax/pics/closed.gif" alt="closed" title="Closed since {d_state_changed/@value}" />
</xsl:otherwise>
</xsl:choose>
<a href="?mod=torrent&amp;hash={sha1_hash}" title="Details" onclick="if ( document.getElementById( 'torrent_{sha1_hash}' ).style.display == '' ) {{ document.getElementById( 'torrent_{sha1_hash}' ).style.display = 'none' }} else {{ document.getElementById( 'torrent_{sha1_hash}' ).style.display = ''}} return false;"><xsl:value-of select="d_name" /></a>
<a href="?mod=torrent&amp;hash={d_hash}" title="Details" onclick="if ( document.getElementById( 'torrent_{d_hash}' ).style.display == '' ) {{ document.getElementById( 'torrent_{d_hash}' ).style.display = 'none' }} else {{ document.getElementById( 'torrent_{d_hash}' ).style.display = ''}} return false;"><xsl:value-of select="d_name" /></a>
</div>
<div class="tops">
<xsl:choose>
......@@ -283,33 +285,33 @@
<xsl:value-of select="d_hashing/@value" />
</xsl:when>
<xsl:otherwise>
<a href="{/root/iurl}?mod=torrentcheckhash&amp;hash={sha1_hash}" title="Check hash">Check hash</a>
<a href="{/root/iurl}?mod=torrentcheckhash&amp;hash={d_hash}" title="Check hash">Check hash</a>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="d_is_active != 0">
<a href="{/root/iurl}?mod=torrentstop&amp;hash={sha1_hash}" title="Stop">Stop</a>
<a href="{/root/iurl}?mod=torrentstop&amp;hash={d_hash}" title="Stop">Stop</a>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="d_hashing != 0">
<a href="{/root/iurl}?mod=torrentstop&amp;hash={sha1_hash}" title="Stop">Stop</a>
<a href="{/root/iurl}?mod=torrentstop&amp;hash={d_hash}" title="Stop">Stop</a>
</xsl:when>
<xsl:otherwise>
<a href="{/root/iurl}?mod=torrentstart&amp;hash={sha1_hash}" title="Start">Start</a>
<a href="{/root/iurl}?mod=torrentstart&amp;hash={d_hash}" title="Start">Start</a>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="d_is_open = 0">
<a href="{/root/iurl}?mod=torrentopen&amp;hash={sha1_hash}" title="Open">Open</a>
<a href="{/root/iurl}?mod=torrentopen&amp;hash={d_hash}" title="Open">Open</a>
</xsl:when>
<xsl:otherwise>
<a href="{/root/iurl}?mod=torrentclose&amp;hash={sha1_hash}" title="Close">Close</a>
<a href="{/root/iurl}?mod=torrentclose&amp;hash={d_hash}" title="Close">Close</a>
</xsl:otherwise>
</xsl:choose>
<a href="{/root/iurl}?mod=torrenterase&amp;hash={sha1_hash}" title="Erase" onclick="var answer = confirm( 'Are you sure?' ); if ( !answer ) return false;">Erase</a>
<a href="{/root/iurl}?mod=torrenterase&amp;hash={d_hash}" title="Erase" onclick="var answer = confirm( 'Are you sure?' ); if ( !answer ) return false;">Erase</a>
</div>
<div class="clr"></div>
<div class="tbytes">
......@@ -393,9 +395,9 @@
<xsl:text>]</xsl:text>
</div>
<div class="tpriority">
<form class="changepriorityform" name="changepriorityform_{sha1_hash}" method="post" action="{/root/iurl}?mod=changepriority&amp;hash={sha1_hash}">
<form class="changepriorityform" name="changepriorityform_{d_hash}" method="post" action="{/root/iurl}?mod=changepriority&amp;hash={d_hash}">
<xsl:text>[</xsl:text>
<select class="whiteselect" name="priority" title="Select priority" onchange="window.location='{/root/iurl}?mod=changepriority&amp;hash={sha1_hash}&amp;priority='+this.value;">
<select class="whiteselect" name="priority" title="Select priority" onchange="window.location='{/root/iurl}?mod=changepriority&amp;hash={d_hash}&amp;priority='+this.value;">
<xsl:choose>
<xsl:when test="d_priority = 0">
<option value="0" title="Off" selected="selected">Off</option>
......@@ -430,12 +432,12 @@
</form>
</div>
<div class="clr"></div>
<div class="tcontainer" id="torrent_{sha1_hash}" style="display: none;">
<a class="info" href="?mod=torrent&amp;hash={sha1_hash}&amp;page=info" title="Info" onclick="loadcontent( '{sha1_hash}', 'info' ); return false;">Info</a>
<a class="files" href="?mod=torrent&amp;hash={sha1_hash}&amp;page=files" title="File list" onclick="loadcontent( '{sha1_hash}', 'files' ); return false;">File list</a>
<a class="trackers" href="?mod=torrent&amp;hash={sha1_hash}&amp;page=trackers" title="Tracker list" onclick="loadcontent( '{sha1_hash}', 'trackers' ); return false;">Tracker list</a>
<div class="tcontainer" id="torrent_{d_hash}" style="display: none;">
<a class="info" href="?mod=torrent&amp;hash={d_hash}&amp;page=info" title="Info" onclick="loadcontent( '{d_hash}', 'info' ); return false;">Info</a>
<a class="files" href="?mod=torrent&amp;hash={d_hash}&amp;page=files" title="File list" onclick="loadcontent( '{d_hash}', 'files' ); return false;">File list</a>
<a class="trackers" href="?mod=torrent&amp;hash={d_hash}&amp;page=trackers" title="Tracker list" onclick="loadcontent( '{d_hash}', 'trackers' ); return false;">Tracker list</a>
<div class="clr"></div>
<div class="tcontent" id="torrent_{sha1_hash}_content"></div>
<div class="tcontent" id="torrent_{d_hash}_content"></div>
</div>
<div class="clr"></div>
</li>
......@@ -460,7 +462,7 @@
<xsl:text>Info hash:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="sha1_hash" />
<xsl:value-of select="d_hash" />
</div>
<div class="clr"></div>
</li>
......@@ -514,7 +516,9 @@
<xsl:text> / </xsl:text>
<xsl:value-of select="d_chunks_hashed" />
<xsl:text> * </xsl:text>
<xsl:value-of select="d_chunk_size" />
<xsl:value-of select="d_chunk_size/@value" />
<xsl:text> </xsl:text>
<xsl:value-of select="d_chunk_size/@suffix" />
</div>
<div class="clr"></div>
</li>
......@@ -536,17 +540,6 @@
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>Max memory usage:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="/root/torrents/max_memory_usage/@value" />
<xsl:text> </xsl:text>
<xsl:value-of select="/root/torrents/max_memory_usage/@suffix" />
</div>
<div class="clr"></div>
</li>
<li class="line spacer">
<div class="infoleft">
<xsl:text>Free diskspace:</xsl:text>
......@@ -576,7 +569,7 @@
</div>
<div class="clr"></div>
</li>
<li class="line">
<li class="line spacer">
<div class="infoleft">
<xsl:text>Seeders:</xsl:text>
</div>
......@@ -615,7 +608,7 @@
</div>
<div class="clr"></div>
</li>
<li class="line spacer">
<li class="line">
<div class="infoleft">
<xsl:text>Skipped:</xsl:text>
</div>
......@@ -630,12 +623,159 @@
</div>
<div class="clr"></div>
</li>
</xsl:template>
<xsl:template match="torrent_files_root">
<xsl:apply-templates select="torrent_files" />
</xsl:template>
<xsl:template match="torrent_files">
<xsl:apply-templates select="files_root" />
</xsl:template>
<xsl:template match="torrent_trackers_root">
<xsl:apply-templates select="torrent_trackers" />
</xsl:template>
<xsl:template match="torrent_trackers">
<xsl:apply-templates select="tracker" />
</xsl:template>
<xsl:template match="server_info">
<li class="line">
<div class="infoleft">
<xsl:text>Client version:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="client_version" />
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>Library version:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="library_version" />
</div>
<div class="clr"></div>
</li>
<li class="line spacer">
<div class="infoleft">
<xsl:text>Directory:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="directory/@value" />
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>Hostname:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="hostname" />
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>Listening IP address:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="ip/@value" />
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>IP address reported to the tracker:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="bind/@value" />
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>Port opened:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="port_open/@value" />
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>Random port:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="port_random/@value" />
</div>
<div class="clr"></div>
</li>
<li class="line spacer">
<div class="infoleft">
<xsl:text>Port range:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="port_range/@value" />
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>Maximum number of uploads:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="max_uploads/@value" />
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>Minimum number of peers:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="min_peers/@value" />
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>Maximum number of peers:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="max_peers/@value" />
</div>
<div class="clr"></div>
</li>
<li class="line spacer">
<div class="infoleft">
<xsl:text>Max memory usage:</xsl:text>
</div>
<div class="inforight">
<xsl:value-of select="max_memory_usage/@value" />
<xsl:text> </xsl:text>
<xsl:value-of select="max_memory_usage/@suffix" />
</div>
<div class="clr"></div>
</li>
<li class="line">
<div class="infoleft">
<xsl:text>Check hash:</xsl:text>
</div>
<div class="inforight">