merge of '0e94b0f3b3818b53b029fcce7e9ca64680dd4391'
and '5d73bb2f881c3ef24f74af899f7451da1e5f42d4'
@ -229,12 +229,9 @@ class PeerConnectionOut implements Runnable
|
||||
/**
|
||||
* Adds a message to the sendQueue and notifies the method waiting
|
||||
* on the sendQueue to change.
|
||||
* If a PIECE message only, add a timeout.
|
||||
*/
|
||||
private void addMessage(Message m)
|
||||
{
|
||||
if (m.type == Message.PIECE)
|
||||
SimpleScheduler.getInstance().addEvent(new RemoveTooSlow(m), SEND_TIMEOUT);
|
||||
synchronized(sendQueue)
|
||||
{
|
||||
sendQueue.add(m);
|
||||
@ -430,7 +427,11 @@ class PeerConnectionOut implements Runnable
|
||||
return total;
|
||||
}
|
||||
|
||||
/** @since 0.8.2 */
|
||||
/**
|
||||
* Queue a piece message with a callback to load the data
|
||||
* from disk when required.
|
||||
* @since 0.8.2
|
||||
*/
|
||||
void sendPiece(int piece, int begin, int length, DataLoader loader)
|
||||
{
|
||||
boolean sendNow = false;
|
||||
@ -457,6 +458,11 @@ class PeerConnectionOut implements Runnable
|
||||
addMessage(m);
|
||||
}
|
||||
|
||||
/**
|
||||
* Queue a piece message with the data already loaded from disk
|
||||
* Also add a timeout.
|
||||
* We don't use this anymore.
|
||||
*/
|
||||
void sendPiece(int piece, int begin, int length, byte[] bytes)
|
||||
{
|
||||
Message m = new Message();
|
||||
@ -467,6 +473,8 @@ class PeerConnectionOut implements Runnable
|
||||
m.data = bytes;
|
||||
m.off = 0;
|
||||
m.len = length;
|
||||
// since we have the data already loaded, queue a timeout to remove it
|
||||
SimpleScheduler.getInstance().addEvent(new RemoveTooSlow(m), SEND_TIMEOUT);
|
||||
addMessage(m);
|
||||
}
|
||||
|
||||
|
@ -75,7 +75,9 @@ public class PeerCoordinator implements PeerListener
|
||||
|
||||
private final byte[] id;
|
||||
|
||||
// Some random wanted pieces
|
||||
/** The wanted pieces. We could use a TreeSet but we'd have to clear and re-add everything
|
||||
* when priorities change.
|
||||
*/
|
||||
private final List<Piece> wantedPieces;
|
||||
|
||||
/** partial pieces - lock by synching on wantedPieces */
|
||||
|
@ -110,6 +110,9 @@ class PeerState implements DataLoader
|
||||
if (choked) {
|
||||
out.cancelRequestMessages();
|
||||
// old Roberts thrash us here, choke+unchoke right together
|
||||
// The only problem with returning the partials to the coordinator
|
||||
// is that chunks above a missing request are lost.
|
||||
// Future enhancements to PartialPiece could keep track of the holes.
|
||||
List<PartialPiece> pcs = returnPartialPieces();
|
||||
if (!pcs.isEmpty()) {
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
|
@ -1525,7 +1525,7 @@ public class I2PSnarkServlet extends Default {
|
||||
buf.append("<input type=\"radio\" value=\"-9\" name=\"pri.").append(f.getCanonicalPath()).append("\" ");
|
||||
if (pri < 0)
|
||||
buf.append("checked=\"true\"");
|
||||
buf.append('>').append(_("Ignore"));
|
||||
buf.append('>').append(_("Skip"));
|
||||
showSaveButton = true;
|
||||
}
|
||||
buf.append("</td>");
|
||||
|
@ -6,7 +6,7 @@ import java.util.Properties;
|
||||
* Define the configuration for streaming and verifying data on the socket.
|
||||
*
|
||||
*/
|
||||
public class I2PSocketOptionsImpl implements I2PSocketOptions {
|
||||
class I2PSocketOptionsImpl implements I2PSocketOptions {
|
||||
private long _connectTimeout;
|
||||
private long _readTimeout;
|
||||
private long _writeTimeout;
|
||||
|
@ -24,11 +24,12 @@
|
||||
<b>Processor:</b> <%=net.i2p.util.NativeBigInteger.cpuModel()%> (<%=net.i2p.util.NativeBigInteger.cpuType()%>)<br>
|
||||
<b>Jbigi:</b> <%=net.i2p.util.NativeBigInteger.loadStatus()%><br>
|
||||
<b>Encoding:</b> <%=System.getProperty("file.encoding")%></p>
|
||||
<p><%=intl._("Note that system information, log timestamps, and log messages may provide clues to your location; please review everything you include in a bug report.")%></p>
|
||||
<jsp:useBean class="net.i2p.router.web.LogsHelper" id="logsHelper" scope="request" />
|
||||
<jsp:setProperty name="logsHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
|
||||
<h3><%=intl._("Critical Logs")%></h3><a name="criticallogs"> </a>
|
||||
<jsp:getProperty name="logsHelper" property="criticalLogs" />
|
||||
<h3><%=intl._("Router Logs")%> (<a href="configlogging.jsp"><%=intl._("configure")%></a>)</h3>
|
||||
<h3><%=intl._("Router Logs")%> (<a href="configlogging"><%=intl._("configure")%></a>)</h3>
|
||||
<jsp:getProperty name="logsHelper" property="logs" />
|
||||
<h3><%=intl._("Service (Wrapper) Logs")%></h3><a name="servicelogs"> </a>
|
||||
<jsp:getProperty name="logsHelper" property="serviceLogs" />
|
||||
|
@ -3250,7 +3250,7 @@ msgstr "Konfiguration des I2P-Routers"
|
||||
|
||||
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:93
|
||||
msgid "I2P Internals"
|
||||
msgstr "Router-Einstellungen"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:99
|
||||
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:379
|
||||
|
@ -3292,7 +3292,7 @@ msgstr "I2P Routeur Configuration"
|
||||
|
||||
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:93
|
||||
msgid "I2P Internals"
|
||||
msgstr "I2P Configuration Interne"
|
||||
msgstr "Configuration"
|
||||
|
||||
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:99
|
||||
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:379
|
||||
|
@ -22,7 +22,7 @@ import net.i2p.util.SimpleTimer2;
|
||||
* destinations.
|
||||
*
|
||||
*/
|
||||
public class Connection {
|
||||
class Connection {
|
||||
private I2PAppContext _context;
|
||||
private Log _log;
|
||||
private ConnectionManager _connectionManager;
|
||||
@ -1067,7 +1067,7 @@ public class Connection {
|
||||
/**
|
||||
* Coordinate the resends of a given packet
|
||||
*/
|
||||
public class ResendPacketEvent extends SimpleTimer2.TimedEvent {
|
||||
class ResendPacketEvent extends SimpleTimer2.TimedEvent {
|
||||
private PacketLocal _packet;
|
||||
private long _nextSendTime;
|
||||
public ResendPacketEvent(PacketLocal packet, long delay) {
|
||||
|
@ -17,7 +17,7 @@ import net.i2p.util.SimpleTimer;
|
||||
*
|
||||
* @author zzz modded to use concurrent and bound queue size
|
||||
*/
|
||||
public class ConnectionHandler {
|
||||
class ConnectionHandler {
|
||||
private I2PAppContext _context;
|
||||
private Log _log;
|
||||
private ConnectionManager _manager;
|
||||
|
@ -20,7 +20,7 @@ import net.i2p.util.SimpleTimer;
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class ConnectionManager {
|
||||
class ConnectionManager {
|
||||
private I2PAppContext _context;
|
||||
private Log _log;
|
||||
private I2PSession _session;
|
||||
|
@ -15,7 +15,7 @@ import net.i2p.util.Log;
|
||||
* Define the current options for the con (and allow custom tweaking midstream)
|
||||
*
|
||||
*/
|
||||
public class ConnectionOptions extends I2PSocketOptionsImpl {
|
||||
class ConnectionOptions extends I2PSocketOptionsImpl {
|
||||
private int _connectDelay;
|
||||
private boolean _fullySigned;
|
||||
private boolean _answerPings;
|
||||
|
@ -14,7 +14,7 @@ import net.i2p.util.SimpleTimer;
|
||||
* queue, marking packets as acked, updating various fields, etc.
|
||||
*
|
||||
*/
|
||||
public class ConnectionPacketHandler {
|
||||
class ConnectionPacketHandler {
|
||||
private I2PAppContext _context;
|
||||
private Log _log;
|
||||
|
||||
|
@ -7,7 +7,7 @@ import net.i2p.I2PException;
|
||||
* Bridge to allow accepting new connections
|
||||
*
|
||||
*/
|
||||
public class I2PServerSocketFull implements I2PServerSocket {
|
||||
class I2PServerSocketFull implements I2PServerSocket {
|
||||
private I2PSocketManagerFull _socketManager;
|
||||
|
||||
public I2PServerSocketFull(I2PSocketManagerFull mgr) {
|
||||
|
@ -10,7 +10,7 @@ import net.i2p.data.Destination;
|
||||
* Bridge between the full streaming lib and the I2PSocket API
|
||||
*
|
||||
*/
|
||||
public class I2PSocketFull implements I2PSocket {
|
||||
class I2PSocketFull implements I2PSocket {
|
||||
private Connection _connection;
|
||||
private I2PSocket.SocketErrorListener _listener;
|
||||
private Destination _remotePeer;
|
||||
|
@ -23,7 +23,7 @@ import net.i2p.util.Log;
|
||||
* or receive any messages with its .receiveMessage
|
||||
*
|
||||
*/
|
||||
public class I2PSocketManagerFull implements I2PSocketManager {
|
||||
class I2PSocketManagerFull implements I2PSocketManager {
|
||||
private I2PAppContext _context;
|
||||
private Log _log;
|
||||
private I2PSession _session;
|
||||
|
@ -15,7 +15,7 @@ import net.i2p.util.ConcurrentHashSet;
|
||||
* Packets, if we can.
|
||||
*
|
||||
*/
|
||||
public class MessageHandler implements I2PSessionListener {
|
||||
class MessageHandler implements I2PSessionListener {
|
||||
private ConnectionManager _manager;
|
||||
private I2PAppContext _context;
|
||||
private Log _log;
|
||||
|
@ -19,7 +19,7 @@ import net.i2p.util.Log;
|
||||
* yet present them in order.
|
||||
*
|
||||
*/
|
||||
public class MessageInputStream extends InputStream {
|
||||
class MessageInputStream extends InputStream {
|
||||
private final I2PAppContext _context;
|
||||
private final Log _log;
|
||||
/**
|
||||
|
@ -15,7 +15,7 @@ import net.i2p.util.SimpleTimer2;
|
||||
* on flush or when the buffer is full. It also blocks according
|
||||
* to the data receiver's needs.
|
||||
*/
|
||||
public class MessageOutputStream extends OutputStream {
|
||||
class MessageOutputStream extends OutputStream {
|
||||
private final I2PAppContext _context;
|
||||
private final Log _log;
|
||||
private byte _buf[];
|
||||
|
@ -53,7 +53,7 @@ import net.i2p.util.Log;
|
||||
* packet that should not be ACKed</p>
|
||||
*
|
||||
*/
|
||||
public class Packet {
|
||||
class Packet {
|
||||
private long _sendStreamId;
|
||||
private long _receiveStreamId;
|
||||
private long _sequenceNum;
|
||||
|
@ -15,7 +15,7 @@ import net.i2p.util.Log;
|
||||
* the server socket, or queue a reply RST packet.
|
||||
*
|
||||
*/
|
||||
public class PacketHandler {
|
||||
class PacketHandler {
|
||||
private ConnectionManager _manager;
|
||||
private I2PAppContext _context;
|
||||
private Log _log;
|
||||
|
@ -12,7 +12,7 @@ import net.i2p.util.SimpleTimer2;
|
||||
* coordinate local attributes about a packet - send time, ack time, number of
|
||||
* retries, etc.
|
||||
*/
|
||||
public class PacketLocal extends Packet implements MessageOutputStream.WriteStatus {
|
||||
class PacketLocal extends Packet implements MessageOutputStream.WriteStatus {
|
||||
private I2PAppContext _context;
|
||||
private Log _log;
|
||||
private Connection _connection;
|
||||
|
@ -18,7 +18,7 @@ import net.i2p.util.Log;
|
||||
* mode=bestEffort doesnt block in the SDK.
|
||||
*
|
||||
*/
|
||||
public class PacketQueue {
|
||||
class PacketQueue {
|
||||
private I2PAppContext _context;
|
||||
private Log _log;
|
||||
private I2PSession _session;
|
||||
|
@ -3,7 +3,10 @@ package net.i2p.client.streaming;
|
||||
import net.i2p.util.SimpleTimer2;
|
||||
|
||||
/**
|
||||
*
|
||||
* Not clear that we really need to create our own timer group, but we do,
|
||||
* to prevent us clogging the router's timer group.
|
||||
* Use from outside this package is deprecated.
|
||||
* (BOB instantiates this for thread group reasons)
|
||||
*/
|
||||
public class RetransmissionTimer extends SimpleTimer2 {
|
||||
private static final RetransmissionTimer _instance = new RetransmissionTimer();
|
||||
|
@ -10,7 +10,7 @@ import net.i2p.util.Log;
|
||||
* Examine a connection's state and pick the right scheduler for it.
|
||||
*
|
||||
*/
|
||||
public class SchedulerChooser {
|
||||
class SchedulerChooser {
|
||||
private I2PAppContext _context;
|
||||
private Log _log;
|
||||
private TaskScheduler _nullScheduler;
|
||||
|
@ -20,7 +20,7 @@ import net.i2p.util.SimpleTimer2;
|
||||
* same router.
|
||||
*
|
||||
*/
|
||||
public class TCBShare {
|
||||
class TCBShare {
|
||||
private I2PAppContext _context;
|
||||
private Log _log;
|
||||
private Map<Destination, Entry> _cache;
|
||||
|
@ -107,6 +107,9 @@ public class Log {
|
||||
}
|
||||
|
||||
public void log(int priority, String msg, Throwable t) {
|
||||
// Boost the priority of NPE and friends so they get seen and reported
|
||||
if (t != null && t instanceof RuntimeException && !(t instanceof IllegalArgumentException))
|
||||
priority = CRIT;
|
||||
if (priority >= _minPriority) {
|
||||
_manager.addRecord(new LogRecord(_class, _name,
|
||||
Thread.currentThread().getName(), priority,
|
||||
|
@ -13,6 +13,7 @@ import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.text.DateFormat;
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
@ -23,6 +24,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.TimeZone;
|
||||
import java.util.TreeMap;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
@ -57,7 +59,9 @@ public class LogManager {
|
||||
public final static String PROP_RECORD_PREFIX = "logger.record.";
|
||||
|
||||
public final static String DEFAULT_FORMAT = DATE + " " + PRIORITY + " [" + THREAD + "] " + CLASS + ": " + MESSAGE;
|
||||
public final static String DEFAULT_DATEFORMAT = "HH:mm:ss.SSS";
|
||||
//public final static String DEFAULT_DATEFORMAT = "HH:mm:ss.SSS";
|
||||
/** blank means default short date and medium time for the locale - see DateFormat */
|
||||
public final static String DEFAULT_DATEFORMAT = "";
|
||||
public final static String DEFAULT_FILENAME = "logs/log-#.txt";
|
||||
public final static String DEFAULT_FILESIZE = "10m";
|
||||
public final static boolean DEFAULT_DISPLAYONSCREEN = true;
|
||||
@ -225,6 +229,7 @@ public class LogManager {
|
||||
startLogWriter();
|
||||
|
||||
_records.offer(record);
|
||||
/**** don't burden the logging thread with counting
|
||||
int numRecords = _records.size();
|
||||
|
||||
if (numRecords > 100) {
|
||||
@ -234,6 +239,7 @@ public class LogManager {
|
||||
_writer.notifyAll();
|
||||
}
|
||||
}
|
||||
****/
|
||||
}
|
||||
|
||||
/**
|
||||
@ -292,8 +298,7 @@ public class LogManager {
|
||||
_format = fmt.toCharArray();
|
||||
|
||||
String df = config.getProperty(PROP_DATEFORMAT, DEFAULT_DATEFORMAT);
|
||||
_dateFormatPattern = df;
|
||||
_dateFormat = new SimpleDateFormat(df);
|
||||
setDateFormat(df);
|
||||
|
||||
String disp = config.getProperty(PROP_DISPLAYONSCREEN);
|
||||
if (disp == null)
|
||||
@ -386,13 +391,24 @@ public class LogManager {
|
||||
/**
|
||||
* Update the date format
|
||||
*
|
||||
* @param format null or empty string means use default format for the locale
|
||||
* (with a SHORT date and a MEDIUM time - see DateFormat)
|
||||
* @return true if the format was updated, false if it was invalid
|
||||
*/
|
||||
public boolean setDateFormat(String format) {
|
||||
if (format == null) return false;
|
||||
if (format == null)
|
||||
format = "";
|
||||
if (format.equals(_dateFormatPattern) && _dateFormat != null)
|
||||
return true;
|
||||
|
||||
try {
|
||||
SimpleDateFormat fmt = new SimpleDateFormat(format);
|
||||
SimpleDateFormat fmt = (SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
|
||||
if (!format.equals(""))
|
||||
fmt.applyPattern(format);
|
||||
// the router sets the JVM time zone to UTC but saves the original here so we can get it
|
||||
String systemTimeZone = _context.getProperty("i2p.systemTimeZone");
|
||||
if (systemTimeZone != null)
|
||||
fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone));
|
||||
_dateFormatPattern = format;
|
||||
_dateFormat = fmt;
|
||||
return true;
|
||||
|
@ -27,7 +27,8 @@ import net.i2p.I2PAppContext;
|
||||
*/
|
||||
class LogWriter implements Runnable {
|
||||
/** every 10 seconds? why? Just have the gui force a reread after a change?? */
|
||||
private final static long CONFIG_READ_ITERVAL = 10 * 1000;
|
||||
private final static long CONFIG_READ_INTERVAL = 50 * 1000;
|
||||
private final static long FLUSH_INTERVAL = 11 * 1000;
|
||||
private long _lastReadConfig = 0;
|
||||
private long _numBytesInCurrentFile = 0;
|
||||
private Writer _currentOut;
|
||||
@ -71,14 +72,14 @@ class LogWriter implements Runnable {
|
||||
try {
|
||||
List<LogRecord> records = _manager._removeAll();
|
||||
if (records == null) return;
|
||||
for (LogRecord rec : records) {
|
||||
writeRecord(rec);
|
||||
}
|
||||
if (!records.isEmpty()) {
|
||||
for (LogRecord rec : records) {
|
||||
writeRecord(rec);
|
||||
}
|
||||
try {
|
||||
_currentOut.flush();
|
||||
} catch (IOException ioe) {
|
||||
System.err.println("Error flushing the records");
|
||||
System.err.println("Error writing the router log");
|
||||
}
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
@ -87,7 +88,7 @@ class LogWriter implements Runnable {
|
||||
if (shouldWait) {
|
||||
try {
|
||||
synchronized (this) {
|
||||
this.wait(10*1000);
|
||||
this.wait(FLUSH_INTERVAL);
|
||||
}
|
||||
} catch (InterruptedException ie) { // nop
|
||||
}
|
||||
@ -101,7 +102,7 @@ class LogWriter implements Runnable {
|
||||
|
||||
private void rereadConfig() {
|
||||
long now = Clock.getInstance().now();
|
||||
if (now - _lastReadConfig > CONFIG_READ_ITERVAL) {
|
||||
if (now - _lastReadConfig > CONFIG_READ_INTERVAL) {
|
||||
_manager.rereadConfig();
|
||||
_lastReadConfig = now;
|
||||
}
|
||||
|
20
history.txt
@ -1,3 +1,23 @@
|
||||
20-11-29 dr|z3d
|
||||
* Updated console theme "light".
|
||||
|
||||
2010-11-29 zzz
|
||||
* i2psnark:
|
||||
- Don't timeout queued piece messages
|
||||
* Logging:
|
||||
- Use System locale and time zone for default date/time format,
|
||||
so it matches the wrapper log time (we can't set the wrapper log time zone).
|
||||
(existing installs must remove logger.dateFormat line
|
||||
in logger.config to get system default format)
|
||||
- Force RuntimeExceptions to CRIT level
|
||||
- Don't have log() count buffer size
|
||||
* Streaming: Make all classes outside the API package private
|
||||
* UDP:
|
||||
- Fix bug causing PacketPusher to loop quickly instead of sleeping
|
||||
- Fix udp.sendCycleTime stat
|
||||
- Fix speed values on peers.jsp
|
||||
- Try to fix rare NPE (ticket 298)
|
||||
|
||||
2010-11-28 zzz
|
||||
* Build: Move all dependencies to top-level build.xml,
|
||||
so each sub-build.xml is only executed once
|
||||
|
@ -13,8 +13,8 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="welcome"><h2>Welcome to the Invisible Internet</h2></div>
|
||||
<ul class="links"><li class="tidylist"><b>Starting Up…</b><br>If you've just started I2P, the number of <i>Active Peers</i> indicated under the <i>Peers Section</i> in the sidepanel on the left should start to grow over the next few minutes and you'll see a <i>Local Destination</i> named <i>Shared Clients</i> listed at the bottom of the lefthand sidepanel and possibly other clients and servers depending on how I2P is configured
|
||||
(if not, <a href="#trouble">see below</a>). These <i>Local Destinations</i> provide connections on different ports (and sometimes protocols) to the I2P network enabling your bittorrent, e-mail, web proxy and other services to function.</li>
|
||||
<ul class="links"><li class="tidylist"><b>Starting Up…</b><br>If you've just started I2P, the number of <i>Active Peers</i> indicated under the <i>Peers Section</i> in the lefthand sidepanel should start to grow over the next few minutes and you'll also see a <i>Local Destination</i> named <i>Shared Clients</i> listed there, and possibly other clients and servers depending on how I2P is configured
|
||||
(if not, see the troubleshooting section <a href="#trouble">below</a>). These <i>Local Destinations</i> provide connections on different ports (and sometimes protocols) to the I2P network enabling your bittorrent, e-mail, web proxy and other services to function.</li>
|
||||
|
||||
<li class="tidylist"><b>Network integration</b><br> The first time you start I2P it may take a few minutes to bootstrap (integrate) you into the network and find additional peers to optimize your integration, so please be patient. Once green stars are indicated next to your <i>Local Destinations</i>, there is a wide variety of things you can do with I2P, and below we introduce you to some of them.</ul>
|
||||
|
||||
@ -23,13 +23,13 @@
|
||||
|
||||
<li class="tidylist"><b>Anonymous E-mail</b><br>Postman's I2P-based mail system can be accessed either via <a href="/susimail/">I2P's built-in webmail</a> (aka susimail) or using any mail client that supports smtp and pop3. Accounts can send and receive mail from the normal internet. For an account, visit <a href="http://hq.postman.i2p/" target="_blank">hq.postman.i2p</a>. Additionally, <a href="http://i2pbote.i2p/" target="_blank">I2P-Bote</a> is a new serverless, end-to-end encrypted e-mail system (with web interface) developed by HungryHobo, installable as a <a href="#plugins">plugin</a>.</li>
|
||||
|
||||
<li class="tidylist"<b>Invisible Internet & Public Web Browsing</b><br>On I2P you can host anonymous websites (aka eepsites) and other services (eg. ssh over I2p, your own IRC server etc), and you can also access the normal web anonymously via I2P. <a href="http://www.i2p2.de/htproxyports.html" target="_blank">Configure your browser</a> to use the HTTP <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Proxy_server " target="_blank">proxy</a> I2P provides at <code>127.0.0.1 port 4444</code>, then browse to an eepsite or a normal <code>http://</code> address. <a href="#eepsites">Below</a> we list some of the sites hosted on I2P.</li>
|
||||
<li class="tidylist"<b>Invisible Internet & Public Web Browsing</b><br>On I2P you can access anonymous websites (aka eepsites) and other services (eg. ssh over I2p, your own IRC server etc) in addition to being able to host your own services, and you can also access the normal web anonymously via I2P. <a href="http://www.i2p2.de/htproxyports.html" target="_blank">Configure your browser</a> to use the HTTP <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Proxy_server " target="_blank">proxy</a> I2P provides at <code>127.0.0.1 port 4444</code>, then browse to an eepsite or a normal <code>http://</code> address. <a href="#eepsites">Below</a> we list some of the sites hosted on I2P.</li>
|
||||
|
||||
<li class="tidylist"><b>Anonymous File Transfer</b><br><a href="/i2psnark" target="_blank">I2PSnark</a> is integrated into I2P, providing anonymous, encrypted <a href="https://secure.wikimedia.org/wikipedia/en/wiki/BitTorrent_(protocol)" target="_blank">BitTorrent</a> transfers. In addition, Sponge develops a bittorrent client called <a href="http://bob.i2p/Robert.html">Robert</a> written in Python. There is also a port of <a href="http://www.emule-project.net/" target="_blank">eMule</a> to I2P called <a href="http://echelon.i2p/imule">iMule</a> [Needs developers!], an anonymous, secure implementation of a <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Gnutella" target="_blank">Gnutella network</a>, accessible using <a href="http://echelon.i2p/i2phex/" target="_blank">I2Phex</a>, and additional facilities including browser-based file hosting etc.</li>
|
||||
<li class="tidylist"><b>Anonymous Chat</b><br>Start your IRC client (eg. chatzilla)
|
||||
and connect to the <a href="irc://127.0.0.1:6668/i2p">server</a> at <code>127.0.0.1 port 6668</code>. Your local I2P IRC proxy on localhost:6668 will direct you to one of two IRC servers hosted on I2P by Postman and Badger, but neither you nor they know where the other is, and your mom, ISP or government is unable to intercept your conversation! Once you're there, <code>#i2p</code>, <code>#i2p-help</code>, <code>#i2p-chat</code> and <code>#i2p-dev</code> are just a few of the available channels you may wish to /join. There's also a I2P based <a href=http://echelon.i2p/qti2pmessenger>instant messenger</a> for unmonitorable, uncensorable, anonymous chat.</li>
|
||||
<li class="tidylist"><b>Anonymous Chat</b><br>Start your IRC client (eg. Chatzilla, Pidgin, XChat)
|
||||
and connect to the <a href="irc://127.0.0.1:6668/i2p">server</a> at <code>127.0.0.1 port 6668</code>. Your local I2P IRC proxy on <code>localhost:6668</code> will direct you to one of two IRC servers hosted on I2P by Postman and Badger, but neither you nor they know where the other is, and your mom, ISP or government is unable to intercept your conversation! Once you're there, <code>#i2p</code>, <code>#i2p-help</code>, <code>#i2p-chat</code> and <code>#i2p-dev</code> are just a few of the available channels you may wish to /join. There's also a I2P based <a href=http://echelon.i2p/qti2pmessenger>instant messenger</a> for unmonitorable, uncensorable, anonymous chat.</li>
|
||||
<li class="tidylist"><b>Forums & Blogging</b><br><a href="http://syndie.i2p2.de/" target="_blank">Syndie</a> is a distributed forum and blogging platform for I2P [Needs developers!]. There's also an I2P plugin port of the Java-based <a href="http://pebble.sourceforge.net/" target="_blank">pebble</a> blogging platform ported to I2P by zzz, available on <a href="http://i2plugins.i2p" target="_blank">i2plugins.i2p</a>. And of course all normal blogging, forum and cms software will run over I2P, though you're advised to take extra precautions with security when setting up and keep all associated software (eg. Php, MySql, Python, Apache etc) up to date and locked down! Also, there are quite a few forums running on I2P in various languages; see <a href="#eepsites">below</a> for some suggestions.</li>
|
||||
<a name="plugins"></a><li class="tidylist"><b>Plugins for I2P</b><br>Extend the usefulness of I2P by installing plugins… blogging, chatting, filesharing and other plugins have already been written or ported and await your <a href="http://i2plugins.i2p/plugins/" target="_blank">installation</a>! Browse the plugins and related info at <a href="http://i2plugins.i2p" target="_blank">i2plugins.i2p</a>. If you're a <a href="http://i2plugins.i2p/developers/" target="_blank">developer</a>, a complete language agnostic framework for writing your own plugins is provided with <a href="http://i2plugins.i2p/specs/" target="_blank">documentation</a>; I2P plugins can be coded in any language.</li>
|
||||
<a name="plugins"></a><li class="tidylist"><b>Plugins for I2P</b><br>Extend the usefulness of I2P by installing plugins… blogging, chatting, filesharing and other plugins have already been written or ported and await your <a href="http://i2plugins.i2p/plugins/" target="_blank">installation</a>! Browse the plugins and related info at <a href="http://i2plugins.i2p" target="_blank">i2plugins.i2p</a>. If you're a <a href="http://i2plugins.i2p/developers/" target="_blank">developer</a>, a complete language agnostic framework for writing your own plugins is provided with <a href="http://www.i2p2.i2p/plugins.html" target="_blank">documentation</a>; I2P plugins can be coded in any language.</li>
|
||||
<br></ul>
|
||||
|
||||
<h3>Anonymous Encrypted Webserving on I2P</h3>
|
||||
@ -37,7 +37,7 @@
|
||||
|
||||
<li class="tidylist"><b>Ready to roll!</b><br>I2P comes built-in with a ready-to-go webserver for hosting your own anonymous website (eepsite) on the I2P network: a <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> instance listening on <a href="http://127.0.0.1:7658/" target="_blank">http://127.0.0.1:7658/</a>. To host your own content
|
||||
simply place your files in the <code>eepsite/docroot/</code> directory (or place
|
||||
any standard JSP/Servlet <code>.war</code> files under <code>eepsite/webapps</code>,
|
||||
any standard JSP/Servlet .war files under <code>eepsite/webapps</code>,
|
||||
or standard CGI script under <code>eepsite/cgi-bin</code>) and they'll show
|
||||
up. You can also run any alternative webserver platform over I2P and replace the built-in server, or run it on another tunnel.</li>
|
||||
<li class="tidylist"><b>Start your tunnel</b><br>
|
||||
@ -60,8 +60,10 @@ your eepsite will be visible (but not discoverable) to others. Detailed instruct
|
||||
<li class="tidylist"><b>Ugha's Wiki</b><br><a href="http://ugha.i2p/" target="_blank">ugha.i2p</a>: An open wiki that anyone can edit with plenty of information about I2P, help for beginners, additional links into the network etc.</li>
|
||||
<li class="tidylist"><b>I2P to Freenet Proxy</b><br><a href="http://fproxy.tino.i2p" target="_blank">fproxy.tino.i2p</a>:
|
||||
Peer into the filesharing world of the <a href="http://freenetproject.org/" target="_blank">Freenet</a> darknet with Tino's I2P to Freenet proxy.</li>
|
||||
<li class="tidylist"><b>The Planet (on I2P)</b><br><a href="http://planet.i2p/" target="_blank">planet.i2p</a>: An RSS aggregator site that takes news and events from around I2P and publishes them all in one place. A good site to visit to see the community at work!</li>
|
||||
<li class="tidylist"><b>Eepsite Search Engine</b><br><a href="http://eepsites.i2p/" target="_blank">eepsites.i2p</a>: An
|
||||
anonymously hosted eepsite search engine.</li>
|
||||
<li class="tidylist"><b>I2P Network Health</b><br><a href="http://stats.i2p/cgi-bin/dashboard.cgi" target="_blank">stats.i2p</a>: Check out various aspects of network performance with this I2P network monitoring site run by zzz.</li>
|
||||
<li class="tidylist"><b>Discover I2P</b><br>There are many more eepsites - just follow the links from the ones you see,
|
||||
bookmark your favorites, and visit them often! There's a custom build of Firefox built especially for I2P called <a href="http://echelon.i2p/i2pfox/">I2PFox</a> you might like to investigate for locked down darknet exploration!</li>
|
||||
</ul>
|
||||
@ -71,7 +73,7 @@ your eepsite will be visible (but not discoverable) to others. Detailed instruct
|
||||
<ul class="links">
|
||||
<li class="tidylist"><b>Be patient!</b><br>I2P may be slow to start the first time as it searches for peers.
|
||||
If, after 30 minutes, your Active: connected/recent count has less than 10 connected
|
||||
peers, you should open <a href="http://127.0.0.1:7657/config">I2P's port</a> on your modem, router and/or firewall(s) for better connectivity. More information on how to go about port forwarding can be found at <a href="http://portforward.com" target="_blank">portforward.com</a>, in addition to our forums and irc channels listed below.</li>
|
||||
peers, you should open <a href="http://127.0.0.1:7657/config">I2P's port</a> on your modem, router and/or firewall(s) for better connectivity. More information on how to go about port forwarding can be found at <a href="http://portforward.com" target="_blank">portforward.com</a>, in addition to our forums and IRC channels listed below.</li>
|
||||
<li class="tidylist"><b>Check your proxy setttings</b><br>If
|
||||
you cannot see any eepsites at all (even <a href="http://www.i2p2.i2p/" target="_blank">www.i2p2.i2p</a>),
|
||||
be sure your browser proxy is set to access http traffic (<i>not</i> https, <i>not</i> socks) via <code>127.0.0.1 port 4444</code>. If you need some help, there's <a href="http://www.i2p2.i2p/htproxyports.html" target="_blank">a guide</a> to configuring your browser for I2P use, also <a href="http://www.i2p2.de/htproxyports.html" target="_blank">available</a> on the normal net. </li>
|
||||
@ -84,5 +86,5 @@ your eepsite will be visible (but not discoverable) to others. Detailed instruct
|
||||
|
||||
<li class="tidylist"><b>Reporting Bugs</b><br>If you'd like to report a bug, please file a ticket on <a href="http://trac.i2p2.i2p" target="_blank">trac.i2p2.i2p</a>. For developer related discussions, please visit <a href="http://zzz.i2p" target="_blank">zzz's developer forums</a> or come and visit the <a href="irc://127.0.0.1:6668/i2p-dev">developer channel</a> on I2P's IRC network. Developers can browse source at <a href="http://stats.i2p/cgi-bin/viewmtn/" target="_blank">zzz's mtn repository viewer</a> or <a href="http://i2host.i2p/cgi-bin/view/branch/changes/i2p.i2p" target="_blank">Sponge's instance</a>, or via <a href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>.</li>
|
||||
|
||||
<li class="tidylist"><b>Get Involved!</b><br>I2P is developed and maintained mostly through unfunded, voluntary participation by community members. We're happy to accept <a href="http://www.i2p2.i2p/donate.html" target="_blank">donations</a>, which go towards essential hosting and administrative costs. We have <a href="http://www.i2p2.i2p/bounties.html" target="_blank">cash bounties</a> for aspects of I2P for developers looking for incentives to participate, and we're always looking for more Java coders, translators, promoters and users to help I2P grow. For further info on how you can help <a href="http://www.i2p2.i2p/getinvolved.html" target="_blank">visit the website</a>. Thanks in advance!</li>
|
||||
<li class="tidylist"><b>Get Involved!</b><br>I2P is developed and maintained mostly through unfunded, voluntary participation by community members. We're happy to accept <a href="http://www.i2p2.i2p/donate.html" target="_blank">donations</a>, which go towards essential hosting and administrative costs. We have <a href="http://www.i2p2.i2p/bounties.html" target="_blank">cash bounties</a> for aspects of I2P for developers looking for incentives to participate, and we're always looking for more Java coders, translators, promoters and users to help I2P grow. For further info on how you can help visit the <a href="http://www.i2p2.i2p/getinvolved.html" target="_blank">volunteers page</a> on the website. Thanks in advance!</li>
|
||||
</ul>
|
||||
|
@ -45,6 +45,14 @@ div.logo {
|
||||
box-shadow: inset 0px 0px 1px 0px #009;
|
||||
}
|
||||
|
||||
div.logo hr {
|
||||
color: #494;
|
||||
background: #494;
|
||||
height: 1px;
|
||||
border: 0px solid #494;
|
||||
margin: 10px 0 5px;
|
||||
}
|
||||
|
||||
div.toolbar {
|
||||
margin: 0;
|
||||
padding: 10px;
|
||||
@ -559,13 +567,21 @@ div.main li b {
|
||||
}
|
||||
|
||||
.tidylist:first-child {
|
||||
padding-top: 5px;
|
||||
/* padding-top: 5px;*/
|
||||
}
|
||||
|
||||
.tidylist:last-child {
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.tidylist code {
|
||||
text-align: left;
|
||||
font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
|
||||
color: #dd0;
|
||||
padding: 1px 2px;
|
||||
background: #030;
|
||||
}
|
||||
|
||||
ol {
|
||||
display: inline;
|
||||
margin: 1px 0 0 0;
|
||||
@ -583,7 +599,6 @@ code {
|
||||
font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
|
||||
color: #dd0;
|
||||
padding: 1px 2px;
|
||||
background: #030;
|
||||
}
|
||||
|
||||
a:link, h2 a:link{
|
||||
@ -919,23 +934,35 @@ div.joblog {
|
||||
overflow-x: scroll; /* Opera fix */
|
||||
}
|
||||
|
||||
div.joblog:li {
|
||||
word-wrap: break-word !important;
|
||||
text-align: justify !important;
|
||||
line-height: 80% !important;
|
||||
div.main li {
|
||||
text-align: left;
|
||||
list-style: square;
|
||||
margin: 2px 0px 2px 30px;
|
||||
padding: 2px 20px 2px 0px;
|
||||
/* line-height: 150%;*/
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
div.joblog:ul {
|
||||
div.joblog li {
|
||||
word-wrap: break-word !important;
|
||||
text-align: justify !important;
|
||||
line-height: 120% !important;
|
||||
margin: 2px 0px 2px 30px;
|
||||
padding: 2px 20px 2px 0px;
|
||||
}
|
||||
|
||||
div.joblog ul {
|
||||
word-wrap: break-word !important;
|
||||
text-align: justify;
|
||||
margin: 0px 0 10px;
|
||||
}
|
||||
|
||||
div.joblog li:first-child {
|
||||
margin-top: 10px;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
div.joblog li:last-child {
|
||||
margin-bottom: 0;
|
||||
margin-bottom: -25px;
|
||||
}
|
||||
|
||||
div.joblog form:first-child {
|
||||
|
57
installer/resources/themes/console/dark/console_big.css
Normal file
@ -0,0 +1,57 @@
|
||||
/* I2P Theme Override: Dark */
|
||||
/* Comment: Larger text (and other tweaks) for Chinese & other doublebyte charactersets */
|
||||
/* Author: dr|z3d */
|
||||
|
||||
body {
|
||||
font: 9pt/130% Verdana, "Bitstream Vera Sans", Tahoma, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
div.news {
|
||||
font-size: 9.5pt;
|
||||
font-style: normal !important;
|
||||
}
|
||||
|
||||
div.routersummary table {
|
||||
font-size: 8.5pt;
|
||||
}
|
||||
|
||||
div.routersummary h3, div.routersummary h4, div.routersummary p, div.routersummary h3 a, div.routersummary a {
|
||||
text-shadow: 0 0 0 #fff !important;
|
||||
}
|
||||
|
||||
div.routersummary h4 {
|
||||
font-size: 10pt;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
div.routersummary b {
|
||||
font-size: 9pt;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
div.routersummary a {
|
||||
font-size: 10pt;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
b, a, a:link, a:hover, a:visited {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
button, button:visited {
|
||||
font: normal 10pt Verdana,"Bitstream Vera Sans",Tahoma,Helvetica,sans-serif !important;
|
||||
}
|
||||
|
||||
code, pre, tt {
|
||||
font-size: 10pt;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.smallhead, th {
|
||||
font-size: 8.5pt;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
table {
|
||||
font: 8.5pt/130% Verdana, "Bitstream Vera Sans", Tahoma, Helvetica, sans-serif;
|
||||
}
|
@ -1,12 +1,12 @@
|
||||
/* I2P Theme: Light */
|
||||
/* I2P Description: Light theme with soft blue highlights. */
|
||||
/* Description: Light blue highlights. */
|
||||
/* Author: dr|z3d */
|
||||
|
||||
body {
|
||||
margin: 15px 0 0 10px;
|
||||
margin: 15px 0 0 15px;
|
||||
padding: 0em;
|
||||
text-align: center;
|
||||
background: #eef;
|
||||
background: #eef url('images/snowcamo.png');
|
||||
color: #000;
|
||||
font: 9pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
}
|
||||
@ -34,13 +34,13 @@ div.logo {
|
||||
text-align: center;
|
||||
font-color: #fff;
|
||||
margin: 0 20px 0 20px;
|
||||
border: 1px solid #002;
|
||||
border: 1px solid #447;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
background: #ddddff url('images/lightbluetile.png');
|
||||
background: #eef; /*url('images/lightbluetile.png')*/
|
||||
width: 175px;
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #bbf;
|
||||
}
|
||||
|
||||
div.toolbar {
|
||||
@ -48,7 +48,7 @@ div.toolbar {
|
||||
padding: 10px;
|
||||
font-weight: bold;
|
||||
background: #eef;
|
||||
border: 1px solid #002;
|
||||
border: 1px solid #447;
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
@ -80,7 +80,7 @@ a:active{
|
||||
|
||||
div.routersummaryouter {
|
||||
float: left;
|
||||
width: 215px;
|
||||
width: 210px;
|
||||
margin: 0 0 10px 0px;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
@ -94,18 +94,19 @@ div.routersummary {
|
||||
width: 175px;
|
||||
padding: 10px;
|
||||
text-align: center !important;
|
||||
border: 1px solid #000033;
|
||||
background: #ddf url('images/lightbluetile.png');
|
||||
border: 1px solid #447;
|
||||
background: #ccddf6);
|
||||
color: #000;
|
||||
font-size: 8pt;
|
||||
clear: left;/* fixes a bug in Opera */
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
background: #eef;
|
||||
/*
|
||||
float: left;
|
||||
*/
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #bbf;
|
||||
}
|
||||
|
||||
div.routersummary input[type=text] {
|
||||
@ -118,7 +119,7 @@ div.routersummary hr {
|
||||
height: 2px;
|
||||
border-bottom: 1px solid #eef;
|
||||
margin: 8px -10px 7px -10px;
|
||||
-moz-box-shadow: inset 0px 1px 1px 1px #001;
|
||||
-moz-box-shadow: inset 0px 1px 1px 1px #ddf;
|
||||
}
|
||||
|
||||
div routersummary hr:last-child {
|
||||
@ -130,11 +131,22 @@ div.routersummary h3 {
|
||||
border: 0;
|
||||
font-size: 9.5pt;
|
||||
letter-spacing: 0.04em;
|
||||
margin: -7px -9px -7px -9px;
|
||||
padding: 1px 0;
|
||||
margin: -4px -6px;
|
||||
padding: 2px 0;
|
||||
background: #c5d5fb;
|
||||
text-transform: uppercase;
|
||||
background-image: -moz-linear-gradient(top, bottom, from(#ddf), to(#c5d5fb), color-stop(25%, #c5d5fb), color-stop(100%, #ddf));
|
||||
background: #ddf url('images/header_on.png') center center repeat-x;
|
||||
border: 1px solid #99f !important;
|
||||
-moz-border-radius: 3px;
|
||||
}
|
||||
|
||||
div.routersummary h3 a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
div.routersummary h3:hover {
|
||||
background: #ddf url('images/header.png') center center repeat-x;
|
||||
text-shadow: 0 0 0;
|
||||
}
|
||||
|
||||
div.routersummary h4 {
|
||||
@ -144,10 +156,11 @@ div.routersummary h4 {
|
||||
letter-spacing: 0.02em;
|
||||
margin: -7px -9px -7px -9px !important;
|
||||
padding: 0px 3px 1px 3px;
|
||||
background: #c1d1f7;
|
||||
background: #eef;
|
||||
text-transform: capitalize;
|
||||
text-decoration: none !important;
|
||||
color: #2b2;
|
||||
line-height: 105%;
|
||||
}
|
||||
|
||||
div.routersummary table {
|
||||
@ -175,16 +188,31 @@ div.tunnels {
|
||||
padding-top: 3px !important;
|
||||
}
|
||||
|
||||
div.tunnels table {
|
||||
margin: -7px 0 -5px -4px !important;
|
||||
}
|
||||
|
||||
.tunnels tr {
|
||||
padding: 4px 0 !important;
|
||||
}
|
||||
|
||||
div.tunnels td:first-child {
|
||||
width: 16px;
|
||||
text-align: left;
|
||||
padding-right: 1px;
|
||||
}
|
||||
|
||||
div.tunnels td:last-child {
|
||||
text-align: right;
|
||||
padding-right: 1px;
|
||||
}
|
||||
|
||||
div.routersummary form {
|
||||
margin: -6px 0 -5px 0;
|
||||
}
|
||||
|
||||
div.routersummary form:last-child {
|
||||
margin: 0 !important;
|
||||
margin: 6px 0 0 0 !important;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@ -203,7 +231,7 @@ div.routersummary a:hover {
|
||||
}
|
||||
|
||||
div.routersummary td {
|
||||
padding: 1px 3px;
|
||||
padding: 0 3px;
|
||||
background-image: none !important;
|
||||
border: 0 !important;
|
||||
}
|
||||
@ -214,7 +242,7 @@ div.warning {
|
||||
margin: 5px 20px 10px 240px;
|
||||
padding: 5px 25px 20px 75px;
|
||||
background: #fff;
|
||||
border: 1px solid #002;
|
||||
border: 1px solid #447;
|
||||
text-align: left;
|
||||
color: inherit;
|
||||
-moz-border-radius: 4px;
|
||||
@ -234,8 +262,8 @@ div.warning {
|
||||
div.sorry {
|
||||
margin: 5px 15px 10px 220px;
|
||||
padding: 20px 20px 20px 75px;
|
||||
background: #ffb;
|
||||
border: 1px solid #002;
|
||||
background: #eef;
|
||||
border: 1px solid #447;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
@ -246,32 +274,37 @@ div.sorry {
|
||||
-moz-box-shadow: inset 0px 0px 0px 1px #d00;
|
||||
word-wrap: break-word;
|
||||
font-weight: bold;
|
||||
color: #331;
|
||||
color: #531;
|
||||
}
|
||||
|
||||
div.sorry hr {
|
||||
color: #552;
|
||||
background: #552;
|
||||
color: #531;
|
||||
background: #531;
|
||||
height: 1px;
|
||||
border: 1px solid #552;
|
||||
margin: 10px 0;
|
||||
border: 1px solid #531;
|
||||
margin: 10px 0 15px 0;
|
||||
}
|
||||
|
||||
div.main {
|
||||
margin: 0px 0px 20px 195px;
|
||||
padding: 0 15px 15px 25px;
|
||||
margin: 15px 15px 20px 220px;
|
||||
padding: 0 15px 15px 15px;
|
||||
background: #eef;
|
||||
text-align: left;
|
||||
color: #001;
|
||||
width: auto;
|
||||
min-width: 500px;
|
||||
border: 1px solid #447;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #bbf;
|
||||
}
|
||||
|
||||
div.main hr, hr {
|
||||
color: #003;
|
||||
background: #003;
|
||||
color: #447;
|
||||
background: #447;
|
||||
height: 1px;
|
||||
border: 0px solid #003;
|
||||
border: 0px solid #447;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
@ -288,46 +321,48 @@ div.main textarea {
|
||||
div.news {
|
||||
margin: 0px 15px 10px 220px;
|
||||
padding: 10px 25px 7px 25px;
|
||||
border: 1px solid #003;
|
||||
color: #410;
|
||||
border: 1px solid #447;
|
||||
color: #000;
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
text-align: right !important;
|
||||
font-size: 7pt;
|
||||
font-size: 7.5pt;
|
||||
line-height: 140%;
|
||||
background: #fea url('images/sandtile.png');
|
||||
background: #eef; /*url('images/sandtile.png');*/
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #410;
|
||||
background: #eef; /*url("images/bg2.png")no-repeat scroll bottom right;*/
|
||||
}
|
||||
|
||||
div.news p {
|
||||
font-size: 8.5pt;
|
||||
text-align: justify !important;
|
||||
}
|
||||
|
||||
/*
|
||||
div.news a:link{
|
||||
color: #630;
|
||||
color: #a30;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
div.news a:visited{
|
||||
color: #830;
|
||||
color: #930;
|
||||
}
|
||||
|
||||
div.news a:hover{
|
||||
color: #a30;
|
||||
color: #d20;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
div.news a:active{
|
||||
color: #c30;
|
||||
}
|
||||
*/
|
||||
|
||||
div.news hr{
|
||||
color: #410;
|
||||
background: #410;
|
||||
color: #447;
|
||||
background: #447;
|
||||
height: 1px;
|
||||
border: 0px solid #410;
|
||||
border: 0px solid #447;
|
||||
margin: 10px 0 5px;
|
||||
}
|
||||
|
||||
@ -335,19 +370,25 @@ div.news li {
|
||||
text-align: justify;
|
||||
list-style: none;
|
||||
margin: 10px 0 20px 0 !important;
|
||||
padding: 5px 0;
|
||||
vertical-align: bottom;
|
||||
border: 1px solid #410;
|
||||
border-left: 5px solid #410;
|
||||
padding: 3px 5px 3px 5px;
|
||||
border: 1px solid #447;
|
||||
border-left: 5px solid #447;
|
||||
padding: 4px 5px;
|
||||
border-radius: 0 4px 4px 0;
|
||||
-moz-border-radius: 0 4px 4px 0;
|
||||
-khtml-border-radius: 0 4px 4px 0;
|
||||
background: #fb1;
|
||||
font-size: 10pt;
|
||||
opacity: 0.7;
|
||||
opacity: 1;
|
||||
background: #fff url('images/header.png') center center repeat-x;
|
||||
}
|
||||
|
||||
/*
|
||||
div.news h4 a{
|
||||
color: #910 !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
*/
|
||||
|
||||
div.news h4 {
|
||||
border-bottom: 0px;
|
||||
padding: 0;
|
||||
@ -357,34 +398,35 @@ div.news h4 {
|
||||
|
||||
div.confignav {
|
||||
padding: 15px 10px !important;
|
||||
margin: 0 0px 15px 0;
|
||||
background: #ddf url('images/lightbluetile.png');
|
||||
margin: 15px 0 15px 0;
|
||||
background: #ddf url('images/header.png') center center repeat-x;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #000022;
|
||||
border: 1px solid #447;
|
||||
font-size: 9.5pt !important;
|
||||
font-weight: bold !important;
|
||||
line-height: 160% !important;
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #bbf;
|
||||
min-width: 400px;
|
||||
}
|
||||
|
||||
div.configure {
|
||||
padding: 5px 15px 0px 15px !important;
|
||||
/* padding: 5px 15px 0px 15px !important;
|
||||
margin: 0px 0px 15px 0;
|
||||
background: #ddf url('images/lightbluetile.png');
|
||||
background: #eef; url('images/lightbluetile.png')
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #000022;
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
border: 1px solid #447;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #bbf;*/
|
||||
min-width: 400px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
div.configure h3, div.graphspanel h3 {
|
||||
border: 1px solid #002;
|
||||
border-left: 5px solid #002;
|
||||
border: 1px solid #447;
|
||||
border-left: 5px solid #447;
|
||||
padding: 3px 5px 3px 5px;
|
||||
margin: 15px 0 15px 0;
|
||||
border-radius: 0 4px 4px 0;
|
||||
@ -394,19 +436,20 @@ div.configure h3, div.graphspanel h3 {
|
||||
}
|
||||
|
||||
div.graphspanel {
|
||||
padding: 12px;
|
||||
/* padding: 12px;
|
||||
margin: 10px 0px 25px 0;
|
||||
background: #ddf url('images/lightbluetile.png');
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #000022;
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
border: 1px solid #447;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #bbf;*/
|
||||
text-align: center !important;
|
||||
margin: 15px 0px -15px;
|
||||
}
|
||||
|
||||
div.graphspanel img {
|
||||
border: 1px solid #003;
|
||||
border: 1px solid #447;
|
||||
padding: 2px;
|
||||
margin: 6px;
|
||||
text-align: center !important;
|
||||
@ -416,7 +459,7 @@ div.graphspanel img {
|
||||
}
|
||||
|
||||
div.graphspanel img:hover {
|
||||
border: 1px solid #003;
|
||||
border: 1px solid #447;
|
||||
padding: 2px;
|
||||
margin: 6px;
|
||||
text-align: center !important;
|
||||
@ -436,10 +479,10 @@ div.messages {
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #000033;
|
||||
background: #008 url('images/lightbluetile.png');
|
||||
border: 1px solid #447;
|
||||
background: #eef; /*url('images/lightbluetile.png');*/
|
||||
font-weight: bold;
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #bbf;
|
||||
}
|
||||
|
||||
div.messages span.error {
|
||||
@ -462,7 +505,7 @@ div.messages li {
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
border: 1px solid #000022;
|
||||
border: 1px solid #447;
|
||||
margin: 1px -15px 5px 0px;
|
||||
cell-padding: 1px;
|
||||
font-size: 7pt;
|
||||
@ -483,12 +526,12 @@ table hr {
|
||||
th {
|
||||
padding: 6px 2px;
|
||||
color: #000;
|
||||
background: #b4c8ff url('images/tabletitlelight.png') repeat-x;
|
||||
background: #ddf url('images/header.png') center center repeat-x;
|
||||
text-align: center;
|
||||
font-size: 9pt;
|
||||
line-height: 110%;
|
||||
border-bottom: 1px solid #001 !important;
|
||||
border-top: 1px solid #001 !important;
|
||||
border-bottom: 1px solid #447 !important;
|
||||
border-top: 1px solid #447 !important;
|
||||
}
|
||||
|
||||
tr {
|
||||
@ -497,11 +540,11 @@ tr {
|
||||
}
|
||||
|
||||
tr:nth-child(even) {
|
||||
background: #99f url('images/tabletile.png') !important;
|
||||
background: #eef; /*url('images/tabletile.png') !important;*/
|
||||
}
|
||||
|
||||
tr:nth-child(odd) {
|
||||
background: #bbf url('images/tabletile_alt.png') !important;
|
||||
background: #ddf; /*url('images/tabletile_alt.png') !important;*/
|
||||
}
|
||||
/*
|
||||
tr:last-child {
|
||||
@ -514,7 +557,7 @@ td {
|
||||
padding: 5px 3px;
|
||||
color: #000;
|
||||
vertical-align: middle;
|
||||
border-top: 1px inset #001;
|
||||
border-top: 1px inset #447;
|
||||
border-bottom: 1px outset #99f;
|
||||
}
|
||||
|
||||
@ -524,6 +567,15 @@ tt {
|
||||
padding: 1px 5px;
|
||||
}
|
||||
|
||||
div.main li {
|
||||
text-align: left;
|
||||
list-style: square;
|
||||
margin: 2px 5px 0px 20px;
|
||||
padding: 1px 10px 1px 10px;
|
||||
line-height: 150%;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
div.main li {
|
||||
text-align: left;
|
||||
list-style: square;
|
||||
@ -534,14 +586,14 @@ div.main li {
|
||||
}
|
||||
|
||||
div.main li b {
|
||||
color: #404 !important;
|
||||
letter-spacing: 0.04em;
|
||||
color: #700 !important;
|
||||
letter-spacing: 0.02em;
|
||||
font-size: 9.5pt;
|
||||
line-height: 200%;
|
||||
line-height: 170%;
|
||||
}
|
||||
|
||||
div.main li:first-child {
|
||||
margin-top: 10px;
|
||||
margin-top: 10px !important;
|
||||
}
|
||||
.tidylist {
|
||||
text-align: justify !important;
|
||||
@ -555,6 +607,15 @@ div.main li:first-child {
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
.tidylist code {
|
||||
text-align: left;
|
||||
font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
|
||||
color: #390;
|
||||
padding: 2px 3px;
|
||||
background: #eeb;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
ol {
|
||||
|
||||
margin: 1px 0 0 5px;
|
||||
@ -572,15 +633,24 @@ code {
|
||||
font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
|
||||
}
|
||||
|
||||
|
||||
code {
|
||||
text-align: left;
|
||||
font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
|
||||
color: #390;
|
||||
padding: 2px 3px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
a:link{
|
||||
color: #008;
|
||||
color: #005;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
a:visited{
|
||||
color: #004;
|
||||
color: #309;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
}
|
||||
@ -602,6 +672,7 @@ a:active{
|
||||
padding-bottom: -2px;
|
||||
text-align: justify;
|
||||
line-height: 120% !important;
|
||||
padding-right: -100px !important;
|
||||
}
|
||||
|
||||
.links li:first-child {
|
||||
@ -629,11 +700,11 @@ h1 {
|
||||
font: normal bold 16pt/120% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
letter-spacing: 0.15em;
|
||||
text-transform: uppercase;
|
||||
text-shadow: 0px 0px 1px rgba(0, 0, 148, 0.9);
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
text-shadow: 0px 0px 1px #77f;;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #bbf;
|
||||
white-space: normal;
|
||||
background: #ddddff url('images/lightbluetile.png');
|
||||
border: 1px solid #002;
|
||||
background: #ddf url('images/header.png') center center repeat-x;
|
||||
border: 1px solid #447;
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
@ -643,42 +714,43 @@ h2 {
|
||||
font-size: 12pt;
|
||||
color: #001;
|
||||
letter-spacing: 0.05em;
|
||||
background: #ddf url('images/titletile.png');
|
||||
background: #ddf url('images/header.png') center center repeat-x;
|
||||
text-shadow: 0px 0px 1px rgba(0, 0, 64, 0.5);
|
||||
padding: 7px 10px;
|
||||
padding: 10px 10px;
|
||||
wordwrap: none;
|
||||
border: 1px solid #002;
|
||||
border: 1px solid #447;
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
margin: 15px 0px 12px 0 !important;
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #bbf;
|
||||
word-wrap: break-word;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
h2 a:hover {
|
||||
text-shadow: 0px 0px 1px rgba(255, 255, 72, 0.9);
|
||||
border-bottom: 1px #ff6600;
|
||||
border-bottom-style: solid;
|
||||
border-bottom-color: #002;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
border: 1px solid #002;
|
||||
border-left: 5px solid #002;
|
||||
padding: 3px 5px 3px 5px;
|
||||
border: 1px solid #447;
|
||||
border-left: 5px solid #447;
|
||||
padding: 5px 5px 5px 5px;
|
||||
margin: 12px 0 12px 0;
|
||||
border-radius: 0 4px 4px 0;
|
||||
-moz-border-radius: 0 4px 4px 0;
|
||||
-khtml-border-radius: 0 4px 4px 0;
|
||||
background: #eef;
|
||||
background: #ddf url('images/header.png') center center repeat-x !important;
|
||||
text-transform: uppercase;
|
||||
text-shadow: 0px 0px 1px #77f;
|
||||
}
|
||||
|
||||
h4 {
|
||||
border-bottom: 1px;
|
||||
border-bottom-style: solid;
|
||||
border-bottom-color: #001;
|
||||
border-bottom-color: #447;
|
||||
padding: 0 0 10px 0;
|
||||
margin: 5px 0 10px 0;
|
||||
font-size: 11pt;
|
||||
@ -723,8 +795,8 @@ button:active{
|
||||
}
|
||||
|
||||
.langbox {
|
||||
margin: 4px 10px 4px 5px;
|
||||
padding: 5px 5px;
|
||||
margin: 20px 10px 4px 5px;
|
||||
padding: 8px 5px;
|
||||
color: #001;
|
||||
font-size: 7pt;
|
||||
width: 260px;
|
||||
@ -733,13 +805,23 @@ button:active{
|
||||
valign: middle;
|
||||
}
|
||||
|
||||
.langbox img {
|
||||
opacity: 0.8;
|
||||
-moz-box-shadow: 0 0 1px #447;
|
||||
}
|
||||
|
||||
.langbox img:hover {
|
||||
opacity: 1;
|
||||
-moz-box-shadow: 0 0 1px #f60;
|
||||
}
|
||||
|
||||
input {
|
||||
background: #eef;
|
||||
color: #001;
|
||||
margin: 5px 10px 5px 10px;
|
||||
padding: 4px 2px;
|
||||
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
border: 1px solid #001;
|
||||
border: 1px solid #447;
|
||||
text-decoration: none;
|
||||
min-width: 110px;
|
||||
}
|
||||
@ -785,7 +867,7 @@ input[type=text] {
|
||||
margin: 5px 10px 5px 10px;
|
||||
padding: 4px 2px;
|
||||
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
border: 1px solid #001;
|
||||
border: 1px solid #447;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@ -796,7 +878,7 @@ submit {
|
||||
padding: 2px;
|
||||
font-family: "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
font-weight: bold;
|
||||
border: 1px solid #001;
|
||||
border: 1px solid #447;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@ -809,7 +891,7 @@ select {
|
||||
color: #003;
|
||||
margin: 5px 10px 5px 10px;
|
||||
padding: 4px;
|
||||
border: 1px solid #001;
|
||||
border: 1px solid #447;
|
||||
min-width: 110px;
|
||||
font: 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
|
||||
border-radius: 4px;
|
||||
@ -829,7 +911,7 @@ textarea {
|
||||
font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
|
||||
min-height: 100px;
|
||||
min-width: 97%;
|
||||
border: 1px solid #001;
|
||||
border: 1px solid #447;
|
||||
}
|
||||
|
||||
form {}
|
||||
@ -843,7 +925,7 @@ form {}
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
border: 1px solid #001;
|
||||
border: 1px solid #447;
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -852,18 +934,19 @@ form {}
|
||||
font-size: 8pt;
|
||||
font-color: #001 !important;
|
||||
text-align: center;
|
||||
border: 1px solid #001 !important;
|
||||
border: 1px solid #447 !important;
|
||||
border-top: 0 !important;
|
||||
margin: -5px 0 5px 0;
|
||||
padding: 7px;
|
||||
background: #bcf;
|
||||
-moz-box-shadow: inset 0px 0px 2px 1px #eef;
|
||||
}
|
||||
|
||||
/*
|
||||
.joblog {
|
||||
margin: 15px 0;
|
||||
padding: 10px 20px !important;
|
||||
border: 1px solid #003;
|
||||
border: 1px solid #447;
|
||||
background-color: #004;
|
||||
background: #ddf url('images/lightbluetile.png');
|
||||
color: #001;
|
||||
@ -871,7 +954,7 @@ form {}
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
text-align: justify;
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #bbf;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
@ -889,18 +972,20 @@ form {}
|
||||
*/
|
||||
|
||||
div.joblog {
|
||||
margin: 15px 0;
|
||||
/* margin: 15px 0;
|
||||
padding: 10px 20px !important;
|
||||
border: 1px solid #003;
|
||||
border: 1px solid #447;
|
||||
background-color: #004;
|
||||
background: #ddf url('images/lightbluetile.png');
|
||||
background: #eef; /*url('images/lightbluetile.png')
|
||||
color: #001;
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
text-align: justify;
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
-moz-box-shadow: inset 0px 0px 1px 1px #bbf;*/
|
||||
overflow: auto;
|
||||
border: 0;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
div.joblog:ul {
|
||||
@ -987,9 +1072,9 @@ div.joblog hr {
|
||||
}
|
||||
|
||||
.tablefooter tr, .tablefooter td {
|
||||
background: #b4c8ff url('images/tabletitlelight.png') repeat-x;
|
||||
border-top: 1px solid #001;
|
||||
border-bottom: 1px solid #001 !important;
|
||||
background: #ddf url('images/header.png') center center repeat-x;
|
||||
border-top: 1px solid #447;
|
||||
border-bottom: 1px solid #447 !important;
|
||||
padding: 8px 2px !important;
|
||||
font-size: 7pt;
|
||||
line-height: 110%;
|
||||
|
@ -3,7 +3,7 @@ body {
|
||||
padding: 0px;
|
||||
text-align: center;
|
||||
font-family: "Lucida Sans Unicode", Verdana, Helvetica, sans-serif;
|
||||
background-color: #eef;
|
||||
background: #eef url('images/snowcamo.png');
|
||||
color: #001;
|
||||
font-size: 10pt;
|
||||
/* we've avoided Tantek Hacks so far,
|
||||
@ -45,7 +45,7 @@ h4 {
|
||||
border: 1px solid #225;
|
||||
margin: 5px 0 15px 0;
|
||||
padding: 5px 10px;
|
||||
background: #b4c8ff url(images/tabletitlelight.png) repeat-x;
|
||||
background: #b4c8ff url(images/header_on.png) repeat-x center center;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.08em;
|
||||
-moz-box-shadow: inset 0px 0px 4px 0px #bbf;
|
||||
@ -200,7 +200,7 @@ hr {
|
||||
-khtml-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
margin-top: 8px;
|
||||
background: #bbf url(images/tabletitlelight.png) 0 0 repeat: x !important;
|
||||
background: #bbf url(images/header_on.png) center center repeat:x !important;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@ -218,6 +218,9 @@ hr {
|
||||
border: 1px solid #002;
|
||||
padding: 10px 20px;
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
background: none repeat scroll 0 0 #EEEEFF;
|
||||
border: 1px solid #444477;
|
||||
color: #000011;
|
||||
}
|
||||
|
||||
.panel .footer {
|
||||
@ -262,6 +265,11 @@ hr {
|
||||
padding: 5px 20px 11px 10px;
|
||||
background: url(images/lightbluetile.png);
|
||||
-moz-box-shadow: inset 0px 0px 0px 1px #f00;
|
||||
-moz-box-shadow: inset 0px 0px 1px 0px #002;
|
||||
background: none repeat scroll 0 0 #EEEEFF;
|
||||
border: 1px solid #444477;
|
||||
color: #000011;
|
||||
|
||||
}
|
||||
|
||||
#globalOperationsPanel .control {
|
||||
@ -288,7 +296,7 @@ globalOperationsPanel .control:link {
|
||||
-khtml-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
margin-top: 8px;
|
||||
background: url(images/tabletitlelight.png) 0 0 repeat: x !important;
|
||||
background: url(images/header_on.png) 0 0 repeat: x !important;
|
||||
}
|
||||
|
||||
|
||||
@ -307,7 +315,7 @@ globalOperationsPanel .control:visited {
|
||||
-khtml-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
margin-top: 8px;
|
||||
background: url(images/tabletitlelight.png) 0 0 repeat: x !important;
|
||||
background: url(images/header_on.png) 0 0 repeat: x !important;
|
||||
}
|
||||
|
||||
globalOperationsPanel .control:hover {
|
||||
@ -325,7 +333,7 @@ globalOperationsPanel .control:hover {
|
||||
-khtml-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
margin-top: 8px;
|
||||
background: url(images/tabletitlelight.png) 0 0 repeat: x !important;
|
||||
background: url(images/header_on.png) 0 0 repeat: x !important;
|
||||
}
|
||||
.header {
|
||||
-moz-border-radius: 4px;
|
||||
|
@ -90,7 +90,7 @@
|
||||
font-size: 9pt !important;
|
||||
font-weight: bold;
|
||||
text-align: justify !important;
|
||||
background: #ddf url(images/tabletile.png);
|
||||
background: #ddf; /*url(images/tabletile.png);*/
|
||||
}
|
||||
|
||||
#tunnelListPage .footer .control {
|
||||
|
Before Width: | Height: | Size: 298 B |
Before Width: | Height: | Size: 1.5 KiB |
BIN
installer/resources/themes/console/light/images/header.png
Normal file
After Width: | Height: | Size: 157 B |
BIN
installer/resources/themes/console/light/images/header_on.png
Normal file
After Width: | Height: | Size: 193 B |
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
BIN
installer/resources/themes/console/light/images/snowcamo.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 803 B After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 719 B After Width: | Height: | Size: 721 B |
Before Width: | Height: | Size: 834 B After Width: | Height: | Size: 866 B |
Before Width: | Height: | Size: 555 B After Width: | Height: | Size: 551 B |
BIN
installer/resources/themes/snark/vanilla/images/snark_add.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
installer/resources/themes/snark/vanilla/images/snark_create.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 506 B After Width: | Height: | Size: 491 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 481 B After Width: | Height: | Size: 489 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@ -139,13 +139,17 @@ tr {
|
||||
}
|
||||
|
||||
thead, tfoot {
|
||||
text-shadow:0 1px 0px #930;
|
||||
background: url("images/bling.png") repeat-x scroll center center #867;
|
||||
text-shadow: 0px 1px 1px #707;
|
||||
background: url("images/bling2.png") repeat-x scroll center center #867;
|
||||
font-weight: bold;
|
||||
color: #503;
|
||||
}
|
||||
|
||||
/*
|
||||
thead a, tfoot a {
|
||||
text-shadow:1px 1px #101;
|
||||
text-shadow: 1px 1px 1px #f00;
|
||||
}
|
||||
*/
|
||||
|
||||
thead {
|
||||
border-bottom: 1px solid #604;
|
||||
@ -156,7 +160,6 @@ th {
|
||||
font-size: 9pt;
|
||||
border-top: 1px outset #001;
|
||||
border-bottom: 1px inset #604;
|
||||
color: #b30;
|
||||
whitespace: nowrap;
|
||||
font-variant: small-caps !important;
|
||||
letter-spacing: 0.05em;
|
||||
@ -218,7 +221,7 @@ tfoot th {
|
||||
|
||||
td {
|
||||
padding: 1px;
|
||||
color: #001 !important;
|
||||
color: #501 !important;
|
||||
opacity: 1;
|
||||
font-size: 9.5pt;
|
||||
}
|
||||
@ -274,7 +277,7 @@ td:first-child {
|
||||
padding-left: 0px;
|
||||
min-width: 120px;
|
||||
font-weight: bold;
|
||||
color: #404 !important;
|
||||
color: #402 !important;
|
||||
font-size: 8pt;
|
||||
}
|
||||
|
||||
@ -435,6 +438,24 @@ a:hover {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
a:link {
|
||||
color: #d30;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #a60;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #fa0;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
input {
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
@ -590,7 +611,7 @@ div.newtorrentsection {
|
||||
-khtml-box-shadow: inset 0px 0px 1px 0px #fff;
|
||||
box-shadow: inset 0px 0px 1px 0px #fff;
|
||||
word-wrap: break-word;
|
||||
background: #ffd url('/themes/snark/ubergine/images/snark_create.png') no-repeat scroll right center;
|
||||
background: #ffd url('images/snark_create.png') no-repeat scroll right center;
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
@ -607,7 +628,7 @@ div.addtorrentsection {
|
||||
-khtml-box-shadow: inset 0px 0px 1px 0px #fff;
|
||||
box-shadow: inset 0px 0px 1px 0px #fff;
|
||||
word-wrap: break-word;
|
||||
background: #ffd url('/themes/snark/ubergine/images/snark_add.png') no-repeat scroll right center;
|
||||
background: #ffd url('images/snark_add.png') no-repeat scroll right center;
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
@ -655,7 +676,7 @@ div.configsection table{
|
||||
}
|
||||
|
||||
div.configsection a {
|
||||
color: #f60;
|
||||
color: #f30;
|
||||
text-shadow: 1px 1px #500;
|
||||
}
|
||||
|
||||
@ -665,8 +686,8 @@ div.configsection a:hover {
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 9.5pt;
|
||||
color: #227;
|
||||
font-size: 9pt;
|
||||
color: #930;
|
||||
padding: 0 2px;
|
||||
font-weight: bold;
|
||||
font-family: "Lucida Console", "DejaVu Sans Mono", Courier, mono;
|
||||
|
@ -96,6 +96,7 @@ public class Router {
|
||||
public final static String PROP_SHUTDOWN_IN_PROGRESS = "__shutdownInProgress";
|
||||
public final static String DNS_CACHE_TIME = "" + (5*60);
|
||||
|
||||
private static final String originalTimeZoneID;
|
||||
static {
|
||||
// grumble about sun's java caching DNS entries *forever* by default
|
||||
// so lets just keep 'em for a short time
|
||||
@ -106,6 +107,8 @@ public class Router {
|
||||
System.setProperty("http.agent", "I2P");
|
||||
// (no need for keepalive)
|
||||
System.setProperty("http.keepAlive", "false");
|
||||
// Save it for LogManager
|
||||
originalTimeZoneID = TimeZone.getDefault().getID();
|
||||
System.setProperty("user.timezone", "GMT");
|
||||
// just in case, lets make it explicit...
|
||||
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
|
||||
@ -180,6 +183,8 @@ public class Router {
|
||||
|
||||
if (envProps.getProperty("i2p.dir.config") == null)
|
||||
envProps.setProperty("i2p.dir.config", userDir);
|
||||
// Save this in the context for the logger and apps that need it
|
||||
envProps.setProperty("i2p.systemTimeZone", originalTimeZoneID);
|
||||
|
||||
// The important thing that happens here is the directory paths are set and created
|
||||
// i2p.dir.router defaults to i2p.dir.config
|
||||
|
@ -18,7 +18,7 @@ public class RouterVersion {
|
||||
/** deprecated */
|
||||
public final static String ID = "Monotone";
|
||||
public final static String VERSION = CoreVersion.VERSION;
|
||||
public final static long BUILD = 13;
|
||||
public final static long BUILD = 16;
|
||||
|
||||
/** for example "-test" */
|
||||
public final static String EXTRA = "";
|
||||
|
@ -19,6 +19,7 @@ import net.i2p.util.Log;
|
||||
* initiated the connection with us. In other words, they are Alice and
|
||||
* we are Bob.
|
||||
*
|
||||
* TODO do all these methods need to be synchronized?
|
||||
*/
|
||||
class InboundEstablishState {
|
||||
private final RouterContext _context;
|
||||
@ -27,7 +28,8 @@ class InboundEstablishState {
|
||||
private byte _receivedX[];
|
||||
private byte _bobIP[];
|
||||
private final int _bobPort;
|
||||
private DHSessionKeyBuilder _keyBuilder;
|
||||
// try to fix NPE in getSentY() ?????
|
||||
private volatile DHSessionKeyBuilder _keyBuilder;
|
||||
// SessionCreated message
|
||||
private byte _sentY[];
|
||||
private final byte _aliceIP[];
|
||||
|
@ -33,6 +33,8 @@ class OutboundMessageFragments {
|
||||
/** which peer should we build the next packet out of? */
|
||||
private int _nextPeer;
|
||||
private PacketBuilder _builder;
|
||||
private long _lastCycleTime = System.currentTimeMillis();
|
||||
|
||||
/** if we can handle more messages explicitly, set this to true */
|
||||
// private boolean _allowExcess; // LINT not used??
|
||||
// private volatile long _packetsRetransmitted; // LINT not used??
|
||||
@ -176,13 +178,13 @@ class OutboundMessageFragments {
|
||||
if (!_activePeers.contains(peer)) {
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Add a new message to a new peer " + peer.getRemotePeer().toBase64());
|
||||
if (_activePeers.isEmpty())
|
||||
_lastCycleTime = System.currentTimeMillis();
|
||||
_activePeers.add(peer);
|
||||
} else {
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Add a new message to an existing peer " + peer.getRemotePeer().toBase64());
|
||||
}
|
||||
if (_activePeers.size() == 1)
|
||||
_lastCycleTime = System.currentTimeMillis();
|
||||
_activePeers.notifyAll();
|
||||
}
|
||||
_context.statManager().addRateData("udp.outboundActiveCount", active, 0);
|
||||
@ -227,8 +229,6 @@ class OutboundMessageFragments {
|
||||
}
|
||||
}
|
||||
|
||||
private long _lastCycleTime = System.currentTimeMillis();
|
||||
|
||||
/**
|
||||
* Fetch all the packets for a message volley, blocking until there is a
|
||||
* message which can be fully transmitted (or the transport is shut down).
|
||||
@ -248,18 +248,24 @@ class OutboundMessageFragments {
|
||||
for (int i = 0; i < _activePeers.size(); i++) {
|
||||
int cur = (i + _nextPeer) % _activePeers.size();
|
||||
if (cur == 0) {
|
||||
// FIXME or delete, these stats aren't much help since they include the sleep time
|
||||
long ts = System.currentTimeMillis();
|
||||
long cycleTime = ts - _lastCycleTime;
|
||||
_lastCycleTime = ts;
|
||||
_context.statManager().addRateData("udp.sendCycleTime", cycleTime, _activePeers.size());
|
||||
if (cycleTime > 1000)
|
||||
// make longer than the default sleep time below
|
||||
if (cycleTime > 1100)
|
||||
_context.statManager().addRateData("udp.sendCycleTimeSlow", cycleTime, _activePeers.size());
|
||||
}
|
||||
peer = _activePeers.get(i);
|
||||
state = peer.allocateSend();
|
||||
if (state != null) {
|
||||
// we have something to send and we will be returning it
|
||||
_nextPeer = i + 1;
|
||||
break;
|
||||
} else {
|
||||
// Update the minimum delay for all peers (getNextDelay() returns 1 for "now")
|
||||
// which will be used if we found nothing to send across all peers
|
||||
int delay = peer.getNextDelay();
|
||||
if ( (nextSendDelay <= 0) || (delay < nextSendDelay) )
|
||||
nextSendDelay = delay;
|
||||
@ -274,8 +280,9 @@ class OutboundMessageFragments {
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("wait for " + nextSendDelay);
|
||||
// wait.. or somethin'
|
||||
// wait a min of 10 and a max of 3000 ms no matter what peer.getNextDelay() says
|
||||
if (nextSendDelay > 0)
|
||||
_activePeers.wait(nextSendDelay);
|
||||
_activePeers.wait(Math.min(Math.max(nextSendDelay, 10), 3000));
|
||||
else
|
||||
_activePeers.wait(1000);
|
||||
} else {
|
||||
|
@ -1270,7 +1270,7 @@ class PeerState {
|
||||
if (_dead) return -1;
|
||||
synchronized (msgs) {
|
||||
if (_retransmitter != null) {
|
||||
rv = (int)(now - _retransmitter.getNextSendTime());
|
||||
rv = (int)(_retransmitter.getNextSendTime() - now);
|
||||
if (rv <= 0)
|
||||
return 1;
|
||||
else
|
||||
|
@ -1986,8 +1986,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
|
||||
buf.append(DataHelper.formatDuration2(idleOut));
|
||||
buf.append("</td>");
|
||||
|
||||
int recvBps = (idleIn > 2 ? 0 : peer.getReceiveBps());
|
||||
int sendBps = (idleOut > 2 ? 0 : peer.getSendBps());
|
||||
int recvBps = (idleIn > 15*1000 ? 0 : peer.getReceiveBps());
|
||||
int sendBps = (idleOut > 15*1000 ? 0 : peer.getSendBps());
|
||||
|
||||
buf.append("<td class=\"cells\" align=\"right\" nowrap>");
|
||||
buf.append(formatKBps(recvBps));
|
||||
|