propagate from branch 'i2p.i2p' (head 2b1a99ea78270f80514ced3860a7d54cc3f2e309)
to branch 'i2p.i2p.zzz.VTBM' (head 155eea7b96fa5ce48faec385242e0b6eb232b0dd)
@@ -207,6 +207,9 @@ The following applications and libraries are not used or bundled in
|
||||
binary packages, therefore the licenses are not included in binary
|
||||
distributions. See the source package for the additional license information.
|
||||
|
||||
Admin Manager:
|
||||
Public domain
|
||||
|
||||
Atalk:
|
||||
Public domain
|
||||
|
||||
|
||||
@@ -256,11 +256,13 @@ public class BOB {
|
||||
listener = new ServerSocket(Integer.parseInt(props.getProperty(PROP_BOB_PORT)), 10, InetAddress.getByName(props.getProperty(PROP_BOB_HOST)));
|
||||
Socket server = null;
|
||||
listener.setSoTimeout(500); // .5 sec
|
||||
|
||||
while (spin.get()) {
|
||||
//DoCMDS connection;
|
||||
|
||||
try {
|
||||
server = listener.accept();
|
||||
server.setKeepAlive(true);
|
||||
g = true;
|
||||
} catch (ConnectException ce) {
|
||||
g = false;
|
||||
|
||||
@@ -691,6 +691,7 @@ public class DoCMDS implements Runnable {
|
||||
try {
|
||||
prikey = new ByteArrayOutputStream();
|
||||
prikey.write(net.i2p.data.Base64.decode(Arg));
|
||||
d = new Destination();
|
||||
d.fromBase64(Arg);
|
||||
} catch (Exception ex) {
|
||||
Arg = "";
|
||||
|
||||
@@ -102,6 +102,7 @@ public class I2PtoTCP implements Runnable {
|
||||
break die;
|
||||
}
|
||||
sock = new Socket(host, port);
|
||||
sock.setKeepAlive(true);
|
||||
// make readers/writers
|
||||
in = sock.getInputStream();
|
||||
out = sock.getOutputStream();
|
||||
|
||||
@@ -78,6 +78,7 @@ public class TCPlistener implements Runnable {
|
||||
while (lives.get()) {
|
||||
try {
|
||||
server = listener.accept();
|
||||
server.setKeepAlive(true);
|
||||
g = true;
|
||||
} catch (SocketTimeoutException ste) {
|
||||
g = false;
|
||||
|
||||
@@ -146,8 +146,14 @@ public class TCPtoI2P implements Runnable {
|
||||
input = line.toLowerCase();
|
||||
Destination dest = null;
|
||||
if (input.endsWith(".i2p")) {
|
||||
dest = I2PTunnel.destFromName(input);
|
||||
line = dest.toBase64();
|
||||
try {
|
||||
dest = I2PTunnel.destFromName(input);
|
||||
line = dest.toBase64();
|
||||
} catch (NullPointerException npe) {
|
||||
// Could not find the destination!?
|
||||
Emsg("Can't find destination: " + input, out);
|
||||
return;
|
||||
}
|
||||
}
|
||||
dest = new Destination();
|
||||
dest.fromBase64(line);
|
||||
|
||||
@@ -561,7 +561,7 @@ public class SnarkManager implements Snark.CompleteListener {
|
||||
if ( (files != null) && (files.size() > MAX_FILES_PER_TORRENT) ) {
|
||||
return _("Too many files in \"{0}\" ({1}), deleting it!", info.getName(), files.size());
|
||||
} else if ( (files == null) && (info.getName().endsWith(".torrent")) ) {
|
||||
return _("Torrent file \"{0}\" cannot end in '.torrent', deleting it!", info.getName());
|
||||
return _("Torrent file \"{0}\" cannot end in \".torrent\", deleting it!", info.getName());
|
||||
} else if (info.getPieces() <= 0) {
|
||||
return _("No pieces in \"{0}\", deleting it!", info.getName());
|
||||
} else if (info.getPieces() > Storage.MAX_PIECES) {
|
||||
|
||||
@@ -58,6 +58,23 @@
|
||||
<Arg>webapps/i2psnark.war</Arg>
|
||||
</Call>
|
||||
|
||||
<!-- this is so we can find the css -->
|
||||
<Call name="addContext">
|
||||
<Arg>
|
||||
<New class="org.mortbay.http.HttpContext">
|
||||
<Set name="contextPath">/themes</Set>
|
||||
<Set name="resourceBase">./docs/themes</Set>
|
||||
<Call name="addHandler">
|
||||
<Arg>
|
||||
<New class="org.mortbay.http.handler.ResourceHandler">
|
||||
<Set name="redirectWelcome">FALSE</Set>
|
||||
</New>
|
||||
</Arg>
|
||||
</Call>
|
||||
</New>
|
||||
</Arg>
|
||||
</Call>
|
||||
|
||||
<!-- =============================================================== -->
|
||||
<!-- Configure the Other Server Options -->
|
||||
<!-- =============================================================== -->
|
||||
|
||||
@@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P i2psnark\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-12-14 03:19+0000\n"
|
||||
"PO-Revision-Date: 2009-12-20 07:03+0000\n"
|
||||
"POT-Creation-Date: 2010-01-14 06:24+0000\n"
|
||||
"PO-Revision-Date: 2010-01-14 06:33+0000\n"
|
||||
"Last-Translator: 4get <forget@mail.i2p>\n"
|
||||
"Language-Team: foo <foo@bar>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -141,8 +141,8 @@ msgstr "Слишком много файлов в торренте \"{0}\" ({1})
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:564
|
||||
#, java-format
|
||||
msgid "Torrent file \"{0}\" cannot end in '.torrent', deleting it!"
|
||||
msgstr "Торрент \"{0}\" содержит единственный файл заканчивающийся на '.torrent', удаляем его!"
|
||||
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
|
||||
msgstr "Торрент \"{0}\" содержит единственный файл заканчивающийся на \".torrent\", удаляем его!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:566
|
||||
#, java-format
|
||||
@@ -291,13 +291,13 @@ msgid "Torrent file {0} does not exist"
|
||||
msgstr "Торрент {0} не существует"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:237
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:986
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:990
|
||||
#, java-format
|
||||
msgid "Torrent already running: {0}"
|
||||
msgstr "Торрент уже запущен: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:239
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:988
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:992
|
||||
#, java-format
|
||||
msgid "Torrent already in the queue: {0}"
|
||||
msgstr "Торрент уже в очереди: {0}"
|
||||
@@ -414,7 +414,7 @@ msgstr "ОшибкаТрекера"
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:530
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:534
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:536
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:859
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:862
|
||||
msgid "peers"
|
||||
msgstr "пир."
|
||||
|
||||
@@ -454,7 +454,7 @@ msgid "Open file"
|
||||
msgstr "Открыть файл"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:579
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:779
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:781
|
||||
msgid "Tracker"
|
||||
msgstr "Трекер"
|
||||
|
||||
@@ -514,134 +514,134 @@ msgstr "Uninterested (У нас нужных этому пиру частей т
|
||||
msgid "Choking (We are not allowing the peer to request pieces)"
|
||||
msgstr "Choking (Мы не позволяем этому пиру запрашивать у нас части торрента)"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:742
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:743
|
||||
msgid "Add Torrent"
|
||||
msgstr "Добавить Торрент"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:744
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:745
|
||||
msgid "From URL"
|
||||
msgstr "Из URL"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:749
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:750
|
||||
msgid "Add torrent"
|
||||
msgstr "Добавить торрент"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:752
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:753
|
||||
#, java-format
|
||||
msgid "Alternately, you can copy .torrent files to the directory {0}."
|
||||
msgstr "Ну или вы можете скопировать .torrent-файлы в директорию {0}."
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:754
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:755
|
||||
msgid "Removing a .torrent file will cause the torrent to stop."
|
||||
msgstr "Удаление .torrent-файла приведет к остановке торрента."
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:770
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:772
|
||||
msgid "Create Torrent"
|
||||
msgstr "Создать Торрент"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:773
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:775
|
||||
msgid "Data to seed"
|
||||
msgstr "Файлы для раздачи"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:777
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:779
|
||||
msgid "File or directory to seed (must be within the specified path)"
|
||||
msgstr "Файл или директория для раздачи (вводите только название файла или директории, указание абсолютных путей не поддерживается)"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:781
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:783
|
||||
msgid "Select a tracker"
|
||||
msgstr "Выбрать трекер"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:794
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:796
|
||||
msgid "or"
|
||||
msgstr "или"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:797
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:799
|
||||
msgid "Specify custom tracker announce URL"
|
||||
msgstr "Задать URL анонсера вручную"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:800
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:802
|
||||
msgid "Create torrent"
|
||||
msgstr "Создать торрент"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:817
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:820
|
||||
msgid "Configuration"
|
||||
msgstr "Настройки"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:820
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:823
|
||||
msgid "Data directory"
|
||||
msgstr "Директория для файлов"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:823
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:826
|
||||
msgid "Directory to store torrents and data"
|
||||
msgstr "Директория, где будут храниться торренты и загружаемые файлы"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:825
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:828
|
||||
msgid "Edit i2psnark.config and restart to change"
|
||||
msgstr "Для изменения отредактируйте файл i2psnark.config и перезагрузите I2PSnark"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:829
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:832
|
||||
msgid "Auto start"
|
||||
msgstr "Автозапуск"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:833
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:836
|
||||
msgid "If checked, automatically start torrents that are added"
|
||||
msgstr "Автоматически запускать торренты после добавления"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:856
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:859
|
||||
msgid "Total uploader limit"
|
||||
msgstr "Ограничение количества слотов отдачи"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:863
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:866
|
||||
msgid "Up bandwidth limit"
|
||||
msgstr "Ограничение скорости отдачи"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:866
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:869
|
||||
msgid "Half available bandwidth recommended."
|
||||
msgstr "Рекомендуется использовать половину от доступной пропускной способности."
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:868
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:871
|
||||
msgid "View or change router bandwidth"
|
||||
msgstr "Посмотреть/настроить ограничения скорости в маршрутизаторе I2P"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:872
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:875
|
||||
msgid "Use open trackers also"
|
||||
msgstr "Дополнительно использовать открытые трекеры"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:876
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:879
|
||||
msgid "If checked, announce torrents to open trackers as well as the tracker listed in the torrent file"
|
||||
msgstr "Анонсировать торренты на открытых трекерах, дополнительно к тем, что указаны внутри торрента"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:880
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:883
|
||||
msgid "Open tracker announce URLs"
|
||||
msgstr "URL открытых трекеров"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:891
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:894
|
||||
msgid "I2CP host"
|
||||
msgstr "Адрес I2CP"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:896
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:899
|
||||
msgid "I2CP port"
|
||||
msgstr "Порт I2CP"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:909
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:912
|
||||
msgid "I2CP options"
|
||||
msgstr "Параметры I2CP"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:914
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:917
|
||||
msgid "Save configuration"
|
||||
msgstr "Сохранить настройки"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:967
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:970
|
||||
#, java-format
|
||||
msgid "Torrent fetched from {0}"
|
||||
msgstr "Получен торрент из: {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:994
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:998
|
||||
#, java-format
|
||||
msgid "Torrent at {0} was not valid"
|
||||
msgstr "Торрент полученный из {0} некорректен"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:999
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1003
|
||||
#, java-format
|
||||
msgid "Torrent was not retrieved from {0}"
|
||||
msgstr "Не удалось получить торрент из: {0}"
|
||||
|
||||
@@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P i2psnark\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-12-18 06:45+0000\n"
|
||||
"PO-Revision-Date: 2009-12-27 10:47+0800\n"
|
||||
"POT-Creation-Date: 2010-01-29 07:17+0000\n"
|
||||
"PO-Revision-Date: 2010-01-29 15:30+0800\n"
|
||||
"Last-Translator: walking <zhazhenzhong@gmail.com>\n"
|
||||
"Language-Team: foo <foo@bar>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -141,8 +141,8 @@ msgstr "\"{0}\" ({1}) 含有太多文件,删除之!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:564
|
||||
#, java-format
|
||||
msgid "Torrent file \"{0}\" cannot end in '.torrent', deleting it!"
|
||||
msgstr "种子文件 \"{0}\" 不以 \".torrent\"结尾,删除之!"
|
||||
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
|
||||
msgstr "种子文件 \"{0}\" 不以 \".torrent\"结尾,正在删除!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:566
|
||||
#, java-format
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
/* I2PTunnel is GPL'ed (with the exception mentioned in I2PTunnel.java)
|
||||
* (c) 2003 - 2004 mihi
|
||||
*/
|
||||
package net.i2p.i2ptunnel;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import net.i2p.util.Log;
|
||||
|
||||
/**
|
||||
* Read what i2ptunnel logs, and expose it in a buffer
|
||||
*
|
||||
*/
|
||||
class BufferLogger implements Logging {
|
||||
private final static Log _log = new Log(BufferLogger.class);
|
||||
private ByteArrayOutputStream _baos; // FIXME should be final and use a factory. FIXME
|
||||
private boolean _ignore;
|
||||
|
||||
/**
|
||||
* Constructs a buffered logger.
|
||||
*/
|
||||
public BufferLogger() {
|
||||
_baos = new ByteArrayOutputStream(512);
|
||||
_ignore = false;
|
||||
}
|
||||
|
||||
private final static String EMPTY = "";
|
||||
|
||||
/**
|
||||
* Retrieves the buffer
|
||||
* @return the buffer
|
||||
*/
|
||||
public String getBuffer() {
|
||||
if (_ignore)
|
||||
return EMPTY;
|
||||
|
||||
return new String(_baos.toByteArray());
|
||||
}
|
||||
|
||||
/**
|
||||
* We don't care about anything else the logger receives. This is useful
|
||||
* for loggers passed in to servers and clients, since they will continue
|
||||
* to add info to the logger, but if we're instantiated by the tunnel manager,
|
||||
* its likely we only care about the first few messages it sends us.
|
||||
*
|
||||
*/
|
||||
public void ignoreFurtherActions() {
|
||||
_ignore = true;
|
||||
synchronized (_baos) {
|
||||
_baos.reset();
|
||||
}
|
||||
_baos = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Pass in some random data
|
||||
* @param s String containing what we're logging.
|
||||
*/
|
||||
public void log(String s) {
|
||||
if (_ignore) return;
|
||||
if (s != null) {
|
||||
_log.debug("logging [" + s + "]");
|
||||
try {
|
||||
_baos.write(s.getBytes());
|
||||
_baos.write('\n');
|
||||
} catch (IOException ioe) {
|
||||
_log.error("Error logging [" + s + "]");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -236,6 +236,8 @@ public class I2PTunnel implements Logging, EventDispatcher {
|
||||
runServer(args, l);
|
||||
} else if ("httpserver".equals(cmdname)) {
|
||||
runHttpServer(args, l);
|
||||
} else if ("httpbidirserver".equals(cmdname)) {
|
||||
runHttpBidirServer(args, l);
|
||||
} else if ("ircserver".equals(cmdname)) {
|
||||
runIrcServer(args, l);
|
||||
} else if ("textserver".equals(cmdname)) {
|
||||
@@ -300,6 +302,7 @@ public class I2PTunnel implements Logging, EventDispatcher {
|
||||
l.log("ping <args>");
|
||||
l.log("server <host> <port> <privkeyfile>");
|
||||
l.log("httpserver <host> <port> <spoofedhost> <privkeyfile>");
|
||||
l.log("httpbidirserver <host> <port> <proxyport> <spoofedhost> <privkeyfile>");
|
||||
l.log("textserver <host> <port> <privkey>");
|
||||
l.log("genkeys <privkeyfile> [<pubkeyfile>]");
|
||||
l.log("gentextkeys");
|
||||
@@ -503,6 +506,80 @@ public class I2PTunnel implements Logging, EventDispatcher {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the HTTP server pointing at the host and port specified using the private i2p
|
||||
* destination loaded from the specified file, replacing the HTTP headers
|
||||
* so that the Host: specified is the one spoofed. Also runs an HTTP proxy for
|
||||
* bidirectional communications on the same tunnel destination.<p />
|
||||
*
|
||||
* Sets the event "serverTaskId" = Integer(taskId) after the tunnel has been started (or -1 on error)
|
||||
* Also sets the event "openServerResult" = "ok" or "error" (displaying "Ready!" on the logger after
|
||||
* 'ok'). So, success = serverTaskId != -1 and openServerResult = ok.
|
||||
*
|
||||
* @param args {hostname, portNumber, proxyPortNumber, spoofedHost, privKeyFilename}
|
||||
* @param l logger to receive events and output
|
||||
*/
|
||||
public void runHttpBidirServer(String args[], Logging l) {
|
||||
if (args.length == 5) {
|
||||
InetAddress serverHost = null;
|
||||
int portNum = -1;
|
||||
int port2Num = -1;
|
||||
File privKeyFile = null;
|
||||
try {
|
||||
serverHost = InetAddress.getByName(args[0]);
|
||||
} catch (UnknownHostException uhe) {
|
||||
l.log("unknown host");
|
||||
_log.error(getPrefix() + "Error resolving " + args[0], uhe);
|
||||
notifyEvent("serverTaskId", Integer.valueOf(-1));
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
portNum = Integer.parseInt(args[1]);
|
||||
} catch (NumberFormatException nfe) {
|
||||
l.log("invalid port");
|
||||
_log.error(getPrefix() + "Port specified is not valid: " + args[1], nfe);
|
||||
notifyEvent("serverTaskId", Integer.valueOf(-1));
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
port2Num = Integer.parseInt(args[2]);
|
||||
} catch (NumberFormatException nfe) {
|
||||
l.log("invalid port");
|
||||
_log.error(getPrefix() + "Port specified is not valid: " + args[2], nfe);
|
||||
notifyEvent("serverTaskId", Integer.valueOf(-1));
|
||||
return;
|
||||
}
|
||||
|
||||
String spoofedHost = args[3];
|
||||
|
||||
privKeyFile = new File(args[4]);
|
||||
if (!privKeyFile.isAbsolute())
|
||||
privKeyFile = new File(_context.getConfigDir(), args[4]);
|
||||
if (!privKeyFile.canRead()) {
|
||||
l.log("private key file does not exist");
|
||||
_log.error(getPrefix() + "Private key file does not exist or is not readable: " + args[4]);
|
||||
notifyEvent("serverTaskId", Integer.valueOf(-1));
|
||||
return;
|
||||
}
|
||||
|
||||
I2PTunnelHTTPBidirServer serv = new I2PTunnelHTTPBidirServer(serverHost, portNum, port2Num, privKeyFile, args[3], spoofedHost, l, (EventDispatcher) this, this);
|
||||
serv.setReadTimeout(readTimeout);
|
||||
serv.startRunning();
|
||||
addtask(serv);
|
||||
notifyEvent("serverTaskId", Integer.valueOf(serv.getId()));
|
||||
return;
|
||||
} else {
|
||||
l.log("httpserver <host> <port> <proxyport> <spoofedhost> <privkeyfile>");
|
||||
l.log(" creates a bidirectional HTTP server that sends all incoming data\n"
|
||||
+ " of its destination to host:port., filtering the HTTP\n"
|
||||
+ " headers so it looks like the request is to the spoofed host,"
|
||||
+ " and listens to host:proxyport to proxy HTTP requests.");
|
||||
notifyEvent("serverTaskId", Integer.valueOf(-1));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the server pointing at the host and port specified using the private i2p
|
||||
* destination loaded from the given base64 stream. <p />
|
||||
|
||||
@@ -67,7 +67,7 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna
|
||||
// private Object conLock = new Object();
|
||||
|
||||
/** List of Socket for those accept()ed but not yet started up */
|
||||
private List _waitingSockets = new ArrayList(); // FIXME should be final and use a factory. FIXME
|
||||
protected final List _waitingSockets = new ArrayList(4); // FIXME should be final and use a factory. FIXME
|
||||
/** How many connections will we allow to be in the process of being built at once? */
|
||||
private int _numConnectionBuilders;
|
||||
/** How long will we allow sockets to sit in the _waitingSockets map before killing them? */
|
||||
@@ -89,12 +89,52 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna
|
||||
|
||||
private static final int DEFAULT_NUM_CONNECTION_BUILDERS = 5;
|
||||
private static final int DEFAULT_MAX_WAIT_TIME = 30*1000;
|
||||
|
||||
//public I2PTunnelClientBase(int localPort, boolean ownDest,
|
||||
// Logging l) {
|
||||
// I2PTunnelClientBase(localPort, ownDest, l, (EventDispatcher)null);
|
||||
//}
|
||||
|
||||
// true if we are chained from a server.
|
||||
private boolean chained = false;
|
||||
|
||||
public I2PTunnelClientBase(int localPort, Logging l, I2PSocketManager sktMgr,
|
||||
I2PTunnel tunnel, EventDispatcher notifyThis, long clientId )
|
||||
throws IllegalArgumentException {
|
||||
super(localPort + " (uninitialized)", notifyThis, tunnel);
|
||||
chained = true;
|
||||
sockMgr = sktMgr;
|
||||
_clientId = clientId;
|
||||
this.localPort = localPort;
|
||||
this.l = l;
|
||||
this.handlerName = handlerName + _clientId;
|
||||
_ownDest = true; // == ! shared client
|
||||
_context = tunnel.getContext();
|
||||
_context.statManager().createRateStat("i2ptunnel.client.closeBacklog", "How many pending sockets remain when we close one due to backlog?", "I2PTunnel", new long[] { 60*1000, 10*60*1000, 60*60*1000 });
|
||||
_context.statManager().createRateStat("i2ptunnel.client.closeNoBacklog", "How many pending sockets remain when it was removed prior to backlog timeout?", "I2PTunnel", new long[] { 60*1000, 10*60*1000, 60*60*1000 });
|
||||
_context.statManager().createRateStat("i2ptunnel.client.manageTime", "How long it takes to accept a socket and fire it into an i2ptunnel runner (or queue it for the pool)?", "I2PTunnel", new long[] { 60*1000, 10*60*1000, 60*60*1000 });
|
||||
_context.statManager().createRateStat("i2ptunnel.client.buildRunTime", "How long it takes to run a queued socket into an i2ptunnel runner?", "I2PTunnel", new long[] { 60*1000, 10*60*1000, 60*60*1000 });
|
||||
|
||||
Thread t = new I2PAppThread(this);
|
||||
t.setName("Client " + _clientId);
|
||||
listenerReady = false;
|
||||
t.start();
|
||||
open = true;
|
||||
synchronized (this) {
|
||||
while (!listenerReady && open) {
|
||||
try {
|
||||
wait();
|
||||
} catch (InterruptedException e) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
configurePool(tunnel);
|
||||
|
||||
if (open && listenerReady) {
|
||||
l.log("Ready! Port " + getLocalPort());
|
||||
notifyEvent("openBaseClientResult", "ok");
|
||||
} else {
|
||||
l.log("Error listening - please see the logs!");
|
||||
notifyEvent("openBaseClientResult", "error");
|
||||
}
|
||||
}
|
||||
public I2PTunnelClientBase(int localPort, boolean ownDest, Logging l,
|
||||
EventDispatcher notifyThis, String handlerName,
|
||||
I2PTunnel tunnel) throws IllegalArgumentException {
|
||||
@@ -188,7 +228,7 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna
|
||||
*
|
||||
*/
|
||||
private void configurePool(I2PTunnel tunnel) {
|
||||
_waitingSockets = new ArrayList(4);
|
||||
//_waitingSockets = new ArrayList(4);
|
||||
|
||||
Properties opts = tunnel.getClientOptions();
|
||||
String maxWait = opts.getProperty(PROP_MAX_WAIT_TIME, DEFAULT_MAX_WAIT_TIME+"");
|
||||
@@ -559,10 +599,12 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna
|
||||
}
|
||||
return false;
|
||||
}
|
||||
I2PSession session = sockMgr.getSession();
|
||||
if (session != null) {
|
||||
getTunnel().removeSession(session);
|
||||
}
|
||||
if (!chained) {
|
||||
I2PSession session = sockMgr.getSession();
|
||||
if (session != null) {
|
||||
getTunnel().removeSession(session);
|
||||
}
|
||||
} // else the app chaining to this one closes it!
|
||||
}
|
||||
l.log("Closing client " + toString());
|
||||
open = false;
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
* Version 2, December 2004
|
||||
*
|
||||
* Copyright (C) sponge
|
||||
* Planet Earth
|
||||
* Everyone is permitted to copy and distribute verbatim or modified
|
||||
* copies of this license document, and changing it is allowed as long
|
||||
* as the name is changed.
|
||||
*
|
||||
* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
* TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
*
|
||||
* 0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
*
|
||||
* See...
|
||||
*
|
||||
* http://sam.zoy.org/wtfpl/
|
||||
* and
|
||||
* http://en.wikipedia.org/wiki/WTFPL
|
||||
*
|
||||
* ...for any additional details and liscense questions.
|
||||
*/
|
||||
|
||||
package net.i2p.i2ptunnel;
|
||||
|
||||
// import java.util.ArrayList;
|
||||
|
||||
import net.i2p.client.streaming.I2PSocketManager;
|
||||
import net.i2p.util.EventDispatcher;
|
||||
|
||||
|
||||
/**
|
||||
* Reuse HTTP server's I2PSocketManager for a proxy with no outproxy capability.
|
||||
*
|
||||
* @author sponge
|
||||
*/
|
||||
public class I2PTunnelHTTPBidirProxy extends I2PTunnelHTTPClient implements Runnable {
|
||||
|
||||
|
||||
/**
|
||||
* @throws IllegalArgumentException if the I2PTunnel does not contain
|
||||
* valid config to contact the router
|
||||
*/
|
||||
public I2PTunnelHTTPBidirProxy(int localPort, Logging l, I2PSocketManager sockMgr, I2PTunnel tunnel, EventDispatcher notifyThis, long clientId) {
|
||||
super(localPort, l, sockMgr, tunnel, notifyThis, clientId);
|
||||
// proxyList = new ArrayList();
|
||||
|
||||
setName(getLocalPort() + " -> HTTPClient [NO PROXIES]");
|
||||
startRunning();
|
||||
|
||||
notifyEvent("openHTTPClientResult", "ok");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
/* I2PTunnel is GPL'ed (with the exception mentioned in I2PTunnel.java)
|
||||
* (c) 2003 - 2004 mihi
|
||||
*/
|
||||
package net.i2p.i2ptunnel;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.net.InetAddress;
|
||||
|
||||
import net.i2p.util.EventDispatcher;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
public class I2PTunnelHTTPBidirServer extends I2PTunnelHTTPServer {
|
||||
private final static Log log = new Log(I2PTunnelHTTPBidirServer.class);
|
||||
|
||||
public I2PTunnelHTTPBidirServer(InetAddress host, int port, int proxyport, String privData, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) {
|
||||
super(host, port, privData, spoofHost, l, notifyThis, tunnel);
|
||||
finishSetupI2PTunnelHTTPBidirServer(l, proxyport);
|
||||
}
|
||||
|
||||
public I2PTunnelHTTPBidirServer(InetAddress host, int port, int proxyport, File privkey, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) {
|
||||
super(host, port, privkey, privkeyname, spoofHost, l, notifyThis, tunnel);
|
||||
finishSetupI2PTunnelHTTPBidirServer(l, proxyport);
|
||||
}
|
||||
|
||||
public I2PTunnelHTTPBidirServer(InetAddress host, int port, int proxyport, InputStream privData, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) {
|
||||
super(host, port, privData, privkeyname, spoofHost, l, notifyThis, tunnel);
|
||||
finishSetupI2PTunnelHTTPBidirServer(l, proxyport);
|
||||
}
|
||||
|
||||
private void finishSetupI2PTunnelHTTPBidirServer(Logging l, int proxyport) {
|
||||
|
||||
localPort = proxyport;
|
||||
bidir = true;
|
||||
|
||||
/* start the httpclient */
|
||||
task = new I2PTunnelHTTPBidirProxy(localPort, l, sockMgr, getTunnel(), getEventDispatcher(), __serverId);
|
||||
sockMgr.setName("Server"); // TO-DO: Need to change this to "Bidir"!
|
||||
getTunnel().addSession(sockMgr.getSession());
|
||||
l.log("Ready!");
|
||||
notifyEvent("openServerResult", "ok");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import java.util.StringTokenizer;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.I2PException;
|
||||
import net.i2p.client.streaming.I2PSocket;
|
||||
import net.i2p.client.streaming.I2PSocketManager;
|
||||
import net.i2p.client.streaming.I2PSocketOptions;
|
||||
import net.i2p.data.DataFormatException;
|
||||
import net.i2p.data.DataHelper;
|
||||
@@ -56,7 +57,7 @@ import net.i2p.util.Translate;
|
||||
public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable {
|
||||
private static final Log _log = new Log(I2PTunnelHTTPClient.class);
|
||||
|
||||
private final List proxyList;
|
||||
protected final List proxyList = new ArrayList();
|
||||
|
||||
private HashMap addressHelpers = new HashMap();
|
||||
|
||||
@@ -150,7 +151,15 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
|
||||
|
||||
private static final File _errorDir = new File(I2PAppContext.getGlobalContext().getBaseDir(), "docs");
|
||||
|
||||
public I2PTunnelHTTPClient(int localPort, Logging l, I2PSocketManager sockMgr, I2PTunnel tunnel, EventDispatcher notifyThis, long clientId) {
|
||||
super(localPort, l, sockMgr, tunnel, notifyThis, clientId);
|
||||
// proxyList = new ArrayList();
|
||||
|
||||
setName(getLocalPort() + " -> HTTPClient [NO PROXIES]");
|
||||
startRunning();
|
||||
|
||||
notifyEvent("openHTTPClientResult", "ok");
|
||||
}
|
||||
/**
|
||||
* @throws IllegalArgumentException if the I2PTunnel does not contain
|
||||
* valid config to contact the router
|
||||
@@ -160,7 +169,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
|
||||
I2PTunnel tunnel) throws IllegalArgumentException {
|
||||
super(localPort, ownDest, l, notifyThis, "HTTPHandler " + (++__clientId), tunnel);
|
||||
|
||||
proxyList = new ArrayList();
|
||||
//proxyList = new ArrayList(); // We won't use outside of i2p
|
||||
if (waitEventValue("openBaseClientResult").equals("error")) {
|
||||
notifyEvent("openHTTPClientResult", "error");
|
||||
return;
|
||||
@@ -251,6 +260,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
|
||||
/**
|
||||
* Overridden to close internal socket too.
|
||||
*/
|
||||
@Override
|
||||
public boolean close(boolean forced) {
|
||||
boolean rv = super.close(forced);
|
||||
if (this.isr != null)
|
||||
|
||||
@@ -39,21 +39,21 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
|
||||
|
||||
public I2PTunnelHTTPServer(InetAddress host, int port, String privData, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) {
|
||||
super(host, port, privData, l, notifyThis, tunnel);
|
||||
_spoofHost = spoofHost;
|
||||
getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpserver.blockingHandleTime", "how long the blocking handle takes to complete", "I2PTunnel", new long[] { 60*1000, 10*60*1000, 3*60*60*1000 });
|
||||
getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpNullWorkaround", "How often an http server works around a streaming lib or i2ptunnel bug", "I2PTunnel", new long[] { 60*1000, 10*60*1000 });
|
||||
setupI2PTunnelHTTPServer(spoofHost);
|
||||
}
|
||||
|
||||
public I2PTunnelHTTPServer(InetAddress host, int port, File privkey, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) {
|
||||
super(host, port, privkey, privkeyname, l, notifyThis, tunnel);
|
||||
_spoofHost = spoofHost;
|
||||
getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpserver.blockingHandleTime", "how long the blocking handle takes to complete", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000, 3*60*60*1000 });
|
||||
getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpNullWorkaround", "How often an http server works around a streaming lib or i2ptunnel bug", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000 });
|
||||
setupI2PTunnelHTTPServer(spoofHost);
|
||||
}
|
||||
|
||||
public I2PTunnelHTTPServer(InetAddress host, int port, InputStream privData, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) {
|
||||
super(host, port, privData, privkeyname, l, notifyThis, tunnel);
|
||||
_spoofHost = spoofHost;
|
||||
setupI2PTunnelHTTPServer(spoofHost);
|
||||
}
|
||||
|
||||
private void setupI2PTunnelHTTPServer(String spoofHost) {
|
||||
_spoofHost = spoofHost;
|
||||
getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpserver.blockingHandleTime", "how long the blocking handle takes to complete", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000, 3*60*60*1000 });
|
||||
getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpNullWorkaround", "How often an http server works around a streaming lib or i2ptunnel bug", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000 });
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
package net.i2p.i2ptunnel;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
@@ -48,26 +49,29 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
|
||||
protected long readTimeout = DEFAULT_READ_TIMEOUT;
|
||||
|
||||
private static final boolean DEFAULT_USE_POOL = false;
|
||||
|
||||
protected static volatile long __serverId = 0;
|
||||
private static final String PROP_HANDLER_COUNT = "i2ptunnel.blockingHandlerCount";
|
||||
private static final int DEFAULT_HANDLER_COUNT = 10;
|
||||
|
||||
|
||||
|
||||
protected I2PTunnelTask task = null;
|
||||
protected boolean bidir = false;
|
||||
|
||||
private int DEFAULT_LOCALPORT = 4488;
|
||||
protected int localPort = DEFAULT_LOCALPORT;
|
||||
|
||||
public I2PTunnelServer(InetAddress host, int port, String privData, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) {
|
||||
super(host + ":" + port + " <- " + privData, notifyThis, tunnel);
|
||||
ByteArrayInputStream bais = new ByteArrayInputStream(Base64.decode(privData));
|
||||
String usePool = tunnel.getClientOptions().getProperty("i2ptunnel.usePool");
|
||||
if (usePool != null)
|
||||
_usePool = "true".equalsIgnoreCase(usePool);
|
||||
else
|
||||
_usePool = DEFAULT_USE_POOL;
|
||||
SetUsePool(tunnel);
|
||||
init(host, port, bais, privData, l);
|
||||
}
|
||||
|
||||
public I2PTunnelServer(InetAddress host, int port, File privkey, String privkeyname, Logging l,
|
||||
EventDispatcher notifyThis, I2PTunnel tunnel) {
|
||||
super(host + ":" + port + " <- " + privkeyname, notifyThis, tunnel);
|
||||
String usePool = tunnel.getClientOptions().getProperty("i2ptunnel.usePool");
|
||||
if (usePool != null)
|
||||
_usePool = "true".equalsIgnoreCase(usePool);
|
||||
else
|
||||
_usePool = DEFAULT_USE_POOL;
|
||||
SetUsePool(tunnel);
|
||||
FileInputStream fis = null;
|
||||
try {
|
||||
fis = new FileInputStream(privkey);
|
||||
@@ -83,12 +87,17 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
|
||||
|
||||
public I2PTunnelServer(InetAddress host, int port, InputStream privData, String privkeyname, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) {
|
||||
super(host + ":" + port + " <- " + privkeyname, notifyThis, tunnel);
|
||||
String usePool = tunnel.getClientOptions().getProperty("i2ptunnel.usePool");
|
||||
SetUsePool(tunnel);
|
||||
init(host, port, privData, privkeyname, l);
|
||||
}
|
||||
|
||||
|
||||
private void SetUsePool(I2PTunnel Tunnel) {
|
||||
String usePool = Tunnel.getClientOptions().getProperty("i2ptunnel.usePool");
|
||||
if (usePool != null)
|
||||
_usePool = "true".equalsIgnoreCase(usePool);
|
||||
else
|
||||
_usePool = DEFAULT_USE_POOL;
|
||||
init(host, port, privData, privkeyname, l);
|
||||
}
|
||||
|
||||
private void init(InetAddress host, int port, InputStream privData, String privkeyname, Logging l) {
|
||||
@@ -106,17 +115,29 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
|
||||
}
|
||||
}
|
||||
|
||||
// copy the privData to a new BAIS, so we can always reset() it if we have to retry
|
||||
ByteArrayInputStream privDataCopy;
|
||||
try {
|
||||
privDataCopy = copyOfInputStream(privData);
|
||||
} catch (IOException ioe) {
|
||||
_log.log(Log.CRIT, "Cannot read private key data for " + privkeyname, ioe);
|
||||
return;
|
||||
}
|
||||
|
||||
// Todo: Can't stop a tunnel from the UI while it's in this loop (no session yet)
|
||||
while (sockMgr == null) {
|
||||
synchronized (slock) {
|
||||
sockMgr = I2PSocketManagerFactory.createManager(privData, getTunnel().host, portNum,
|
||||
sockMgr = I2PSocketManagerFactory.createManager(privDataCopy, getTunnel().host, portNum,
|
||||
props);
|
||||
|
||||
}
|
||||
if (sockMgr == null) {
|
||||
_log.log(Log.CRIT, "Unable to create socket manager");
|
||||
try { Thread.sleep(10*1000); } catch (InterruptedException ie) {}
|
||||
privDataCopy.reset();
|
||||
}
|
||||
}
|
||||
|
||||
sockMgr.setName("Server");
|
||||
getTunnel().addSession(sockMgr.getSession());
|
||||
l.log("Ready!");
|
||||
@@ -124,8 +145,24 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
|
||||
open = true;
|
||||
}
|
||||
|
||||
|
||||
private static volatile long __serverId = 0;
|
||||
/**
|
||||
* Copy input stream to a byte array, so we can retry
|
||||
* @since 0.7.10
|
||||
*/
|
||||
private static ByteArrayInputStream copyOfInputStream(InputStream is) throws IOException {
|
||||
byte[] buf = new byte[128];
|
||||
ByteArrayOutputStream os = new ByteArrayOutputStream(768);
|
||||
try {
|
||||
int read;
|
||||
while ((read = is.read(buf)) >= 0) {
|
||||
os.write(buf, 0, read);
|
||||
}
|
||||
} finally {
|
||||
try { is.close(); } catch (IOException ioe) {}
|
||||
// don't need to close BAOS
|
||||
}
|
||||
return new ByteArrayInputStream(os.toByteArray());
|
||||
}
|
||||
|
||||
/**
|
||||
* Start running the I2PTunnelServer.
|
||||
@@ -158,6 +195,9 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
|
||||
|
||||
public boolean close(boolean forced) {
|
||||
if (!open) return true;
|
||||
if (task != null) {
|
||||
task.close(forced);
|
||||
}
|
||||
synchronized (lock) {
|
||||
if (!forced && sockMgr.listSockets().size() != 0) {
|
||||
l.log("There are still active connections!");
|
||||
@@ -181,9 +221,6 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
|
||||
}
|
||||
}
|
||||
|
||||
private static final String PROP_HANDLER_COUNT = "i2ptunnel.blockingHandlerCount";
|
||||
private static final int DEFAULT_HANDLER_COUNT = 10;
|
||||
|
||||
protected int getHandlerCount() {
|
||||
int rv = DEFAULT_HANDLER_COUNT;
|
||||
String cnt = getTunnel().getClientOptions().getProperty(PROP_HANDLER_COUNT);
|
||||
|
||||
@@ -154,6 +154,8 @@ public class TunnelController implements Logging {
|
||||
startServer();
|
||||
} else if ("httpserver".equals(type)) {
|
||||
startHttpServer();
|
||||
} else if ("httpbidirserver".equals(type)) {
|
||||
startHttpBidirServer();
|
||||
} else if ("ircserver".equals(type)) {
|
||||
startIrcServer();
|
||||
} else if ("streamrserver".equals(type)) {
|
||||
@@ -294,6 +296,16 @@ public class TunnelController implements Logging {
|
||||
_tunnel.runHttpServer(new String[] { targetHost, targetPort, spoofedHost, privKeyFile }, this);
|
||||
}
|
||||
|
||||
private void startHttpBidirServer() {
|
||||
setListenOn();
|
||||
String targetHost = getTargetHost();
|
||||
String targetPort = getTargetPort();
|
||||
String listenPort = getListenPort();
|
||||
String spoofedHost = getSpoofedHost();
|
||||
String privKeyFile = getPrivKeyFile();
|
||||
_tunnel.runHttpBidirServer(new String[] { targetHost, targetPort, listenPort, spoofedHost, privKeyFile }, this);
|
||||
}
|
||||
|
||||
private void startIrcServer() {
|
||||
String targetHost = getTargetHost();
|
||||
String targetPort = getTargetPort();
|
||||
|
||||
@@ -16,7 +16,7 @@ public class Pinger implements Source, Runnable {
|
||||
|
||||
public void start() {
|
||||
this.running = true;
|
||||
this.waitlock = new Object();
|
||||
//this.waitlock = new Object();
|
||||
this.thread.start();
|
||||
}
|
||||
|
||||
@@ -54,6 +54,6 @@ public class Pinger implements Source, Runnable {
|
||||
|
||||
protected Sink sink;
|
||||
protected Thread thread;
|
||||
protected Object waitlock; // FIXME should be final and use a factory. FIXME
|
||||
private final Object waitlock = new Object();
|
||||
protected boolean running;
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ public class I2PSink implements Sink {
|
||||
|
||||
// create maker
|
||||
if (!raw)
|
||||
this.maker = new I2PDatagramMaker(this.sess);
|
||||
this.maker.setI2PDatagramMaker(this.sess);
|
||||
}
|
||||
|
||||
/** @param src ignored */
|
||||
@@ -54,20 +54,8 @@ public class I2PSink implements Sink {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
protected boolean raw;
|
||||
protected I2PSession sess;
|
||||
protected Destination dest;
|
||||
protected I2PDatagramMaker maker; // FIXME should be final and use a factory. FIXME
|
||||
protected final I2PDatagramMaker maker= new I2PDatagramMaker(); // FIXME should be final and use a factory. FIXME
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ public class I2PSinkAnywhere implements Sink {
|
||||
|
||||
// create maker
|
||||
if (!raw)
|
||||
this.maker = new I2PDatagramMaker(this.sess);
|
||||
this.maker.setI2PDatagramMaker(this.sess);
|
||||
}
|
||||
|
||||
/** @param to - where it's going */
|
||||
@@ -52,20 +52,8 @@ public class I2PSinkAnywhere implements Sink {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
protected boolean raw;
|
||||
protected I2PSession sess;
|
||||
protected Destination dest;
|
||||
protected I2PDatagramMaker maker; // FIXME should be final and use a factory. FIXME
|
||||
protected final I2PDatagramMaker maker = new I2PDatagramMaker();
|
||||
}
|
||||
|
||||
@@ -389,6 +389,7 @@ public class IndexBean {
|
||||
else if ("ircserver".equals(internalType)) return _("IRC server");
|
||||
else if ("streamrclient".equals(internalType)) return _("Streamr client");
|
||||
else if ("streamrserver".equals(internalType)) return _("Streamr server");
|
||||
else if ("httpbidirserver".equals(internalType)) return _("HTTP bidir");
|
||||
else return internalType;
|
||||
}
|
||||
|
||||
@@ -779,8 +780,11 @@ public class IndexBean {
|
||||
config.setProperty("listenPort", _port);
|
||||
if (_reachableByOther != null)
|
||||
config.setProperty("interface", _reachableByOther);
|
||||
else
|
||||
else if (_reachableBy != null)
|
||||
config.setProperty("interface", _reachableBy);
|
||||
else
|
||||
config.setProperty("interface", "");
|
||||
|
||||
config.setProperty("sharedClient", _sharedClient + "");
|
||||
for (String p : _booleanClientOpts)
|
||||
config.setProperty("option." + p, "" + _booleanOptions.contains(p));
|
||||
@@ -806,11 +810,22 @@ public class IndexBean {
|
||||
} else if ("ircclient".equals(_type) || "client".equals(_type) || "streamrclient".equals(_type)) {
|
||||
if (_targetDestination != null)
|
||||
config.setProperty("targetDestination", _targetDestination);
|
||||
} else if ("httpserver".equals(_type)) {
|
||||
} else if ("httpserver".equals(_type) || "httpbidirserver".equals(_type)) {
|
||||
if (_spoofedHost != null)
|
||||
config.setProperty("spoofedHost", _spoofedHost);
|
||||
}
|
||||
|
||||
if ("httpbidirserver".equals(_type)) {
|
||||
if (_port != null)
|
||||
config.setProperty("listenPort", _port);
|
||||
if (_reachableByOther != null)
|
||||
config.setProperty("interface", _reachableByOther);
|
||||
else if (_reachableBy != null)
|
||||
config.setProperty("interface", _reachableBy);
|
||||
else if (_targetHost != null)
|
||||
config.setProperty("interface", _targetHost);
|
||||
else
|
||||
config.setProperty("interface", "");
|
||||
}
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
@@ -113,11 +113,58 @@
|
||||
<input type="text" size="6" maxlength="5" id="targetPort" name="targetPort" title="Target Port Number" value="<%=editBean.getTargetPort(curTunnel)%>" class="freetext" />
|
||||
</div>
|
||||
|
||||
<% if ("httpbidirserver".equals(tunnelType)) {
|
||||
%>
|
||||
<div class="subdivider">
|
||||
<hr />
|
||||
</div>
|
||||
<div id="accessField" class="rowItem">
|
||||
<label><%=intl._("Access Point")%>:</label>
|
||||
</div>
|
||||
<div id="portField" class="rowItem">
|
||||
<label for="port" accesskey="P">
|
||||
<span class="accessKey">P</span>ort:
|
||||
<% String value4 = editBean.getClientPort(curTunnel);
|
||||
if (value4 == null || "".equals(value4.trim())) {
|
||||
out.write(" <font color=\"red\">(");
|
||||
out.write(intl._("required"));
|
||||
out.write(")</font>");
|
||||
}
|
||||
%>
|
||||
</label>
|
||||
<input type="text" size="6" maxlength="5" id="port" name="port" title="Access Port Number" value="<%=editBean.getClientPort(curTunnel)%>" class="freetext" />
|
||||
</div>
|
||||
<% String otherInterface = "";
|
||||
String clientInterface = editBean.getClientInterface(curTunnel);
|
||||
%>
|
||||
<div id="reachField" class="rowItem">
|
||||
<label for="reachableBy" accesskey="r">
|
||||
<%=intl._("Reachable by")%>(<span class="accessKey">R</span>):
|
||||
</label>
|
||||
<select id="reachableBy" name="reachableBy" title="Valid IP for Client Access" class="selectbox">
|
||||
<% if (!("127.0.0.1".equals(clientInterface)) &&
|
||||
!("0.0.0.0".equals(clientInterface)) &&
|
||||
(clientInterface != null) &&
|
||||
(clientInterface.trim().length() > 0)) {
|
||||
otherInterface = clientInterface;
|
||||
}
|
||||
%><option value="127.0.0.1"<%=("127.0.0.1".equals(clientInterface) ? " selected=\"selected\"" : "")%>><%=intl._("Locally (127.0.0.1)")%></option>
|
||||
<option value="0.0.0.0"<%=("0.0.0.0".equals(clientInterface) ? " selected=\"selected\"" : "")%>><%=intl._("Everyone (0.0.0.0)")%></option>
|
||||
<option value="other"<%=(!("".equals(otherInterface)) ? " selected=\"selected\"" : "")%>><%=intl._("LAN Hosts (Please specify your LAN address)")%></option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="otherField" class="rowItem">
|
||||
<label for="reachableByOther" accesskey="O">
|
||||
<%=intl._("Other")%>(<span class="accessKey">O</span>):
|
||||
</label>
|
||||
<input type="text" size="20" id="reachableByOther" name="reachableByOther" title="Alternative IP for Client Access" value="<%=otherInterface%>" class="freetext" />
|
||||
</div>
|
||||
<% } %>
|
||||
<div class="subdivider">
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<% if ("httpserver".equals(tunnelType)) {
|
||||
<% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
|
||||
%><div id="websiteField" class="rowItem">
|
||||
<label for="spoofedHost" accesskey="W">
|
||||
<%=intl._("Website name")%>(<span class="accessKey">W</span>):
|
||||
@@ -129,8 +176,8 @@
|
||||
%><div id="privKeyField" class="rowItem">
|
||||
<label for="privKeyFile" accesskey="k">
|
||||
<%=intl._("Private key file")%>(<span class="accessKey">k</span>):
|
||||
<% String value2 = editBean.getPrivateKeyFile(curTunnel);
|
||||
if (value2 == null || "".equals(value2.trim())) {
|
||||
<% String value3 = editBean.getPrivateKeyFile(curTunnel);
|
||||
if (value3 == null || "".equals(value3.trim())) {
|
||||
out.write(" <font color=\"red\">(");
|
||||
out.write(intl._("required"));
|
||||
out.write(")</font>");
|
||||
@@ -139,6 +186,7 @@
|
||||
</label>
|
||||
<input type="text" size="30" id="privKeyFile" name="privKeyFile" title="Path to Private Key File" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" />
|
||||
</div>
|
||||
|
||||
<% if (!"streamrserver".equals(tunnelType)) { %>
|
||||
<div id="profileField" class="rowItem">
|
||||
<label for="profile" accesskey="f">
|
||||
|
||||
@@ -107,9 +107,9 @@
|
||||
</div>
|
||||
<div class="targetField rowItem">
|
||||
<%
|
||||
if ("httpserver".equals(indexBean.getInternalType(curServer)) && indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
|
||||
if (("httpserver".equals(indexBean.getInternalType(curServer)) || ("httpbidirserver".equals(indexBean.getInternalType(curServer)))) && indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
|
||||
%><label><%=intl._("Preview")%>:</label>
|
||||
<a class="control" title="Test HTTP server through I2P" href="http://<%=indexBean.getDestHashBase32(curServer)%>.b32.i2p"><%=intl._("Preview")%></a>
|
||||
<a class="control" title="Test HTTP server through I2P" href="http://<%=indexBean.getDestHashBase32(curServer)%>.b32.i2p"><%=intl._("Preview")%></a>
|
||||
<%
|
||||
} else if (indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
|
||||
%><span class="text"><%=intl._("Base32 Address")%>:<br /><%=indexBean.getDestHashBase32(curServer)%>.b32.i2p</span>
|
||||
@@ -164,6 +164,7 @@
|
||||
<select name="type">
|
||||
<option value="server"><%=intl._("Standard")%></option>
|
||||
<option value="httpserver">HTTP</option>
|
||||
<option value="httpbidirserver">HTTP bidir</option>
|
||||
<option value="ircserver">IRC</option>
|
||||
<option value="streamrserver">Streamr</option>
|
||||
</select>
|
||||
|
||||
@@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P i2ptunnel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-01-02 04:59+0000\n"
|
||||
"PO-Revision-Date: 2010-01-02 07:05+0000\n"
|
||||
"POT-Creation-Date: 2010-01-14 06:24+0000\n"
|
||||
"PO-Revision-Date: 2010-01-18 18:40+0000\n"
|
||||
"Last-Translator: 4get <forget@mail.i2p>\n"
|
||||
"Language-Team: foo <foo@bar>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -17,12 +17,12 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Russian\n"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:430
|
||||
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:436
|
||||
#, java-format
|
||||
msgid "To visit the destination in your host database, click <a href=\"{0}\">here</a>. To visit the conflicting addresshelper link by temporarily giving it a random alias, click <a href=\"{1}\">here</a>."
|
||||
msgstr "Для перехода по ссылке из локальной адресной книги, нажмите <a href=\"{0}\">здесь</a>. Для перехода по новой addresshelper-ссылке с временным присвоением ей случайного имени, нажмите <a href=\"{1}\">здесь</a>."
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:800
|
||||
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:802
|
||||
msgid "Click a link below to look for an address helper by using a \"jump\" service:"
|
||||
msgstr "Jump-сервисы, которые, возможно, знают нужную Вам addresshelper-ссылку:"
|
||||
|
||||
@@ -70,6 +70,10 @@ msgstr "Streamr-клиент"
|
||||
msgid "Streamr server"
|
||||
msgstr "Streamr-сервер"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:392
|
||||
msgid "HTTP bidir"
|
||||
msgstr "HTTP bidir (экспериментальный двунаправленный режим, инструкцию спрашивайте у sponge)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:73
|
||||
msgid "I2P Tunnel Manager - Edit Client Tunnel"
|
||||
msgstr "Менеджер Туннелей I2P — Редактирование Клиентского Туннеля"
|
||||
@@ -112,6 +116,7 @@ msgstr "Точка доступа"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:130
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:132
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:167
|
||||
msgid "Access Point"
|
||||
msgstr "Точка доступа"
|
||||
|
||||
@@ -119,28 +124,34 @@ msgstr "Точка доступа"
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:179
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:207
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:157
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:181
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:172
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:228
|
||||
msgid "required"
|
||||
msgstr "*"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:150
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:183
|
||||
msgid "Reachable by"
|
||||
msgstr "Кому будет доступно (Сетевой интерфейс)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:162
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:195
|
||||
msgid "Locally (127.0.0.1)"
|
||||
msgstr "Только в пределах этого компьютера (127.0.0.1)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:166
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:199
|
||||
msgid "Everyone (0.0.0.0)"
|
||||
msgstr "Всем (0.0.0.0)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:170
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:203
|
||||
msgid "LAN Hosts (Please specify your LAN address)"
|
||||
msgstr "Только из локальной сети (Введите свой LAN-адрес)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:186
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:205
|
||||
msgid "Other"
|
||||
msgstr "Адрес сетевого интерфейса"
|
||||
|
||||
@@ -157,17 +168,17 @@ msgid "name or destination"
|
||||
msgstr "имя или адрес"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:220
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:190
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:237
|
||||
msgid "Profile"
|
||||
msgstr "Режим"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:227
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:197
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:244
|
||||
msgid "interactive connection"
|
||||
msgstr "оптимизировать для малых задержек (irc)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:231
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:201
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:248
|
||||
msgid "bulk connection (downloads/websites/BT)"
|
||||
msgstr "оптимизировать для большого обьема (www/bittorrent)"
|
||||
|
||||
@@ -198,7 +209,7 @@ msgid "(Check the Box for 'YES')"
|
||||
msgstr "(поставьте галочку для включения)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:253
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:219
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:266
|
||||
msgid "Advanced networking options"
|
||||
msgstr "Расширенные сетевые настройки"
|
||||
|
||||
@@ -207,151 +218,151 @@ msgid "(NOTE: when this client proxy is configured to share tunnels, then these
|
||||
msgstr "(ПРИМЕЧАНИЕ: при коллективном использовании туннелей эти опции будут применяться ко всем коллективным прокси-клиентам!)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:257
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:221
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:268
|
||||
msgid "Tunnel Options"
|
||||
msgstr "Параметры туннеля"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:259
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:223
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:270
|
||||
msgid "Length"
|
||||
msgstr "Длина"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:266
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:230
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:277
|
||||
msgid "0 hop tunnel (low anonymity, low latency)"
|
||||
msgstr "0 хопов (низкая анонимность, малые задержки)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:270
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:234
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:281
|
||||
msgid "1 hop tunnel (medium anonymity, medium latency)"
|
||||
msgstr "1 хоп (умеренная анонимность, умеренные задержки)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:274
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:238
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:285
|
||||
msgid "2 hop tunnel (high anonymity, high latency)"
|
||||
msgstr "2 хопа (высокая анонимность, высокие задержки)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:278
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:242
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:289
|
||||
msgid "3 hop tunnel (very high anonymity, poor performance)"
|
||||
msgstr "3 хопа (очень высокая анонимность, низкая производительность)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:287
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:251
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:298
|
||||
msgid "hop tunnel (very poor performance)"
|
||||
msgstr "хопов (очень низкая производительность)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:292
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:256
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:303
|
||||
msgid "Variance"
|
||||
msgstr "Разброс"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:299
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:263
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:310
|
||||
msgid "0 hop variance (no randomisation, consistant performance)"
|
||||
msgstr "нулевой разброс (без рандомизации, фиксированная производительность)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:303
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:267
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:314
|
||||
msgid "+ 0-1 hop variance (medium additive randomisation, subtractive performance)"
|
||||
msgstr "+ 0-1 разброс (умеренно повышенная рандомизация, пониженная производительность)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:307
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:271
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:318
|
||||
msgid "+ 0-2 hop variance (high additive randomisation, subtractive performance)"
|
||||
msgstr "+ 0-2 разброс (сильно повышенная рандомизация, пониженная производительность)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:311
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:275
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:322
|
||||
msgid "+/- 0-1 hop variance (standard randomisation, standard performance)"
|
||||
msgstr "+/- 0-1 разброс (стандартная рандомизация, стандартная производительность)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:315
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:279
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:326
|
||||
msgid "+/- 0-2 hop variance (not recommended)"
|
||||
msgstr "+/- 0-2 разброс (не рекомендуется)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:327
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:291
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:338
|
||||
msgid "hop variance"
|
||||
msgstr "разброс"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:332
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:296
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:343
|
||||
msgid "Count"
|
||||
msgstr "Количество"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:339
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:303
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:350
|
||||
msgid "1 inbound, 1 outbound tunnel (low bandwidth usage, less reliability)"
|
||||
msgstr "1 входящий, 1 исходящий туннель (низкая пропускная способность, низкая надежность) "
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:343
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:307
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:354
|
||||
msgid "2 inbound, 2 outbound tunnels (standard bandwidth usage, standard reliability)"
|
||||
msgstr "2 входящих, 2 исходящих туннеля (стандартная пропускная способность, стандартная надежность)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:347
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:311
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:358
|
||||
msgid "3 inbound, 3 outbound tunnels (higher bandwidth usage, higher reliability)"
|
||||
msgstr "3 входящих, 3 исходящих туннеля (высокая пропускная способность, высокая надежность)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:356
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:320
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:367
|
||||
msgid "tunnels"
|
||||
msgstr "туннелей"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:361
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:325
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:372
|
||||
msgid "Backup Count"
|
||||
msgstr "Резервное количество"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:368
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:332
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:379
|
||||
msgid "0 backup tunnels (0 redundancy, no added resource usage)"
|
||||
msgstr "без резервных туннелей (отсутствие избыточности, отсутствие дополнительной нагрузки на систему)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:372
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:336
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:383
|
||||
msgid "1 backup tunnel each direction (low redundancy, low resource usage)"
|
||||
msgstr "1 резервный туннель в каждом направлении (низкая избыточность, низкая нагрузка на систему)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:376
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:340
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:387
|
||||
msgid "2 backup tunnels each direction (medium redundancy, medium resource usage)"
|
||||
msgstr "2 резервных туннеля в каждом направлении (умеренная избыточность, умеренная нагрузка на систему)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:380
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:344
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:391
|
||||
msgid "3 backup tunnels each direction (high redundancy, high resource usage)"
|
||||
msgstr "3 резервных туннеля в каждом направлении (высокая избыточность, высокая нагрузка на систему)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:389
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:353
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:400
|
||||
msgid "backup tunnels"
|
||||
msgstr "резервных туннелей"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:394
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:358
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:405
|
||||
msgid "I2CP Options"
|
||||
msgstr "Параметры I2CP"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:396
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:146
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:360
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:407
|
||||
msgid "Host"
|
||||
msgstr "Адрес"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:400
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:152
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:364
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:411
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:244
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:266
|
||||
msgid "Port"
|
||||
msgstr "Порт"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:406
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:398
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:445
|
||||
msgid "Reduce tunnel quantity when idle"
|
||||
msgstr "Снижать количество туннелей при простое"
|
||||
|
||||
@@ -360,20 +371,20 @@ msgstr "Снижать количество туннелей при просто
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:430
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:442
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:452
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:370
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:388
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:400
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:417
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:435
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:447
|
||||
msgid "Enable"
|
||||
msgstr "Включить"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:412
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:404
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:451
|
||||
msgid "Reduced tunnel count"
|
||||
msgstr "Количество туннелей"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:416
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:436
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:408
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:455
|
||||
msgid "Idle minutes"
|
||||
msgstr "Минут простоя"
|
||||
|
||||
@@ -402,7 +413,7 @@ msgid "File"
|
||||
msgstr "Файл"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:460
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:205
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:252
|
||||
msgid "Local destination"
|
||||
msgstr "Локальный адрес назначения"
|
||||
|
||||
@@ -411,27 +422,27 @@ msgid "(if known)"
|
||||
msgstr "(если известен)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:468
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:444
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:491
|
||||
msgid "Custom options"
|
||||
msgstr "Дополнительные параметры"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:472
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:448
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:495
|
||||
msgid "NOTE: If tunnel is currently running, most changes will not take effect until tunnel is stopped and restarted."
|
||||
msgstr "ПРИМЕЧАНИЕ: для вступления в силу измененных настроек потребуется остановка и перезапуск туннеля"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:474
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:450
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:497
|
||||
msgid "Save"
|
||||
msgstr "Сохранить"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:478
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:454
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:501
|
||||
msgid "Delete"
|
||||
msgstr "Удалить"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:480
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:456
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:503
|
||||
msgid "Cancel"
|
||||
msgstr "Отмена"
|
||||
|
||||
@@ -447,92 +458,92 @@ msgstr "Редактирование настроек серверного ту
|
||||
msgid "New server settings"
|
||||
msgstr "Настройки нового серверного туннеля"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:167
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:214
|
||||
msgid "Website name"
|
||||
msgstr "Имя веб-сайта"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:171
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:218
|
||||
msgid "(leave blank for outproxies)"
|
||||
msgstr "(не заполнять для outproxy)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:176
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:223
|
||||
msgid "Private key file"
|
||||
msgstr "Файл секретного ключа"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:215
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:262
|
||||
msgid "Add to local addressbook"
|
||||
msgstr "Добавить в локальную адресную книгу"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:368
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:415
|
||||
msgid "Encrypt Leaseset"
|
||||
msgstr "Шифровать LeaseSet"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:374
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:421
|
||||
msgid "Encryption Key"
|
||||
msgstr "Ключ шифрования"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:378
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:425
|
||||
msgid "Generate New Key"
|
||||
msgstr "Сгенерировать новый ключ"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:380
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:427
|
||||
msgid "Generate"
|
||||
msgstr "Сгенерировать"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:382
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:442
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:429
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:489
|
||||
msgid "(Tunnel must be stopped first)"
|
||||
msgstr "(Туннель перед этим следует остановить)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:384
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:431
|
||||
msgid "Restricted Access List"
|
||||
msgstr "Ограниченный доступ"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:386
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:433
|
||||
msgid "Unimplemented"
|
||||
msgstr "не реализовано"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:392
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:439
|
||||
msgid "Access List"
|
||||
msgstr "Список доступа"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:396
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:443
|
||||
msgid "(Restrict to these clients only)"
|
||||
msgstr "(Разрешить доступ только перечисленным клиентам)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:412
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:459
|
||||
msgid "New Certificate type"
|
||||
msgstr "Создать новый сертификат. Тип"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:414
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:461
|
||||
msgid "None"
|
||||
msgstr "Без"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:418
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:465
|
||||
msgid "Hashcash (effort)"
|
||||
msgstr "Hashcash (экспериментальный)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:424
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:471
|
||||
msgid "Hashcash Calc Time"
|
||||
msgstr "Время генерации hashcash-сертификата"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:426
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:473
|
||||
msgid "Estimate"
|
||||
msgstr "Прогноз"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:428
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:475
|
||||
msgid "Hidden"
|
||||
msgstr "Скрытый"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:432
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:479
|
||||
msgid "Signed (signed by)"
|
||||
msgstr "Подписанный (указать кем подписан)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:438
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:485
|
||||
msgid "Modify Certificate"
|
||||
msgstr "Изменить сертификат"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:440
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:487
|
||||
msgid "Modify"
|
||||
msgstr "Изменить"
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P i2ptunnel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-01-02 08:14+0000\n"
|
||||
"PO-Revision-Date: 2010-01-02 23:43+0800\n"
|
||||
"POT-Creation-Date: 2010-01-29 07:17+0000\n"
|
||||
"PO-Revision-Date: 2010-01-29 15:31+0800\n"
|
||||
"Last-Translator: walking <zhazhenzhong@gmail.com>\n"
|
||||
"Language-Team: foo <foo@bar>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -17,12 +17,12 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Chinese\n"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:426
|
||||
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:436
|
||||
#, java-format
|
||||
msgid "To visit the destination in your host database, click <a href=\"{0}\">here</a>. To visit the conflicting addresshelper link by temporarily giving it a random alias, click <a href=\"{1}\">here</a>."
|
||||
msgstr "要访问您本地【地址簿】中规定的主机(相当与IP),请点击<a href=\"{0}\">这里</a>。要访问【地址助手】返回的主机请点<a href=\"{1}\">这里</a>(主机的域名会被临时强制替换)。"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:792
|
||||
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:802
|
||||
msgid "Click a link below to look for an address helper by using a \"jump\" service:"
|
||||
msgstr "请点击下面的链接通过【跳转(Jump)】服务提供的【地址助手】链接跳转至域名对应的主机:"
|
||||
|
||||
@@ -70,6 +70,10 @@ msgstr "Streamr 客户端"
|
||||
msgid "Streamr server"
|
||||
msgstr "Streamr 服务器"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:392
|
||||
msgid "HTTP bidir"
|
||||
msgstr "双向http"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:73
|
||||
msgid "I2P Tunnel Manager - Edit Client Tunnel"
|
||||
msgstr "I2P 隧道管理器 - 编辑客户端隧道"
|
||||
@@ -112,6 +116,7 @@ msgstr "目标"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:130
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:132
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:167
|
||||
msgid "Access Point"
|
||||
msgstr "接入点"
|
||||
|
||||
@@ -119,28 +124,34 @@ msgstr "接入点"
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:179
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:207
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:157
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:181
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:172
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:228
|
||||
msgid "required"
|
||||
msgstr "必要"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:150
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:183
|
||||
msgid "Reachable by"
|
||||
msgstr "访问地址"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:162
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:195
|
||||
msgid "Locally (127.0.0.1)"
|
||||
msgstr "本地(127.0.0.1)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:166
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:199
|
||||
msgid "Everyone (0.0.0.0)"
|
||||
msgstr "任何人(0.0.0.0)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:170
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:203
|
||||
msgid "LAN Hosts (Please specify your LAN address)"
|
||||
msgstr "局域网(请指定LAN地址)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:186
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:205
|
||||
msgid "Other"
|
||||
msgstr "其他"
|
||||
|
||||
@@ -157,17 +168,17 @@ msgid "name or destination"
|
||||
msgstr "名称或描述"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:220
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:190
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:237
|
||||
msgid "Profile"
|
||||
msgstr "连接类型"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:227
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:197
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:244
|
||||
msgid "interactive connection"
|
||||
msgstr "速度连接"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:231
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:201
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:248
|
||||
msgid "bulk connection (downloads/websites/BT)"
|
||||
msgstr "效率连接(下载/WEB/BT)"
|
||||
|
||||
@@ -198,7 +209,7 @@ msgid "(Check the Box for 'YES')"
|
||||
msgstr "(选中表示\"是\")"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:253
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:219
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:266
|
||||
msgid "Advanced networking options"
|
||||
msgstr "高级网络设置"
|
||||
|
||||
@@ -207,151 +218,151 @@ msgid "(NOTE: when this client proxy is configured to share tunnels, then these
|
||||
msgstr "(注意:此客户代理被设置使用共享隧道时,这些设置将影响所有使用共享隧道的客户端!)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:257
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:221
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:268
|
||||
msgid "Tunnel Options"
|
||||
msgstr "隧道选项"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:259
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:223
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:270
|
||||
msgid "Length"
|
||||
msgstr "长度"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:266
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:230
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:277
|
||||
msgid "0 hop tunnel (low anonymity, low latency)"
|
||||
msgstr "直连(匿名性无,延迟低)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:270
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:234
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:281
|
||||
msgid "1 hop tunnel (medium anonymity, medium latency)"
|
||||
msgstr "隧道跳点x1(匿名性中,延迟中)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:274
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:238
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:285
|
||||
msgid "2 hop tunnel (high anonymity, high latency)"
|
||||
msgstr "隧道跳点x2(匿名性高,延迟高)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:278
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:242
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:289
|
||||
msgid "3 hop tunnel (very high anonymity, poor performance)"
|
||||
msgstr "隧道跳点x3(匿名性优,影响性能)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:287
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:251
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:298
|
||||
msgid "hop tunnel (very poor performance)"
|
||||
msgstr "跳点隧道(严重影响性能)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:292
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:256
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:303
|
||||
msgid "Variance"
|
||||
msgstr "随机变化"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:299
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:263
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:310
|
||||
msgid "0 hop variance (no randomisation, consistant performance)"
|
||||
msgstr "隧道长度恒定(随机性无,性能稳定)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:303
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:267
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:314
|
||||
msgid "+ 0-1 hop variance (medium additive randomisation, subtractive performance)"
|
||||
msgstr "隧道长度+ 0-1(随机性中,影响性能)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:307
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:271
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:318
|
||||
msgid "+ 0-2 hop variance (high additive randomisation, subtractive performance)"
|
||||
msgstr "隧道长度+ 0-2(随机性高,影响性能)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:311
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:275
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:322
|
||||
msgid "+/- 0-1 hop variance (standard randomisation, standard performance)"
|
||||
msgstr "隧道长度+/- 0-1(随机性标准,正常性能)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:315
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:279
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:326
|
||||
msgid "+/- 0-2 hop variance (not recommended)"
|
||||
msgstr "隧道程度+/- 0-2(不推荐)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:327
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:291
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:338
|
||||
msgid "hop variance"
|
||||
msgstr "节点数量"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:332
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:296
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:343
|
||||
msgid "Count"
|
||||
msgstr "计数"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:339
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:303
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:350
|
||||
msgid "1 inbound, 1 outbound tunnel (low bandwidth usage, less reliability)"
|
||||
msgstr "出/入站隧道x1(带宽低,低可靠性)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:343
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:307
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:354
|
||||
msgid "2 inbound, 2 outbound tunnels (standard bandwidth usage, standard reliability)"
|
||||
msgstr "出/入站隧道x2(带宽标准,标准稳定性)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:347
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:311
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:358
|
||||
msgid "3 inbound, 3 outbound tunnels (higher bandwidth usage, higher reliability)"
|
||||
msgstr "出/入站隧道x3(带宽高,高稳定性)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:356
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:320
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:367
|
||||
msgid "tunnels"
|
||||
msgstr "隧道"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:361
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:325
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:372
|
||||
msgid "Backup Count"
|
||||
msgstr "备用数量"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:368
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:332
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:379
|
||||
msgid "0 backup tunnels (0 redundancy, no added resource usage)"
|
||||
msgstr "无备用隧道(无冗余,不增加资源占用)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:372
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:336
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:383
|
||||
msgid "1 backup tunnel each direction (low redundancy, low resource usage)"
|
||||
msgstr "备用隧道对x1 (低冗余,低资源占用)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:376
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:340
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:387
|
||||
msgid "2 backup tunnels each direction (medium redundancy, medium resource usage)"
|
||||
msgstr "备用隧道对x2 (中冗余,中资源占用)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:380
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:344
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:391
|
||||
msgid "3 backup tunnels each direction (high redundancy, high resource usage)"
|
||||
msgstr "备用隧道对x3 (高冗余,高资源占用)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:389
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:353
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:400
|
||||
msgid "backup tunnels"
|
||||
msgstr "备用隧道"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:394
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:358
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:405
|
||||
msgid "I2CP Options"
|
||||
msgstr "I2CP选项"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:396
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:146
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:360
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:407
|
||||
msgid "Host"
|
||||
msgstr "主机"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:400
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:152
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:364
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:411
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:244
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:266
|
||||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:406
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:398
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:445
|
||||
msgid "Reduce tunnel quantity when idle"
|
||||
msgstr "空闲时缩减隧道数量"
|
||||
|
||||
@@ -360,20 +371,20 @@ msgstr "空闲时缩减隧道数量"
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:430
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:442
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:452
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:370
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:388
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:400
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:417
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:435
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:447
|
||||
msgid "Enable"
|
||||
msgstr "启用"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:412
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:404
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:451
|
||||
msgid "Reduced tunnel count"
|
||||
msgstr "削减后的隧道数量"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:416
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:436
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:408
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:455
|
||||
msgid "Idle minutes"
|
||||
msgstr "空闲时间(分钟)"
|
||||
|
||||
@@ -402,7 +413,7 @@ msgid "File"
|
||||
msgstr "文件"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:460
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:205
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:252
|
||||
msgid "Local destination"
|
||||
msgstr "本地目标"
|
||||
|
||||
@@ -411,27 +422,27 @@ msgid "(if known)"
|
||||
msgstr "(如果已知)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:468
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:444
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:491
|
||||
msgid "Custom options"
|
||||
msgstr "自定义选项"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:472
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:448
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:495
|
||||
msgid "NOTE: If tunnel is currently running, most changes will not take effect until tunnel is stopped and restarted."
|
||||
msgstr "注意:如果当前隧道已经启动,设置需要【停止】并重新【启动】相应隧道后才能生效。"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:474
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:450
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:497
|
||||
msgid "Save"
|
||||
msgstr "保存"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:478
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:454
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:501
|
||||
msgid "Delete"
|
||||
msgstr "删除"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:480
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:456
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:503
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
@@ -447,92 +458,92 @@ msgstr "服务器隧道设置"
|
||||
msgid "New server settings"
|
||||
msgstr "新建服务器设置"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:167
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:214
|
||||
msgid "Website name"
|
||||
msgstr "网站名称"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:171
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:218
|
||||
msgid "(leave blank for outproxies)"
|
||||
msgstr "(出口代理这里请置空)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:176
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:223
|
||||
msgid "Private key file"
|
||||
msgstr "私钥文件"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:215
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:262
|
||||
msgid "Add to local addressbook"
|
||||
msgstr "添加至本地地址簿"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:368
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:415
|
||||
msgid "Encrypt Leaseset"
|
||||
msgstr "加密赁集"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:374
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:421
|
||||
msgid "Encryption Key"
|
||||
msgstr "加密密钥"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:378
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:425
|
||||
msgid "Generate New Key"
|
||||
msgstr "生成新密钥"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:380
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:427
|
||||
msgid "Generate"
|
||||
msgstr "生成"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:382
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:442
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:429
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:489
|
||||
msgid "(Tunnel must be stopped first)"
|
||||
msgstr "(必须先停止隧道)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:384
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:431
|
||||
msgid "Restricted Access List"
|
||||
msgstr "限制访问列表"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:386
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:433
|
||||
msgid "Unimplemented"
|
||||
msgstr "尚未实现"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:392
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:439
|
||||
msgid "Access List"
|
||||
msgstr "访问列表"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:396
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:443
|
||||
msgid "(Restrict to these clients only)"
|
||||
msgstr "(仅允许这些客户访问)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:412
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:459
|
||||
msgid "New Certificate type"
|
||||
msgstr "新建证书类型"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:414
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:461
|
||||
msgid "None"
|
||||
msgstr "无"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:418
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:465
|
||||
msgid "Hashcash (effort)"
|
||||
msgstr "Hashcash (强度)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:424
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:471
|
||||
msgid "Hashcash Calc Time"
|
||||
msgstr "Hashcash 计算时间"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:426
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:473
|
||||
msgid "Estimate"
|
||||
msgstr "估算"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:428
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:475
|
||||
msgid "Hidden"
|
||||
msgstr "隐藏"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:432
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:479
|
||||
msgid "Signed (signed by)"
|
||||
msgstr "签名(签名者)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:438
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:485
|
||||
msgid "Modify Certificate"
|
||||
msgstr "修改证书"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:440
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:487
|
||||
msgid "Modify"
|
||||
msgstr "修改"
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project basedir="." default="all" name="jetty">
|
||||
|
||||
<property name="jetty.sha1" value="021164f84da7304bd1ff07c268b45aa3e0b13322" />
|
||||
<property name="jetty.md5" value="a61adc832be6baf2678935506743cfc3" />
|
||||
<property name="jetty.url" value="http://dist.codehaus.org/jetty/jetty-5.1.x/jetty-5.1.12.zip" />
|
||||
<property name="jetty.filename" value="jetty-5.1.12.zip" />
|
||||
<property name="jetty.base" value="jetty-5.1.15" />
|
||||
<property name="jetty.sha1" value="3a7a3de50f86f0cdb23c33aec632ea7f44132c5e" />
|
||||
<property name="jetty.filename" value="${jetty.base}.tgz" />
|
||||
<property name="jetty.url" value="http://dist.codehaus.org/jetty/jetty-5.1.x/${jetty.filename}" />
|
||||
<property name="verified.filename" value="verified.txt" />
|
||||
<property name="javac.compilerargs" value="" />
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
<echo message="Even if you deploy the Jetty archive manually, the build script will" />
|
||||
<echo message="still attempt to verify its checksums, which must be:" />
|
||||
<echo message="SHA1 ${jetty.sha1}" />
|
||||
<echo message="MD5 ${jetty.md5}" />
|
||||
<echo message="" />
|
||||
<input message="Download Jetty archive automatically?" validargs="y,n" addproperty="jetty.download" />
|
||||
<fail message="Aborting as requested. Please deploy the Jetty archive manually." >
|
||||
@@ -43,16 +42,18 @@
|
||||
<get src="${jetty.url}" verbose="true" dest="${jetty.filename}" />
|
||||
</target>
|
||||
|
||||
<uptodate property="verified.already" srcfile="${jetty.filename}" targetfile="${verified.filename}" />
|
||||
<condition property="verified.already" >
|
||||
<and>
|
||||
<available file="${jetty.filename}" />
|
||||
<uptodate property="foo.bar.baz" srcfile="${jetty.filename}" targetfile="${verified.filename}" />
|
||||
</and>
|
||||
</condition>
|
||||
|
||||
<target name="verifyJettylib" unless="verified.already" >
|
||||
<condition property="jetty.zip.verified" >
|
||||
<and>
|
||||
<checksum file="${jetty.filename}" algorithm="SHA" property="${jetty.sha1}" />
|
||||
<checksum file="${jetty.filename}" algorithm="MD5" property="${jetty.md5}" />
|
||||
</and>
|
||||
</condition>
|
||||
<fail message="Jetty archive does not match its checksums!" >
|
||||
<fail message="Jetty archive does not match its checksum!" >
|
||||
<condition>
|
||||
<not>
|
||||
<istrue value="${jetty.zip.verified}" />
|
||||
@@ -63,15 +64,16 @@
|
||||
</target>
|
||||
|
||||
<target name="extractJettylib" unless="jetty.zip.extracted" >
|
||||
<unzip src="${jetty.filename}" dest="." />
|
||||
<gunzip src="${jetty.filename}" dest="jetty.tar" />
|
||||
<untar src="jetty.tar" dest="." />
|
||||
<mkdir dir="jettylib" />
|
||||
<copy todir="jettylib">
|
||||
<fileset dir="jetty-5.1.12/lib">
|
||||
<fileset dir="${jetty.base}/lib">
|
||||
<include name="*.jar" />
|
||||
</fileset>
|
||||
</copy>
|
||||
<copy todir="jettylib">
|
||||
<fileset dir="jetty-5.1.12/ext">
|
||||
<fileset dir="${jetty.base}/ext">
|
||||
<include name="ant.jar" />
|
||||
<include name="commons-el.jar" />
|
||||
<include name="commons-logging.jar" />
|
||||
@@ -81,7 +83,8 @@
|
||||
<include name="org.mortbay.jetty.jar" />
|
||||
</fileset>
|
||||
</copy>
|
||||
<delete dir="jetty-5.1.12" />
|
||||
<delete file="jetty.tar" />
|
||||
<delete dir="${jetty.base}" />
|
||||
</target>
|
||||
|
||||
<target name="build" depends="jar" />
|
||||
@@ -128,9 +131,9 @@
|
||||
<mkdir dir="./build/javadoc" />
|
||||
<unzip src="${jetty.filename}" dest="./build/javadoc" >
|
||||
<patternset>
|
||||
<include name="jetty-5.1.12/javadoc/" />
|
||||
<include name="${jetty.base}/javadoc/" />
|
||||
</patternset>
|
||||
<mapper type="glob" from="jetty-5.1.12/javadoc/*" to="javadoc/*" />
|
||||
<mapper type="glob" from="${jetty.base}/javadoc/*" to="javadoc/*" />
|
||||
</unzip>
|
||||
</target>
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ public class ConfigClientsHandler extends FormHandler {
|
||||
|
||||
int newClient = clients.size();
|
||||
String newDesc = getString("desc" + newClient);
|
||||
if (newDesc != null) {
|
||||
if (newDesc != null && newDesc.trim().length() > 0) {
|
||||
// new entry
|
||||
int spc = newDesc.indexOf(" ");
|
||||
String clss = newDesc;
|
||||
@@ -118,7 +118,7 @@ public class ConfigClientsHandler extends FormHandler {
|
||||
args = newDesc.substring(spc + 1);
|
||||
}
|
||||
String name = getString("name" + newClient);
|
||||
if (name == null) name = "new client";
|
||||
if (name == null || name.trim().length() <= 0) name = "new client";
|
||||
ClientAppConfig ca = new ClientAppConfig(clss, name, args, 2*60*1000,
|
||||
_settings.get(newClient + ".enabled") != null);
|
||||
clients.add(ca);
|
||||
|
||||
@@ -79,10 +79,12 @@ public class ConfigClientsHelper extends HelperBase {
|
||||
buf.append("<a href=\"").append(link).append("\">").append(_(name)).append("</a>");
|
||||
} else if (edit && !ro) {
|
||||
buf.append("<input type=\"text\" name=\"name").append(index).append("\" value=\"");
|
||||
buf.append(_(name));
|
||||
if (name.length() > 0)
|
||||
buf.append(_(name));
|
||||
buf.append("\" >");
|
||||
} else {
|
||||
buf.append(_(name));
|
||||
if (name.length() > 0)
|
||||
buf.append(_(name));
|
||||
}
|
||||
buf.append("</td><td align=\"center\" width=\"10%\"><input type=\"checkbox\" class=\"optbox\" name=\"").append(index).append(".enabled\" value=\"true\" ");
|
||||
if (enabled) {
|
||||
|
||||
@@ -43,9 +43,9 @@ public class ConfigLoggingHelper extends HelperBase {
|
||||
buf.append(prefix).append('=').append(level).append('\n');
|
||||
}
|
||||
buf.append("</textarea><br>\n");
|
||||
buf.append("<i>Add additional logging statements above. Example: net.i2p.router.tunnel=WARN</i><br>");
|
||||
buf.append("<i>Or put entries in the logger.config file. Example: logger.record.net.i2p.router.tunnel=WARN</i><br>");
|
||||
buf.append("<i>Valid levels are DEBUG, INFO, WARN, ERROR, CRIT</i>\n");
|
||||
buf.append("<i>" + _("Add additional logging statements above. Example: net.i2p.router.tunnel=WARN") + "</i><br>");
|
||||
buf.append("<i>" + _("Or put entries in the logger.config file. Example: logger.record.net.i2p.router.tunnel=WARN") + "</i><br>");
|
||||
buf.append("<i>" + _("Valid levels are DEBUG, INFO, WARN, ERROR, CRIT") + "</i>\n");
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -15,13 +15,32 @@ public class GraphHelper extends HelperBase {
|
||||
private int _width;
|
||||
private int _height;
|
||||
private int _refreshDelaySeconds;
|
||||
|
||||
private static final String PROP_X = "routerconsole.graphX";
|
||||
private static final String PROP_Y = "routerconsole.graphY";
|
||||
private static final String PROP_REFRESH = "routerconsole.graphRefresh";
|
||||
private static final String PROP_PERIODS = "routerconsole.graphPeriods";
|
||||
private static final String PROP_EVENTS = "routerconsole.graphEvents";
|
||||
private static final int DEFAULT_X = 250;
|
||||
private static final int DEFAULT_Y = 100;
|
||||
private static final int DEFAULT_REFRESH = 60;
|
||||
private static final int DEFAULT_PERIODS = 60;
|
||||
static final int MAX_X = 2048;
|
||||
static final int MAX_Y = 1024;
|
||||
private static final int MIN_REFRESH = 15;
|
||||
|
||||
public GraphHelper() {
|
||||
_periodCount = 60; // SummaryListener.PERIODS;
|
||||
_showEvents = false;
|
||||
_width = 250;
|
||||
_height = 100;
|
||||
_refreshDelaySeconds = 60;
|
||||
}
|
||||
|
||||
/** set the defaults after we have a context */
|
||||
@Override
|
||||
public void setContextId(String contextId) {
|
||||
super.setContextId(contextId);
|
||||
_width = _context.getProperty(PROP_X, DEFAULT_X);
|
||||
_height = _context.getProperty(PROP_Y, DEFAULT_Y);
|
||||
_periodCount = _context.getProperty(PROP_PERIODS, DEFAULT_PERIODS);
|
||||
_refreshDelaySeconds = _context.getProperty(PROP_REFRESH, DEFAULT_REFRESH);
|
||||
_showEvents = Boolean.valueOf(_context.getProperty(PROP_EVENTS)).booleanValue();
|
||||
}
|
||||
|
||||
public void setPeriodCount(String str) {
|
||||
@@ -29,13 +48,13 @@ public class GraphHelper extends HelperBase {
|
||||
}
|
||||
public void setShowEvents(boolean b) { _showEvents = b; }
|
||||
public void setHeight(String str) {
|
||||
try { _height = Integer.parseInt(str); } catch (NumberFormatException nfe) {}
|
||||
try { _height = Math.min(Integer.parseInt(str), MAX_Y); } catch (NumberFormatException nfe) {}
|
||||
}
|
||||
public void setWidth(String str) {
|
||||
try { _width = Integer.parseInt(str); } catch (NumberFormatException nfe) {}
|
||||
try { _width = Math.min(Integer.parseInt(str), MAX_X); } catch (NumberFormatException nfe) {}
|
||||
}
|
||||
public void setRefreshDelay(String str) {
|
||||
try { _refreshDelaySeconds = Integer.parseInt(str); } catch (NumberFormatException nfe) {}
|
||||
try { _refreshDelaySeconds = Math.max(Integer.parseInt(str), MIN_REFRESH); } catch (NumberFormatException nfe) {}
|
||||
}
|
||||
|
||||
public String getImages() {
|
||||
@@ -102,7 +121,9 @@ public class GraphHelper extends HelperBase {
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public String getForm() {
|
||||
saveSettings();
|
||||
try {
|
||||
_out.write("<br><h3>" + _("Configure Graph Display") + " [<a href=\"configstats.jsp\">" + _("Select Stats") + "</a>]</h3>");
|
||||
_out.write("<form action=\"graphs.jsp\" method=\"GET\">");
|
||||
@@ -120,6 +141,25 @@ public class GraphHelper extends HelperBase {
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Silently save settings if changed, no indication of success or failure
|
||||
* @since 0.7.10
|
||||
*/
|
||||
private void saveSettings() {
|
||||
if (_width != _context.getProperty(PROP_X, DEFAULT_X) ||
|
||||
_height != _context.getProperty(PROP_Y, DEFAULT_Y) ||
|
||||
_periodCount != _context.getProperty(PROP_PERIODS, DEFAULT_PERIODS) ||
|
||||
_refreshDelaySeconds != _context.getProperty(PROP_REFRESH, DEFAULT_REFRESH) ||
|
||||
_showEvents != Boolean.valueOf(_context.getProperty(PROP_EVENTS)).booleanValue()) {
|
||||
_context.router().setConfigSetting(PROP_X, "" + _width);
|
||||
_context.router().setConfigSetting(PROP_Y, "" + _height);
|
||||
_context.router().setConfigSetting(PROP_PERIODS, "" + _periodCount);
|
||||
_context.router().setConfigSetting(PROP_REFRESH, "" + _refreshDelaySeconds);
|
||||
_context.router().setConfigSetting(PROP_EVENTS, "" + _showEvents);
|
||||
_context.router().saveConfig();
|
||||
}
|
||||
}
|
||||
|
||||
/** inner class, don't bother reindenting */
|
||||
private static class AlphaComparator implements Comparator {
|
||||
public int compare(Object lhs, Object rhs) {
|
||||
|
||||
@@ -33,17 +33,17 @@ class ProfileOrganizerRenderer {
|
||||
_comparator = new ProfileComparator();
|
||||
}
|
||||
public void renderStatusHTML(Writer out, boolean full) throws IOException {
|
||||
Set peers = _organizer.selectAllPeers();
|
||||
Set<Hash> peers = _organizer.selectAllPeers();
|
||||
|
||||
long now = _context.clock().now();
|
||||
long hideBefore = now - 90*60*1000;
|
||||
|
||||
TreeSet order = new TreeSet(_comparator);
|
||||
TreeSet integratedPeers = new TreeSet(_comparator);
|
||||
TreeSet<PeerProfile> order = new TreeSet(_comparator);
|
||||
TreeSet<PeerProfile> integratedPeers = new TreeSet(_comparator);
|
||||
int older = 0;
|
||||
int standard = 0;
|
||||
for (Iterator iter = peers.iterator(); iter.hasNext();) {
|
||||
Hash peer = (Hash)iter.next();
|
||||
for (Iterator<Hash> iter = peers.iterator(); iter.hasNext();) {
|
||||
Hash peer = iter.next();
|
||||
if (_organizer.getUs().equals(peer)) continue;
|
||||
PeerProfile prof = _organizer.getProfile(peer);
|
||||
//if (_organizer.isWellIntegrated(peer)) {
|
||||
@@ -87,8 +87,8 @@ class ProfileOrganizerRenderer {
|
||||
buf.append("<th> </th>");
|
||||
buf.append("</tr>");
|
||||
int prevTier = 1;
|
||||
for (Iterator iter = order.iterator(); iter.hasNext();) {
|
||||
PeerProfile prof = (PeerProfile)iter.next();
|
||||
for (Iterator<PeerProfile> iter = order.iterator(); iter.hasNext();) {
|
||||
PeerProfile prof = iter.next();
|
||||
Hash peer = prof.getPeer();
|
||||
|
||||
int tier = 0;
|
||||
@@ -201,8 +201,8 @@ class ProfileOrganizerRenderer {
|
||||
buf.append("<th class=\"smallhead\">").append(_("1h Fail Rate")).append("</th>");
|
||||
buf.append("<th class=\"smallhead\">").append(_("1d Fail Rate")).append("</th>");
|
||||
buf.append("</tr>");
|
||||
for (Iterator iter = integratedPeers.iterator(); iter.hasNext();) {
|
||||
PeerProfile prof = (PeerProfile)iter.next();
|
||||
for (Iterator<PeerProfile> iter = integratedPeers.iterator(); iter.hasNext();) {
|
||||
PeerProfile prof = iter.next();
|
||||
Hash peer = prof.getPeer();
|
||||
|
||||
buf.append("<tr><td align=\"center\" nowrap>");
|
||||
@@ -266,16 +266,8 @@ class ProfileOrganizerRenderer {
|
||||
out.flush();
|
||||
}
|
||||
|
||||
private class ProfileComparator implements Comparator {
|
||||
public int compare(Object lhs, Object rhs) {
|
||||
if ( (lhs == null) || (rhs == null) )
|
||||
throw new NullPointerException("lhs=" + lhs + " rhs=" + rhs);
|
||||
if ( !(lhs instanceof PeerProfile) || !(rhs instanceof PeerProfile) )
|
||||
throw new ClassCastException("lhs=" + lhs.getClass().getName() + " rhs=" + rhs.getClass().getName());
|
||||
|
||||
PeerProfile left = (PeerProfile)lhs;
|
||||
PeerProfile right = (PeerProfile)rhs;
|
||||
|
||||
private class ProfileComparator implements Comparator<PeerProfile> {
|
||||
public int compare(PeerProfile left, PeerProfile right) {
|
||||
if (_context.profileOrganizer().isFast(left.getPeer())) {
|
||||
if (_context.profileOrganizer().isFast(right.getPeer())) {
|
||||
return compareHashes(left, right);
|
||||
|
||||
@@ -119,6 +119,10 @@ public class StatSummarizer implements Runnable {
|
||||
return renderPng(rate, out, -1, -1, false, false, false, false, -1, true);
|
||||
}
|
||||
public boolean renderPng(Rate rate, OutputStream out, int width, int height, boolean hideLegend, boolean hideGrid, boolean hideTitle, boolean showEvents, int periodCount, boolean showCredit) throws IOException {
|
||||
if (width > GraphHelper.MAX_X)
|
||||
width = GraphHelper.MAX_X;
|
||||
if (height > GraphHelper.MAX_Y)
|
||||
height = GraphHelper.MAX_Y;
|
||||
for (int i = 0; i < _listeners.size(); i++) {
|
||||
SummaryListener lsnr = (SummaryListener)_listeners.get(i);
|
||||
if (lsnr.getRate().equals(rate)) {
|
||||
@@ -147,6 +151,10 @@ public class StatSummarizer implements Runnable {
|
||||
|
||||
public boolean renderRatePng(OutputStream out, int width, int height, boolean hideLegend, boolean hideGrid, boolean hideTitle, boolean showEvents, int periodCount, boolean showCredit) throws IOException {
|
||||
long end = _context.clock().now() - 60*1000;
|
||||
if (width > GraphHelper.MAX_X)
|
||||
width = GraphHelper.MAX_X;
|
||||
if (height > GraphHelper.MAX_Y)
|
||||
height = GraphHelper.MAX_Y;
|
||||
if (periodCount <= 0) periodCount = SummaryListener.PERIODS;
|
||||
if (periodCount > SummaryListener.PERIODS)
|
||||
periodCount = SummaryListener.PERIODS;
|
||||
@@ -156,6 +164,7 @@ public class StatSummarizer implements Runnable {
|
||||
try {
|
||||
RrdGraphDef def = new RrdGraphDef();
|
||||
def.setTimePeriod(start/1000, 0);
|
||||
def.setLowerLimit(0d);
|
||||
def.setBaseValue(1024);
|
||||
String title = "Bandwidth usage";
|
||||
if (!hideTitle)
|
||||
|
||||
@@ -38,19 +38,20 @@ public class StatsGenerator {
|
||||
for (Iterator iter = groups.entrySet().iterator(); iter.hasNext(); ) {
|
||||
Map.Entry entry = (Map.Entry)iter.next();
|
||||
String group = (String)entry.getKey();
|
||||
Set stats = (Set)entry.getValue();
|
||||
buf.append("<option value=\"/stats.jsp#").append(group).append("\">");
|
||||
buf.append(_(group)).append("</option>\n");
|
||||
for (Iterator statIter = stats.iterator(); statIter.hasNext(); ) {
|
||||
String stat = (String)statIter.next();
|
||||
buf.append("<option value=\"/stats.jsp#");
|
||||
buf.append(stat);
|
||||
buf.append("\">...");
|
||||
buf.append(stat);
|
||||
buf.append("</option>\n");
|
||||
}
|
||||
out.write(buf.toString());
|
||||
buf.setLength(0);
|
||||
// let's just do the groups
|
||||
//Set stats = (Set)entry.getValue();
|
||||
//for (Iterator statIter = stats.iterator(); statIter.hasNext(); ) {
|
||||
// String stat = (String)statIter.next();
|
||||
// buf.append("<option value=\"/stats.jsp#");
|
||||
// buf.append(stat);
|
||||
// buf.append("\">...");
|
||||
// buf.append(stat);
|
||||
// buf.append("</option>\n");
|
||||
//}
|
||||
//out.write(buf.toString());
|
||||
//buf.setLength(0);
|
||||
}
|
||||
buf.append("</select> <input type=\"submit\" value=\"").append(_("GO")).append("\" />");
|
||||
buf.append("</form>");
|
||||
|
||||
@@ -378,6 +378,12 @@ public class SummaryBarRenderer {
|
||||
.append(_("Participating"))
|
||||
.append(":</b></td><td align=\"right\">")
|
||||
.append(_helper.getParticipatingTunnels())
|
||||
.append("</td></tr>\n" +
|
||||
|
||||
"<tr><td align=\"left\"><b>")
|
||||
.append(_("Share ratio"))
|
||||
.append(":</b></td><td align=\"right\">")
|
||||
.append(_helper.getShareRatio())
|
||||
.append("</td></tr>\n" +
|
||||
|
||||
"</table><hr><h3><a href=\"/jobs.jsp\" target=\"_top\" title=\"")
|
||||
|
||||
@@ -99,7 +99,7 @@ public class SummaryHelper extends HelperBase {
|
||||
//if (!_context.clock().getUpdatedSuccessfully())
|
||||
Long skew = _context.commSystem().getFramedAveragePeerClockSkew(33);
|
||||
// Display the actual skew, not the offset
|
||||
if (skew != null && Math.abs(skew.longValue()) > 45)
|
||||
if (skew != null && Math.abs(skew.longValue()) > 30)
|
||||
return _("ERR-Clock Skew of {0}", DataHelper.formatDuration(Math.abs(skew.longValue()) * 1000));
|
||||
if (_context.router().isHidden())
|
||||
return _("Hidden");
|
||||
@@ -414,10 +414,10 @@ public class SummaryHelper extends HelperBase {
|
||||
}
|
||||
|
||||
/** compare translated nicknames - put "shared clients" first in the sort */
|
||||
private class AlphaComparator implements Comparator {
|
||||
public int compare(Object lhs, Object rhs) {
|
||||
String lname = getName((Destination)lhs);
|
||||
String rname = getName((Destination)rhs);
|
||||
private class AlphaComparator implements Comparator<Destination> {
|
||||
public int compare(Destination lhs, Destination rhs) {
|
||||
String lname = getName(lhs);
|
||||
String rname = getName(rhs);
|
||||
String xsc = _("shared clients");
|
||||
if (lname.equals(xsc))
|
||||
return -1;
|
||||
@@ -499,6 +499,15 @@ public class SummaryHelper extends HelperBase {
|
||||
return _context.tunnelManager().getParticipatingCount();
|
||||
}
|
||||
|
||||
/** @since 0.7.10 */
|
||||
public String getShareRatio() {
|
||||
if (_context == null)
|
||||
return "0";
|
||||
double sr = _context.tunnelManager().getShareRatio();
|
||||
DecimalFormat fmt = new DecimalFormat("##0.00");
|
||||
return fmt.format(sr);
|
||||
}
|
||||
|
||||
/**
|
||||
* How lagged our job queue is over the last minute (pretty printed with
|
||||
* the units attached)
|
||||
|
||||
@@ -68,7 +68,10 @@ class SummaryListener implements RateSummaryListener {
|
||||
} catch (IOException ioe) {
|
||||
_log.error("Error adding", ioe);
|
||||
} catch (RrdException re) {
|
||||
_log.error("Error adding", re);
|
||||
// this can happen after the time slews backwards, so don't make it an error
|
||||
// org.jrobin.core.RrdException: Bad sample timestamp 1264343107. Last update time was 1264343172, at least one second step is required
|
||||
if (_log.shouldLog(Log.WARN))
|
||||
_log.warn("Error adding", re);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -173,7 +176,7 @@ class SummaryRenderer {
|
||||
throw ioe;
|
||||
}
|
||||
}
|
||||
public void render(OutputStream out) throws IOException { render(out, -1, -1, false, false, false, false, -1, true); }
|
||||
public void render(OutputStream out) throws IOException { render(out, -1, -1, false, false, false, false, -1, false); }
|
||||
public void render(OutputStream out, int width, int height, boolean hideLegend, boolean hideGrid, boolean hideTitle, boolean showEvents, int periodCount, boolean showCredit) throws IOException {
|
||||
long end = _listener.now() - 60*1000;
|
||||
if (periodCount <= 0) periodCount = SummaryListener.PERIODS;
|
||||
@@ -184,6 +187,7 @@ class SummaryRenderer {
|
||||
try {
|
||||
RrdGraphDef def = new RrdGraphDef();
|
||||
def.setTimePeriod(start/1000, 0);
|
||||
def.setLowerLimit(0d);
|
||||
String name = _listener.getRate().getRateStat().getName();
|
||||
// heuristic to set K=1024
|
||||
if ((name.startsWith("bw.") || name.indexOf("Size") >= 0 || name.indexOf("Bps") >= 0 || name.indexOf("memory") >= 0)
|
||||
|
||||
@@ -32,8 +32,7 @@
|
||||
</div>
|
||||
<% if (System.getProperty("wrapper.version") != null) { %>
|
||||
<p><%=intl._("If you want the router to restart itself after shutting down, you can choose one of the following.")%>
|
||||
<%=intl._("This is useful in some situations")%> -
|
||||
<%=intl._("for example, if you changed some settings that client applications only read at startup, such as the routerconsole password or the interface it listens on.")%>
|
||||
<%=intl._("This is useful in some situations - for example, if you changed some settings that client applications only read at startup, such as the routerconsole password or the interface it listens on.")%>
|
||||
<%=intl._("A graceful restart will take a few minutes (but your peers will appreciate your patience), while a hard restart does so immediately.")%>
|
||||
<%=intl._("After tearing down the router, it will wait 1 minute before starting back up again.")%></p>
|
||||
<hr><div class="formaction">
|
||||
@@ -50,8 +49,7 @@
|
||||
<input type="submit" name="action" value="<%=intl._("Show systray icon")%>" >
|
||||
<input type="submit" name="action" value="<%=intl._("Hide systray icon")%>" >
|
||||
</div><h3><%=intl._("Run on startup")%></h3>
|
||||
<p><%=intl._("You can control whether I2P is run on startup or not by selecting one of the following options")%> -
|
||||
<%=intl._("I2P will install (or remove) a service accordingly.")%>
|
||||
<p><%=intl._("You can control whether I2P is run on startup or not by selecting one of the following options - I2P will install (or remove) a service accordingly.")%>
|
||||
<%=intl._("If you prefer the command line, you can also run the ")%> <code>install_i2p_service_winnt.bat</code> (<%=intl._("or")%>
|
||||
<code>uninstall_i2p_service_winnt.bat</code>).</p>
|
||||
<hr><div class="formaction">
|
||||
@@ -63,9 +61,7 @@
|
||||
|
||||
<% if (System.getProperty("wrapper.version") != null) { %>
|
||||
<h3><%=intl._("Debugging")%></h3>
|
||||
<p> At times, it may be helpful to debug I2P by getting a thread dump.
|
||||
To do so, please select the following option and review the thread dumped to
|
||||
<a href="logs.jsp#servicelogs">wrapper.log</a>.</p>
|
||||
<p><%=intl._("At times, it may be helpful to debug I2P by getting a thread dump. To do so, please select the following option and review the thread dumped to <a href=\"logs.jsp#servicelogs\">wrapper.log</a>.")%></p>
|
||||
<hr><div class="formaction">
|
||||
<input type="submit" name="action" value="<%=intl._("Dump threads")%>" >
|
||||
<% } %></div>
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
<div class="graphspanel">
|
||||
<div class="widepanel">
|
||||
<jsp:useBean class="net.i2p.router.web.GraphHelper" id="graphHelper" scope="request" />
|
||||
<jsp:setProperty name="graphHelper" property="*" />
|
||||
<jsp:setProperty name="graphHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
|
||||
<jsp:setProperty name="graphHelper" property="*" />
|
||||
<jsp:setProperty name="graphHelper" property="writer" value="<%=out%>" />
|
||||
<jsp:getProperty name="graphHelper" property="images" />
|
||||
<jsp:getProperty name="graphHelper" property="form" />
|
||||
</div></div></div></body></html>
|
||||
</div></div></div></body></html>
|
||||
|
||||
@@ -92,7 +92,12 @@ shared bandwidth, and amount of locally-generated traffic.
|
||||
The recommended method for limiting participating tunnels is
|
||||
to change your share percentage on the <a href="config.jsp#help">configuration page</a>.
|
||||
You may also limit the total number by setting <tt>router.maxParticipatingTunnels=nnn</tt> on
|
||||
the <a href="configadvanced.jsp">advanced configuration page</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Enable graphing]</a>.</ul>
|
||||
the <a href="configadvanced.jsp">advanced configuration page</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Enable graphing]</a>.
|
||||
<li class="tidylist"><b>Share ratio:</b>
|
||||
The number of participating tunnels you route for others, divided by the total number of hops in
|
||||
all your exploratory and client tunnels.
|
||||
A number greater than 1.00 means you are contributing more tunnels to the network than you are using.
|
||||
</ul>
|
||||
|
||||
<h3>Congestion</h3><div align="justify">
|
||||
Some basic indications of router overload:</div><ul>
|
||||
|
||||
176
apps/routerconsole/jsp/help_ru.jsp
Normal file
@@ -0,0 +1,176 @@
|
||||
<%@page contentType="text/html"%>
|
||||
<%@page pageEncoding="UTF-8"%>
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<%
|
||||
/*
|
||||
* Do not tag this file for translation - copy it to help_xx.jsp and translate inline.
|
||||
*/
|
||||
%>
|
||||
<html><head><title>Консоль маршрутизатора I2P - справка</title>
|
||||
<%@include file="css.jsi" %>
|
||||
</head><body>
|
||||
<%@include file="summary.jsi" %>
|
||||
|
||||
<h1>Справка маршрутизатора I2P</h1>
|
||||
|
||||
<div class="main" id="main">
|
||||
|
||||
<p> Если Вы хотите помочь в улучшении или переводе документации, если у Вас есть идеи, как еще помочь проекту, пожалуйста, загляните в раздел документации
|
||||
<a href="http://www.i2p2.i2p/getinvolved.html">как стать участником</a>. </p>
|
||||
|
||||
<p>Дальнейшие инструкции доступны в <a href="http://www.i2p2.i2p/faq.html">FAQ на www.i2p2.i2p</a>
|
||||
|
||||
<br>Также, имеет смысл зайти на <a href="http://forum.i2p/">форум I2P</a> и IRC-каналы проекта.</p>
|
||||
|
||||
<h2>Описание статусной панели</h2>
|
||||
|
||||
<p>
|
||||
Для большинства параметров на статусной панели можно <a href="configstats.jsp">настроить</a> построение <a href="graphs.jsp">графиков</a> в целях более подробного анализа.
|
||||
</p>
|
||||
|
||||
<h3>Общая информация</h3><ul>
|
||||
|
||||
<li class="tidylist"><b>Локальный идентификатор</b>
|
||||
|
||||
Первые 4 символа (24 бита) из Вашего 44-символьного (256-битного) Base64 хеша маршрутизатора. Полный хеш показывается на странице <a href="netdb.jsp?r=.">информации о маршрутизаторе</a>. Никогда никому не показывайте хеш своего маршрутизатора, так как в нем содержится информация о Вашем IP-адресе.
|
||||
|
||||
|
||||
<li class="tidylist"><b>Версия:</b>
|
||||
|
||||
Версия Вашего I2P маршрутизатора.
|
||||
|
||||
<li class="tidylist"><b>Время:</b>
|
||||
|
||||
Текущее время (UTC) и величина рассинхронизации времени (если есть). Для правильной работы I2P нужно точное системное время. Пожалуйста, поправьте системное время, если расхождение приближается к 1-ой минуте.
|
||||
|
||||
<li class="tidylist"><b>Доступность:</b>
|
||||
|
||||
Результат проверки Вашим маршрутизатором, насколько он открыт для входящих соединений от маршрутизаторов других пользователей. Подробнее смотрите на <a href="config.jsp#help">странице сетевых настроек</a>.
|
||||
|
||||
</ul>
|
||||
|
||||
<h3>Пиры</h3><ul>
|
||||
|
||||
<li class="tidylist"><b>Активные:</b>
|
||||
|
||||
Первое число — это количество пиров, с которыми происходил обмен сообщениями за последние несколько минут. Значение может меняться от 8-10 до нескольких сотен в зависимости от Вашего общего трафика, доли транзитного трафика, локально создаваемого трафика. Второе число — это количество пиров, наблюдавшихся за последний час. Не волнуйтесь, если эти числа сильно меняются. Это нормально. <a href="configstats.jsp#router.activePeers">[Включить построение графика]</a>.
|
||||
|
||||
<li class="tidylist"><b>Быстрые:</b>
|
||||
|
||||
Количество пиров, которые используются Вашим маршрутизатором для построения клиентских туннелей. В общем случае это значение будет в диапазоне 8-15. Список быстрых пиров можно посмотреть на странице <a href="profiles.jsp">профили</a>. <a href="configstats.jsp#router.fastPeers">[Включить построение графика]</a>.
|
||||
|
||||
<li class="tidylist"><b>Высокоёмкие:</b>
|
||||
|
||||
Количество пиров, которые используются Вашим маршрутизатором для построения части зондирующих туннелей. В общем случае это значение будет в диапазоне 8-25. Быстрые пиры входят в группу высокоёмких. Список высокоёмких пиров можно посмотреть на странице <a href="profiles.jsp">профили</a>. <a href="configstats.jsp#router.highCapacityPeers">[Включить построение графика]</a>.
|
||||
|
||||
<li class="tidylist"><b>Хорошо интегрированные:</b>
|
||||
|
||||
Количество пиров, которые используются Вашим маршрутизатором для запросов к сетевой базе данных. Обычно в таком качестве выступают «floodfill» пиры. Список хорошо интегрированных пиров можно посмотреть в конце страницы <a href="profiles.jsp">профили</a>.
|
||||
|
||||
<li class="tidylist"><b>Известные:</b>
|
||||
|
||||
Это общее количество пиров известных Вашему маршрутизатору. Их список показывается на странице <a href="netdb.jsp">обзор сетевой базы данных</a>. Это значение может варьироваться от десятков до тысяч. Значение не соответствует реальному полному размеру сети, так как маршрутизатору в сети I2P достаточно знать лишь часть других маршрутизаторов. Значение зависит от Вашего общего трафика, доли транзитного трафика, локально создаваемого трафика.
|
||||
|
||||
</ul>
|
||||
|
||||
<h3>Трафик (входящий/исходящий)</h3>
|
||||
|
||||
<div align="justify">
|
||||
Все значения показаны в байтах/секунду. Настроить ограничения трафика можно на странице <a href="config.jsp">сетевых настроек</a>.
|
||||
Для трафика по умолчанию включено <a href="graphs.jsp">построение графиков</a>.</div>
|
||||
|
||||
<h3>Локальные туннели</h3>
|
||||
|
||||
<div align="justify">
|
||||
Локальные приложения, выходящие в I2P сеть через Ваш маршрутизатор. Это могут быть клиенты, запущенные через <a href="i2ptunnel/index.jsp">менеджер туннелей</a>, внешние программы, подключающиеся через интерфейсы SAM, BOB или напрямую через I2CP.
|
||||
</div>
|
||||
|
||||
<h3>Туннели (входящие/исходящие)</h3>
|
||||
|
||||
<div align="justify">
|
||||
Список туннелей можно посмотреть на странице <a href="tunnels.jsp">обзор туннелей</a>.</div>
|
||||
|
||||
<ul>
|
||||
|
||||
<li class="tidylist"><div align="justify"><b>Зондирующие:</b>
|
||||
Туннели, созданные Вашим маршрутизатором для связи с floodfill-пирами, тестирования уже существующих туннелей и построения новых.</div>
|
||||
|
||||
<li class="tidylist"><b>Клиентские:</b>
|
||||
Туннели, созданные Вашим маршрутизатором для каждого локального клиента.
|
||||
|
||||
<li class="tidylist"><b>Транзитные:</b>
|
||||
|
||||
Туннели, построенные другими маршрутизаторами, проходящие через Ваш маршрутизатор. Их количество может сильно варьироваться в зависимости от потребностей сети, настроенной доли транзитного трафика и объема локально создаваемого трафика. Рекомендуемый способ ограничения количества транзитных туннелей — настроить долю транзитного трафика на странице <a href="config.jsp#help">сетевых настроек</a>. Также можно задать точный ограничитель количества через параметр <tt>router.maxParticipatingTunnels=nnn</tt> на странице <a href="configadvanced.jsp">дополнительных настроек</a>.
|
||||
|
||||
<a href="configstats.jsp#tunnel.participatingTunnels">[Включить построение графика]</a>.
|
||||
|
||||
<li class="tidylist"><b>Доля транзита:</b>
|
||||
|
||||
Количество транзитных туннелей, проходящих через Ваш маршрутизатор, поделенное на суммарное количество хопов в Ваших зондирующих и клиентских туннелях. Значение больше 1.00 означает, что Вы предоставляете для сети больше туннелей, чем используете сами.
|
||||
|
||||
</ul>
|
||||
|
||||
<h3>Занятость</h3>
|
||||
|
||||
<div align="justify">Некоторые базовые индикаторы перегруженности маршрутизатора:</div>
|
||||
<ul>
|
||||
|
||||
<li class="tidylist"><b>Задержка заданий:</b>
|
||||
|
||||
Как долго задания ожидают выполнения. Содержимое очереди можно посмотреть на странице <a href="jobs.jsp">очередь заданий</a>. К сожалению, есть ещё несколько внутренних очередей, статус которых в консоли не показывается. Задержка заданий в нормальной ситуации должна быть нулевой. Если она систематически выше 500ms, то либо Ваш компьютер слишком медленный, либо с Вашим маршрутизатором проблемы.
|
||||
|
||||
<a href="configstats.jsp#jobQueue.jobLag">[Включить построение графика]</a>.
|
||||
|
||||
<li class="tidylist"><b>Задержка сообщений:</b>
|
||||
|
||||
Как долго исходящие сообщения находятся в очереди. В нормальном случае эта задержка должна быть не выше нескольких сотен миллисекунд. Если она систематически выше 1000ms, то либо Ваш компьютер слишком медленный, либо Вам следует перенастроить ограничение скорости, либо локальные клиенты (чаще всего bittorrent) посылают слишком много данных. Для таких клиентов имеет смысл ограничить скорость.
|
||||
|
||||
<a href="configstats.jsp#transport.sendProcessingTime">[Включить построение графика]</a> (transport.sendProcessingTime).
|
||||
|
||||
<li class="tidylist"><b>Задержка туннелей:</b>
|
||||
|
||||
Время прохождения сигнала при проверке туннеля (сообщение посылается от клиентского туннеля до зондирующего или в обратном направлении). Это значение в нормальном случае должно быть ниже 5 секунд. Если оно систематически выше, то либо Ваш компьютер слишком медленный, либо Вам следует перенастроить ограничение скорости, либо с сетью что-то не в порядке.
|
||||
|
||||
<a href="configstats.jsp#tunnel.testSuccessTime">[Включить построение графика]</a> (tunnel.testSuccessTime).
|
||||
|
||||
<li class="tidylist"><b>Очередь запросов:</b>
|
||||
|
||||
Количество пока необработанных запросов от других маршрутизаторов о построении транзитных туннелей через Ваш маршрутизатор. В нормальном случае это значение должно быть около нуля. Если оно систематически выше, то Ваш компьютер слишком медленный и Вам следует настроить меньшую долю транзитного трафика.
|
||||
|
||||
<li class="tidylist"><b>Принимаем/Не принимаем туннели:</b>
|
||||
|
||||
Состояние Вашего маршрутизатора по приему или отклонению запросов от других маршрутизаторов о построении туннелей. Ваш маршрутизатор может принимать все запросы, принимать/отклонять часть запросов или отклонять все запросы, в зависимости от сетевой загрузки, нагрузки на процессор и необходимости резервировать полосу пропускания для локальных клиентов.
|
||||
|
||||
</ul>
|
||||
|
||||
<h2>Лицензии</h2>
|
||||
|
||||
<p>Код I2P-маршрутизатора (router.jar) и его SDK (i2p.jar) находятся в общественном достоянии с некоторыми исключениями:</p>
|
||||
|
||||
<ul>
|
||||
<li class="tidylist">Код для алгоритмов ElGamal и DSA — под лицензией BSD, автор: TheCrypto</li>
|
||||
<li class="tidylist">Код для алгоритмов SHA256 и HMAC-SHA256 — под лицензией MIT, автор: Legion из Bouncycastle</li>
|
||||
<li class="tidylist">Код для алгоритма AES — под лицензией Cryptix (MIT), авторы: Cryptix team</li>
|
||||
<li class="tidylist">Код для SNTP — под лицензией BSD, автор: Adam Buckley</li>
|
||||
<li class="tidylist">Всё остальное полностью в общественном достоянии, авторы: jrandom, mihi, hypercubus, oOo, ugha, duck, shendaras, и другие.</li>
|
||||
</ul>
|
||||
|
||||
<p>Поверх I2P маршрутизатора работают различные приложения-клиенты, каждое со своим набором лицензий и зависимостей. Например, эта страница входит в приложение консоли маршрутизатора, которое сделано из усеченной версии <a href="http://jetty.mortbay.com/jetty/index.html">Jetty</a> (в сборку не включены демонстрационные приложения и прочие дополнения, настройки упрощены). Jetty позволяет запускать в составе маршрутизатора стандартные JSP/сервлеты. Jetty использует javax.servlet.jar разработанный в составе проекта Apache (http://www.apache.org/).
|
||||
</p>
|
||||
|
||||
<p>Ещё одно приложение на этой странице — <a href="http://www.i2p2.i2p/i2ptunnel">I2PTunnel</a> (а тут <a href="i2ptunnel/" target="_blank">его вебинтерфейс</a>). Автор mihi, лицензия GPL. I2PTunnel занимается туннелированнием обычного TCP/IP трафика через I2P (может применяться для eepproxy и irc-прокси). <a href="http://susi.i2p/">susimail</a> — почтовый клиент с <a href="susimail/susimail">вебинтерфейсом</a>, автор susi23, лицензия GPL. Адресная книга помогает управлять содержимым Ваших hosts.txt файлов (подробнее см. ./addressbook/), автор <a href="http://ragnarok.i2p/">Ragnarok</a>.</p>
|
||||
|
||||
<p>В поставку маршрутизатора включен <a href="http://www.i2p2.i2p/sam">SAM</a> интерфейс, автор human, приложение в общественном достоянии. SAM предназначен для использования приложениями-клиентами, такими как <a href="http://duck.i2p/i2p-bt/">bittorrent-клиенты</a>. Маршрутизатором используется оптимизированная под разные PC-архитектуры библиотека для вычислений с большими числами – jbigi, которая в свою очередь использует библиотеку <a href="http://swox.com/gmp/">GMP</a> (LGPL лицензия). Вспомогательные приложения для Windows созданы с использованием <a href="http://launch4j.sourceforge.net/">Launch4J</a>, а инсталлятор собран при помощи <a href="http://www.izforge.com/izpack/">IzPack</a>. Подробнее о других доступных приложениях и их лицензиях смотрите на странице <a href="http://www.i2p2.i2p/licenses">I2P Software Licenses</a>. Исходный код I2P маршрутизатора и идущих в комплекте приложений можно найти на нашей <a href="http://www.i2p2.i2p/download">странице загрузки</a>. </p>
|
||||
|
||||
|
||||
<h2>История версий</h2>
|
||||
|
||||
<jsp:useBean class="net.i2p.router.web.ContentHelper" id="contenthelper" scope="request" />
|
||||
<% java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getBaseDir(), "history.txt"); %>
|
||||
<jsp:setProperty name="contenthelper" property="page" value="<%=fpath.getAbsolutePath()%>" />
|
||||
<jsp:setProperty name="contenthelper" property="maxLines" value="256" />
|
||||
<jsp:setProperty name="contenthelper" property="startAtBeginning" value="true" />
|
||||
<jsp:getProperty name="contenthelper" property="textContent" />
|
||||
|
||||
<p>Более подробный список изменений можно найти в файле history.txt в каталоге Вашего I2P.
|
||||
</p><hr></div></body></html>
|
||||
@@ -51,7 +51,7 @@ if ( !rendered && ((rs != null) || fakeBw) ) {
|
||||
boolean hideGrid = Boolean.valueOf(""+request.getParameter("hideGrid")).booleanValue();
|
||||
boolean hideTitle = Boolean.valueOf(""+request.getParameter("hideTitle")).booleanValue();
|
||||
boolean showEvents = Boolean.valueOf(""+request.getParameter("showEvents")).booleanValue();
|
||||
boolean showCredit = true;
|
||||
boolean showCredit = false;
|
||||
if (request.getParameter("showCredit") != null)
|
||||
showCredit = Boolean.valueOf(""+request.getParameter("showCredit")).booleanValue();
|
||||
if (fakeBw)
|
||||
|
||||
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Project-Id-Version: I2P routerconsole\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-11-01 02:59+0000\n"
|
||||
"PO-Revision-Date: 2009-12-04 22:22+0100\n"
|
||||
"PO-Revision-Date: 2010-01-17 22:09+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: foo <foo@bar>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -90,7 +90,7 @@ msgstr "Limiteur de bande passante"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:299
|
||||
msgid "I2P will work best if you configure your rates to match the speed of your internet connection."
|
||||
msgstr ""
|
||||
msgstr "I2P fonctionnera mieux si vous configurez le débit de transmission et réception pour qu'ils soient égales à ceux de votre connexion internet."
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:303
|
||||
msgid "KBps In"
|
||||
@@ -117,15 +117,15 @@ msgstr "Vous avez configuré I2P à partager que {0} KOps."
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:335
|
||||
msgid "I2P requires at least 12KBps to enable sharing. "
|
||||
msgstr ""
|
||||
msgstr "I2P a besoin de plus de 12KOps afin d'activer le partage de bande passante"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:336
|
||||
msgid "Please enable sharing (participating in tunnels) by configuring more bandwidth. "
|
||||
msgstr ""
|
||||
msgstr "Veuillez activer le partage de bande passante (tunnels participants) en augmentant votre bande passante."
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:337
|
||||
msgid "It improves your anonymity by creating cover traffic, and helps the network."
|
||||
msgstr ""
|
||||
msgstr "Cela aidera votre anonymat en cachant vos données parmi les données des autres, et cela améliorera le réseau."
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:340
|
||||
#, java-format
|
||||
@@ -134,7 +134,7 @@ msgstr "Vous avez configuré I2P à partager {0} KOps."
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:343
|
||||
msgid "The higher the share bandwidth the more you improve your anonymity and help the network."
|
||||
msgstr ""
|
||||
msgstr "En partageant plus de votre bande passante, vous améliorerez votre anonymat et le réseau."
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:347
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:478
|
||||
@@ -165,7 +165,7 @@ msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:355
|
||||
msgid "The default settings will work for most people."
|
||||
msgstr ""
|
||||
msgstr "La configuration par défaut marchera pour la plupart des gens."
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:357
|
||||
msgid "There is help below."
|
||||
@@ -202,7 +202,7 @@ msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:381
|
||||
msgid "Ignore local interface IP address"
|
||||
msgstr ""
|
||||
msgstr "Ignorer l'adresse IP de l'interface locale"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:385
|
||||
msgid "Use SSU IP address detection only"
|
||||
@@ -211,7 +211,7 @@ msgstr ""
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:389
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:443
|
||||
msgid "Specify hostname or IP"
|
||||
msgstr "Stipuler l'adresse IP ou le nom de l'hôte"
|
||||
msgstr "Saisir l'adresse IP ou le nom de l'hôte"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:395
|
||||
msgid "Select Interface"
|
||||
@@ -266,7 +266,7 @@ msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:453
|
||||
msgid "Completely disable"
|
||||
msgstr ""
|
||||
msgstr "Desactiver complètement"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:455
|
||||
msgid "(select only if behind a firewall that throttles or blocks outbound TCP)"
|
||||
@@ -282,7 +282,7 @@ msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:469
|
||||
msgid "Specify Port"
|
||||
msgstr "Stipuler le port"
|
||||
msgstr "Saisir le port"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:473
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:342
|
||||
@@ -454,7 +454,7 @@ msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:562
|
||||
msgid "WARN - Firewalled and Fast"
|
||||
msgstr ""
|
||||
msgstr "WARN - Pare-feu et Rapide"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:564
|
||||
msgid "You have configured I2P to share more than 128KBps of bandwidth, but you are firewalled."
|
||||
@@ -466,7 +466,7 @@ msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:568
|
||||
msgid "WARN - Firewalled and Floodfill"
|
||||
msgstr ""
|
||||
msgstr "WARN - Pare-feu et Floodfill"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:570
|
||||
msgid "You have configured I2P to be a floodfill router, but you are firewalled."
|
||||
@@ -478,7 +478,7 @@ msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:574
|
||||
msgid "WARN - Firewalled with Inbound TCP Enabled"
|
||||
msgstr ""
|
||||
msgstr "WARN - Pare-feu avec TCP entrant activé"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:576
|
||||
msgid "You have configured inbound TCP, however your UDP port is firewalled, and therefore it is likely that your TCP port is firewalled as well."
|
||||
@@ -494,7 +494,7 @@ msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:582
|
||||
msgid "WARN - Firewalled with UDP Disabled"
|
||||
msgstr ""
|
||||
msgstr "WARN - Pare-feu avec UDP desactivé"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:584
|
||||
msgid "You have configured inbound TCP, however you have disabled UDP."
|
||||
@@ -522,7 +522,7 @@ msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:596
|
||||
msgid "ERR - Private TCP Address"
|
||||
msgstr ""
|
||||
msgstr "ERR - Adresse TCP privée"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:598
|
||||
msgid "You must never advertise an unroutable IP address such as 127.0.0.1 or 192.168.1.1 as your external address."
|
||||
@@ -534,7 +534,7 @@ msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:602
|
||||
msgid "ERR - SymmetricNAT"
|
||||
msgstr ""
|
||||
msgstr "ERR - NAT symétrique"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:604
|
||||
msgid "I2P detected that you are firewalled by a Symmetric NAT."
|
||||
@@ -881,7 +881,7 @@ msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:300
|
||||
msgid "This is useful in some situations"
|
||||
msgstr ""
|
||||
msgstr "C'est utile dans certains cas"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:302
|
||||
msgid "for example, if you changed some settings that client applications only read at startup, such as the routerconsole password or the interface it listens on."
|
||||
@@ -1107,7 +1107,7 @@ msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:319
|
||||
msgid "Please contribute to the router console translation project! Contact the developers on IRC #i2p to help."
|
||||
msgstr ""
|
||||
msgstr "Veuillez contribuer à la traduction du 'router console' ! Contactez les développeurs sur IRC #i2p afin de donner un coup de main."
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:106
|
||||
msgid "config update"
|
||||
@@ -1235,7 +1235,7 @@ msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:231
|
||||
msgid "Please include this information in bug reports"
|
||||
msgstr ""
|
||||
msgstr "Veuillez inclure cette information dans les rapports des bugs"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:105
|
||||
msgid "network database summary"
|
||||
@@ -1308,7 +1308,7 @@ msgstr "Non supportée"
|
||||
|
||||
#: src/net/i2p/router/web/ConfigClientsHandler.java:83
|
||||
msgid "Client configuration saved successfully - restart required to take effect."
|
||||
msgstr ""
|
||||
msgstr "La configuration du client a été sauvegardé avec succès - redémarrer pour prendre effet. "
|
||||
|
||||
#: src/net/i2p/router/web/ConfigClientsHandler.java:89
|
||||
msgid "Bad client index."
|
||||
@@ -1341,7 +1341,7 @@ msgstr "Echec de démarrage"
|
||||
|
||||
#: src/net/i2p/router/web/ConfigClientsHandler.java:137
|
||||
msgid "Failed to find server."
|
||||
msgstr ""
|
||||
msgstr "Pas pu trouver un serveur."
|
||||
|
||||
#: src/net/i2p/router/web/ConfigClientsHelper.java:17
|
||||
msgid "Class and arguments"
|
||||
@@ -1529,7 +1529,7 @@ msgstr ""
|
||||
|
||||
#: src/net/i2p/router/web/ConfigNetHandler.java:293
|
||||
msgid "Updating bandwidth share percentage"
|
||||
msgstr ""
|
||||
msgstr "Mise à jour du pourcentage de bande passante partagée"
|
||||
|
||||
#: src/net/i2p/router/web/ConfigNetHandler.java:363
|
||||
msgid "Updated bandwidth limits"
|
||||
@@ -1557,7 +1557,7 @@ msgstr "Pair"
|
||||
|
||||
#: src/net/i2p/router/web/ConfigPeerHandler.java:24
|
||||
msgid "banned until restart"
|
||||
msgstr ""
|
||||
msgstr "interdit jusqu'au rédémarrage"
|
||||
|
||||
#: src/net/i2p/router/web/ConfigPeerHandler.java:27
|
||||
#: src/net/i2p/router/web/ConfigPeerHandler.java:38
|
||||
@@ -1567,11 +1567,11 @@ msgstr "Pair pas valable"
|
||||
|
||||
#: src/net/i2p/router/web/ConfigPeerHandler.java:33
|
||||
msgid "unbanned"
|
||||
msgstr ""
|
||||
msgstr "plus interdit"
|
||||
|
||||
#: src/net/i2p/router/web/ConfigPeerHandler.java:35
|
||||
msgid "is not currently banned"
|
||||
msgstr ""
|
||||
msgstr "n'est pas actuellement interdit"
|
||||
|
||||
#: src/net/i2p/router/web/ConfigPeerHandler.java:47
|
||||
msgid "Bad speed value"
|
||||
@@ -1613,11 +1613,11 @@ msgstr "Redémarrage en {0}"
|
||||
|
||||
#: src/net/i2p/router/web/ConfigServiceHandler.java:56
|
||||
msgid "Graceful shutdown initiated"
|
||||
msgstr ""
|
||||
msgstr "Fermature gracieuse initiée"
|
||||
|
||||
#: src/net/i2p/router/web/ConfigServiceHandler.java:60
|
||||
msgid "Shutdown immediately! boom bye bye bad bwoy"
|
||||
msgstr ""
|
||||
msgstr "Fermer immédiatement !"
|
||||
|
||||
#: src/net/i2p/router/web/ConfigServiceHandler.java:63
|
||||
msgid "Graceful shutdown cancelled"
|
||||
@@ -1703,7 +1703,7 @@ msgstr ""
|
||||
|
||||
#: src/net/i2p/router/web/ConfigTunnelsHandler.java:142
|
||||
msgid "Exploratory tunnel configuration saved successfully."
|
||||
msgstr ""
|
||||
msgstr "Configuration du tunnel exploratoire a été sauvegardé avec succès."
|
||||
|
||||
#: src/net/i2p/router/web/ConfigTunnelsHandler.java:144
|
||||
#: src/net/i2p/router/web/ConfigUIHandler.java:36
|
||||
@@ -1818,11 +1818,11 @@ msgstr "Suédois"
|
||||
|
||||
#: src/net/i2p/router/web/ConfigUpdateHandler.java:63
|
||||
msgid "Update available, attempting to download now"
|
||||
msgstr ""
|
||||
msgstr "Mise à jour disponible, en tentant de la télécharger actuellement"
|
||||
|
||||
#: src/net/i2p/router/web/ConfigUpdateHandler.java:65
|
||||
msgid "Update available, click button on left to download"
|
||||
msgstr ""
|
||||
msgstr "Mise à jour disponible, cliquez sur le bouton sur la gauche pour la télécharger"
|
||||
|
||||
#: src/net/i2p/router/web/ConfigUpdateHandler.java:67
|
||||
msgid "No update available"
|
||||
@@ -2439,23 +2439,23 @@ msgstr ""
|
||||
|
||||
#: src/net/i2p/router/web/SummaryHelper.java:104
|
||||
msgid "ERR-Private TCP Address"
|
||||
msgstr ""
|
||||
msgstr "ERR - Adresse TCP privée"
|
||||
|
||||
#: src/net/i2p/router/web/SummaryHelper.java:106
|
||||
msgid "ERR-SymmetricNAT"
|
||||
msgstr ""
|
||||
msgstr "ERR - NAT symétrique"
|
||||
|
||||
#: src/net/i2p/router/web/SummaryHelper.java:109
|
||||
msgid "WARN-Firewalled with Inbound TCP Enabled"
|
||||
msgstr ""
|
||||
msgstr "WARN - pare-feu avec TCP entrant activé"
|
||||
|
||||
#: src/net/i2p/router/web/SummaryHelper.java:111
|
||||
msgid "WARN-Firewalled and Floodfill"
|
||||
msgstr ""
|
||||
msgstr "WARN - Pare-feu et Floodfill"
|
||||
|
||||
#: src/net/i2p/router/web/SummaryHelper.java:113
|
||||
msgid "WARN-Firewalled and Fast"
|
||||
msgstr ""
|
||||
msgstr "WARN - Pare-feu et Rapide"
|
||||
|
||||
#: src/net/i2p/router/web/SummaryHelper.java:116
|
||||
msgid "ERR-UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart"
|
||||
@@ -2467,7 +2467,7 @@ msgstr ""
|
||||
|
||||
#: src/net/i2p/router/web/SummaryHelper.java:125
|
||||
msgid "WARN-Firewalled with UDP Disabled"
|
||||
msgstr ""
|
||||
msgstr "WARN - Pare-feu avec UDP desactivé"
|
||||
|
||||
#: src/net/i2p/router/web/SummaryHelper.java:360
|
||||
msgid "Add/remove/edit & control your client and server tunnels"
|
||||
|
||||
208
build.xml
@@ -197,6 +197,8 @@
|
||||
<delete file="BOB-one.jar" failonerror="false" quiet="true" />
|
||||
</target>
|
||||
<target name="distclean" depends="clean">
|
||||
<delete dir="debian/tmp" />
|
||||
<delete file="debian/files" />
|
||||
<ant dir="core/java/" target="distclean" />
|
||||
<ant dir="router/java/" target="distclean" />
|
||||
<ant dir="apps/ministreaming/java/" target="distclean" />
|
||||
@@ -237,8 +239,7 @@
|
||||
<defaultexcludes remove="**/*~"/>
|
||||
|
||||
<delete>
|
||||
<fileset dir="." includes="**/*.class" />
|
||||
<fileset dir="." includes="**/*.java~" />
|
||||
<fileset dir="." includes="**/*.class **/*.java~ **/*.txt~ **/*.xml~ **/*.sh~ **/*.SlackBuild~" />
|
||||
<!--
|
||||
Less common, but they pollute my workspace here, so we
|
||||
might as well nuke these as well. Are there any others?
|
||||
@@ -247,82 +248,37 @@
|
||||
|
||||
++Sponge
|
||||
-->
|
||||
<fileset dir="." includes="**/*.txt~" />
|
||||
<fileset dir="." includes="**/*.xml~" />
|
||||
<fileset dir="." includes="**/*.sh~" />
|
||||
<fileset dir="." includes="**/*.SlackBuild~" />
|
||||
</delete>
|
||||
<!--
|
||||
Now we put the defaults back
|
||||
-->
|
||||
<defaultexcludes default="true"/>
|
||||
</target>
|
||||
<target name="pkg" depends="distclean, updater, preppkg, installer" />
|
||||
|
||||
<!-- A few reeleases only, then back to updater. First release was 0.7.11 -->
|
||||
<target name="pkg" depends="distclean, updaterWithJettyFixes, preppkg, installer" />
|
||||
|
||||
<target name="pkgclean" depends="deletepkg-temp">
|
||||
<delete>
|
||||
<fileset dir="." includes="i2p.tar.bz2 install.jar i2pupdate.zip" />
|
||||
</delete>
|
||||
</target>
|
||||
<target name="preppkg" depends="build, buildexe, preplicenses, prepconsoleDocs">
|
||||
<copy file="build/i2p.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/i2ptunnel.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/jasper-compiler.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/jasper-runtime.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/commons-logging.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/commons-el.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/javax.servlet.jar" todir="pkg-temp/lib/" />
|
||||
|
||||
<target name="preppkg" depends="preppkg-linux, buildexe">
|
||||
<copy file="build/jbigi.jar" todir="pkg-temp/lib" />
|
||||
<copy file="build/mstreaming.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/streaming.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/org.mortbay.jetty.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/router.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/routerconsole.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/sam.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/BOB.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/systray.jar" todir="pkg-temp/lib" />
|
||||
<!-- <copy file="build/sucker.jar" todir="pkg-temp/lib" /> -->
|
||||
<copy file="build/i2psnark.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="i2p.exe" todir="pkg-temp/" failonerror="false" />
|
||||
<copy file="installer/resources/runplain.sh" todir="pkg-temp/" />
|
||||
<copy file="apps/systray/java/lib/systray4j.jar" todir="pkg-temp/lib" />
|
||||
<copy file="apps/systray/java/lib/systray4j.dll" todir="pkg-temp/lib" />
|
||||
<copy file="apps/systray/java/resources/iggy.ico" todir="pkg-temp/icons" />
|
||||
<copy file="apps/systray/java/resources/iggy.xpm" todir="pkg-temp/icons" />
|
||||
<copy file="build/i2ptunnel.war" todir="pkg-temp/webapps/" />
|
||||
<copy file="build/routerconsole.war" todir="pkg-temp/webapps/" />
|
||||
<copy file="build/addressbook.war" todir="pkg-temp/webapps/" />
|
||||
<copy file="build/susimail.war" todir="pkg-temp/webapps/" />
|
||||
<copy file="build/susidns.war" todir="pkg-temp/webapps/" />
|
||||
<!-- <copy file="build/syndie.war" todir="pkg-temp/webapps/" /> -->
|
||||
<copy file="build/i2psnark.war" todir="pkg-temp/webapps/" />
|
||||
<copy file="apps/i2psnark/launch-i2psnark" todir="pkg-temp/" />
|
||||
<copy file="apps/i2psnark/jetty-i2psnark.xml" todir="pkg-temp/" />
|
||||
<copy file="apps/i2psnark/i2psnark.config" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/blocklist.txt" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/clients.config" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/eepget" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/i2prouter" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/eepget.bat" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/i2prouter.bat" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/fixperms.bat" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/i2ptunnel.config" todir="pkg-temp/" />
|
||||
<!-- <copy file="installer/resources/install_i2p_service_unix" todir="pkg-temp/" /> -->
|
||||
<copy file="installer/resources/install_i2p_service_winnt.bat" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/osid" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/postinstall.bat" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/postinstall.sh" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/systray.config" todir="pkg-temp/" />
|
||||
<!-- <copy file="installer/resources/uninstall_i2p_service_unix" todir="pkg-temp/" /> -->
|
||||
<copy file="installer/resources/uninstall_i2p_service_winnt.bat" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/wrapper.config" todir="pkg-temp/" />
|
||||
<copy todir="pkg-temp/lib/wrapper/freebsd/">
|
||||
<fileset dir="installer/lib/wrapper/freebsd/" />
|
||||
</copy>
|
||||
<copy todir="pkg-temp/lib/wrapper/linux/">
|
||||
<fileset dir="installer/lib/wrapper/linux/" />
|
||||
</copy>
|
||||
<copy todir="pkg-temp/lib/wrapper/linux64/">
|
||||
<fileset dir="installer/lib/wrapper/linux64/" />
|
||||
</copy>
|
||||
<copy todir="pkg-temp/lib/wrapper/macosx/">
|
||||
<fileset dir="installer/lib/wrapper/macosx/" />
|
||||
</copy>
|
||||
@@ -332,19 +288,68 @@
|
||||
<copy todir="pkg-temp/lib/wrapper/win32/">
|
||||
<fileset dir="installer/lib/wrapper/win32/" />
|
||||
</copy>
|
||||
</target>
|
||||
|
||||
<!-- only what is needed for debian, etc. -->
|
||||
<target name="preppkg-linux-only" depends="preppkg-linux">
|
||||
<!-- rip the non-linux stuff out of jbigi.jar -->
|
||||
<mkdir dir="tmpextract" />
|
||||
<unjar src="build/jbigi.jar" dest="tmpextract/" />
|
||||
<jar destfile="pkg-temp/lib/jbigi.jar" >
|
||||
<fileset dir="tmpextract/" includes="*linux*" />
|
||||
</jar>
|
||||
<delete dir="tmpextract/" />
|
||||
</target>
|
||||
|
||||
<target name="preppkg-linux" depends="build, preplicenses, prepconsoleDocs">
|
||||
<copy file="build/i2p.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/i2ptunnel.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/jasper-compiler.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/jasper-runtime.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/commons-logging.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/commons-el.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/javax.servlet.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/mstreaming.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/streaming.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/org.mortbay.jetty.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/router.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/routerconsole.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/sam.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/BOB.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/systray.jar" todir="pkg-temp/lib" />
|
||||
<copy file="build/i2psnark.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="installer/resources/runplain.sh" todir="pkg-temp/" />
|
||||
<copy file="apps/systray/java/lib/systray4j.jar" todir="pkg-temp/lib" />
|
||||
<copy file="build/i2ptunnel.war" todir="pkg-temp/webapps/" />
|
||||
<copy file="build/routerconsole.war" todir="pkg-temp/webapps/" />
|
||||
<copy file="build/addressbook.war" todir="pkg-temp/webapps/" />
|
||||
<copy file="build/susimail.war" todir="pkg-temp/webapps/" />
|
||||
<copy file="build/susidns.war" todir="pkg-temp/webapps/" />
|
||||
<copy file="build/i2psnark.war" todir="pkg-temp/webapps/" />
|
||||
<copy file="apps/i2psnark/launch-i2psnark" todir="pkg-temp/" />
|
||||
<copy file="apps/i2psnark/jetty-i2psnark.xml" todir="pkg-temp/" />
|
||||
<copy file="apps/i2psnark/i2psnark.config" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/blocklist.txt" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/clients.config" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/eepget" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/i2prouter" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/i2ptunnel.config" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/osid" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/postinstall.sh" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/systray.config" todir="pkg-temp/" />
|
||||
<copy file="installer/resources/wrapper.config" todir="pkg-temp/" />
|
||||
<copy todir="pkg-temp/lib/wrapper/linux/">
|
||||
<fileset dir="installer/lib/wrapper/linux/" />
|
||||
</copy>
|
||||
<copy todir="pkg-temp/lib/wrapper/linux64/">
|
||||
<fileset dir="installer/lib/wrapper/linux64/" />
|
||||
</copy>
|
||||
<copy file="installer/resources/hosts.txt" todir="pkg-temp/" />
|
||||
<copy file="INSTALL-headless.txt" todir="pkg-temp/" />
|
||||
<!-- overwrite the truncated history put in by the updater -->
|
||||
<copy file="history.txt" todir="pkg-temp/" overwrite="true" />
|
||||
<mkdir dir="pkg-temp/scripts" />
|
||||
<copy file="apps/proxyscript/i2pProxy.pac" todir="pkg-temp/scripts/" />
|
||||
<!-- test classes aren't in the jars anymore
|
||||
<copy file="core/perl/i2pbench.sh" todir="pkg-temp/scripts/" />
|
||||
<copy file="core/perl/i2ptest.sh" todir="pkg-temp/scripts/" />
|
||||
-->
|
||||
<!-- polecat: please put your modified toolbar.html in installer/resources/toolbar.html
|
||||
and uncomment the following -->
|
||||
<!-- <copy file="installer/resources/toolbar.html" todir="pkg-temp/docs/" /> -->
|
||||
<!-- overwrite the news put in by the updater -->
|
||||
<copy file="installer/resources/initialNews.xml" tofile="pkg-temp/docs/news.xml" overwrite="true" />
|
||||
<copy file="installer/resources/startconsole.html" todir="pkg-temp/docs/" />
|
||||
@@ -355,18 +360,21 @@
|
||||
<copy todir="pkg-temp/docs/themes/" >
|
||||
<fileset dir="installer/resources/themes/" />
|
||||
</copy>
|
||||
<!-- Eepsite stuff here -->
|
||||
<mkdir dir="pkg-temp/eepsite" />
|
||||
<mkdir dir="pkg-temp/eepsite/webapps" />
|
||||
<mkdir dir="pkg-temp/eepsite/logs" />
|
||||
<mkdir dir="pkg-temp/eepsite/docroot" />
|
||||
<mkdir dir="pkg-temp/eepsite/cgi-bin" />
|
||||
<copy file="installer/resources/eepsite_index.html" tofile="pkg-temp/eepsite/docroot/index.html" />
|
||||
<copy file="installer/resources/eepsite_index_de.html" tofile="pkg-temp/eepsite/docroot/index_de.html" />
|
||||
<copy file="installer/resources/eepsite.css" todir="pkg-temp/eepsite/docroot/" />
|
||||
<copy file="installer/resources/robots.txt" todir="pkg-temp/eepsite/docroot/" />
|
||||
<mkdir dir="pkg-temp/eepsite/docroot" />
|
||||
<mkdir dir="pkg-temp/eepsite/docroot/help" />
|
||||
<mkdir dir="pkg-temp/eepsite/docroot/help/lib" />
|
||||
<copy todir="pkg-temp/eepsite/docroot/" >
|
||||
<fileset dir="installer/resources/eepsite.help/" includes="robots.txt index.html help/pagetemplate.html help/index*.html **/*.png **/*.css" />
|
||||
</copy>
|
||||
<copy file="installer/resources/themes/console/images/favicon.ico" tofile="pkg-temp/eepsite/docroot/favicon.ico" />
|
||||
<copy file="installer/resources/jetty.xml" tofile="pkg-temp/eepsite/jetty.xml" />
|
||||
</target>
|
||||
|
||||
<target name="preplicenses">
|
||||
<copy file="LICENSE.txt" todir="pkg-temp/" />
|
||||
<copy todir="pkg-temp/licenses/" >
|
||||
@@ -646,7 +654,7 @@
|
||||
<target name="release" depends="pkg">
|
||||
<echo message="================================================================" />
|
||||
<echo message="Did you update these files?" />
|
||||
<exec executable="ls">
|
||||
<exec executable="ls" failonerror="true">
|
||||
<arg value="-l" />
|
||||
<arg value="history.txt" />
|
||||
<arg value="installer/resources/initialNews.xml" />
|
||||
@@ -656,15 +664,19 @@
|
||||
<arg value="router/java/src/net/i2p/router/RouterVersion.java" />
|
||||
</exec>
|
||||
<echo message="Everything is checked in, right? Let's be sure:" />
|
||||
<exec executable="mtn">
|
||||
<exec executable="mtn" failonerror="true">
|
||||
<arg value="st" />
|
||||
</exec>
|
||||
<input message="Enter new version number:" addproperty="release.number" />
|
||||
<fail message="You must enter a version number." >
|
||||
<condition>
|
||||
<equals arg1="${release.number}" arg2=""/>
|
||||
</condition>
|
||||
</fail>
|
||||
<echo message="If there are any modified files above, stop now!" />
|
||||
<!-- get release version number -->
|
||||
<exec executable="grep" outputproperty="versionLine" failonerror="true" >
|
||||
<arg value="public final static String VERSION" />
|
||||
<arg value="core/java/src/net/i2p/CoreVersion.java" />
|
||||
</exec>
|
||||
<exec executable="cut" inputstring="${versionLine}" outputproperty="release.number" failonerror="true" >
|
||||
<arg value="-f2" />
|
||||
<arg value="-d"" />
|
||||
</exec>
|
||||
<echo message="New version number is ${release.number}" />
|
||||
<copy file="i2pupdate.zip" tofile="i2pupdate_${release.number}.zip" />
|
||||
<copy file="i2pinstall.exe" tofile="i2pinstall_${release.number}.exe" />
|
||||
@@ -707,15 +719,18 @@
|
||||
<arg value="i2pupdate.sud" />
|
||||
</java>
|
||||
<!-- will this use the monotonerc file in the current workspace? -->
|
||||
<echo message="Checking out fresh copy into ../i2p-${release-number} for tarballing:" />
|
||||
<echo message="Checking out fresh copy into ../i2p-${release.number} for tarballing:" />
|
||||
<delete dir="../i2p-${release.number}" />
|
||||
<exec executable="mtn">
|
||||
<exec executable="mtn" failonerror="true">
|
||||
<arg value="co" />
|
||||
<arg value="-b" />
|
||||
<arg value="i2p.i2p" />
|
||||
<!-- w: is the revision of the current workspace -->
|
||||
<arg value="-r" />
|
||||
<arg value="w:" />
|
||||
<arg value="../i2p-${release.number}/" />
|
||||
</exec>
|
||||
<exec executable="tar">
|
||||
<exec executable="tar" failonerror="true">
|
||||
<arg value="cjf" />
|
||||
<arg value="i2psource_${release.number}.tar.bz2" />
|
||||
<arg value="-C" />
|
||||
@@ -728,20 +743,20 @@
|
||||
<delete file="i2pinstall_${release.number}.exe.sig" />
|
||||
<delete file="i2psource_${release.number}.tar.bz2.sig" />
|
||||
<delete file="i2pupdate_${release.number}.zip.sig" />
|
||||
<exec executable="gpg">
|
||||
<exec executable="gpg" failonerror="true">
|
||||
<arg value="-b" />
|
||||
<arg value="i2pinstall_${release.number}.exe" />
|
||||
</exec>
|
||||
<exec executable="gpg">
|
||||
<exec executable="gpg" failonerror="true">
|
||||
<arg value="-b" />
|
||||
<arg value="i2psource_${release.number}.tar.bz2" />
|
||||
</exec>
|
||||
<exec executable="gpg">
|
||||
<exec executable="gpg" failonerror="true">
|
||||
<arg value="-b" />
|
||||
<arg value="i2pupdate_${release.number}.zip" />
|
||||
</exec>
|
||||
<echo message="File sizes:" />
|
||||
<exec executable="ls">
|
||||
<exec executable="ls" failonerror="true">
|
||||
<arg value="-l" />
|
||||
<arg value="i2pinstall_${release.number}.exe" />
|
||||
<arg value="i2psource_${release.number}.tar.bz2" />
|
||||
@@ -752,12 +767,39 @@
|
||||
<arg value="i2pupdate_${release.number}.zip.sig" />
|
||||
</exec>
|
||||
<echo message="SHA256 sums:" />
|
||||
<exec executable="sha256sum">
|
||||
<exec executable="sha256sum" failonerror="true">
|
||||
<arg value="i2pinstall_${release.number}.exe" />
|
||||
<arg value="i2psource_${release.number}.tar.bz2" />
|
||||
<arg value="i2pupdate_${release.number}.zip" />
|
||||
<arg value="i2pupdate.sud" />
|
||||
</exec>
|
||||
<echo message="Don't forget to mtn tag h: i2p-${release-number}" />
|
||||
<echo message="Don't forget to mtn tag w: i2p-${release.number}" />
|
||||
<echo message="... and mtn cert t:i2p-${release.number} branch i2p.i2p.release" />
|
||||
</target>
|
||||
<target name="debian">
|
||||
<!-- binary only -->
|
||||
<echo message="Did you update the version in these files?" />
|
||||
<exec executable="ls" failonerror="true">
|
||||
<arg value="-l" />
|
||||
<arg value="debian/changelog" />
|
||||
</exec>
|
||||
<echo message="====================" />
|
||||
<exec executable="dpkg-buildpackage" failifexecutionfails="true" >
|
||||
<arg value="-b" />
|
||||
</exec>
|
||||
</target>
|
||||
<target name="debian-source">
|
||||
<!-- bundle the 20MB jetty 5 lib since there probably isn't a deb for it -->
|
||||
<ant dir="apps/jetty" target="verifyJettylib" />
|
||||
<echo message="Did you update the version in these files?" />
|
||||
<exec executable="ls" failonerror="true">
|
||||
<arg value="-l" />
|
||||
<arg value="debian/changelog" />
|
||||
</exec>
|
||||
<echo message="====================" />
|
||||
<exec executable="dpkg-buildpackage" failifexecutionfails="true" >
|
||||
<arg value="-S" />
|
||||
<arg value="-I_MTN" />
|
||||
</exec>
|
||||
</target>
|
||||
</project>
|
||||
|
||||
@@ -16,7 +16,7 @@ package net.i2p;
|
||||
public class CoreVersion {
|
||||
/** deprecated */
|
||||
public final static String ID = "Monotone";
|
||||
public final static String VERSION = "0.7.8";
|
||||
public final static String VERSION = "0.7.10";
|
||||
|
||||
public static void main(String args[]) {
|
||||
System.out.println("I2P Core version: " + VERSION);
|
||||
|
||||
@@ -25,10 +25,10 @@ abstract class HandlerImpl implements I2CPMessageHandler {
|
||||
public HandlerImpl(I2PAppContext context, int type) {
|
||||
_context = context;
|
||||
_type = type;
|
||||
_log = new Log(getClass());
|
||||
_log = context.logManager().getLog(getClass());
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return _type;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,11 @@ class SetDateMessageHandler extends HandlerImpl {
|
||||
public void handleMessage(I2CPMessage message, I2PSessionImpl session) {
|
||||
_log.debug("Handle message " + message);
|
||||
SetDateMessage msg = (SetDateMessage) message;
|
||||
Clock.getInstance().setNow(msg.getDate().getTime());
|
||||
// Only do this if we are NOT in the router context;
|
||||
// otherwise, it sets getUpdatedSuccessfully() in Clock when all
|
||||
// we did was get the time from ourselves.
|
||||
if (!_context.isRouterContext())
|
||||
Clock.getInstance().setNow(msg.getDate().getTime());
|
||||
session.dateUpdated();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,18 @@ public final class I2PDatagramMaker {
|
||||
sxPrivKey = session.getPrivateKey();
|
||||
sxDestBytes = session.getMyDestination().toByteArray();
|
||||
}
|
||||
/**
|
||||
* Construct a new I2PDatagramMaker that is null.
|
||||
* Use setI2PDatagramMaker to set the parameters.
|
||||
*/
|
||||
public I2PDatagramMaker() {
|
||||
// nop
|
||||
}
|
||||
|
||||
public void setI2PDatagramMaker(I2PSession session) {
|
||||
sxPrivKey = session.getPrivateKey();
|
||||
sxDestBytes = session.getMyDestination().toByteArray();
|
||||
}
|
||||
/**
|
||||
* Make a repliable I2P datagram containing the specified payload.
|
||||
*
|
||||
|
||||
@@ -64,16 +64,16 @@ public class Address extends DataStructureImpl {
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return DataHelper.hashCode(getHostname())
|
||||
+ DataHelper.hashCode(getDestination());
|
||||
return DataHelper.hashCode(_hostname)
|
||||
+ DataHelper.hashCode(_destination);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder buf = new StringBuilder(64);
|
||||
buf.append("[Address: ");
|
||||
buf.append("\n\tHostname: ").append(getHostname());
|
||||
buf.append("\n\tDestination: ").append(getDestination());
|
||||
buf.append("\n\tHostname: ").append(_hostname);
|
||||
buf.append("\n\tDestination: ").append(_destination);
|
||||
buf.append("]");
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
@@ -140,11 +140,11 @@ public class Certificate extends DataStructureImpl {
|
||||
public boolean equals(Object object) {
|
||||
if ((object == null) || !(object instanceof Certificate)) return false;
|
||||
Certificate cert = (Certificate) object;
|
||||
return getCertificateType() == cert.getCertificateType() && DataHelper.eq(getPayload(), cert.getPayload());
|
||||
return _type == cert.getCertificateType() && DataHelper.eq(_payload, cert.getPayload());
|
||||
}
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return getCertificateType() + DataHelper.hashCode(getPayload());
|
||||
return _type + DataHelper.hashCode(_payload);
|
||||
}
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
@@ -48,8 +48,8 @@ import net.i2p.util.ReusableGZIPOutputStream;
|
||||
* @author jrandom
|
||||
*/
|
||||
public class DataHelper {
|
||||
private final static byte _equalBytes[] = "=".getBytes(); // in UTF-8
|
||||
private final static byte _semicolonBytes[] = ";".getBytes(); // in UTF-8
|
||||
private final static byte EQUAL_BYTES[] = "=".getBytes(); // in UTF-8
|
||||
private final static byte SEMICOLON_BYTES[] = ";".getBytes(); // in UTF-8
|
||||
|
||||
/** Read a mapping from the stream, as defined by the I2P data structure spec,
|
||||
* and store it into a Properties object.
|
||||
@@ -76,17 +76,17 @@ public class DataHelper {
|
||||
int read = read(rawStream, data);
|
||||
if (read != size) throw new DataFormatException("Not enough data to read the properties");
|
||||
ByteArrayInputStream in = new ByteArrayInputStream(data);
|
||||
byte eqBuf[] = new byte[_equalBytes.length];
|
||||
byte semiBuf[] = new byte[_semicolonBytes.length];
|
||||
byte eqBuf[] = new byte[EQUAL_BYTES.length];
|
||||
byte semiBuf[] = new byte[SEMICOLON_BYTES.length];
|
||||
while (in.available() > 0) {
|
||||
String key = readString(in);
|
||||
read = read(in, eqBuf);
|
||||
if ((read != eqBuf.length) || (!eq(eqBuf, _equalBytes))) {
|
||||
if ((read != eqBuf.length) || (!eq(eqBuf, EQUAL_BYTES))) {
|
||||
break;
|
||||
}
|
||||
String val = readString(in);
|
||||
read = read(in, semiBuf);
|
||||
if ((read != semiBuf.length) || (!eq(semiBuf, _semicolonBytes))) {
|
||||
if ((read != semiBuf.length) || (!eq(semiBuf, SEMICOLON_BYTES))) {
|
||||
break;
|
||||
}
|
||||
props.put(key, val);
|
||||
@@ -123,7 +123,7 @@ public class DataHelper {
|
||||
if (props != null) {
|
||||
OrderedProperties p = new OrderedProperties();
|
||||
p.putAll(props);
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream(32);
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream(p.size() * 64);
|
||||
for (Iterator iter = p.keySet().iterator(); iter.hasNext();) {
|
||||
String key = (String) iter.next();
|
||||
String val = p.getProperty(key);
|
||||
@@ -131,15 +131,17 @@ public class DataHelper {
|
||||
writeStringUTF8(baos, key);
|
||||
else
|
||||
writeString(baos, key);
|
||||
baos.write(_equalBytes);
|
||||
baos.write(EQUAL_BYTES);
|
||||
if (utf8)
|
||||
writeStringUTF8(baos, val);
|
||||
else
|
||||
writeString(baos, val);
|
||||
baos.write(_semicolonBytes);
|
||||
baos.write(SEMICOLON_BYTES);
|
||||
}
|
||||
baos.close();
|
||||
byte propBytes[] = baos.toByteArray();
|
||||
if (propBytes.length > 65535)
|
||||
throw new DataFormatException("Properties too big (65535 max): " + propBytes.length);
|
||||
writeLong(rawStream, 2, propBytes.length);
|
||||
rawStream.write(propBytes);
|
||||
} else {
|
||||
@@ -164,9 +166,9 @@ public class DataHelper {
|
||||
//key = new String(key.getBytes(), "UTF-8");
|
||||
//val = new String(val.getBytes(), "UTF-8");
|
||||
writeString(baos, key);
|
||||
baos.write(_equalBytes);
|
||||
baos.write(EQUAL_BYTES);
|
||||
writeString(baos, val);
|
||||
baos.write(_semicolonBytes);
|
||||
baos.write(SEMICOLON_BYTES);
|
||||
}
|
||||
baos.close();
|
||||
byte propBytes[] = baos.toByteArray();
|
||||
@@ -190,17 +192,17 @@ public class DataHelper {
|
||||
int size = (int)fromLong(source, offset, 2);
|
||||
offset += 2;
|
||||
ByteArrayInputStream in = new ByteArrayInputStream(source, offset, size);
|
||||
byte eqBuf[] = new byte[_equalBytes.length];
|
||||
byte semiBuf[] = new byte[_semicolonBytes.length];
|
||||
byte eqBuf[] = new byte[EQUAL_BYTES.length];
|
||||
byte semiBuf[] = new byte[SEMICOLON_BYTES.length];
|
||||
while (in.available() > 0) {
|
||||
String key = readString(in);
|
||||
int read = read(in, eqBuf);
|
||||
if ((read != eqBuf.length) || (!eq(eqBuf, _equalBytes))) {
|
||||
if ((read != eqBuf.length) || (!eq(eqBuf, EQUAL_BYTES))) {
|
||||
break;
|
||||
}
|
||||
String val = readString(in);
|
||||
read = read(in, semiBuf);
|
||||
if ((read != semiBuf.length) || (!eq(semiBuf, _semicolonBytes))) {
|
||||
if ((read != semiBuf.length) || (!eq(semiBuf, SEMICOLON_BYTES))) {
|
||||
break;
|
||||
}
|
||||
target.put(key, val);
|
||||
@@ -280,8 +282,13 @@ public class DataHelper {
|
||||
String val = line.substring(split+1); //.trim() ??????????????
|
||||
// Unescape line breaks after loading.
|
||||
// Remember: "\" needs escaping both for regex and string.
|
||||
val = val.replaceAll("\\\\r","\r");
|
||||
val = val.replaceAll("\\\\n","\n");
|
||||
|
||||
// For some reason this was turning \r (one backslash) into CR,
|
||||
// I think it needed one more \\ in the pattern?,
|
||||
// which sucks if your username is randy on DOS,
|
||||
// it was a horrible idea anyway
|
||||
//val = val.replaceAll("\\\\r","\r");
|
||||
//val = val.replaceAll("\\\\n","\n");
|
||||
if ( (key.length() > 0) && (val.length() > 0) )
|
||||
if (forceLowerCase)
|
||||
props.setProperty(key.toLowerCase(), val);
|
||||
|
||||
@@ -129,9 +129,9 @@ public class Destination extends DataStructureImpl {
|
||||
public boolean equals(Object object) {
|
||||
if ((object == null) || !(object instanceof Destination)) return false;
|
||||
Destination dst = (Destination) object;
|
||||
return DataHelper.eq(getCertificate(), dst.getCertificate())
|
||||
&& DataHelper.eq(getSigningPublicKey(), dst.getSigningPublicKey())
|
||||
&& DataHelper.eq(getPublicKey(), dst.getPublicKey());
|
||||
return DataHelper.eq(_certificate, dst.getCertificate())
|
||||
&& DataHelper.eq(_signingKey, dst.getSigningPublicKey())
|
||||
&& DataHelper.eq(_publicKey, dst.getPublicKey());
|
||||
}
|
||||
|
||||
/** the public key has enough randomness in it to use it by itself for speed */
|
||||
|
||||
@@ -77,11 +77,13 @@ public class Lease extends DataStructureImpl {
|
||||
* Transient attribute of the lease, used to note how many times messages sent
|
||||
* to the destination through the current lease were successful.
|
||||
*
|
||||
* @deprecated unused
|
||||
*/
|
||||
public int getNumSuccess() {
|
||||
return _numSuccess;
|
||||
}
|
||||
|
||||
/** @deprecated unused */
|
||||
public void setNumSuccess(int num) {
|
||||
_numSuccess = num;
|
||||
}
|
||||
@@ -90,11 +92,13 @@ public class Lease extends DataStructureImpl {
|
||||
* Transient attribute of the lease, used to note how many times messages sent
|
||||
* to the destination through the current lease failed.
|
||||
*
|
||||
* @deprecated unused
|
||||
*/
|
||||
public int getNumFailure() {
|
||||
return _numFailure;
|
||||
}
|
||||
|
||||
/** @deprecated unused */
|
||||
public void setNumFailure(int num) {
|
||||
_numFailure = num;
|
||||
}
|
||||
@@ -131,25 +135,25 @@ public class Lease extends DataStructureImpl {
|
||||
public boolean equals(Object object) {
|
||||
if ((object == null) || !(object instanceof Lease)) return false;
|
||||
Lease lse = (Lease) object;
|
||||
return DataHelper.eq(getEndDate(), lse.getEndDate())
|
||||
&& DataHelper.eq(getTunnelId(), lse.getTunnelId())
|
||||
&& DataHelper.eq(getGateway(), lse.getGateway());
|
||||
return DataHelper.eq(_end, lse.getEndDate())
|
||||
&& DataHelper.eq(_tunnelId, lse.getTunnelId())
|
||||
&& DataHelper.eq(_gateway, lse.getGateway());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return DataHelper.hashCode(getEndDate()) + DataHelper.hashCode(getGateway())
|
||||
+ DataHelper.hashCode(getTunnelId());
|
||||
return DataHelper.hashCode(_end) + DataHelper.hashCode(_gateway)
|
||||
+ DataHelper.hashCode(_tunnelId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder buf = new StringBuilder(128);
|
||||
buf.append("[Lease: ");
|
||||
buf.append("\n\tEnd Date: ").append(getEndDate());
|
||||
buf.append("\n\tGateway: ").append(getGateway());
|
||||
buf.append("\n\tTunnelId: ").append(getTunnelId());
|
||||
buf.append("\n\tEnd Date: ").append(_end);
|
||||
buf.append("\n\tGateway: ").append(_gateway);
|
||||
buf.append("\n\tTunnelId: ").append(_tunnelId);
|
||||
buf.append("]");
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
@@ -46,6 +46,13 @@ import net.i2p.util.RandomSource;
|
||||
* writeBytes() will output the original encrypted
|
||||
* leases and the original leaseset signature.
|
||||
*
|
||||
* Revocation (zero leases) isn't used anywhere. In addition:
|
||||
* - A revoked leaseset has an EarliestLeaseDate of -1, so it will
|
||||
* never be stored successfully.
|
||||
* - Revocation of an encrypted leaseset will explode.
|
||||
* - So having an included signature at all is pointless?
|
||||
*
|
||||
*
|
||||
* @author jrandom
|
||||
*/
|
||||
public class LeaseSet extends DataStructureImpl {
|
||||
@@ -54,7 +61,7 @@ public class LeaseSet extends DataStructureImpl {
|
||||
private PublicKey _encryptionKey;
|
||||
private SigningPublicKey _signingKey;
|
||||
// Keep leases in the order received, or else signature verification will fail!
|
||||
private List _leases;
|
||||
private List<Lease> _leases;
|
||||
private Signature _signature;
|
||||
private volatile Hash _currentRoutingKey;
|
||||
private volatile byte[] _routingKeyGenMod;
|
||||
@@ -62,7 +69,7 @@ public class LeaseSet extends DataStructureImpl {
|
||||
// Store these since isCurrent() and getEarliestLeaseDate() are called frequently
|
||||
private long _firstExpiration;
|
||||
private long _lastExpiration;
|
||||
private List _decryptedLeases;
|
||||
private List<Lease> _decryptedLeases;
|
||||
private boolean _decrypted;
|
||||
private boolean _checked;
|
||||
|
||||
@@ -75,7 +82,7 @@ public class LeaseSet extends DataStructureImpl {
|
||||
setSigningKey(null);
|
||||
setSignature(null);
|
||||
setRoutingKey(null);
|
||||
_leases = new ArrayList();
|
||||
_leases = new ArrayList(MAX_LEASES);
|
||||
_routingKeyGenMod = null;
|
||||
_receivedAsPublished = false;
|
||||
_firstExpiration = Long.MAX_VALUE;
|
||||
@@ -100,6 +107,7 @@ public class LeaseSet extends DataStructureImpl {
|
||||
_encryptionKey = encryptionKey;
|
||||
}
|
||||
|
||||
/** @deprecated unused */
|
||||
public SigningPublicKey getSigningKey() {
|
||||
return _signingKey;
|
||||
}
|
||||
@@ -130,6 +138,10 @@ public class LeaseSet extends DataStructureImpl {
|
||||
_lastExpiration = expire;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return 0-6
|
||||
* A LeaseSet with no leases is revoked.
|
||||
*/
|
||||
public int getLeaseCount() {
|
||||
if (isEncrypted())
|
||||
return _leases.size() - 1;
|
||||
@@ -208,6 +220,7 @@ public class LeaseSet extends DataStructureImpl {
|
||||
|
||||
/**
|
||||
* Verify that the signature matches the lease set's destination's signing public key.
|
||||
* OR the included revocation key.
|
||||
*
|
||||
* @return true only if the signature matches
|
||||
*/
|
||||
@@ -216,17 +229,18 @@ public class LeaseSet extends DataStructureImpl {
|
||||
if (getDestination() == null) return false;
|
||||
byte data[] = getBytes();
|
||||
if (data == null) return false;
|
||||
boolean signedByDest = DSAEngine.getInstance().verifySignature(getSignature(), data,
|
||||
getDestination().getSigningPublicKey());
|
||||
boolean signedByDest = DSAEngine.getInstance().verifySignature(_signature, data,
|
||||
_destination.getSigningPublicKey());
|
||||
boolean signedByRevoker = false;
|
||||
if (!signedByDest) {
|
||||
signedByRevoker = DSAEngine.getInstance().verifySignature(getSignature(), data, _signingKey);
|
||||
signedByRevoker = DSAEngine.getInstance().verifySignature(_signature, data, _signingKey);
|
||||
}
|
||||
return signedByDest || signedByRevoker;
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify that the signature matches the lease set's destination's signing public key.
|
||||
* OR the specified revocation key.
|
||||
*
|
||||
* @return true only if the signature matches
|
||||
*/
|
||||
@@ -235,11 +249,11 @@ public class LeaseSet extends DataStructureImpl {
|
||||
if (getDestination() == null) return false;
|
||||
byte data[] = getBytes();
|
||||
if (data == null) return false;
|
||||
boolean signedByDest = DSAEngine.getInstance().verifySignature(getSignature(), data,
|
||||
getDestination().getSigningPublicKey());
|
||||
boolean signedByDest = DSAEngine.getInstance().verifySignature(_signature, data,
|
||||
_destination.getSigningPublicKey());
|
||||
boolean signedByRevoker = false;
|
||||
if (!signedByDest) {
|
||||
signedByRevoker = DSAEngine.getInstance().verifySignature(getSignature(), data, signingKey);
|
||||
signedByRevoker = DSAEngine.getInstance().verifySignature(_signature, data, signingKey);
|
||||
}
|
||||
return signedByDest || signedByRevoker;
|
||||
}
|
||||
@@ -339,9 +353,9 @@ public class LeaseSet extends DataStructureImpl {
|
||||
LeaseSet ls = (LeaseSet) object;
|
||||
return DataHelper.eq(getEncryptionKey(), ls.getEncryptionKey()) &&
|
||||
//DataHelper.eq(getVersion(), ls.getVersion()) &&
|
||||
DataHelper.eq(_leases, ls._leases) && DataHelper.eq(getSignature(), ls.getSignature())
|
||||
&& DataHelper.eq(getSigningKey(), ls.getSigningKey())
|
||||
&& DataHelper.eq(getDestination(), ls.getDestination());
|
||||
DataHelper.eq(_leases, ls._leases) && DataHelper.eq(_signature, ls.getSignature())
|
||||
&& DataHelper.eq(_signingKey, ls.getSigningKey())
|
||||
&& DataHelper.eq(_destination, ls.getDestination());
|
||||
|
||||
}
|
||||
|
||||
@@ -357,11 +371,11 @@ public class LeaseSet extends DataStructureImpl {
|
||||
public String toString() {
|
||||
StringBuilder buf = new StringBuilder(128);
|
||||
buf.append("[LeaseSet: ");
|
||||
buf.append("\n\tDestination: ").append(getDestination());
|
||||
buf.append("\n\tEncryptionKey: ").append(getEncryptionKey());
|
||||
buf.append("\n\tSigningKey: ").append(getSigningKey());
|
||||
buf.append("\n\tDestination: ").append(_destination);
|
||||
buf.append("\n\tEncryptionKey: ").append(_encryptionKey);
|
||||
buf.append("\n\tSigningKey: ").append(_signingKey);
|
||||
//buf.append("\n\tVersion: ").append(getVersion());
|
||||
buf.append("\n\tSignature: ").append(getSignature());
|
||||
buf.append("\n\tSignature: ").append(_signature);
|
||||
buf.append("\n\tLeases: #").append(getLeaseCount());
|
||||
for (int i = 0; i < getLeaseCount(); i++)
|
||||
buf.append("\n\t\tLease (").append(i).append("): ").append(getLease(i));
|
||||
|
||||
@@ -96,13 +96,13 @@ public class Payload extends DataStructureImpl {
|
||||
public boolean equals(Object object) {
|
||||
if ((object == null) || !(object instanceof Payload)) return false;
|
||||
Payload p = (Payload) object;
|
||||
return DataHelper.eq(getUnencryptedData(), p.getUnencryptedData())
|
||||
&& DataHelper.eq(getEncryptedData(), p.getEncryptedData());
|
||||
return DataHelper.eq(_unencryptedData, p.getUnencryptedData())
|
||||
&& DataHelper.eq(_encryptedData, p.getEncryptedData());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return DataHelper.hashCode(getUnencryptedData());
|
||||
return DataHelper.hashCode(_unencryptedData);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -110,11 +110,11 @@ public class Payload extends DataStructureImpl {
|
||||
if (true) return "[Payload]";
|
||||
StringBuilder buf = new StringBuilder(128);
|
||||
buf.append("[Payload: ");
|
||||
if (getUnencryptedData() != null)
|
||||
buf.append("\n\tData: ").append(DataHelper.toString(getUnencryptedData(), 16));
|
||||
if (_unencryptedData != null)
|
||||
buf.append("\n\tData: ").append(DataHelper.toString(_unencryptedData, 16));
|
||||
else
|
||||
buf.append("\n\tData: *encrypted* = [").append(DataHelper.toString(getEncryptedData(), 16)).append("]");
|
||||
buf.append("\n\tData: *encrypted* = [").append(DataHelper.toString(_encryptedData, 16)).append("]");
|
||||
buf.append("]");
|
||||
return buf.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,15 +122,15 @@ public class RouterAddress extends DataStructureImpl {
|
||||
public boolean equals(Object object) {
|
||||
if ((object == null) || !(object instanceof RouterAddress)) return false;
|
||||
RouterAddress addr = (RouterAddress) object;
|
||||
return DataHelper.eq(getCost(), addr.getCost()) && DataHelper.eq(getExpiration(), addr.getExpiration())
|
||||
&& DataHelper.eq(getOptions(), addr.getOptions())
|
||||
&& DataHelper.eq(getTransportStyle(), addr.getTransportStyle());
|
||||
return DataHelper.eq(_cost, addr.getCost()) && DataHelper.eq(_expiration, addr.getExpiration())
|
||||
&& DataHelper.eq(_options, addr.getOptions())
|
||||
&& DataHelper.eq(_transportStyle, addr.getTransportStyle());
|
||||
}
|
||||
|
||||
/** the style should be sufficient, for speed */
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return DataHelper.hashCode(getTransportStyle());
|
||||
return DataHelper.hashCode(_transportStyle);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -96,9 +96,9 @@ public class RouterIdentity extends DataStructureImpl {
|
||||
public boolean equals(Object object) {
|
||||
if ((object == null) || !(object instanceof RouterIdentity)) return false;
|
||||
RouterIdentity ident = (RouterIdentity) object;
|
||||
return DataHelper.eq(getCertificate(), ident.getCertificate())
|
||||
&& DataHelper.eq(getSigningPublicKey(), ident.getSigningPublicKey())
|
||||
&& DataHelper.eq(getPublicKey(), ident.getPublicKey());
|
||||
return DataHelper.eq(_certificate, ident.getCertificate())
|
||||
&& DataHelper.eq(_signingKey, ident.getSigningPublicKey())
|
||||
&& DataHelper.eq(_publicKey, ident.getPublicKey());
|
||||
}
|
||||
|
||||
/** the public key has enough randomness in it to use it by itself for speed */
|
||||
|
||||
@@ -19,6 +19,7 @@ import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.Vector;
|
||||
|
||||
import net.i2p.crypto.DSAEngine;
|
||||
import net.i2p.crypto.SHA256Generator;
|
||||
@@ -36,8 +37,8 @@ public class RouterInfo extends DataStructureImpl {
|
||||
private final static Log _log = new Log(RouterInfo.class);
|
||||
private RouterIdentity _identity;
|
||||
private volatile long _published;
|
||||
private final Set _addresses;
|
||||
private final Set _peers;
|
||||
private final Set<RouterAddress> _addresses;
|
||||
private final Set<Hash> _peers;
|
||||
private /* FIXME final FIXME */ Properties _options;
|
||||
private volatile Signature _signature;
|
||||
private volatile Hash _currentRoutingKey;
|
||||
@@ -60,8 +61,8 @@ public class RouterInfo extends DataStructureImpl {
|
||||
public RouterInfo() {
|
||||
setIdentity(null);
|
||||
setPublished(0);
|
||||
_addresses = new HashSet();
|
||||
_peers = new HashSet();
|
||||
_addresses = new HashSet(2);
|
||||
_peers = new HashSet(0);
|
||||
_options = new OrderedProperties();
|
||||
setSignature(null);
|
||||
_validated = false;
|
||||
@@ -131,7 +132,7 @@ public class RouterInfo extends DataStructureImpl {
|
||||
* router can be contacted.
|
||||
*
|
||||
*/
|
||||
public Set getAddresses() {
|
||||
public Set<RouterAddress> getAddresses() {
|
||||
synchronized (_addresses) {
|
||||
return new HashSet(_addresses);
|
||||
}
|
||||
@@ -142,7 +143,7 @@ public class RouterInfo extends DataStructureImpl {
|
||||
* can be contacted.
|
||||
*
|
||||
*/
|
||||
public void setAddresses(Set addresses) {
|
||||
public void setAddresses(Set<RouterAddress> addresses) {
|
||||
synchronized (_addresses) {
|
||||
_addresses.clear();
|
||||
if (addresses != null) _addresses.addAll(addresses);
|
||||
@@ -151,20 +152,22 @@ public class RouterInfo extends DataStructureImpl {
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve a set of SHA-256 hashes of RouterIdentities from rotuers
|
||||
* Retrieve a set of SHA-256 hashes of RouterIdentities from routers
|
||||
* this router can be reached through.
|
||||
*
|
||||
* @deprecated Implemented here but unused elsewhere
|
||||
*/
|
||||
public Set getPeers() {
|
||||
public Set<Hash> getPeers() {
|
||||
return _peers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specify a set of SHA-256 hashes of RouterIdentities from rotuers
|
||||
* Specify a set of SHA-256 hashes of RouterIdentities from routers
|
||||
* this router can be reached through.
|
||||
*
|
||||
* @deprecated Implemented here but unused elsewhere
|
||||
*/
|
||||
public void setPeers(Set peers) {
|
||||
public void setPeers(Set<Hash> peers) {
|
||||
synchronized (_peers) {
|
||||
_peers.clear();
|
||||
if (peers != null) _peers.addAll(peers);
|
||||
@@ -276,6 +279,7 @@ public class RouterInfo extends DataStructureImpl {
|
||||
// answer: they're always empty... they're a placeholder for one particular
|
||||
// method of trusted links, which isn't implemented in the router
|
||||
// at the moment, and may not be later.
|
||||
// fixme to reduce objects - if (_peers == null) write 0
|
||||
DataHelper.writeLong(out, 1, _peers.size());
|
||||
List peers = DataHelper.sortStructures(_peers);
|
||||
for (Iterator iter = peers.iterator(); iter.hasNext();) {
|
||||
@@ -400,7 +404,7 @@ public class RouterInfo extends DataStructureImpl {
|
||||
RoutingKeyGenerator gen = RoutingKeyGenerator.getInstance();
|
||||
if ((gen.getModData() == null) || (_routingKeyGenMod == null)
|
||||
|| (!DataHelper.eq(gen.getModData(), _routingKeyGenMod))) {
|
||||
setRoutingKey(gen.getRoutingKey(getIdentity().getHash()));
|
||||
setRoutingKey(gen.getRoutingKey(_identity.getHash()));
|
||||
_routingKeyGenMod = gen.getModData();
|
||||
}
|
||||
return _currentRoutingKey;
|
||||
@@ -411,7 +415,7 @@ public class RouterInfo extends DataStructureImpl {
|
||||
}
|
||||
|
||||
public boolean validateRoutingKey() {
|
||||
Hash identKey = getIdentity().getHash();
|
||||
Hash identKey = _identity.getHash();
|
||||
Hash rk = RoutingKeyGenerator.getInstance().getRoutingKey(identKey);
|
||||
if (rk.equals(getRoutingKey()))
|
||||
return true;
|
||||
@@ -429,7 +433,7 @@ public class RouterInfo extends DataStructureImpl {
|
||||
*/
|
||||
public boolean isCurrent(long maxAgeMs) {
|
||||
long earliestExpire = Clock.getInstance().now() - maxAgeMs;
|
||||
if (getPublished() < earliestExpire)
|
||||
if (_published < earliestExpire)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@@ -450,6 +454,18 @@ public class RouterInfo extends DataStructureImpl {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<RouterAddress> getTargetAddresses(String transportStyle) {
|
||||
List<RouterAddress> ret = new Vector<RouterAddress>();
|
||||
synchronized(this._addresses) {
|
||||
for(Object o : this._addresses) {
|
||||
RouterAddress addr = (RouterAddress)o;
|
||||
if(addr.getTransportStyle().equals(transportStyle))
|
||||
ret.add(addr);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Actually validate the signature
|
||||
@@ -537,7 +553,7 @@ public class RouterInfo extends DataStructureImpl {
|
||||
RouterInfo info = (RouterInfo) object;
|
||||
return DataHelper.eq(_identity, info.getIdentity())
|
||||
&& DataHelper.eq(_signature, info.getSignature())
|
||||
&& DataHelper.eq(getPublished(), info.getPublished())
|
||||
&& DataHelper.eq(_published, info.getPublished())
|
||||
&& DataHelper.eq(_addresses, info.getAddresses())
|
||||
&& DataHelper.eq(_options, info.getOptions())
|
||||
&& DataHelper.eq(_peers, info.getPeers());
|
||||
@@ -546,7 +562,7 @@ public class RouterInfo extends DataStructureImpl {
|
||||
@Override
|
||||
public int hashCode() {
|
||||
if (!_hashCodeInitialized) {
|
||||
_hashCode = DataHelper.hashCode(_identity) + (int) getPublished();
|
||||
_hashCode = DataHelper.hashCode(_identity) + (int) _published;
|
||||
_hashCodeInitialized = true;
|
||||
}
|
||||
return _hashCode;
|
||||
@@ -557,9 +573,9 @@ public class RouterInfo extends DataStructureImpl {
|
||||
if (_stringified != null) return _stringified;
|
||||
StringBuilder buf = new StringBuilder(5*1024);
|
||||
buf.append("[RouterInfo: ");
|
||||
buf.append("\n\tIdentity: ").append(getIdentity());
|
||||
buf.append("\n\tSignature: ").append(getSignature());
|
||||
buf.append("\n\tPublished on: ").append(new Date(getPublished()));
|
||||
buf.append("\n\tIdentity: ").append(_identity);
|
||||
buf.append("\n\tSignature: ").append(_signature);
|
||||
buf.append("\n\tPublished on: ").append(new Date(_published));
|
||||
Set addresses = _addresses; // getAddresses()
|
||||
buf.append("\n\tAddresses: #: ").append(addresses.size());
|
||||
for (Iterator iter = addresses.iterator(); iter.hasNext();) {
|
||||
|
||||
@@ -83,14 +83,14 @@ public class TunnelId extends DataStructureImpl {
|
||||
public boolean equals(Object obj) {
|
||||
if ( (obj == null) || !(obj instanceof TunnelId))
|
||||
return false;
|
||||
return getTunnelId() == ((TunnelId)obj).getTunnelId();
|
||||
return _tunnelId == ((TunnelId)obj).getTunnelId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return (int)getTunnelId();
|
||||
return (int)_tunnelId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() { return String.valueOf(getTunnelId()); }
|
||||
public String toString() { return String.valueOf(_tunnelId); }
|
||||
}
|
||||
|
||||
@@ -155,8 +155,13 @@ public class Timestamper implements Runnable {
|
||||
try {
|
||||
lastFailed = !queryTime(_servers.toArray(new String[_servers.size()]));
|
||||
} catch (IllegalArgumentException iae) {
|
||||
if ( (!lastFailed) && (_log.shouldLog(Log.ERROR)) )
|
||||
_log.error("Unable to reach any of the NTP servers - network disconnected?");
|
||||
if ( (!_initialized) && (_log.shouldLog(Log.ERROR)) ) {
|
||||
List<String> all = new ArrayList();
|
||||
if (_priorityServers != null)
|
||||
all.addAll(_priorityServers);
|
||||
all.addAll(_servers);
|
||||
_log.error("Unable to reach any of the NTP servers " + all + " - network disconnected? Or set time.sntpServerList=myserver1.com,myserver2.com in advanced configuration.");
|
||||
}
|
||||
lastFailed = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,9 +92,10 @@ public class Clock implements Timestamper.UpdateListener {
|
||||
else if (getLog().shouldLog(Log.INFO))
|
||||
getLog().info("Updating clock offset to " + offsetMs + "ms from " + _offset + "ms");
|
||||
|
||||
if (!_statCreated)
|
||||
if (!_statCreated) {
|
||||
_context.statManager().createRateStat("clock.skew", "How far is the already adjusted clock being skewed?", "Clock", new long[] { 10*60*1000, 3*60*60*1000, 24*60*60*60 });
|
||||
_statCreated = true;
|
||||
}
|
||||
_context.statManager().addRateData("clock.skew", delta, 0);
|
||||
} else {
|
||||
getLog().log(Log.INFO, "Initializing clock offset to " + offsetMs + "ms from " + _offset + "ms");
|
||||
|
||||
@@ -126,15 +126,21 @@ class LogWriter implements Runnable {
|
||||
|
||||
private void writeRecord(String val) {
|
||||
if (val == null) return;
|
||||
if (_currentOut == null) rotateFile();
|
||||
if (_currentOut == null) {
|
||||
rotateFile();
|
||||
if (_currentOut == null)
|
||||
return; // hosed
|
||||
}
|
||||
|
||||
try {
|
||||
_currentOut.write(val);
|
||||
// may be a little off if a lot of multi-byte chars, but unlikely
|
||||
_numBytesInCurrentFile += val.length();
|
||||
} catch (Throwable t) {
|
||||
System.err.println("Error writing record, disk full?");
|
||||
t.printStackTrace();
|
||||
if (!_write)
|
||||
return;
|
||||
System.err.println("Error writing log, disk full? " + t);
|
||||
//t.printStackTrace();
|
||||
}
|
||||
if (_numBytesInCurrentFile >= _manager.getFileSize()) {
|
||||
rotateFile();
|
||||
@@ -160,7 +166,7 @@ class LogWriter implements Runnable {
|
||||
}
|
||||
}
|
||||
if (!parent.isDirectory()) {
|
||||
System.err.println("wtf, we cannot put the logs in a subdirectory of a plain file! we want to stre the log as " + f.getAbsolutePath());
|
||||
System.err.println("Cannot put the logs in a subdirectory of a plain file: " + f.getAbsolutePath());
|
||||
//System.exit(0);
|
||||
}
|
||||
}
|
||||
@@ -168,8 +174,7 @@ class LogWriter implements Runnable {
|
||||
try {
|
||||
_currentOut = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f), "UTF-8"));
|
||||
} catch (IOException ioe) {
|
||||
System.err.println("Error rotating into [" + f.getAbsolutePath() + "]");
|
||||
ioe.printStackTrace();
|
||||
System.err.println("Error rotating into [" + f.getAbsolutePath() + "]" + ioe);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,19 +10,28 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
*/
|
||||
public class ObjectCounter<K> {
|
||||
private ConcurrentHashMap<K, Integer> _map;
|
||||
private static final Integer ONE = Integer.valueOf(1);
|
||||
|
||||
public ObjectCounter() {
|
||||
_map = new ConcurrentHashMap();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add one.
|
||||
* Not perfectly concurrent, new AtomicInteger(1) would be better,
|
||||
* at the cost of some object churn.
|
||||
* @return count after increment
|
||||
*/
|
||||
public void increment(K h) {
|
||||
Integer i = _map.putIfAbsent(h, Integer.valueOf(1));
|
||||
if (i != null)
|
||||
_map.put(h, Integer.valueOf(i.intValue() + 1));
|
||||
public int increment(K h) {
|
||||
Integer i = _map.putIfAbsent(h, ONE);
|
||||
if (i != null) {
|
||||
int rv = i.intValue() + 1;
|
||||
_map.put(h, Integer.valueOf(rv));
|
||||
return rv;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return current count
|
||||
*/
|
||||
@@ -32,11 +41,20 @@ public class ObjectCounter<K> {
|
||||
return i.intValue();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return set of objects with counts > 0
|
||||
*/
|
||||
public Set<K> objects() {
|
||||
return _map.keySet();
|
||||
}
|
||||
|
||||
/**
|
||||
* start over
|
||||
* @since 0.7.11
|
||||
*/
|
||||
public void clear() {
|
||||
_map.clear();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,9 @@ public abstract class Translate {
|
||||
return key;
|
||||
else if (lang.equals(TEST_LANG))
|
||||
return TEST_STRING;
|
||||
// shouldnt happen but dont dump the po headers if it does
|
||||
if (key.equals(""))
|
||||
return key;
|
||||
ResourceBundle bundle = findBundle(bun, lang);
|
||||
if (bundle == null)
|
||||
return key;
|
||||
|
||||
22
debian/README.txt
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
This sets up a binary package with the following:
|
||||
|
||||
- A new user i2psvc (a lot of people already have an i2p user)
|
||||
- i2psvc home is /var/lib/i2p
|
||||
- $I2P is /usr/lib/i2p, owned by i2psvc
|
||||
- i2psvc router directory is /var/lib/i2p/i2p-config (hack in WorkingDir.java)
|
||||
- i2p daemon script in /etc/init.d/i2p
|
||||
- i2prouter and eepget scripts in /usr/bin for other users to run it
|
||||
- Users other than i2psvc cannot update via i2p, as they don't have
|
||||
write permissions in $I2P
|
||||
- Configured temp directory is /tmp
|
||||
- linux and linux64 (i386) wrapper libs only
|
||||
|
||||
|
||||
Todo:
|
||||
|
||||
- Remove lib/jbigi.jar, just build and include dynamic libjbigi
|
||||
and the linux libjcpuid (and add dependency on libgmp)
|
||||
- Initial router.config for i2psvc (without confusing i2p that
|
||||
the router directory already exists):
|
||||
* Disable browser launch at startup
|
||||
* Move i2psnark dir, eepsite dir, log dir, etc. up one level
|
||||
5
debian/changelog
vendored
@@ -1,3 +1,8 @@
|
||||
i2p (0.7.10-0) testing; urgency=low
|
||||
* tweaks
|
||||
um...
|
||||
-- zzz <nobody@nowhere.invalid> Wed, 31 Jan 2010 17:14:57 +0000
|
||||
|
||||
i2p (0.7-0) testing; urgency=low
|
||||
* just setting this debian thing up
|
||||
um...
|
||||
|
||||
14
debian/control
vendored
@@ -1,24 +1,18 @@
|
||||
Source: i2p
|
||||
Maintainer: jrandom
|
||||
Maintainer: i2p
|
||||
Section: net
|
||||
Priority: optional
|
||||
Homepage: http://dev.i2p2.de
|
||||
Build-Depends: java-sdk, ant
|
||||
Recommends: libgmp3c2
|
||||
Version: 0.7-0
|
||||
Tags: implemented-in::java, interface::daemon, network::client, network::server, role::program, security::cryptography
|
||||
Homepage: http://www.i2p2.de/
|
||||
Build-Depends: java-sdk, ant, gettext
|
||||
|
||||
Package: i2p
|
||||
Architecture: all
|
||||
Section: net
|
||||
Priority: optional
|
||||
Depends: java-runtime
|
||||
Recommends: libgmp3c2
|
||||
Description: load-balanced unspoofable packet switching network
|
||||
I2P is an anonymizing network, offering a simple layer that identity-sensitive
|
||||
applications can use to securely communicate. All data is wrapped with several
|
||||
layers of encryption, and the network is both distributed and dynamic, with no
|
||||
trusted parties.
|
||||
Homepage: http://www.i2p2.de
|
||||
Version: 0.7-0
|
||||
Tags: implemented-in::java, interface::daemon, network::client, network::server, role::program, security::cryptography
|
||||
Homepage: http://www.i2p2.de/
|
||||
|
||||
38
debian/rules
vendored
@@ -1,20 +1,36 @@
|
||||
#!/usr/bin/make -f
|
||||
|
||||
build:
|
||||
ant preppkg && \
|
||||
(cd pkg-temp; chmod +x postinstall.sh) && \
|
||||
mkdir -p debian/tmp/var/lib && \
|
||||
mkdir -p debian/tmp/etc/init.d && \
|
||||
cp -a debian/scripts/init debian/tmp/etc/init.d/i2p && \
|
||||
cp -a pkg-temp debian/tmp/var/lib/i2p && \
|
||||
ant preppkg-linux-only
|
||||
mkdir -p debian/tmp/usr/lib
|
||||
mkdir -p debian/tmp/etc/init.d
|
||||
cp -a debian/scripts/init debian/tmp/etc/init.d/i2p
|
||||
cp -a pkg-temp debian/tmp/usr/lib/i2p
|
||||
chmod +x debian/tmp/usr/lib/i2p/postinstall.sh
|
||||
sed 's|$$INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/wrapper.config > debian/tmp/usr/lib/i2p/a
|
||||
sed 's|$$SYSTEM_java_io_tmpdir|/tmp|g' debian/tmp/usr/lib/i2p/a > debian/tmp/usr/lib/i2p/wrapper.config
|
||||
mkdir -p debian/tmp/usr/bin
|
||||
sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/eepget > debian/tmp/usr/lib/i2p/a
|
||||
mv debian/tmp/usr/lib/i2p/a debian/tmp/usr/lib/i2p/eepget
|
||||
cp debian/tmp/usr/lib/i2p/eepget debian/tmp/usr/bin/eepget
|
||||
chmod +x debian/tmp/usr/bin/eepget
|
||||
sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/runplain.sh > debian/tmp/usr/lib/i2p/a
|
||||
sed 's|%SYSTEM_java_io_tmpdir|/tmp|g' debian/tmp/usr/lib/i2p/a > debian/tmp/usr/lib/i2p/runplain.sh
|
||||
sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/i2prouter > debian/tmp/usr/lib/i2p/a
|
||||
sed 's|%SYSTEM_java_io_tmpdir|/tmp|g' debian/tmp/usr/lib/i2p/a > debian/tmp/usr/lib/i2p/i2prouter
|
||||
cp debian/tmp/usr/lib/i2p/i2prouter debian/tmp/usr/bin/i2prouter
|
||||
chmod +x debian/tmp/usr/bin/i2prouter
|
||||
rm debian/tmp/usr/lib/i2p/a
|
||||
touch debian/build
|
||||
|
||||
binary: build
|
||||
mkdir -p debian/tmp/DEBIAN && \
|
||||
dpkg-gencontrol && \
|
||||
cp -a debian/scripts/postinst debian/scripts/postrm debian/scripts/prerm debian/tmp/DEBIAN && \
|
||||
mkdir -p debian/tmp/DEBIAN
|
||||
dpkg-gencontrol
|
||||
cp -a debian/scripts/postinst debian/scripts/postrm debian/scripts/prerm debian/tmp/DEBIAN
|
||||
dpkg-deb -b debian/tmp ..
|
||||
|
||||
clean:
|
||||
rm -f debian/build
|
||||
ant clean
|
||||
rm -Rf pkg-temp
|
||||
rm -rf debian/tmp/
|
||||
ant distclean
|
||||
@exit 0
|
||||
|
||||
6
debian/scripts/init
vendored
@@ -1,4 +1,4 @@
|
||||
#! /bin/sh
|
||||
#!/bin/sh
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: i2p
|
||||
@@ -13,8 +13,8 @@ set -e
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
function I2P {
|
||||
su i2p -c "/var/lib/i2p/i2prouter $1"
|
||||
I2P () {
|
||||
su i2psvc -c "/usr/lib/i2p/i2prouter $1"
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
|
||||
17
debian/scripts/postinst
vendored
@@ -1,9 +1,14 @@
|
||||
#!/bin/sh
|
||||
TOP=/var/lib/i2p
|
||||
useradd -b $TOP -r i2p 2>/dev/null
|
||||
chown i2p $TOP -R
|
||||
SVCHOME=/var/lib/i2p
|
||||
I2P=/usr/lib/i2p
|
||||
I2PUSER=i2psvc
|
||||
|
||||
update-rc.d
|
||||
useradd -d $SVCHOME -r $I2PUSER
|
||||
chown $I2PUSER:$I2PUSER $I2P -R
|
||||
mkdir -p $SVCHOME
|
||||
chown $I2PUSER:$I2PUSER $SVCHOME
|
||||
|
||||
cd $TOP
|
||||
exec su i2p -c ./postinstall.sh
|
||||
update-rc.d i2p defaults
|
||||
|
||||
cd $I2P
|
||||
exec su $I2PUSER ./postinstall.sh
|
||||
|
||||
9
debian/scripts/postrm
vendored
@@ -1,2 +1,9 @@
|
||||
#!/bin/sh
|
||||
exec userdel i2p
|
||||
I2PUSER=i2psvc
|
||||
exec userdel $I2PUSER
|
||||
|
||||
# if somebody did updates in-network, there may be new files that dpkg
|
||||
# doesn't know about, so just to be sure
|
||||
I2P=/usr/lib/i2p
|
||||
rm -rf $I2P
|
||||
|
||||
|
||||
21
debian/scripts/prerm
vendored
@@ -1,2 +1,21 @@
|
||||
#!/bin/sh
|
||||
exec /etc/init.d/i2p stop
|
||||
/etc/init.d/i2p stop
|
||||
|
||||
# stuff in /tmp
|
||||
rm -f /tmp/wrapper.log /tmp/wrapper.log.1 /tmp/wrapper.log.2 /tmp/i2p.pid /tmp/routerjvm.pid /tmp/router.ping
|
||||
|
||||
# /etc/rc*.d/*i2p files
|
||||
update-rc.d -f i2p remove
|
||||
|
||||
# dpkg doesn't know about these files, created by postinstall.sh
|
||||
I2P=/usr/lib/i2p
|
||||
rm -f $I2P/i2psvc $I2P/lib/libwrapper.so $I2P/lib/wrapper.jar
|
||||
# copied out of jbigi.jar by the router
|
||||
rm -f $I2P/libjbigi.so $I2P/libjcpuid.so
|
||||
|
||||
# the home directory for the i2p daemon
|
||||
SVCHOME=/var/lib/i2p
|
||||
rm -rf $SVCHOME
|
||||
|
||||
# if any user other than i2psvc has run i2p, the files in ~user/.i2p are not removed
|
||||
exit 0
|
||||
|
||||
152
history.txt
@@ -1,3 +1,155 @@
|
||||
2010-01-31 zzz
|
||||
* i2psnark standalone: Fix CSS
|
||||
* Jetty: Update to 5.1.15 to get ResourceHandler fix
|
||||
|
||||
2010-01-30 sponge
|
||||
* Fix NPE in TCPtoI2P when a lookup fails, report the error to the stream.
|
||||
* Fix setkeys bug in DoCMDS, forgot to create the object before calling
|
||||
it's methods, which threw an NPE.
|
||||
|
||||
2010-01-29 zzz
|
||||
* build.xml: Add a debian-source target
|
||||
* Data structures:
|
||||
- Speed up some hashcode() and equals()
|
||||
- Cleanup and javadoc
|
||||
* Jetty: Turn on checkAliases
|
||||
* NetDb:
|
||||
- Add basic DOS prevention for lookups
|
||||
- Move flood throttle check so we don't throttle ourselves
|
||||
- Don't store over client tunnels to pre-0.7.10 floodfills
|
||||
- Don't update unused lease fail stats
|
||||
* Startup: Disable browser launch for debian daemon
|
||||
|
||||
2010-01-28 welterde
|
||||
* enhance support for multiple RouterAddresses' of the same style in RouterInfo
|
||||
|
||||
2010-01-26 zzz
|
||||
* build.xml: Speed up distclean additions
|
||||
* Clock: Don't refuse to update because of peer skew the first time
|
||||
* Debian: Fixup, update, enhance scripts
|
||||
* I2NP: Various cleanup and bulletproofing
|
||||
* Log: Try to avoid complaints at shutdown
|
||||
* Profiles: Fix lack of profiles at router startup, especially for new routers
|
||||
* stats.jsp: Shrink the dropdown box
|
||||
|
||||
2010-01-24 zzz
|
||||
* ProfileOrganizerRenderer: Cleanups
|
||||
* Reseed: Update welt's reseed hostname
|
||||
* Transport clock skews:
|
||||
- Store and report UDP clock skews even for large values, so
|
||||
a badly skewed local clock will be reported to the console
|
||||
- Don't shitlist for NTCP clock skew if we don't know what time it is
|
||||
- If NTP hasn't worked yet, have NTCP or SSU update the clock one time
|
||||
- Include failed clock skew in NTCP skew vector if there aren't many connections
|
||||
- Don't include NTCP clock skews for non-established connections
|
||||
- Fix framed clock skew frame size
|
||||
- Report framed clock skew even if for only one peer, if NTP hasn't worked yet
|
||||
- Don't log RRD errors after clock adjustment
|
||||
- Reduce min skew for console warning to 30s (was 45s)
|
||||
- More Java 5 cleanups
|
||||
|
||||
2010-01-24 zzz
|
||||
* Clock:
|
||||
- Don't let a client update the router clock
|
||||
- Restore and enhance vanished clock error log message
|
||||
* Graphs: Enforce max size to lessen chance of OOM from malicious link
|
||||
* NetDb:
|
||||
- Move stat initialization, reduce number of rates
|
||||
- Add basic DOS prevention by not flooding if stores are too-frequent
|
||||
* ProfileOrganizer:
|
||||
- Limit High Cap to 75 max
|
||||
- Reduce max lock wait time, change no lock error to warning
|
||||
- More cleanup
|
||||
* Startup:
|
||||
- Enable multiple parallel job runners much sooner to speed startup
|
||||
- Rearrange the startup order to get the long jobs started sooner
|
||||
- Don't allow the netDb readin job to clog the job queue
|
||||
|
||||
2010-01-21 dr|z3d
|
||||
* New eepsite structure and enhanced pages. Now with graphics and stuff!
|
||||
|
||||
* 2010-01-22 0.7.10 released
|
||||
|
||||
2010-01-21 zzz
|
||||
* eepget.bat: Add to pkg
|
||||
* Floodfills: Increase max to 15 (was 9) and min to 10 (was 4)
|
||||
* I2PTunnelServer: Fix bug preventing connection retries
|
||||
at startup from working
|
||||
* Logs: Don't be quite so noisy in the wrapper log if we
|
||||
can't open the router log
|
||||
* Properties: Don't play games with \r and \n on load/save,
|
||||
it was causing fatal issues on DOS if your username started
|
||||
with r or n
|
||||
|
||||
2010-01-19 sponge
|
||||
* Firewall fix for NTCP, where firewalls will forget a NAT relationship
|
||||
on a stream... AKA setting keepalive. This should fix the stuck NTCP
|
||||
issue that has been bothing zzz for years.
|
||||
* Set keepalive on BOB connections too, since this will assist closing
|
||||
the connections in the event of a crash on a client.
|
||||
|
||||
2010-01-18 zzz
|
||||
* configclients.jsp: Fix add-new-client feature
|
||||
* Console: Add a tunnel share ratio estimate
|
||||
* graphs.jsp:
|
||||
- Remove jrobin sig
|
||||
- Set lower limit to 0
|
||||
- Save settings when changed
|
||||
* Reseed: Support SSL and proxies
|
||||
* Translate: Catch empty string
|
||||
|
||||
2010-01-17 zzz
|
||||
* Clock: Change a CRIT to an ERROR, lower threshold for changing from 10s to 5s
|
||||
* configclients.jsp: Support add, delete, edit
|
||||
* I2CP: Clean up resources on 5-minute leaseset timeout at startup
|
||||
* LeaseSet generation: Increment the lease date slightly, to force
|
||||
the floodfill to flood it when it changes
|
||||
* NetDb Lookups: Don't try to send a RI lookup to itself through a zero-hop tunnel
|
||||
* NetDb Stores and Verifies:
|
||||
- Do LS stores and verifies through client tunnels
|
||||
to prevent correlation by the OBEP or FF
|
||||
- Encrypt LS stores to prevent snooping by the OBEP,
|
||||
if the floodfill supports it
|
||||
- Encrypt LS and RI verifies to prevent snooping by the OBEP
|
||||
- Extend verify delay and timeout
|
||||
- Reenable RI verifies
|
||||
- Disallow simultaneous verifies for the same key
|
||||
- Don't resend on verify timeout; try a different peer instead
|
||||
- Don't resend to same peer on verify fail, try a different one
|
||||
- Adjust ff selection criteria
|
||||
- Flood even if received garlic-encrypted
|
||||
* Profiles: Limit fast peers to 30 max
|
||||
* SSLEepGet: New
|
||||
* Tunnels: Prevent more than one zero-hop tunnel in a lease
|
||||
* VersionComparator: Move from TrustedUpdate.java to util
|
||||
|
||||
2010-01-14 sponge
|
||||
* Fully clean up I2PTunnel. No more lint issues, should compile 100%
|
||||
clean.
|
||||
* Dropped unused class BufferLogger from I2PTunnel as it is not used
|
||||
anylonger.
|
||||
|
||||
2010-01-14 sponge
|
||||
* Clean up reverse connection ability, remove some annoyingly redundent
|
||||
code. Place all settings in the console. It works!
|
||||
|
||||
2010-01-10 sponge
|
||||
* Insert reverse connection ability into the http server code so that
|
||||
seedless can start to get worked on. It's disabled by default.
|
||||
|
||||
* 2010-01-12 0.7.9 released
|
||||
|
||||
2010-01-12 zzz
|
||||
* I2CP: Clean up resources on 5-minute leaseset timeout at startup
|
||||
* Increase max floodfills to 9 (was 6)
|
||||
* Temporarily disable routerInfo floodfill verifies
|
||||
* Fix .fr eepsite index css
|
||||
* Javdoc tweaks
|
||||
|
||||
|
||||
2010-01-09 zzz
|
||||
* Include new eepsite indexes in pkg
|
||||
|
||||
2010-01-06 zzz
|
||||
* Summary bar tweaks
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<info>
|
||||
<appname>i2p</appname>
|
||||
<appversion>0.7.8</appversion>
|
||||
<appversion>0.7.10</appversion>
|
||||
<authors>
|
||||
<author name="I2P" email="http://forum.i2p2.de/"/>
|
||||
</authors>
|
||||
@@ -138,6 +138,8 @@
|
||||
<args><arg value="$INSTALL_PATH\uninstall_i2p_service_unix" /></args></executable>
|
||||
<executable targetfile="$INSTALL_PATH/installer/delete.jar" type="jar" stage="postinstall" keep="true" failure="warn"> <os family="windows" />
|
||||
<args><arg value="$INSTALL_PATH\lib\wrapper" /></args></executable>
|
||||
<executable targetfile="$INSTALL_PATH/installer/delete.jar" type="jar" stage="postinstall" keep="true" failure="warn"> <os family="windows" />
|
||||
<args><arg value="$INSTALL_PATH\eepget" /></args></executable>
|
||||
|
||||
<!-- workaround for vista permission problems - see comments above -->
|
||||
<executable targetfile="$INSTALL_PATH/fixperms.bat" type="bin" stage="postinstall" keep="true" failure="warn"
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
body { background-color:#000000; color: #ffffe0; margin-left: 8.7%; margin-right: 12.9%; margin-top: 6%; margin-bottom: 6%;}
|
||||
body,h1,h2,h3,h4,p,ul,ol,li,dl,dt,dd,div,td,th,address,blockquote { font-family:"DejaVu Serif", serif; }
|
||||
h1 { font-size:23pt; margin-bottom:20pt; }
|
||||
h1.ph1 { font-size:20pt; margin-bottom:18pt; }
|
||||
h2 { font-size:18pt; margin-bottom:18pt; }
|
||||
h3 { font-size:16pt; }
|
||||
h4 { font-size:14pt; }
|
||||
h5 { font-size:13pt; }
|
||||
p,ul,ol,li,dl,dt,dd,div,td,th,address,blockquote { font-size:12.2pt; }
|
||||
|
||||
a.footref { font-size: 70%; }
|
||||
a:link { color:#ffc266; text-decoration:underline; }
|
||||
a:visited { color:#ffd699; text-decoration:none; }
|
||||
a:active { color:#ff9900; text-decoration:none; }
|
||||
a.nonexistent { color: #ffffe0; text-decoration:underline; }
|
||||
a.nonexistent:visited { color: #ffffe0; text-decoration:none; }
|
||||
|
||||
dl.contents { margin-top: 0; }
|
||||
dt.contents { margin-bottom: 0; }
|
||||
em { font-style: italic; }
|
||||
li,dt { margin-top: 0.2em; }
|
||||
p.footnote { font-size: 90%; }
|
||||
p.verse { white-space: pre; margin-left: 8.7%; }
|
||||
pre { font-family: monospace; white-space: pre; margin-left: 8.7%; }
|
||||
strong { font-weight: bold; }
|
||||
table { width:100%; }
|
||||
td { border:0px solid #000; vertical-align:top; overflow:hidden; }
|
||||
ul { list-style-type: disc }
|
||||
|
||||
|
||||
@@ -1,105 +1,122 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Welcome to your eepsite</title>
|
||||
<link rel="shortcut icon" href="favicon.ico" />
|
||||
<link rel="stylesheet" type="text/css" href="eepsite.css" />
|
||||
</head>
|
||||
<body>
|
||||
<h1>Welcome to your eepsite</h1>
|
||||
<p>(<a href="index_de.html">Deutsch</a>)</p>
|
||||
<p>This is your eepsite - simply edit the files under
|
||||
~/.i2p/eepsite/docroot/ (Linux) or %APPDATA%\I2P\eepsite\docroot\ (Windows)
|
||||
and they'll be reachable by others once you follow the instructions below.
|
||||
In I2P, eepsites are addressed using a 'key', which is represented as a really long Base64 string.
|
||||
(The 'key' is somewhat analogous to an IP address, and
|
||||
is shown on the eepsite's I2PTunnel
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">configuration page</a>).
|
||||
The instructions below detail how to assign a name like "mysite.i2p" to your key and
|
||||
start up your eepsite.</p>
|
||||
<p>You can reach your eepsite locally through
|
||||
<a href="http://127.0.0.1:7658/">http://127.0.0.1:7658/</a>.
|
||||
</p>
|
||||
|
||||
<h2>Step-by-step instructions for starting your new eepsite and announcing it to the I2P community</h2>
|
||||
Your eepsite is stopped by default.
|
||||
After you start it, it will be difficult for other people to find because it
|
||||
doesn't have a name and they don't have your really long Base64 key.
|
||||
You could just tell people that really long key, but thankfully i2p has an address book
|
||||
and several easy ways to tell people about your eepsite. Here's detailed instructions.
|
||||
<ul>
|
||||
<li>Pick a name for your eepsite (<i>something</i>.i2p). Use all lower-case.
|
||||
You may wish to check first in your own router's address book
|
||||
<a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=router&filter=none">here</a>,
|
||||
or the file i2p/hosts.txt to see if your name is already taken.
|
||||
Enter the new name for your eepsite on the
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel configuration page</a>
|
||||
where it says "Website name". This will replace the default "mysite.i2p".
|
||||
Also, check the "Auto Start" box. Your eepsite will now start every time you start your router.
|
||||
Be sure and click "Save".
|
||||
<li>Click the start button for your eepsite on the
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">main i2ptunnel configuration page</a>.
|
||||
You should now see "eepsite" listed under "Local Destinations" on the left side of the
|
||||
<a href="http://127.0.0.1:7657/index.jsp">I2P Router Console</a>.
|
||||
Your eepsite is now running.
|
||||
<li>Highlight the entire "Local destination" key on the
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel configuration page</a>.
|
||||
and copy it for
|
||||
later pasting. Make sure you get the whole thing - it's over 500 characters and it must end in "AAAA".
|
||||
<li>Enter the name and paste in the destination key into your
|
||||
<a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=master">master address book</a>.
|
||||
Click "Add" to add the destination to your address book.
|
||||
<li>In your browser, enter in your eepsite name (<i>something</i>.i2p) and you should
|
||||
be right back here. Hopefully it worked.
|
||||
<li>Before you tell the world about your new eepsite, you should add some content.
|
||||
Go to ~/.i2p/eepsite/docroot/ (Linux) or %APPDATA%\I2P\eepsite\docroot\ (Windows)
|
||||
and copy this document (index.html) to help.html so you can refer to it later.
|
||||
Now edit index.html and add content, pictures, and whatever you would like to share.
|
||||
<li>Now it's time to add your eepsite to an I2P address book hosted by a site
|
||||
such as <a href="http://stats.i2p/">stats.i2p</a>.
|
||||
That is, you must enter
|
||||
your eepsite name and key into a web interface on one or more of these sites.
|
||||
Here is <a href="http://stats.i2p/i2p/addkey.html">the key entry form at stats.i2p</a>.
|
||||
Again, your key is the entire "Local destination" key on the
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel configuration page</a>.
|
||||
Be sure you get the whole thing, ending with "AAAA".
|
||||
Don't forget to click "add a key".
|
||||
Check to see if it reports the key was added.
|
||||
Since many routers periodically get address book updates from these sites, within several hours others will be able to find your
|
||||
website by simply typing <i>something</i>.i2p into their browser.
|
||||
<li>Speaking of address book updates, this would be a good time to add some more addressbooks
|
||||
to your own subscription list. Go to your <a href="http://127.0.0.1:7657/susidns/subscriptions.jsp">subscriptions configuration page</a>
|
||||
and add a couple of these -
|
||||
<a href="http://tino.i2p/hosts.txt">http://tino.i2p/hosts.txt</a>,
|
||||
<a href="http://stats.i2p/cgi-bin/newhosts.txt">http://stats.i2p/cgi-bin/newhosts.txt</a>,
|
||||
<a href="http://i2host.i2p/cgi-bin/i2hostetag">http://i2host.i2p/cgi-bin/i2hostetag</a>,
|
||||
and hit "Save".
|
||||
Now you will get updates too!
|
||||
<li>If you are in a hurry and can't wait a few hours, you can tell people to use a "jump" address helper redirection service.
|
||||
This will work within a few minutes of your entering the key to an address book on the same site.
|
||||
Test it yourself first by entering
|
||||
http://stats.i2p/cgi-bin/jump.cgi?a=<i>something</i>.i2p or
|
||||
or http://i2host.i2p/cgi-bin/i2hostjump?<i>something</i>.i2p
|
||||
into your browser.
|
||||
Once it's working, then you can tell others to use it.
|
||||
<li>Some people check eepsite lists such as
|
||||
<a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p/status.php</a> for new eepsites, so you may start getting
|
||||
a few visitors. But there are plenty of other ways to tell people. Here are a few ideas:
|
||||
<ul>
|
||||
<li>Post a message on the <a href="http://forum.i2p/viewforum.php?f=16">Eepsite announce forum</a>
|
||||
on <a href="http://forum.i2p/">forum.i2p</a>.
|
||||
<li>Tell people about it on the #i2p or #i2p-chat channels on IRC.
|
||||
<li>Put it in a new post on <a href="http://syndie.i2p2.de/">the new Syndie</a>.
|
||||
<li>Put it in <a href="http://ugha.i2p/EepsiteIndex">Ugha's Eepsite Index Wiki</a>
|
||||
</ul>
|
||||
Note that some sites recommend pasting in that really long destination key.
|
||||
You can if you want - but
|
||||
if you have successfully posted your key at an add-key service,
|
||||
tested it using a jump service, and waited 24 hours for the
|
||||
address book update to propagate to others, that shouldn't be necessary.
|
||||
<li>If you have any questions try IRC #i2p or the
|
||||
<a href="http://forum.i2p/viewforum.php?f=10">technical problems section</a> on
|
||||
<a href="http://forum.i2p/">forum.i2p</a>.
|
||||
Good luck and welcome to I2P!
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
<html>
|
||||
<head>
|
||||
<title>I2P Anonymous Webserver | Welcome to your eepsite</title>
|
||||
<link rel="shortcut icon" href="favicon.ico" />
|
||||
<link rel="stylesheet" type="text/css" href="lib/eepsite.css" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
</head>
|
||||
<body>
|
||||
<div class="fairylights">
|
||||
<div class="main">
|
||||
<h1>I2P Anonymous Webserver</h1>
|
||||
<div class="langbar">
|
||||
<!-- Most of these languages listed here are yet to be translated -->
|
||||
<a href="index.html"><img src="lib/us.png" title="English" alt="English"></a>
|
||||
<a href="index_na.html"><img src="lib/cn.png" title="中文" alt="中文"></a>
|
||||
<a href="index_de.html"><img src="lib/de.png" title="Deutsch" alt="Deutsch"></a>
|
||||
<a href="index_fr.html"><img src="lib/fr.png" title="Français" alt="Français"></a>
|
||||
<a href="index_na.html"><img src="lib/nl.png" title="Nederlands" alt="Nederlands"></a>
|
||||
<a href="index_ru.html"><img src="lib/ru.png" title="Русский" alt="Русский"></a>
|
||||
<a href="index_na.html"><img src="lib/se.png" title="Svenska" alt="Svenska"></a>
|
||||
|
||||
</div>
|
||||
<h2>Quick Guide to Anonymous Webserving on I2P</h2>
|
||||
|
||||
<p>This is your eepsite, your own anonymous I2P webserver - simply edit the files under ~/.i2p/eepsite/docroot/ (Linux) or %APPDATA%\I2P\eepsite\docroot\ (Windows)
|
||||
and they'll be reachable by others once you follow the instructions below.
|
||||
In I2P, eepsites are addressed using a 'key', which is represented as a really long Base64 string.
|
||||
(The 'key' is somewhat analogous to an IP address, and
|
||||
is shown on the eepsite's I2PTunnel
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">configuration page</a>).
|
||||
The instructions below detail how to assign a name like "mysite.i2p" to your key and start up your eepsite.</p>
|
||||
<p>You can reach your eepsite locally via
|
||||
<a href="http://127.0.0.1:7658/">http://127.0.0.1:7658/</a>.
|
||||
</p>
|
||||
|
||||
<h2>How to set up and announce your eepsite</h2>
|
||||
Your eepsite is stopped by default.
|
||||
After you start it, it will be difficult for other people to find because it
|
||||
doesn't have a name and they don't have your really long Base64 key.
|
||||
You could just tell people that really long key, but thankfully i2p has an address book
|
||||
and several easy ways to tell people about your eepsite. Here's detailed instructions.
|
||||
<ul>
|
||||
<li>Pick a name for your eepsite (<i>something</i>.i2p). Use all lower-case.
|
||||
You may wish to check first in your own router's address book
|
||||
<a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=router&filter=none">here</a>,
|
||||
or the file i2p/hosts.txt to see if your name is already taken.
|
||||
Enter the new name for your eepsite on the
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel configuration page</a>
|
||||
where it says "Website name". This will replace the default "mysite.i2p".
|
||||
Also, check the "Auto Start" box. Your eepsite will now start every time you start your router.
|
||||
Be sure to click "Save".
|
||||
<li>Click the start button for your eepsite on the
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">main i2ptunnel configuration page</a>.
|
||||
You should now see "eepsite" listed under "Local Destinations" on the left side of the
|
||||
<a href="http://127.0.0.1:7657/index.jsp">I2P Router Console</a>.
|
||||
Your eepsite is now running.
|
||||
<li>Highlight the entire "Local destination" key on the
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel configuration page</a>.
|
||||
and copy it for
|
||||
later pasting. Make sure you get the whole thing - it's over 500 characters and it must end in "AAAA".
|
||||
<li>Enter the name and paste in the destination key into your
|
||||
<a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=master">master address book</a>.
|
||||
Click "Add" to add the destination to your address book.
|
||||
<li>In your browser, enter in your eepsite name (<i>something</i>.i2p) and you should
|
||||
be right back here. Hopefully it worked.
|
||||
<li>Before you tell the world about your new eepsite, you should add some content.
|
||||
Go to ~/.i2p/eepsite/docroot/ (Linux) or %APPDATA%\I2P\eepsite\docroot\ (Windows) and replace the index.html redirect page with your own content. Virtual folders work, so you can host files from a sub directory without explicitly needing to provide a page with links to files. If you need a template for a basic site, feel free to borrow and adapt <a href="pagetemplate.html">this page</a> and <a href="lib/">content</a>!
|
||||
</ul>
|
||||
<h2>Register your own .I2P Domain</h2><ul>
|
||||
<li>Now it's time to add your eepsite to an I2P address book hosted by a site
|
||||
such as <a href="http://stats.i2p/">stats.i2p</a>.
|
||||
That is, you must enter
|
||||
your eepsite name and key into a web interface on one or more of these sites.
|
||||
Here is <a href="http://stats.i2p/i2p/addkey.html">the key entry form at stats.i2p</a>.
|
||||
Again, your key is the entire "Local destination" key on the
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel configuration page</a>.
|
||||
Be sure you get the whole thing, ending with "AAAA".
|
||||
Don't forget to click "add a key".
|
||||
Check to see if it reports the key was added.
|
||||
Since many routers periodically get address book updates from these sites, within several hours others will be able to find your website by simply typing <i>something</i>.i2p into their browser.
|
||||
</ul><h2>Adding Addressbook Subscriptions</h2><ul>
|
||||
<li>Speaking of address book updates, this would be a good time to add some more addressbooks
|
||||
to your own <a href="http://127.0.0.1:7657/susidns/subscriptions.jsp">subscription list</a>. Go to your subscriptions configuration page and add a couple of these for an automatically updated list of new hosts:<ul>
|
||||
<li><a href="http://tino.i2p/hosts.txt">http://tino.i2p/hosts.txt</a>
|
||||
<li><a href="http://stats.i2p/cgi-bin/newhosts.txt">http://stats.i2p/cgi-bin/newhosts.txt</a>
|
||||
<li><a href="http://i2host.i2p/cgi-bin/i2hostetag">http://i2host.i2p/cgi-bin/i2hostetag</a></ul>
|
||||
<li>If you are in a hurry and can't wait a few hours, you can tell people to use a "jump" address helper redirection service.
|
||||
This will work within a few minutes of your entering the key to an address book on the same site.
|
||||
Test it yourself first by entering
|
||||
http://stats.i2p/cgi-bin/jump.cgi?a=<i>something</i>.i2p or
|
||||
or http://i2host.i2p/cgi-bin/i2hostjump?<i>something</i>.i2p
|
||||
into your browser.
|
||||
Once it's working, then you can tell others to use it.
|
||||
<li>Some people check eepsite lists such as
|
||||
<a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p/status.php</a> for new eepsites, so you may start getting
|
||||
a few visitors. But there are plenty of other ways to tell people. Here are a few ideas:
|
||||
<ul>
|
||||
<li>Post a message on the <a href="http://forum.i2p/viewforum.php?f=16">Eepsite announce forum</a>
|
||||
on <a href="http://forum.i2p/">forum.i2p</a>.
|
||||
<li>Tell people about it on the #i2p or #i2p-chat channels on IRC.
|
||||
<li>Put it in a new post on <a href="http://syndie.i2p2.de/">the new Syndie</a>.
|
||||
<li>Put it in <a href="http://ugha.i2p/EepsiteIndex">Ugha's Eepsite Index Wiki</a>
|
||||
</ul>
|
||||
Note that some sites recommend pasting in that really long destination key.
|
||||
You can if you want - but
|
||||
if you have successfully posted your key at an add-key service,
|
||||
tested it using a jump service, and waited 24 hours for the
|
||||
address book update to propagate to others, that shouldn't be necessary.</ul>
|
||||
<h2>Further Assistance</h2><ul>
|
||||
<li>If you have any questions, the following places are available for support:
|
||||
<ul>
|
||||
<li>Our IRC support channel: <ul><li><a href="irc://irc.freenode.net/i2p">#i2p on Freenode</a>
|
||||
<li>Anonymously via your resident <a href="irc://127.0.0.1:6668/i2p">I2P IRC tunnel</a>.</ul>
|
||||
<li><a href="http://forum.i2p/viewforum.php?f=10">The technical problems section</a> on
|
||||
<a href="http://forum.i2p/">forum.i2p</a>.</ul>
|
||||
</ul><div class="notify">
|
||||
<b>Note:</b> This page, the website and the console all need translating into YOUR language if it's not already been done or in progress. Please consider helping the project grow by <a href="http://www.i2p2.i2p/getinvolved.html">volunteering your time</a> to translate. Contact the project via the IRC channel listed above. Thanks in advance!</div>
|
||||
<hr><div class="footnote">
|
||||
Document last edited: November 2009.</div>
|
||||
</div></div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,172 +1,184 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html><head>
|
||||
|
||||
|
||||
<title>Willkommen zu Ihrer Eepsite!</title>
|
||||
<meta name="generator" content="muse.el">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<link rel="stylesheet" type="text/css" href="eepsite.css">
|
||||
</head><body>
|
||||
<h1>Willkommen zu Ihrer Eepsite!</h1>
|
||||
<p>Diese ist Ihre <strong>Eepsite</strong>, Ihre Web-Präsens über I2P. Editieren Sie einfach die Dateien unter
|
||||
<em>~/.i2p/eepsite/docroot/</em> (Linux) oder <em>%APPDATA%\I2P\eepsite\docroot\</em> (Windows)
|
||||
und nachdem Sie den Anweisungen weiter unten gefolgt sind, werden Sie –
|
||||
vertreten durch Ihre Eepsite – von anderen im I2P-Netz und, soweit
|
||||
verfügbar, über private „Out-Proxys“ weltweit erreichbar sein.</p>
|
||||
|
||||
<p>In I2P werden Eepsites unter Verwendung eines Schlüssels (key) adressiert, dieser wird durch eine sehr lange Base64-Zeichenkette<sup><a class="footref" name="fnr.1" href="#fn.1">1</a></sup> dargestellt.
|
||||
(Dieser Schlüssel ist analog zur Standard IP-Adresse zu verstehen; man kann ihn sich in der Konfiguration für Eepsites unter <a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">I2PTunnel</a> anzeigen lassen.)</p>
|
||||
|
||||
<p>Folgende Anweisungen sollen zeigen, wie man einer Eepsite einen
|
||||
Namen wie beispielsweise „meineseite.i2p“ zuweist und an dem Schlüssel
|
||||
bindet.
|
||||
Sie können Ihre Eepsite, nachdem sie gestartet wurde, lokal unter <a href="http://127.0.0.1:7658/">http://127.0.0.1:7658/</a> erreichen.</p>
|
||||
|
||||
<p>Es folgt eine schrittweise Anleitung für das Starten Ihrer neuen Eepsite und dessen Ankündigung in der I2P-Gemeinde.</p>
|
||||
|
||||
<p>In der Grundeinstellung ist Ihre Eepsite nicht eingeschaltet.
|
||||
Auch nach dem sie gestartet wurde, ist es für andere Teilnehmer immer
|
||||
noch schwierig Ihre Seite zu finden, solange bis Sie Ihren
|
||||
Base64-Schlüssel und den Namen Ihrer Eepsite veröffentlicht haben.
|
||||
Natürlich können Sie den Leuten diesen sehr langen Schlüssel auch so
|
||||
mitteilen, aber glücklicherweise bringt I2P bereits ein Adressbuch mit
|
||||
und hat verschiedene Wege um Ihre Eepsite bekannt zu machen.</p>
|
||||
|
||||
|
||||
<h3>Eine detailierte Einführung</h3>
|
||||
|
||||
<h4>Meine Eepsite</h4>
|
||||
|
||||
<ol>
|
||||
<li>Wählen Sie einen eigenen Namen für Ihre Eepsite – nur in diesem
|
||||
Beispiel heißt sie „meineseite.i2p“ – benutzen Sie nur Kleinschrift.
|
||||
Sie können in Ihrem <a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=router">Adressbuch</a> überprüfen, ob der gewünschte Name bereits vergeben ist (Anmerkung: die Daten aus den Adressbuch werden im Klartext in der <em>i2p/hosts.txt</em> gespeichert).
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Rufen Sie nun, möglichst in einem neuen Browser-Fenster, die Konfiguration für Eepsites <a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">I2PTunnel</a> auf. Unter „Local Server Tunnels“ wählen Sie den Eintrag „<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite</a>“.
|
||||
Sie befinden sich nun auf der Seite mit Überschrift „Edit server
|
||||
settings“. In das Feld für „Website name:“ überschreiben Sie die
|
||||
Vorgabe „mysite.i2p“ mit Ihrem Wunschnamen. Optional geben Sie im Feld
|
||||
„Description:“ eine Beschreibung an.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Wenn Sie möchten das Ihre Eepsite automatisch gestartet wird, kreuzen Sie das Feld „Auto Start:“ an.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Durch drücken des Links „Add to local addressbook“ gleich rechts
|
||||
neben Ihrem Schlüssel (Feld „Local destination“) wird Ihr Schlüssel in
|
||||
Ihr <em>privates</em> Adressbuch geschrieben (<em>i2p/privatehosts.txt</em>).
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Jetzt sichern Sie Ihre Einstellungen indem Sie auf „Save“ klicken.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Wir gehen wieder zurück auf die Konfigurationsseite <a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">I2PTunnel</a>
|
||||
und drücken den „Start“-Knopf für die „eepsite“. Nach dem erfolgreichen
|
||||
Start wird Ihre Eepsite auf der linken Seite in der I2P <a href="http://127.0.0.1:7657/index.jsp">Router Console</a> unter „Local
|
||||
Destinations“ angezeigt.</li>
|
||||
</ol>
|
||||
|
||||
|
||||
|
||||
<h4>Das Veröffentlichen vorbereiten</h4>
|
||||
|
||||
<ol>
|
||||
<li>Heben Sie in der „<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">Konfiguration</a>“
|
||||
den gesamten Schlüssel für Ihre Eepsite hervor und kopieren ihn in die
|
||||
Zwischenablage. Stellen Sie sicher auch tatsächlich die gesamte, über
|
||||
500 Zeichen lange Zeichenkette die auf „AAAA“ endet, „erwischt“ zu
|
||||
haben.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Öffnen Sie Ihr <a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=master">Master-Adressbuch</a>,
|
||||
tragen Ihren zuvor gewählten Wunschnamen ihrer Eepsite unter „Hostname“
|
||||
ein und kopieren den Schlüssel in das Feld „Destination“. Ein Klick auf
|
||||
„Add“ und diese „Destination“ ist in Ihrem Adressbuch.<sup><a class="footref" name="fnr.2" href="#fn.2">2</a></sup>
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Ihre Eepsite sollte jetzt über den Browser erreichbar sein. Dazu
|
||||
tragen Sie, wie gewohnt, den Namen Ihrer Eepsite (hier im Beispiel
|
||||
„meineseite.i2p“) in die Adressleiste Ihres Browsers ein und rufen sie
|
||||
auf. Wenn alles gutgegangen ist, sind Sie nun wieder hier – nur die
|
||||
Adresse hat sich geändert.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Bevor Sie der Welt von Ihrer neuen Eepsite berichten sollte sie
|
||||
auch über ein wenig Inhalt verfügen. Begeben Sie sich in das
|
||||
Verzeichnis <em>„~/.i2p/eepsite/docroot/“</em> (Linux) oder <em>„%APPDATA%\I2P\eepsite\docroot\“</em> (Windows)
|
||||
und benennen Sie dieses Dokument von <em>„index.html“</em> nach <em>„hilfe.html“</em> um, so können Sie später darauf zurück greifen. Erstellen Sie Ihre eigene <em>„index.html“</em> und füllen diese mit Inhalten, Bildern oder was auch immer Sie anderen hierüber mitteilen wollen.</li>
|
||||
</ol>
|
||||
|
||||
<h4><a name="AnkerDEOeA" id="AnkerDEOeA"></a>Die Eepsite öffentlich ankündigen</h4>
|
||||
|
||||
<ul>
|
||||
<li>Nun ist es an der Zeit, Ihre Eepsite in einem globalen I2P-Adressbuch, wie beispielsweise bei <a href="http://stats.i2p/i2p/addkey.html">stats.i2p</a>,
|
||||
einzutragen. Das heißt, Sie müssen Namen und Schlüssel Ihrer Eepsite
|
||||
und eine optionale Beschreibung in ein Formular auf einen oder mehreren
|
||||
dieser Seiten eingeben. Wie schon oben gesagt, Ihr Schlüssel ist der <em>vollständige</em> Schlüssel wie er in der <a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">I2PTunnel</a> Konfiguration für die „<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">Eepsite</a>“
|
||||
im Feld „Local destination“ angegeben ist (... über 500 Zeichen, endet
|
||||
auf „AAAA“). Bestätigen Sie Ihre Angaben mit einem klick auf „Submit“.
|
||||
Überprüfen Sie ob Ihr Schlüssel tatsächlich hinzugefügt wurde.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Da viele Router regelmäßig Adressbuchupdates von diesen Seiten
|
||||
erhalten, sollten andere innerhalb einiger Stunden in der Lage sein,
|
||||
Ihre Eesite durch
|
||||
den Eintrag des Namens im Browser aufzurufen.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Weil wir gerade von Adressbuchupdates sprechen – es ist eine gute Zeit um weitere Adressbücher dem bestehenden <a href="http://127.0.0.1:7657/susidns/subscriptions.jsp">Abonnement</a>
|
||||
hinzuzufügen. Öffnen Sie Ihre Konfiguration und fügen Sie einige der
|
||||
folgenden Dienste Ihrem Abonnement hinzu (nur die jeweilige URL) und
|
||||
speichern Sie die Angaben.<sup><a class="footref" name="fnr.3" href="#fn.3">3</a></sup> Ab jetzt erhalten Sie ebenso alle Updates automatisch!
|
||||
<blockquote>
|
||||
<p class="quoted"><code>http://tino.i2p/hosts.txt</code> (<a href="http://tino.i2p/hosts.txt">tino.i2p</a>)<br>
|
||||
<code>http://stats.i2p/cgi-bin/newhosts.txt</code> (<a href="http://stats.i2p/cgi-bin/newhosts.txt">stats.i2p</a>)<br>
|
||||
<code>http://i2host.i2p/cgi-bin/i2hostetag</code> (<a href="=http://i2host.i2p/cgi-bin/i2hostetag">i2host.i2p</a>)
|
||||
<br>
|
||||
<br></p>
|
||||
</blockquote></li>
|
||||
<li>Haben Sie es eilig und können nicht 12 bis 24 Stunden warten, ist
|
||||
es möglich das andere für Ihre Eepseite den „jump“
|
||||
Adresshelfer-Umlenkungs-Dienst benutzen. Dieses funktioniert innerhalb
|
||||
einiger Minuten nach Eingabe des Schlüssels zu einem Adressbuch auf der
|
||||
gleichen Seite.<br><br>
|
||||
Zuerst testen Sie das mittels Aufruf folgender Dienste. Sobald das
|
||||
klappt, können anderen diese Möglichkeit nutzen. (Ersetzen Sie
|
||||
„meineseite.i2p“ durch Ihre Seite.)
|
||||
<ul>
|
||||
<li><a href="http://stats.i2p/cgi-bin/jump.cgi?a=meineseite.i2p">http://stats.i2p/cgi-bin/jump.cgi?a=meineseite.i2p</a> oder</li>
|
||||
<li><a href="http://i2host.i2p/cgi-bin/i2hostjump?meineseite.i2p">http://i2host.i2p/cgi-bin/i2hostjump?meineseite.i2p</a>
|
||||
<br>
|
||||
<br></li>
|
||||
</ul></li>
|
||||
<li>Manche Leute erkundigen sich auf Eepsites-Listen wie <a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p/status.php</a> über neue Eepsites, so könnten Sie an einige Besucher kommen. Aber es gibt weitere Wege sich anzukündigen:
|
||||
|
||||
<ul>
|
||||
<li>Veröffentlichen Sie eine Nachricht im <a href="http://forum.i2p">I2P Forum</a> unter <a href="http://forum.i2p/viewforum.php?f=16">Eepsite Announce</a></li>
|
||||
<li>Besuchen sie die IRC-Kanäle #i2p oder #i2p-chat (beide englischsprachig) und Werben Sie sanft für sich.</li>
|
||||
<li>Verbreiten Sie eine Nachricht über Syndie.</li>
|
||||
<li>Tragen Sie sich ein in Ughas <a href="http://ugha.i2p/EepsiteIndex">Eepsite Index</a> Wiki.
|
||||
<br>
|
||||
<br></li>
|
||||
</ul></li>
|
||||
<li>Bitte beachten Sie, einige Seiten empfehlen das Einfügen des langen
|
||||
„Destination“-Schlüssels; das können Sie wenn Sie möchten – aber wenn
|
||||
Sie Ihren Schlüssel erfolgreich beim „Schlüssel-Dienst“ eingetragen und
|
||||
ihn mittels „jump“-Dienst getestet haben, sollte nach 24 Stunden
|
||||
Wartezeit dieses Vorgehen nicht nötig sein.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Sollten Sie Fragen haben, benutzen Sie den IRC-Kanal #i2p oder die technische Abteilung im <a href="http://forum.i2p">I2P Forum</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>______________
|
||||
</p><p class="footnote"><a class="footnum" name="fn.1" href="#fnr.1">1.</a> <strong>Base64</strong>
|
||||
beschreibt ein Verfahren zur Kodierung von 8-Bit-Binärdaten in eine
|
||||
Zeichenfolge, die nur aus wenigen, Codepage-unabhängigen ASCII-Zeichen
|
||||
besteht.
|
||||
</p><p class="footnote"><a class="footnum" name="fn.2" href="#fnr.2">2.</a> Anmerkung: Wenn dieses Vorgehen mit der Fehlermeldung „Invalid nonce. Are you being spoofed?“ quittiert wird, müssen <em>Cookies</em> im Browser erlaubt werden. Ist dies nicht möglich, können Sie mit einem Editor die Datei <em>„i2p/userhosts.txt“</em> bearbeiten und so die Adressen einfügen. <a href="http://sperrbezirk.i2p/Konqueror_Susi.html">Konqueror</a> ist etwas eigenwillig.
|
||||
</p><p class="footnote"><a class="footnum" name="fn.3" href="#fnr.3">3.</a> Gleiches wie unter <sup><a class="footref" name="fnr.2" href="#fn.2">2</a></sup> gilt für <em>„i2p/addressbook/subscriptions.txt“</em>.</p>
|
||||
</body></html>
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html><head>
|
||||
|
||||
|
||||
<title>Willkommen zu Ihrer Eepsite!</title>
|
||||
<meta name="generator" content="muse.el">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<link rel="stylesheet" type="text/css" href="lib/eepsite.css">
|
||||
</head><body>
|
||||
<div class="fairylights">
|
||||
<div class="main">
|
||||
<h1>Willkommen zu Ihrer Eepsite!</h1>
|
||||
<div class="langbar">
|
||||
<!-- Most of these languages listed here are yet to be translated -->
|
||||
<a href="index.html"><img src="lib/us.png" title="English" alt="English"></a>
|
||||
<a href="index_na.html"><img src="lib/cn.png" title="中文" alt="中文"></a>
|
||||
<a href="index_de.html"><img src="lib/de.png" title="Deutsch" alt="Deutsch"></a>
|
||||
<a href="index_fr.html"><img src="lib/fr.png" title="Français" alt="Français"></a>
|
||||
<a href="index_na.html"><img src="lib/nl.png" title="Nederlands" alt="Nederlands"></a>
|
||||
<a href="index_ru.html"><img src="lib/ru.png" title="Русский" alt="Русский"></a>
|
||||
<a href="index_na.html"><img src="lib/se.png" title="Svenska" alt="Svenska"></a>
|
||||
</div>
|
||||
<p>Diese ist Ihre <strong>Eepsite</strong>, Ihre Web-Präsens über I2P. Editieren Sie einfach die Dateien unter
|
||||
<em>~/.i2p/eepsite/docroot/</em> (Linux) oder <em>%APPDATA%\I2P\eepsite\docroot\</em> (Windows)
|
||||
und nachdem Sie den Anweisungen weiter unten gefolgt sind, werden Sie –
|
||||
vertreten durch Ihre Eepsite – von anderen im I2P-Netz und, soweit
|
||||
verfügbar, über private „Out-Proxys“ weltweit erreichbar sein.</p>
|
||||
|
||||
<p>In I2P werden Eepsites unter Verwendung eines Schlüssels (key) adressiert, dieser wird durch eine sehr lange Base64-Zeichenkette<sup><a class="footref" name="fnr.1" href="#fn.1">1</a></sup> dargestellt.
|
||||
(Dieser Schlüssel ist analog zur Standard IP-Adresse zu verstehen; man kann ihn sich in der Konfiguration für Eepsites unter <a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">I2PTunnel</a> anzeigen lassen.)</p>
|
||||
|
||||
<p>Folgende Anweisungen sollen zeigen, wie man einer Eepsite einen
|
||||
Namen wie beispielsweise „meineseite.i2p“ zuweist und an dem Schlüssel
|
||||
bindet.
|
||||
Sie können Ihre Eepsite, nachdem sie gestartet wurde, lokal unter <a href="http://127.0.0.1:7658/">http://127.0.0.1:7658/</a> erreichen.</p>
|
||||
|
||||
<p>Es folgt eine schrittweise Anleitung für das Starten Ihrer neuen Eepsite und dessen Ankündigung in der I2P-Gemeinde.</p>
|
||||
|
||||
<p>In der Grundeinstellung ist Ihre Eepsite nicht eingeschaltet.
|
||||
Auch nach dem sie gestartet wurde, ist es für andere Teilnehmer immer
|
||||
noch schwierig Ihre Seite zu finden, solange bis Sie Ihren
|
||||
Base64-Schlüssel und den Namen Ihrer Eepsite veröffentlicht haben.
|
||||
Natürlich können Sie den Leuten diesen sehr langen Schlüssel auch so
|
||||
mitteilen, aber glücklicherweise bringt I2P bereits ein Adressbuch mit
|
||||
und hat verschiedene Wege um Ihre Eepsite bekannt zu machen.</p>
|
||||
|
||||
|
||||
<h3>Eine detailierte Einführung</h3>
|
||||
|
||||
<h4>Meine Eepsite</h4>
|
||||
|
||||
<ol>
|
||||
<li>Wählen Sie einen eigenen Namen für Ihre Eepsite – nur in diesem
|
||||
Beispiel heißt sie „meineseite.i2p“ – benutzen Sie nur Kleinschrift.
|
||||
Sie können in Ihrem <a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=router">Adressbuch</a> überprüfen, ob der gewünschte Name bereits vergeben ist (Anmerkung: die Daten aus den Adressbuch werden im Klartext in der <em>i2p/hosts.txt</em> gespeichert).
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Rufen Sie nun, möglichst in einem neuen Browser-Fenster, die Konfiguration für Eepsites <a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">I2PTunnel</a> auf. Unter „Local Server Tunnels“ wählen Sie den Eintrag „<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite</a>“.
|
||||
Sie befinden sich nun auf der Seite mit Überschrift „Edit server
|
||||
settings“. In das Feld für „Website name:“ überschreiben Sie die
|
||||
Vorgabe „mysite.i2p“ mit Ihrem Wunschnamen. Optional geben Sie im Feld
|
||||
„Description:“ eine Beschreibung an.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Wenn Sie möchten das Ihre Eepsite automatisch gestartet wird, kreuzen Sie das Feld „Auto Start:“ an.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Durch drücken des Links „Add to local addressbook“ gleich rechts
|
||||
neben Ihrem Schlüssel (Feld „Local destination“) wird Ihr Schlüssel in
|
||||
Ihr <em>privates</em> Adressbuch geschrieben (<em>i2p/privatehosts.txt</em>).
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Jetzt sichern Sie Ihre Einstellungen indem Sie auf „Save“ klicken.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Wir gehen wieder zurück auf die Konfigurationsseite <a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">I2PTunnel</a>
|
||||
und drücken den „Start“-Knopf für die „eepsite“. Nach dem erfolgreichen
|
||||
Start wird Ihre Eepsite auf der linken Seite in der I2P <a href="http://127.0.0.1:7657/index.jsp">Router Console</a> unter „Local
|
||||
Destinations“ angezeigt.</li>
|
||||
</ol>
|
||||
|
||||
|
||||
|
||||
<h4>Das Veröffentlichen vorbereiten</h4>
|
||||
|
||||
<ol>
|
||||
<li>Heben Sie in der „<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">Konfiguration</a>“
|
||||
den gesamten Schlüssel für Ihre Eepsite hervor und kopieren ihn in die
|
||||
Zwischenablage. Stellen Sie sicher auch tatsächlich die gesamte, über
|
||||
500 Zeichen lange Zeichenkette die auf „AAAA“ endet, „erwischt“ zu
|
||||
haben.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Öffnen Sie Ihr <a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=master">Master-Adressbuch</a>,
|
||||
tragen Ihren zuvor gewählten Wunschnamen ihrer Eepsite unter „Hostname“
|
||||
ein und kopieren den Schlüssel in das Feld „Destination“. Ein Klick auf
|
||||
„Add“ und diese „Destination“ ist in Ihrem Adressbuch.<sup><a class="footref" name="fnr.2" href="#fn.2">2</a></sup>
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Ihre Eepsite sollte jetzt über den Browser erreichbar sein. Dazu
|
||||
tragen Sie, wie gewohnt, den Namen Ihrer Eepsite (hier im Beispiel
|
||||
„meineseite.i2p“) in die Adressleiste Ihres Browsers ein und rufen sie
|
||||
auf. Wenn alles gutgegangen ist, sind Sie nun wieder hier – nur die
|
||||
Adresse hat sich geändert.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Bevor Sie der Welt von Ihrer neuen Eepsite berichten sollte sie
|
||||
auch über ein wenig Inhalt verfügen. Begeben Sie sich in das
|
||||
Verzeichnis <em>„~/.i2p/eepsite/docroot/“</em> (Linux) oder <em>„%APPDATA%\I2P\eepsite\docroot\“</em> (Windows)
|
||||
und benennen Sie dieses Dokument von <em>„index.html“</em> nach <em>„hilfe.html“</em> um, so können Sie später darauf zurück greifen. Erstellen Sie Ihre eigene <em>„index.html“</em> und füllen diese mit Inhalten, Bildern oder was auch immer Sie anderen hierüber mitteilen wollen.</li>
|
||||
</ol>
|
||||
|
||||
<h4><a name="AnkerDEOeA" id="AnkerDEOeA"></a>Die Eepsite öffentlich ankündigen</h4>
|
||||
|
||||
<ul>
|
||||
<li>Nun ist es an der Zeit, Ihre Eepsite in einem globalen I2P-Adressbuch, wie beispielsweise bei <a href="http://stats.i2p/i2p/addkey.html">stats.i2p</a>,
|
||||
einzutragen. Das heißt, Sie müssen Namen und Schlüssel Ihrer Eepsite
|
||||
und eine optionale Beschreibung in ein Formular auf einen oder mehreren
|
||||
dieser Seiten eingeben. Wie schon oben gesagt, Ihr Schlüssel ist der <em>vollständige</em> Schlüssel wie er in der <a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">I2PTunnel</a> Konfiguration für die „<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">Eepsite</a>“
|
||||
im Feld „Local destination“ angegeben ist (... über 500 Zeichen, endet
|
||||
auf „AAAA“). Bestätigen Sie Ihre Angaben mit einem klick auf „Submit“.
|
||||
Überprüfen Sie ob Ihr Schlüssel tatsächlich hinzugefügt wurde.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Da viele Router regelmäßig Adressbuchupdates von diesen Seiten
|
||||
erhalten, sollten andere innerhalb einiger Stunden in der Lage sein,
|
||||
Ihre Eesite durch
|
||||
den Eintrag des Namens im Browser aufzurufen.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Weil wir gerade von Adressbuchupdates sprechen – es ist eine gute Zeit um weitere Adressbücher dem bestehenden <a href="http://127.0.0.1:7657/susidns/subscriptions.jsp">Abonnement</a>
|
||||
hinzuzufügen. Öffnen Sie Ihre Konfiguration und fügen Sie einige der
|
||||
folgenden Dienste Ihrem Abonnement hinzu (nur die jeweilige URL) und
|
||||
speichern Sie die Angaben.<sup><a class="footref" name="fnr.3" href="#fn.3">3</a></sup> Ab jetzt erhalten Sie ebenso alle Updates automatisch!
|
||||
<blockquote>
|
||||
<p class="quoted"><code>http://tino.i2p/hosts.txt</code> (<a href="http://tino.i2p/hosts.txt">tino.i2p</a>)<br>
|
||||
<code>http://stats.i2p/cgi-bin/newhosts.txt</code> (<a href="http://stats.i2p/cgi-bin/newhosts.txt">stats.i2p</a>)<br>
|
||||
<code>http://i2host.i2p/cgi-bin/i2hostetag</code> (<a href="http://i2host.i2p/cgi-bin/i2hostetag">i2host.i2p</a>)
|
||||
<br>
|
||||
<br></p>
|
||||
</blockquote></li>
|
||||
<li>Haben Sie es eilig und können nicht 12 bis 24 Stunden warten, ist
|
||||
es möglich das andere für Ihre Eepseite den „jump“
|
||||
Adresshelfer-Umlenkungs-Dienst benutzen. Dieses funktioniert innerhalb
|
||||
einiger Minuten nach Eingabe des Schlüssels zu einem Adressbuch auf der
|
||||
gleichen Seite.<br><br>
|
||||
Zuerst testen Sie das mittels Aufruf folgender Dienste. Sobald das
|
||||
klappt, können anderen diese Möglichkeit nutzen. (Ersetzen Sie
|
||||
„meineseite.i2p“ durch Ihre Seite.)
|
||||
<ul>
|
||||
<li><a href="http://stats.i2p/cgi-bin/jump.cgi?a=meineseite.i2p">http://stats.i2p/cgi-bin/jump.cgi?a=meineseite.i2p</a> oder</li>
|
||||
<li><a href="http://i2host.i2p/cgi-bin/i2hostjump?meineseite.i2p">http://i2host.i2p/cgi-bin/i2hostjump?meineseite.i2p</a>
|
||||
<br>
|
||||
<br></li>
|
||||
</ul></li>
|
||||
<li>Manche Leute erkundigen sich auf Eepsites-Listen wie <a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p/status.php</a> über neue Eepsites, so könnten Sie an einige Besucher kommen. Aber es gibt weitere Wege sich anzukündigen:
|
||||
|
||||
<ul>
|
||||
<li>Veröffentlichen Sie eine Nachricht im <a href="http://forum.i2p">I2P Forum</a> unter <a href="http://forum.i2p/viewforum.php?f=16">Eepsite Announce</a></li>
|
||||
<li>Besuchen sie die IRC-Kanäle #i2p oder #i2p-chat (beide englischsprachig) und Werben Sie sanft für sich.</li>
|
||||
<li>Verbreiten Sie eine Nachricht über Syndie.</li>
|
||||
<li>Tragen Sie sich ein in Ughas <a href="http://ugha.i2p/EepsiteIndex">Eepsite Index</a> Wiki.
|
||||
<br>
|
||||
<br></li>
|
||||
</ul></li>
|
||||
<li>Bitte beachten Sie, einige Seiten empfehlen das Einfügen des langen
|
||||
„Destination“-Schlüssels; das können Sie wenn Sie möchten – aber wenn
|
||||
Sie Ihren Schlüssel erfolgreich beim „Schlüssel-Dienst“ eingetragen und
|
||||
ihn mittels „jump“-Dienst getestet haben, sollte nach 24 Stunden
|
||||
Wartezeit dieses Vorgehen nicht nötig sein.
|
||||
<br>
|
||||
<br></li>
|
||||
<li>Sollten Sie Fragen haben, benutzen Sie den IRC-Kanal #i2p oder die technische Abteilung im <a href="http://forum.i2p">I2P Forum</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<hr><p class="footnote"><a class="footnum" name="fn.1" href="#fnr.1">1.</a> <strong>Base64</strong>
|
||||
beschreibt ein Verfahren zur Kodierung von 8-Bit-Binärdaten in eine
|
||||
Zeichenfolge, die nur aus wenigen, Codepage-unabhängigen ASCII-Zeichen
|
||||
besteht.
|
||||
</p><p class="footnote"><a class="footnum" name="fn.2" href="#fnr.2">2.</a> Anmerkung: Wenn dieses Vorgehen mit der Fehlermeldung „Invalid nonce. Are you being spoofed?“ quittiert wird, müssen <em>Cookies</em> im Browser erlaubt werden. Ist dies nicht möglich, können Sie mit einem Editor die Datei <em>„i2p/userhosts.txt“</em> bearbeiten und so die Adressen einfügen. <a href="http://sperrbezirk.i2p/Konqueror_Susi.html">Konqueror</a> ist etwas eigenwillig.
|
||||
</p><p class="footnote"><a class="footnum" name="fn.3" href="#fnr.3">3.</a> Gleiches wie unter <sup><a class="footref" name="fnr.2" href="#fn.2">2</a></sup> gilt für <em>„i2p/addressbook/subscriptions.txt“</em>.</p>
|
||||
</div></div>
|
||||
</body></html>
|
||||
@@ -1,118 +1,118 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>I2P serveur web anonyme | Bienvenue à votre eepsite</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<link rel="shortcut icon" href="favicon.ico" />
|
||||
<link rel="stylesheet" type="text/css" href="lib/eepsite.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="fairylights">
|
||||
<div class="main">
|
||||
<h1>Serveur web anonyme I2P</h1>
|
||||
<div class="langbar">
|
||||
<!-- Most of these languages listed here are yet to be translated -->
|
||||
<a href="index.html"><img src="lib/us.png" title="English" alt="English"></a>
|
||||
<a href="index_na.html"><img src="lib/cn.png" title="Chinese" alt="Chinese"></a>
|
||||
<a href="index_de.html"><img src="lib/de.png" title="Deutsch" alt="Deutsch"></a>
|
||||
<a href="index_fr.html"><img src="lib/fr.png" title="Français" alt="Français"></a>
|
||||
<a href="index_na.html"><img src="lib/nl.png" title="Nederlands" alt="Nederlands"></a>
|
||||
<a href="index_na.html"><img src="lib/se.png" title="Svenska" alt="Svenska"></a>
|
||||
|
||||
</div>
|
||||
<h2>Un mini guide pour faire un serveur web anonyme utilisant I2P</h2>
|
||||
|
||||
<p>C'est votre eepsite qui fonctionne sur votre propre serveur web anonyme I2P. Afin de le mettre en route, simplement éditer les fichiers sous ./eepsite/docroot/
|
||||
et ils seront accessibles aux autres internautes dès que vous avez suivi les instructions suivantes.
|
||||
Avec I2P, on accède aux eepsites en utilisant une 'clé', qui est réprésentée par une chaîne de caractères de base64.
|
||||
(Cette 'clé' est un analogue d'une adresse IP et elle est montrée sur l'eepsite's I2PTunnel
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">Page de configuration</a>).
|
||||
Les instructions ci dessous expliquent comment associer un nom de site tel que "monsite.i2p" à votre clé et ensuite comment lancer votre eepsite.</p>
|
||||
<p>Vous pouvez accéder votre eepsite localement via
|
||||
<a href="http://127.0.0.1:7658/">http://127.0.0.1:7658/</a>.
|
||||
</p>
|
||||
|
||||
<h2>Comment configurer et annoncer votre eepsite</h2>
|
||||
Votre eepsite ne fonctionne pas par défaut.
|
||||
Après que vous l'ayez lancé, il sera difficile à trouver pour les internautes, car ils n'ont pas le nom de votre site et votre longue clé base64.
|
||||
|
||||
Vous pourriez simplement distribuer cette très longue clé manuellement. Mais, heureusement il y un carnet d'adresse I2P
|
||||
et plusieurs manières faciles de faire connaitre votre eepsite. Voici les instructions détaillées :
|
||||
<ul>
|
||||
<li>Choissisez un nom pour votre eepsite (<i>quelquechose</i>.i2p). Tout en minuscule.
|
||||
D'abord, vérifiez dans le carnet d'adresse de votre router
|
||||
<a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=router&filter=none">ici</a>,
|
||||
ou dans le fichier i2p/hosts.txt pour voir si le nom a déjà été pris.
|
||||
Entrez le nouveau nom de votre eepsite sur le
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel page de configuration</a>
|
||||
où c'est marqué "Website name". Cela remplacera le nom défaut "mysite.i2p".
|
||||
En outre, cochez "Auto Start". Votre eepsite démarrera automatiquement chaque fois que vous lancez votre router I2P.
|
||||
Soyez certain de cliquer sur "Save".
|
||||
<li>Cliquez sur le bouton marqué "start"
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">main i2ptunnel page de configuration</a> pour lancer votre eepsite.
|
||||
Maintenant vous devriez voir "eepsite" indiqué sous "Local Destinations" sur le côté gauche de votre
|
||||
<a href="http://127.0.0.1:7657/index.jsp">I2P Router Console</a>.
|
||||
Votre eepsite fonctionne.
|
||||
<li>Surlignez la clé de "Local destination" en entier sur le
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel page de configuration</a>
|
||||
et copiez-la pour la coller plus tard.
|
||||
Soyez certain de copier la clé entière - elle a plus de 500 octets et elle se termine avec "AAAA".
|
||||
<li>Entrez le nom et coller la clé de destination dans votre
|
||||
<a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=master">master address book</a>.
|
||||
Cliquez sur "Add" pour ajouter la destination à votre carnet d'adresse.
|
||||
<li>Dans votre explorateur internet, entrez le nom de votre eepsite (<i>quelquechose</i>.i2p) et vous devriez vous retrouver sur cette page.
|
||||
Avec un peu de chance - si vous êtes arrivé ici, c'est que ça a marché !
|
||||
<li>Avant de parler à tout le monde de votre nouvel eepsite, vous devriez ajouter du contenu.
|
||||
Allez à i2p/eepsite/docroot et remplacez la page index.html avec votre propre page. Les dossiers virtuels fonctionnent, donc vous pouvez héberger un sous-dossier sans explicitement ajouter des liens vers des fichiers. Si vous avez besoin d'un gabarit pour un site de base, n'hésitez pas à utiliser et à changer <a href="pagetemplate.html">cette page</a> et <a href="lib/">contenu</a>!
|
||||
</ul>
|
||||
<h2>Enregistrer votre propre .I2P domaine</h2><ul>
|
||||
<li>Maintenant il faut ajouter votre eepsite au carnet d'adresse hébergé par un site
|
||||
tel que <a href="http://stats.i2p/">stats.i2p</a>.
|
||||
C'est-à-dire, vous devez entrer
|
||||
votre nom d'eepsite et sa clé dans l'interface web d'un ou plus de ces sites.
|
||||
Voici <a href="http://stats.i2p/i2p/addkey.html">le formulaire pour l'entrée d'une clé à stats.i2p.</a>
|
||||
Encore, votre clé est la "Local destination", disponible en entier ici
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel page de configuration.</a>
|
||||
Prenez toute la clé, souvenez qu'elle se termine en "AAAA".
|
||||
N'oubliez pas de cliquer sur "add a key".
|
||||
Vérifiez que le site montre que la clé a été correctement ajoutée.
|
||||
Comme beaucoup de routers se mettent à jour regulièrement à partir de ces sites, en quelques heures d'autres internautes seront capables de trouver et d'accéder à votre eepsite simplement en tapant <i>quelquechose</i>.i2p dans leurs explorateurs internet.
|
||||
</ul><h2>Comment ajouter des abonnements au carnet d'adresse.</h2><ul>
|
||||
<li>En parlant de mises à jour de carnet d'adresse, il serait prudent d'ajouter quelques carnets d'adresses de plus
|
||||
à votre <a href="http://127.0.0.1:7657/susidns/subscriptions.jsp">subscription list.</a> Allez sur votre page d'abonnements et ajoutez quelques listes directement ci dessous afin que votre liste d'hôtes soit mise à jour automatiquement :<ul>
|
||||
<li><a href="http://tino.i2p/hosts.txt">http://tino.i2p/hosts.txt</a>
|
||||
<li><a href="http://stats.i2p/cgi-bin/newhosts.txt">http://stats.i2p/cgi-bin/newhosts.txt</a>
|
||||
<li><a href="http://i2host.i2p/cgi-bin/i2hostetag">http://i2host.i2p/cgi-bin/i2hostetag</a></ul>
|
||||
<li>Si vous êtes pressé et que vous ne pouvez pas attendre quelques heures, vous pouvez demander aux autres d'utiliser un "jump" (service d'aide de ré-direction d'adresse).
|
||||
Cela marchera en quelques minutes après que vous ayez entré votre clé dans le carnet d'adresse sur le même site.
|
||||
Testez-le vous-même en entrant :
|
||||
http://stats.i2p/cgi-bin/jump.cgi?a=<i>quelquechose</i>.i2p
|
||||
ou http://i2host.i2p/cgi-bin/i2hostjump?<i>quelquechose</i>.i2p
|
||||
dans votre explorateur internet.
|
||||
Dès que cela fonctionne, vous pouvez en parler aux autres.
|
||||
<li>Certains personnes vérifient les nouveaux eepsites sur les listes tels que
|
||||
<a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p/status.php</a>. Vous pouvez commencer à avoir
|
||||
quelques visiteurs. Il y a beaucoup des manières d'informers les autres. Voici quelques idées :
|
||||
<ul>
|
||||
<li>Poster un message sur le <a href="http://forum.i2p/viewforum.php?f=16">Eepsite announce forum</a>
|
||||
sur <a href="http://forum.i2p/">forum.i2p</a>.
|
||||
<li>Parlez aux autres sur les canaux #i2p ou #i2p-chat sur IRC.
|
||||
<li>Mettez-le dans un post <a href="http://syndie.i2p2.de/">le nouveau Syndie</a>.
|
||||
<li>Placez-le sur <a href="http://ugha.i2p/EepsiteIndex">Ugha's Eepsite Index Wiki</a>
|
||||
</ul>
|
||||
A noter que certains sites recommandent de coller la clé de destination directement. Vous pouvez si vous voulez,
|
||||
mais si vous avez déjà réussi à poster la clé sur un service de "add key" (type stats.i2p), et attendu 24 heures pour que le carnet d'adresse
|
||||
se propage aux autres, cela ne doit pas être nécessaire. </ul>
|
||||
<h2>Plus d'assistance</h2><ul>
|
||||
<li>Si vous avez plus de questions, trouvez du soutien à ces endroits :
|
||||
<ul>
|
||||
<li>Notre canal IRC de soutien : <ul><li><a href="irc://irc.freenode.net/i2p">#i2p sur Freenode</a>
|
||||
<li>En anonymat via votre <a href="irc://127.0.0.1:6668/i2p">I2P IRC tunnel</a>.</ul>
|
||||
<li><a href="http://forum.i2p/viewforum.php?f=10">The technical problems section</a> sur
|
||||
<a href="http://forum.i2p/">forum.i2p</a>.</ul>
|
||||
</ul><div class="notify">
|
||||
<b>Note:</b> This page, the website and the console all need translating into YOUR language if it's not already been done or in progress. Please consider helping the project grow by <a href="http://www.i2p2.i2p/getinvolved.html">volunteering your time</a> to translate. Contact the project via the IRC channel listed above. Thanks in advance!</div>
|
||||
<hr><div class="footnote">
|
||||
Document last edited: November 2009.</div>
|
||||
</div></div>
|
||||
</body>
|
||||
</html>
|
||||
<html>
|
||||
<head>
|
||||
<title>I2P serveur web anonyme | Bienvenue à votre eepsite</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<link rel="shortcut icon" href="favicon.ico" />
|
||||
<link rel="stylesheet" type="text/css" href="lib/eepsite.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="fairylights">
|
||||
<div class="main">
|
||||
<h1>Serveur web anonyme I2P</h1>
|
||||
<div class="langbar">
|
||||
<!-- Most of these languages listed here are yet to be translated -->
|
||||
<a href="index.html"><img src="lib/us.png" title="English" alt="English"></a>
|
||||
<a href="index_na.html"><img src="lib/cn.png" title="中文" alt="中文"></a>
|
||||
<a href="index_de.html"><img src="lib/de.png" title="Deutsch" alt="Deutsch"></a>
|
||||
<a href="index_fr.html"><img src="lib/fr.png" title="Français" alt="Français"></a>
|
||||
<a href="index_na.html"><img src="lib/nl.png" title="Nederlands" alt="Nederlands"></a>
|
||||
<a href="index_ru.html"><img src="lib/ru.png" title="Русский" alt="Русский"></a>
|
||||
<a href="index_na.html"><img src="lib/se.png" title="Svenska" alt="Svenska"></a>
|
||||
</div>
|
||||
<h2>Un mini guide pour faire un serveur web anonyme utilisant I2P</h2>
|
||||
|
||||
<p>C'est votre eepsite qui fonctionne sur votre propre serveur web anonyme I2P. Afin de le mettre en route, simplement éditer les fichiers sous ./eepsite/docroot/
|
||||
et ils seront accessibles aux autres internautes dès que vous avez suivi les instructions suivantes.
|
||||
Avec I2P, on accède aux eepsites en utilisant une 'clé', qui est réprésentée par une chaîne de caractères de base64.
|
||||
(Cette 'clé' est un analogue d'une adresse IP et elle est montrée sur l'eepsite's I2PTunnel
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">Page de configuration</a>).
|
||||
Les instructions ci dessous expliquent comment associer un nom de site tel que "monsite.i2p" à votre clé et ensuite comment lancer votre eepsite.</p>
|
||||
<p>Vous pouvez accéder votre eepsite localement via
|
||||
<a href="http://127.0.0.1:7658/">http://127.0.0.1:7658/</a>.
|
||||
</p>
|
||||
|
||||
<h2>Comment configurer et annoncer votre eepsite</h2>
|
||||
Votre eepsite ne fonctionne pas par défaut.
|
||||
Après que vous l'ayez lancé, il sera difficile à trouver pour les internautes, car ils n'ont pas le nom de votre site et votre longue clé base64.
|
||||
|
||||
Vous pourriez simplement distribuer cette très longue clé manuellement. Mais, heureusement il y un carnet d'adresse I2P
|
||||
et plusieurs manières faciles de faire connaitre votre eepsite. Voici les instructions détaillées :
|
||||
<ul>
|
||||
<li>Choissisez un nom pour votre eepsite (<i>quelquechose</i>.i2p). Tout en minuscule.
|
||||
D'abord, vérifiez dans le carnet d'adresse de votre router
|
||||
<a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=router&filter=none">ici</a>,
|
||||
ou dans le fichier i2p/hosts.txt pour voir si le nom a déjà été pris.
|
||||
Entrez le nouveau nom de votre eepsite sur le
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel page de configuration</a>
|
||||
où c'est marqué "Website name". Cela remplacera le nom défaut "mysite.i2p".
|
||||
En outre, cochez "Auto Start". Votre eepsite démarrera automatiquement chaque fois que vous lancez votre router I2P.
|
||||
Soyez certain de cliquer sur "Save".
|
||||
<li>Cliquez sur le bouton marqué "start"
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">main i2ptunnel page de configuration</a> pour lancer votre eepsite.
|
||||
Maintenant vous devriez voir "eepsite" indiqué sous "Local Destinations" sur le côté gauche de votre
|
||||
<a href="http://127.0.0.1:7657/index.jsp">I2P Router Console</a>.
|
||||
Votre eepsite fonctionne.
|
||||
<li>Surlignez la clé de "Local destination" en entier sur le
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel page de configuration</a>
|
||||
et copiez-la pour la coller plus tard.
|
||||
Soyez certain de copier la clé entière - elle a plus de 500 octets et elle se termine avec "AAAA".
|
||||
<li>Entrez le nom et coller la clé de destination dans votre
|
||||
<a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=master">master address book</a>.
|
||||
Cliquez sur "Add" pour ajouter la destination à votre carnet d'adresse.
|
||||
<li>Dans votre explorateur internet, entrez le nom de votre eepsite (<i>quelquechose</i>.i2p) et vous devriez vous retrouver sur cette page.
|
||||
Avec un peu de chance - si vous êtes arrivé ici, c'est que ça a marché !
|
||||
<li>Avant de parler à tout le monde de votre nouvel eepsite, vous devriez ajouter du contenu.
|
||||
Allez à i2p/eepsite/docroot et remplacez la page index.html avec votre propre page. Les dossiers virtuels fonctionnent, donc vous pouvez héberger un sous-dossier sans explicitement ajouter des liens vers des fichiers. Si vous avez besoin d'un gabarit pour un site de base, n'hésitez pas à utiliser et à changer <a href="pagetemplate.html">cette page</a> et <a href="lib/">contenu</a>!
|
||||
</ul>
|
||||
<h2>Enregistrer votre propre .I2P domaine</h2><ul>
|
||||
<li>Maintenant il faut ajouter votre eepsite au carnet d'adresse hébergé par un site
|
||||
tel que <a href="http://stats.i2p/">stats.i2p</a>.
|
||||
C'est-à-dire, vous devez entrer
|
||||
votre nom d'eepsite et sa clé dans l'interface web d'un ou plus de ces sites.
|
||||
Voici <a href="http://stats.i2p/i2p/addkey.html">le formulaire pour l'entrée d'une clé à stats.i2p.</a>
|
||||
Encore, votre clé est la "Local destination", disponible en entier ici
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">eepsite i2ptunnel page de configuration.</a>
|
||||
Prenez toute la clé, souvenez qu'elle se termine en "AAAA".
|
||||
N'oubliez pas de cliquer sur "add a key".
|
||||
Vérifiez que le site montre que la clé a été correctement ajoutée.
|
||||
Comme beaucoup de routers se mettent à jour regulièrement à partir de ces sites, en quelques heures d'autres internautes seront capables de trouver et d'accéder à votre eepsite simplement en tapant <i>quelquechose</i>.i2p dans leurs explorateurs internet.
|
||||
</ul><h2>Comment ajouter des abonnements au carnet d'adresse.</h2><ul>
|
||||
<li>En parlant de mises à jour de carnet d'adresse, il serait prudent d'ajouter quelques carnets d'adresses de plus
|
||||
à votre <a href="http://127.0.0.1:7657/susidns/subscriptions.jsp">subscription list.</a> Allez sur votre page d'abonnements et ajoutez quelques listes directement ci dessous afin que votre liste d'hôtes soit mise à jour automatiquement :<ul>
|
||||
<li><a href="http://tino.i2p/hosts.txt">http://tino.i2p/hosts.txt</a>
|
||||
<li><a href="http://stats.i2p/cgi-bin/newhosts.txt">http://stats.i2p/cgi-bin/newhosts.txt</a>
|
||||
<li><a href="http://i2host.i2p/cgi-bin/i2hostetag">http://i2host.i2p/cgi-bin/i2hostetag</a></ul>
|
||||
<li>Si vous êtes pressé et que vous ne pouvez pas attendre quelques heures, vous pouvez demander aux autres d'utiliser un "jump" (service d'aide de ré-direction d'adresse).
|
||||
Cela marchera en quelques minutes après que vous ayez entré votre clé dans le carnet d'adresse sur le même site.
|
||||
Testez-le vous-même en entrant :
|
||||
http://stats.i2p/cgi-bin/jump.cgi?a=<i>quelquechose</i>.i2p
|
||||
ou http://i2host.i2p/cgi-bin/i2hostjump?<i>quelquechose</i>.i2p
|
||||
dans votre explorateur internet.
|
||||
Dès que cela fonctionne, vous pouvez en parler aux autres.
|
||||
<li>Certains personnes vérifient les nouveaux eepsites sur les listes tels que
|
||||
<a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p/status.php</a>. Vous pouvez commencer à avoir
|
||||
quelques visiteurs. Il y a beaucoup des manières d'informers les autres. Voici quelques idées :
|
||||
<ul>
|
||||
<li>Poster un message sur le <a href="http://forum.i2p/viewforum.php?f=16">Eepsite announce forum</a>
|
||||
sur <a href="http://forum.i2p/">forum.i2p</a>.
|
||||
<li>Parlez aux autres sur les canaux #i2p ou #i2p-chat sur IRC.
|
||||
<li>Mettez-le dans un post <a href="http://syndie.i2p2.de/">le nouveau Syndie</a>.
|
||||
<li>Placez-le sur <a href="http://ugha.i2p/EepsiteIndex">Ugha's Eepsite Index Wiki</a>
|
||||
</ul>
|
||||
A noter que certains sites recommandent de coller la clé de destination directement. Vous pouvez si vous voulez,
|
||||
mais si vous avez déjà réussi à poster la clé sur un service de "add key" (type stats.i2p), et attendu 24 heures pour que le carnet d'adresse
|
||||
se propage aux autres, cela ne doit pas être nécessaire. </ul>
|
||||
<h2>Plus d'assistance</h2><ul>
|
||||
<li>Si vous avez plus de questions, trouvez du soutien à ces endroits :
|
||||
<ul>
|
||||
<li>Notre canal IRC de soutien : <ul><li><a href="irc://irc.freenode.net/i2p">#i2p sur Freenode</a>
|
||||
<li>En anonymat via votre <a href="irc://127.0.0.1:6668/i2p">I2P IRC tunnel</a>.</ul>
|
||||
<li><a href="http://forum.i2p/viewforum.php?f=10">The technical problems section</a> sur
|
||||
<a href="http://forum.i2p/">forum.i2p</a>.</ul>
|
||||
</ul><div class="notify">
|
||||
<b>Note:</b> This page, the website and the console all need translating into YOUR language if it's not already been done or in progress. Please consider helping the project grow by <a href="http://www.i2p2.i2p/getinvolved.html">volunteering your time</a> to translate. Contact the project via the IRC channel listed above. Thanks in advance!</div>
|
||||
<hr><div class="footnote">
|
||||
Document last edited: November 2009.</div>
|
||||
</div></div>
|
||||
</body>
|
||||
</html>
|
||||
40
installer/resources/eepsite.help/help/index_na.html
Normal file
@@ -0,0 +1,40 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>I2P Anonymous Webserver | I'm a non-translated welcome page</title>
|
||||
<link rel="shortcut icon" href="favicon.ico" />
|
||||
<link rel="stylesheet" type="text/css" href="lib/eepsite.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="fairylights">
|
||||
<div class="main">
|
||||
<h1>I2P Anonymous Webserver</h1>
|
||||
<div class="langbar">
|
||||
<!-- Most of these languages listed here are yet to be translated -->
|
||||
<a href="index.html"><img src="lib/us.png" title="English" alt="English"></a>
|
||||
<a href="index_na.html"><img src="lib/cn.png" title="中文" alt="中文"></a>
|
||||
<a href="index_de.html"><img src="lib/de.png" title="Deutsch" alt="Deutsch"></a>
|
||||
<a href="index_fr.html"><img src="lib/fr.png" title="Français" alt="Français"></a>
|
||||
<a href="index_na.html"><img src="lib/nl.png" title="Nederlands" alt="Nederlands"></a>
|
||||
<a href="index_ru.html"><img src="lib/ru.png" title="Русский" alt="Русский"></a>
|
||||
<a href="index_na.html"><img src="lib/se.png" title="Svenska" alt="Svenska"></a>
|
||||
|
||||
</div>
|
||||
<h2>Help translate this page into your language!</h2>
|
||||
<div class="notify">
|
||||
If you're viewing this page and not an actual translation of the welcome page into your
|
||||
native tongue, that's because it hasn't been done yet! I2P
|
||||
needs your help! Please consider helping I2P become more accessible
|
||||
to non-English speakers by volunteering some time translating the following :
|
||||
<ul>
|
||||
<li><a href="http://www.i2p2.i2p">the website</a>
|
||||
<li><a href="http://127.0.0.1:7657">the console</a>
|
||||
<li><a href="index.html">the eepsite quick guide</a></ul>
|
||||
|
||||
Please visit our IRC support channel via <a href="irc://irc.freenode.net/i2p">#i2p on Freenode</a> or
|
||||
anonymously via your resident <a href="irc://127.0.0.1:6668/i2p">I2P IRC tunnel</a> for more information.</div>
|
||||
<hr><div class="footnote">
|
||||
Document last edited: November 2009.</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
102
installer/resources/eepsite.help/help/index_ru.html
Normal file
@@ -0,0 +1,102 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Анонимный I2P веб-сервер | Добро пожаловать на ваш I2P-сайт</title>
|
||||
<link rel="shortcut icon" href="favicon.ico" />
|
||||
<link rel="stylesheet" type="text/css" href="lib/eepsite.css" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
</head>
|
||||
<body>
|
||||
<div class="fairylights">
|
||||
<div class="main">
|
||||
<h1>Анонимный I2P веб-сервер</h1>
|
||||
<div class="langbar">
|
||||
<!-- Most of these languages listed here are yet to be translated -->
|
||||
<a href="index.html"><img src="lib/us.png" title="English" alt="English"></a>
|
||||
<a href="index_na.html"><img src="lib/cn.png" title="中文" alt="中文"></a>
|
||||
<a href="index_de.html"><img src="lib/de.png" title="Deutsch" alt="Deutsch"></a>
|
||||
<a href="index_fr.html"><img src="lib/fr.png" title="Français" alt="Français"></a>
|
||||
<a href="index_na.html"><img src="lib/nl.png" title="Nederlands" alt="Nederlands"></a>
|
||||
<a href="index_ru.html"><img src="lib/ru.png" title="Русский" alt="Русский"></a>
|
||||
<a href="index_se.html"><img src="lib/se.png" title="Svenska" alt="Svenska"></a>
|
||||
|
||||
</div>
|
||||
<h2>Краткое руководство по анонимному хостингу сайтов в I2P</h2>
|
||||
|
||||
<p>
|
||||
Эта страничка - Ваш I2P-сайт, Ваш собственный анонимный I2P-вебсервер. Отредактируйте файлы в директории ~/.i2p/eepsite/docroot/ (Linux) или %APPDATA%\I2P\eepsite\docroot\ (Windows), выполните шаги из инструкции ниже и Ваш сайт увидят другие пользователи.
|
||||
|
||||
В I2P сайты адресуются по их «ключу», который выглядит как очень длинная Base64 строка. Этот «ключ» частично выполняет функцию IP-адреса и указан на
|
||||
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">странице настроек туннеля i2p-сайта</a>. Далее мы расскажем Вам, как присвоить своему ключу имя типа «mysite.i2p» и запустить Ваш i2p-сайт.
|
||||
</p>
|
||||
|
||||
<p>Попробуйте открыть локально свой i2p-сайт через <a href="http://127.0.0.1:7658/">http://127.0.0.1:7658/</a>.
|
||||
</p>
|
||||
|
||||
<h2>Как запустить и анонсировать свой I2P-сайт</h2>
|
||||
|
||||
Ваш i2p-сайт по умолчанию остановлен. Хотя Вы его и запустили, другим людям трудно его найти, ведь у сайта пока нет имени, а Ваш очень-длинный-Base64-ключ никому не известен. Вы, конечно, можете просто выдавать людям этот очень-длинный-Base64-ключ, но, к счастью, в I2P есть механизм адресных книг и несколько простых способов для сообщения людям о своем сайте. Далее подробные инструкции.
|
||||
|
||||
<ul>
|
||||
<li>Выберите имя для своего сайта (<i>something</i>.i2p). Используйте только символы в нижнем регистре. Загляните в <a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=router&filter=none">адресную книгу</a> Вашего маршрутизатора или в файл i2p/hosts.txt для проверки, возможно такое имя уже кто-то занял. Введите новое имя Вашего сайта на <a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">странице настроек туннеля для i2p-сайта</a> в поле «Имя веб-сайта». Это заменит имя сайта по умолчанию «mysite.i2p». Поставьте галочку «Автозапуск». Ваш сайт будет доступен извне всегда, когда запущен Ваш маршрутизатор. Не забудьте нажать «Сохранить».
|
||||
|
||||
|
||||
<li>Кликните <a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">в менеджере туннелей</a> на кнопке запуска вашего сайта. Вы должны увидеть запись «i2p-сайт» в списке «Локальные туннели» в левой части <a href="http://127.0.0.1:7657/index.jsp">консоли маршрутизатора</a>. С этого момента Ваш сайт запущен.
|
||||
|
||||
<li>Выделите всю строчку «Локальный адрес назначения» на <a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">странице настроек туннеля вашего I2P-сайта</a> и скопируйте её. Убедитесь, что Вы скопировали строку целиком – ее длина больше 500 символов, строка должна заканчиваться на «AAAA».
|
||||
|
||||
<li>Введите имя и вставьте ключ в Вашу <a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=master">основную адресную книгу</a>. Нажмите «Добавить» для добавления адреса в адресную книгу.
|
||||
|
||||
<li>Введите в браузере имя Вашего сайта (<i>something</i>.i2p), Вы должны снова попасть на эту страницу. Надеемся, что это сработало.
|
||||
|
||||
<li>Перед тем как Вы сообщите миру о своем новом сайте, имеет смысл добавить на него какой-нибудь контент. Зайдите в директорию ~/.i2p/eepsite/docroot/ (Linux) или %APPDATA%\I2P\eepsite\docroot\ (Windows) и замените заготовку страницы index.html на Вашу информацию. Есть поддержка виртуальных папок, так что можно выкладывать файлы из поддиректорий. Если Вам нужна заготовка простого сайта, не стесняйтесь взять за основу <a href="pagetemplate.html">эту страницу</a> и <a href="lib/">эти элементы оформления</a>!
|
||||
</ul>
|
||||
|
||||
<h2>Зарегистрируйте свой .I2P домен</h2><ul>
|
||||
|
||||
<li>Теперь пора добавить Ваш сайт в адресные книги, расположенные на сайтах-каталогах, например <a href="http://stats.i2p/">stats.i2p</a>. Введите имя и ключ своего сайта через веб-интерфейс нескольких таких сайтов-каталогов. Вот <a href="http://stats.i2p/i2p/addkey.html">форма для ввода ключа на сайте stats.i2p</a>. Напоминаем, ключ — это вся строка «Локальный адрес назначения» на <a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=3">странице настройки туннеля «I2P webserver»</a>. Проверьте, что Вы скопировали его целиком, включая «AAAA» на конце. Не забудьте нажать «Add a key». Дождитесь пока система отрапортует, что ключ был добавлен. Поскольку многие маршрутизаторы периодически обновляют свои адресные книги, обращаясь к этим сайтам-каталогам, уже через несколько часов кто-нибудь откроет Ваш сайт, просто набрав <i>something</i>.i2p в адресной строке браузера.
|
||||
</ul>
|
||||
|
||||
<h2>Добавление подписок в адресную книгу</h2><ul>
|
||||
|
||||
<li>Кстати об обновлениях, самое время добавить несколько адресных книг в Ваш <a href="http://127.0.0.1:7657/susidns/subscriptions.jsp">список подписки</a>. Зайдите на страницу настройки подписок и добавьте эти ссылки для получения автоматически обновляемого списка сайтов:
|
||||
|
||||
<ul>
|
||||
<li><a href="http://tino.i2p/hosts.txt">http://tino.i2p/hosts.txt</a>
|
||||
<li><a href="http://stats.i2p/cgi-bin/newhosts.txt">http://stats.i2p/cgi-bin/newhosts.txt</a>
|
||||
<li><a href="http://i2host.i2p/cgi-bin/i2hostetag">http://i2host.i2p/cgi-bin/i2hostetag</a>
|
||||
</ul>
|
||||
|
||||
<li> Если Вы не можете ждать несколько часов, попробуйте воспользоваться jump-сервисом. Это возможно сразу (через несколько минут) после добавления ключа в адресную книгу на любой сайт-каталог (см. список в первом пункте). Проверьте сами — откройте в браузере http://stats.i2p/cgi-bin/jump.cgi?a=<i>something</i>.i2p или http://i2host.i2p/cgi-bin/i2hostjump?<i>something</i>.i2p. # Если это сработало для Вас, Ваши гости тоже смогут воспользоваться этим способом.
|
||||
|
||||
|
||||
<li>Некоторые люди следят за обновлениями в списках i2p-сайтов, например <a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p/status.php</a>, так что скоро у Вас появятся первые посетители. Всех остальных Вы можете оповестить другими способами. Например:
|
||||
<ul>
|
||||
<li>Напишите сообщение на форуме в разделе <a href="http://forum.i2p/viewforum.php?f=16">Eepsite announce</a>
|
||||
<li>Расскажите о сайте в IRC на каналах #i2p или #i2p-chat
|
||||
<li>Упомяните о сайте в постинге <a href="http://syndie.i2p2.de/">в Syndie</a>.
|
||||
<li>Добавьте сайт в wiki <a href="http://ugha.i2p/EepsiteIndex">Ugha's Eepsite Index</a>
|
||||
</ul>
|
||||
|
||||
Некоторые сайты рекомендуют вставлять в анонс Ваш очень-длинный-Base64-ключ. Вы, конечно, можете, если хотите. На самом деле, это не нужно, раз Вы уже добавили свой ключ на jump-сервисе, проверили его работу и подождали 24 часа, чтобы обновление адресной книги успело разойтись по всему I2P-миру.
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>А что потом? </h2>
|
||||
<ul>
|
||||
<li>Если у вас остались вопросы, добро пожаловать на:
|
||||
|
||||
<ul>
|
||||
<li>Наш IRC-канал поддержки:
|
||||
<ul>
|
||||
<li><a href="irc://irc.freenode.net/i2p">#i2p в сети Freenode</a>
|
||||
<li>Анонимно доступен через <a href="irc://127.0.0.1:6668/i2p">встроенный IRC-туннель</a> Вашего I2P-маршрутизатора.
|
||||
</ul>
|
||||
<li>Раздел форума <a href="http://forum.i2p/viewforum.php?f=10">Technical Problems</a>.
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<hr><div class="footnote">
|
||||
На основе шаблонов: zzz, 07.10.2009 и dr|z3d, Ноябрь 2009.</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
BIN
installer/resources/eepsite.help/help/lib/bg.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
installer/resources/eepsite.help/help/lib/brown.png
Normal file
|
After Width: | Height: | Size: 237 B |
BIN
installer/resources/eepsite.help/help/lib/cn.png
Normal file
|
After Width: | Height: | Size: 472 B |
BIN
installer/resources/eepsite.help/help/lib/de.png
Normal file
|
After Width: | Height: | Size: 545 B |
48
installer/resources/eepsite.help/help/lib/eepsite.css
Normal file
@@ -0,0 +1,48 @@
|
||||
body { background-color:#000000; color: #ffffe0; margin-left: 8%; margin-right: 8%; margin-top: 6%; margin-bottom: 6%; text-align: justify; background-image: url(bg.png); }
|
||||
|
||||
body,h1,h2,h3,h4,p,ul,ol,li,dl,dt,dd,div,td,th,address,blockquote {font-family: "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; }
|
||||
|
||||
|
||||
h1 { font-size:23pt; margin-bottom:20pt; border-bottom: 1px solid #ffbb77; letter-spacing: 0.05em; text-shadow: 0px 0px 24px rgba(255, 96, 48, 0.9); background-image: url(itoopie.png); background-repeat: no-repeat; background-position: right top; line-height; 200% !important; padding-bottom: 10px; word-wrap: no-wrap;}
|
||||
h1.ph1 { font-size:20pt; margin-bottom:18pt; margin-right: -5px; margin-leftL -5px;}
|
||||
h2 { font-size:11.5pt; margin-bottom:15px; padding: 5px 10px; border: 1px solid #ffbb77; -moz-border-radius: 5px;background-color:#110500; font-variant: small-caps; text-transform: capitalize; letter-spacing: 0.07em; background-image: url(h2bg.png); background-repeat: no-repeat; background-position: right center;}
|
||||
h3 { font-size:16pt; }
|
||||
h4 { font-size:14pt; }
|
||||
h5 { font-size:13pt; }
|
||||
p,ul,ol,li,dl,dt,dd,div,td,th,address,blockquote { font-size:9.5pt; }
|
||||
|
||||
a.footref { font-size: 70%; }
|
||||
a:link { color:#ffc266; text-decoration:none; }
|
||||
a:visited { color:#ffd699; text-decoration:none; }
|
||||
a:active { color:#ff9900; text-decoration:none; }
|
||||
a:hover { color:#ffbb00; text-decoration:underline; }
|
||||
a.nonexistent { color: #ffffe0; text-decoration:underline; }
|
||||
a.nonexistent:visited { color: #ffffe0; text-decoration:none; }
|
||||
a { font-weight: bold; font-size: 10pt; }
|
||||
|
||||
dl.contents { margin-top: 0; }
|
||||
dt.contents { margin-bottom: 0; }
|
||||
em { font-style: italic; }
|
||||
li,dt { margin: 4px 0; padding-right: 25px; list-style: square;}
|
||||
p.footnote { font-size: 90%; }
|
||||
p.verse { white-space: pre; margin-left: 8.7%; }
|
||||
pre { font-family: monospace; white-space: pre; margin-left: 8.7%; }
|
||||
strong { font-weight: bold; }
|
||||
table { width:100%; }png
|
||||
td { border:0px solid #000; vertical-align:top; overflow:hidden; }
|
||||
ul { list-style-type: disc; margin: 10px 0;}
|
||||
/*
|
||||
body { border: 1px solid #ffbb77; -moz-border-radius: 5px; padding: 25px; font-size: 9.5pt; -moz-box-shadow: inset 0px 0px 1px 0px #ffbb77; background-image: url(bg.png); background-repeat: no-repeat; background-position: center center;line-height: 135%; background-attachment: fixed;}
|
||||
*/
|
||||
hr { color: #fb7; background: #fb7; height: 1px; border: 0px solid #fb7; margin: 5px 0; }
|
||||
div.langbar { margin-top: -25px; text-align: right; font-size: 8.5pt; }
|
||||
div.langbar a { font-size: 8.5pt; outline: none;}
|
||||
div.langbar img { border: 0; padding: 4px 2px 0 2px; opacity: 0.7; }
|
||||
div.langbar img:hover { opacity: 1; }
|
||||
div.langbar img:last-child { padding-right: 0; }
|
||||
div.main { border: 2px solid #220800; -moz-border-radius: 5px; padding: 5px 25px 20px 25px; font-size: 9.5pt; -moz-box-shadow: inset 0px 0px 1px 0px #220800; background-color: #220800; background-image: url(brown.png);}
|
||||
div.footnote { font-size: 7.5pt; font-style: italic; text-align: right; }
|
||||
div.notify { padding: 10px; border: 1px solid #994400; background-color: #440A00; -moz-border-radius: 5px; margin: 15px 0 15px 0;}
|
||||
div.fairylights { border: 1px solid #ffbb77; -moz-border-radius: 5px; padding: 1px; -moz-box-shadow: inset 0px 0px 1px 0px #ffbb77; background-color: #220800;}
|
||||
|
||||
|
||||
BIN
installer/resources/eepsite.help/help/lib/es.png
Normal file
|
After Width: | Height: | Size: 469 B |
BIN
installer/resources/eepsite.help/help/lib/fr.png
Normal file
|
After Width: | Height: | Size: 545 B |
BIN
installer/resources/eepsite.help/help/lib/h2bg.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
installer/resources/eepsite.help/help/lib/itoopie.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
installer/resources/eepsite.help/help/lib/nl.png
Normal file
|
After Width: | Height: | Size: 453 B |
BIN
installer/resources/eepsite.help/help/lib/ru.png
Normal file
|
After Width: | Height: | Size: 420 B |
BIN
installer/resources/eepsite.help/help/lib/se.png
Normal file
|
After Width: | Height: | Size: 542 B |
BIN
installer/resources/eepsite.help/help/lib/us.png
Normal file
|
After Width: | Height: | Size: 609 B |
32
installer/resources/eepsite.help/help/pagetemplate.html
Normal file
@@ -0,0 +1,32 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>MY OWN EEPSITE</title>
|
||||
<link rel="shortcut icon" href="favicon.ico" />
|
||||
<link rel="stylesheet" type="text/css" href="lib/eepsite.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="fairylights">
|
||||
<div class="main">
|
||||
<h1>MY EEPSITE</h1>
|
||||
<div class="langbar">
|
||||
<!-- Most of these languages listed here are yet to be translated -->
|
||||
<a href="index.html"><img src="lib/us.png" title="English" alt="English"></a>
|
||||
<a href="index_na.html"><img src="lib/cn.png" title="中文" alt="中文"></a>
|
||||
<a href="index_de.html"><img src="lib/de.png" title="Deutsch" alt="Deutsch"></a>
|
||||
<a href="index_fr.html"><img src="lib/fr.png" title="Français" alt="Français"></a>
|
||||
<a href="index_na.html"><img src="lib/nl.png" title="Nederlands" alt="Nederlands"></a>
|
||||
<a href="index_ru.html"><img src="lib/ru.png" title="Русский" alt="Русский"></a>
|
||||
<a href="index_na.html"><img src="lib/se.png" title="Svenska" alt="Svenska"></a>
|
||||
|
||||
</div>
|
||||
<h2>Words and pictures and stuff</h2>
|
||||
Your cool stuff here...
|
||||
<div class="notify">
|
||||
Bring more attention to something of interest here!
|
||||
</div>
|
||||
<hr><div class="footnote">
|
||||
Document last edited: November 2009.</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
7
installer/resources/eepsite.help/index.html
Normal file
@@ -0,0 +1,7 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="1;url=/help/" />
|
||||
<title>I2P Anonymous Webserver</title>
|
||||
</head>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,4 +1,4 @@
|
||||
#! /bin/sh
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Skeleton sh script suitable for starting and stopping
|
||||
|
||||