propagate from branch 'i2p.i2p' (head 79d0ad4538a0adc4ced6ac26cb725abe3d5ccee3)

to branch 'i2p.i2p.zzz.test2' (head 73032545b42f6f9caffffca08d0a8b97f5cf7e3a)
This commit is contained in:
zzz
2014-07-22 14:38:28 +00:00
28 changed files with 496 additions and 228 deletions

View File

@ -1202,22 +1202,23 @@ class PeerCoordinator implements PeerListener
boolean skipped = false;
for(Piece piece : wantedPieces) {
if (piece.getId() == savedPiece) {
if (peer.isCompleted() && piece.getPeerCount() > 1) {
if (peer.isCompleted() && piece.getPeerCount() > 1 &&
wantedPieces.size() > 2*END_GAME_THRESHOLD) {
// Try to preserve rarest-first
// by not requesting a partial piece that non-seeders also have
// by not requesting a partial piece that at least two non-seeders also have
// from a seeder
boolean nonSeeds = false;
int nonSeeds = 0;
for (Peer pr : peers) {
PeerState state = pr.state;
if (state == null) continue;
BitField bf = state.bitfield;
if (bf == null) continue;
if (bf.get(savedPiece) && !pr.isCompleted()) {
nonSeeds = true;
if (++nonSeeds > 1)
break;
}
}
if (nonSeeds) {
if (nonSeeds > 1) {
skipped = true;
break;
}

View File

@ -671,9 +671,9 @@ public class PluginStarter implements Runnable {
for(ClientAppConfig app : apps) {
// If the client is a running ClientApp that we want to stop,
// bypass all the logic below.
if (action.equals("stop")) {
ClientApp ca = ctx.routerAppManager().getClientApp(app.className, LoadClientAppsJob.parseArgs(app.args));
if (ca != null && ca.getState() == ClientAppState.RUNNING) {
if (action.equals("stop")) {
try {
ca.shutdown(LoadClientAppsJob.parseArgs(app.stopargs));
} catch (Throwable t) {

View File

@ -391,7 +391,11 @@ class SAMv3Handler extends SAMv1Handler
} else if (domain.equals("NAMING")) {
canContinue = execNamingMessage(opcode, props);
} else if (domain.equals("DATAGRAM")) {
// TODO not yet overridden, ID is ignored, most recent DATAGRAM session is used
canContinue = execDatagramMessage(opcode, props);
} else if (domain.equals("RAW")) {
// TODO not yet overridden, ID is ignored, most recent RAW session is used
canContinue = execRawMessage(opcode, props);
} else {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Unrecognized message domain: \""
@ -694,10 +698,10 @@ class SAMv3Handler extends SAMv1Handler
else
{
if (_log.shouldLog(Log.DEBUG))
_log.debug ( "Unrecognized RAW message opcode: \""
_log.debug ( "Unrecognized STREAM message opcode: \""
+ opcode + "\"" );
try {
notifyStreamResult(true, "I2P_ERROR", "Unrecognized RAW message opcode: "+opcode );
notifyStreamResult(true, "I2P_ERROR", "Unrecognized STREAM message opcode: "+opcode );
} catch (IOException e) {}
return false;
}
@ -716,9 +720,9 @@ class SAMv3Handler extends SAMv1Handler
String dest = props.getProperty("DESTINATION");
if (dest == null) {
notifyStreamResult(verbose, "I2P_ERROR", "Destination not specified in RAW SEND message");
notifyStreamResult(verbose, "I2P_ERROR", "Destination not specified in STREAM CONNECT message");
if (_log.shouldLog(Log.DEBUG))
_log.debug("Destination not specified in RAW SEND message");
_log.debug("Destination not specified in STREAM CONNECT message");
return false;
}
props.remove("DESTINATION");

View File

@ -44,6 +44,7 @@ class PacketQueue implements SendMessageStatusListener {
private static final int FINAL_TAGS_TO_SEND = 4;
private static final int FINAL_TAG_THRESHOLD = 2;
private static final long REMOVE_EXPIRED_TIME = 67*1000;
private static final boolean ENABLE_STATUS_LISTEN = false;
public PacketQueue(I2PAppContext context, I2PSession session, ConnectionManager mgr) {
_context = context;
@ -134,7 +135,7 @@ class PacketQueue implements SendMessageStatusListener {
if (con != null) {
if (con.isInbound())
options.setSendLeaseSet(false);
else
else if (ENABLE_STATUS_LISTEN)
listenForStatus = true;
}
options.setTagsToSend(INITIAL_TAGS_TO_SEND);

View File

@ -614,7 +614,7 @@ public class WebMail extends HttpServlet
}
catch (Exception e1) {
showBody = false;
reason += _("Part ({0}) not shown, because of {1}", ident, e1.getClass().getName()) + br;
reason += _("Part ({0}) not shown, because of {1}", ident, e1.toString()) + br;
}
}
if( html )

View File

@ -0,0 +1,45 @@
package net.i2p.client;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import net.i2p.I2PAppContext;
/**
* Bridge to Unix domain socket (or similar).
* <p/>
* This is a stub that does nothing.
* This class is replaced in the Android build.
*
* @author str4d
* @since 0.9.14
*/
public class DomainSocketFactory {
public static String I2CP_SOCKET_ADDRESS = "net.i2p.client.i2cp";
/**
* @throws UnsupportedOperationException always
*/
public DomainSocketFactory(I2PAppContext context) {
throw new UnsupportedOperationException();
}
/**
* Override in Android.
* @throws IOException
* @throws UnsupportedOperationException always
*/
public Socket createSocket(String name) throws IOException {
throw new UnsupportedOperationException();
}
/**
* Override in Android.
* @throws IOException
* @throws UnsupportedOperationException always
*/
public ServerSocket createServerSocket(String name) throws IOException {
throw new UnsupportedOperationException();
}
}

View File

@ -52,6 +52,7 @@ import net.i2p.util.LHMCache;
import net.i2p.util.Log;
import net.i2p.util.OrderedProperties;
import net.i2p.util.SimpleTimer2;
import net.i2p.util.SystemVersion;
import net.i2p.util.VersionComparator;
/**
@ -157,6 +158,12 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
protected static final String PROP_USER = "i2cp.username";
protected static final String PROP_PW = "i2cp.password";
/**
* Use Unix domain socket (or similar) to connect to a router
* @since 0.9.14
*/
protected static final String PROP_DOMAIN_SOCKET = "i2cp.domainSocket";
private static final long VERIFY_USAGE_TIME = 60*1000;
private static final long MAX_SEND_WAIT = 10*1000;
@ -279,6 +286,10 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
if (_context.isRouterContext())
// just for logging
return "[internal connection]";
else if (SystemVersion.isAndroid() &&
Boolean.parseBoolean(_options.getProperty(PROP_DOMAIN_SOCKET)))
// just for logging
return "[Domain socket connection]";
return _options.getProperty(I2PClient.PROP_TCP_HOST, "127.0.0.1");
}
@ -287,7 +298,9 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
* @since 0.9.7 was in loadConfig()
*/
private int getPort() {
if (_context.isRouterContext())
if (_context.isRouterContext() ||
(SystemVersion.isAndroid() &&
Boolean.parseBoolean(_options.getProperty(PROP_DOMAIN_SOCKET))))
// just for logging
return 0;
String portNum = _options.getProperty(I2PClient.PROP_TCP_PORT, LISTEN_PORT + "");
@ -447,7 +460,7 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
try {
// protect w/ closeSocket()
synchronized(_stateLock) {
// If we are in the router JVM, connect using the interal queue
// If we are in the router JVM, connect using the internal queue
if (_context.isRouterContext()) {
// _socket and _writer remain null
InternalClientManager mgr = _context.internalClientManager();
@ -457,7 +470,11 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
_queue = mgr.connect();
_reader = new QueuedI2CPMessageReader(_queue, this);
} else {
if (Boolean.parseBoolean(_options.getProperty(PROP_ENABLE_SSL))) {
if (SystemVersion.isAndroid() &&
Boolean.parseBoolean(_options.getProperty(PROP_DOMAIN_SOCKET))) {
final DomainSocketFactory fact = new DomainSocketFactory(_context);
_socket = fact.createSocket(DomainSocketFactory.I2CP_SOCKET_ADDRESS);
} else if (Boolean.parseBoolean(_options.getProperty(PROP_ENABLE_SSL))) {
try {
I2PSSLSocketFactory fact = new I2PSSLSocketFactory(_context, false, "certificates/i2cp");
_socket = fact.createSocket(_hostname, _portNum);

View File

@ -19,6 +19,7 @@ import net.i2p.data.DataFormatException;
import net.i2p.data.Destination;
import net.i2p.data.Hash;
import net.i2p.data.Signature;
import net.i2p.data.SigningPublicKey;
import net.i2p.util.Log;
/**
@ -34,16 +35,11 @@ public final class I2PDatagramDissector {
private final DSAEngine dsaEng = DSAEngine.getInstance();
private final SHA256Generator hashGen = SHA256Generator.getInstance();
private Hash rxHash;
private byte[] rxHash;
private Signature rxSign;
private Destination rxDest;
private final byte[] rxPayload = new byte[DGRAM_BUFSIZE];
private int rxPayloadLen;
private boolean valid;
/**
@ -56,6 +52,17 @@ public final class I2PDatagramDissector {
* Load an I2P repliable datagram into the dissector.
* Does NOT verify the signature.
*
* Format is:
* <ol>
* <li>Destination (387+ bytes)
* <li>Signature (40+ bytes, type and length as implied by signing key type in the Destination)
* <li>Payload
* </ol>
*
* For DSA_SHA1 Destinations, the signature is of the SHA-256 Hash of the payload.
*
* As of 0.9.14, for non-DSA_SHA1 Destinations, the signature is of the payload itself.
*
* @param dgram non-null I2P repliable datagram to be loaded
*
* @throws DataFormatException If there's an error in the datagram format
@ -79,14 +86,21 @@ public final class I2PDatagramDissector {
rxPayloadLen = dgStream.read(rxPayload);
// calculate the hash of the payload
this.rxHash = hashGen.calculateHash(rxPayload, 0, rxPayloadLen);
assert this.hashGen.calculateHash(this.extractPayload()).equals(this.rxHash);
if (type == SigType.DSA_SHA1) {
if (rxHash == null)
rxHash = new byte[Hash.HASH_LENGTH];
// non-caching
hashGen.calculateHash(rxPayload, 0, rxPayloadLen, rxHash, 0);
//assert this.hashGen.calculateHash(this.extractPayload()).equals(this.rxHash);
} else {
rxHash = null;
}
} catch (IOException e) {
Log log = I2PAppContext.getGlobalContext().logManager().getLog(I2PDatagramDissector.class);
log.error("Caught IOException - INCONSISTENT STATE!", e);
} catch(AssertionError e) {
Log log = I2PAppContext.getGlobalContext().logManager().getLog(I2PDatagramDissector.class);
log.error("Assertion failed!", e);
//} catch(AssertionError e) {
// Log log = I2PAppContext.getGlobalContext().logManager().getLog(I2PDatagramDissector.class);
// log.error("Assertion failed!", e);
}
//_log.debug("Datagram payload size: " + rxPayloadLen + "; content:\n"
@ -125,14 +139,16 @@ public final class I2PDatagramDissector {
* Extract the hash of the payload of an I2P repliable datagram (previously
* loaded with the loadI2PDatagram() method), verifying the datagram
* signature.
*
* As of 0.9.14, for signature types other than DSA_SHA1, this returns null.
*
* @return The hash of the payload of the I2P repliable datagram
* @throws I2PInvalidDatagramException if the signature verification fails
*/
public Hash getHash() throws I2PInvalidDatagramException {
// make sure it has a valid signature
this.verifySignature();
return this.extractHash();
return extractHash();
}
/**
@ -178,10 +194,18 @@ public final class I2PDatagramDissector {
* Extract the hash of the payload of an I2P repliable datagram (previously
* loaded with the loadI2PDatagram() method), without verifying the datagram
* signature.
*
* As of 0.9.14, for signature types other than DSA_SHA1, this returns null.
*
* @return The hash of the payload of the I2P repliable datagram
*/
public Hash extractHash() {
return this.rxHash;
if (rxHash == null)
return null;
// make a copy as we will reuse rxHash
byte[] hash = new byte[Hash.HASH_LENGTH];
System.arraycopy(rxHash, 0, hash, 0, Hash.HASH_LENGTH);
return new Hash(hash);
}
/**
@ -194,12 +218,21 @@ public final class I2PDatagramDissector {
if(this.valid)
return;
if (rxSign == null || rxSign.getData() == null || rxDest == null || rxDest.getSigningPublicKey() == null)
if (rxSign == null || rxSign.getData() == null || rxDest == null)
throw new I2PInvalidDatagramException("Datagram not yet read");
// now validate
if (!this.dsaEng.verifySignature(rxSign, rxHash.getData(), rxDest.getSigningPublicKey()))
SigningPublicKey spk = rxDest.getSigningPublicKey();
SigType type = spk.getType();
if (type == null)
throw new I2PInvalidDatagramException("unsupported sig type");
if (type == SigType.DSA_SHA1) {
if (!this.dsaEng.verifySignature(rxSign, rxHash, spk))
throw new I2PInvalidDatagramException("Incorrect I2P repliable datagram signature");
} else {
if (!this.dsaEng.verifySignature(rxSign, rxPayload, 0, rxPayloadLen, spk))
throw new I2PInvalidDatagramException("Incorrect I2P repliable datagram signature");
}
// set validated
this.valid = true;

View File

@ -16,8 +16,12 @@ import net.i2p.client.I2PSession;
import net.i2p.crypto.DSAEngine;
import net.i2p.crypto.SHA256Generator;
import net.i2p.data.DataFormatException;
import net.i2p.data.Hash;
import net.i2p.data.Signature;
import net.i2p.data.SigningPrivateKey;
import net.i2p.crypto.SigType;
import net.i2p.util.Log;
import net.i2p.util.SimpleByteCache;
/**
* Class for creating I2P repliable datagrams. Note that objects of this class
@ -44,9 +48,9 @@ public final class I2PDatagramMaker {
* @param session I2PSession used to send I2PDatagrams through
*/
public I2PDatagramMaker(I2PSession session) {
this();
this.setI2PDatagramMaker(session);
}
/**
* Construct a new I2PDatagramMaker that is null.
* Use setI2PDatagramMaker to set the parameters.
@ -59,22 +63,53 @@ public final class I2PDatagramMaker {
sxPrivKey = session.getPrivateKey();
sxDestBytes = session.getMyDestination().toByteArray();
}
/**
* Make a repliable I2P datagram containing the specified payload.
*
* Format is:
* <ol>
* <li>Destination (387+ bytes)
* <li>Signature (40+ bytes, type and length as implied by signing key type in the Destination)
* <li>Payload
* </ol>
*
* Maximum datagram size is 32768, so maximum payload size is 32341, or less for
* non-DSA_SHA1 destinations. Practical maximum is a few KB less due to
* ElGamal/AES overhead. 10 KB or less is recommended for best results.
*
* For DSA_SHA1 Destinations, the signature is of the SHA-256 Hash of the payload.
*
* As of 0.9.14, for non-DSA_SHA1 Destinations, the signature is of the payload itself.
*
* @param payload non-null Bytes to be contained in the I2P datagram.
* @return null on error
* @throws IllegalArgumentException if payload is too big
* @throws IllegalStateException if Destination signature type unsupported
*/
public byte[] makeI2PDatagram(byte[] payload) {
sxDGram.reset();
try {
sxDGram.write(sxDestBytes);
SigType type = sxPrivKey.getType();
if (type == null)
throw new IllegalStateException("Unsupported sig type");
dsaEng.sign(hashGen.calculateHash(payload).toByteArray(),
sxPrivKey).writeBytes(sxDGram);
Signature sig;
if (type == SigType.DSA_SHA1) {
byte[] hash = SimpleByteCache.acquire(Hash.HASH_LENGTH);
// non-caching
hashGen.calculateHash(payload, 0, payload.length, hash, 0);
sig = dsaEng.sign(hash, sxPrivKey);
SimpleByteCache.release(hash);
} else {
sig = dsaEng.sign(payload, sxPrivKey);
}
sig.writeBytes(sxDGram);
sxDGram.write(payload);
if (sxDGram.size() > DGRAM_BUFSIZE)
throw new IllegalArgumentException("Too big");
return sxDGram.toByteArray();
} catch (IOException e) {
Log log = I2PAppContext.getGlobalContext().logManager().getLog(I2PDatagramMaker.class);

View File

@ -10,6 +10,9 @@ in turn, use the {@link net.i2p.client.datagram.I2PDatagramMaker} to build a
message that can be parsed. </p>
<p>The datagram format implemented here includes
the sender's {@link net.i2p.data.Destination}, the payload, and a hash of the
payload (signed by the sender's {@link net.i2p.data.SigningPrivateKey}).</p>
the sender's {@link net.i2p.data.Destination}, the payload, and a signature
(signed by the sender's {@link net.i2p.data.SigningPrivateKey}).
For DSA_SHA1 destinations, the signature is of the SHA-256 Hash of the payload.
For other destination types, the signature is of the payload itself.
</p>
</body></html>

View File

@ -18,6 +18,7 @@ import net.i2p.I2PAppContext;
import net.i2p.data.Base64;
import net.i2p.util.Log;
import net.i2p.util.SecureFileOutputStream;
import net.i2p.util.SystemVersion;
/**
* Java X.509 certificate utilities, consolidated from various places.
@ -65,11 +66,18 @@ public class CertUtil {
}
/**
* Get a value out of the subject distinguished name
* Get a value out of the subject distinguished name.
*
* Warning - unsupported in Android (no javax.naming), returns null.
*
* @param type e.g. "CN"
* @return value or null if not found
*/
public static String getSubjectValue(X509Certificate cert, String type) {
if (SystemVersion.isAndroid()) {
error("Don't call this in Android", new UnsupportedOperationException("I did it"));
return null;
}
type = type.toUpperCase(Locale.US);
X500Principal p = cert.getSubjectX500Principal();
String subj = p.getName();

View File

@ -14,9 +14,11 @@ import java.security.PublicKey;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import net.i2p.util.SystemVersion;
/**
* Dumb storage in a directory for testing.
* No sanitization of filenames, unsafe.
* Simple storage of each cert in a separate file in a directory.
* Limited sanitization of filenames.
*
* @since 0.9.9
*/
@ -30,7 +32,9 @@ class DirKeyRing implements KeyRing {
/**
* Cert must be in the file (escaped keyName).crt,
* and have a CN == keyName
* and have a CN == keyName.
*
* CN check unsupported on Android.
*/
public PublicKey getKey(String keyName, String scope, SigType type)
throws GeneralSecurityException, IOException {
@ -49,14 +53,21 @@ class DirKeyRing implements KeyRing {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate)cf.generateCertificate(fis);
cert.checkValidity();
if (!SystemVersion.isAndroid()) {
// getSubjectValue() unsupported on Android.
// Any cert problems will be caught in non-Android testing.
String cn = CertUtil.getSubjectValue(cert, "CN");
if (!keyName.equals(cn))
throw new GeneralSecurityException("CN mismatch: " + cn);
}
return cert.getPublicKey();
} finally {
try { if (fis != null) fis.close(); } catch (IOException foo) {}
}
}
/**
* Unimplemented, unused.
*/
public void setKey(String keyName, String scope, PublicKey key) {}
}

View File

@ -29,7 +29,7 @@ public class SessionKeyManager {
/**
* A dummy SessionKeyManager for testing or for passing to
* ElGamalAESEngine.encrypt()
* ElGamalAESEngine.decrypt()
*
* @since 0.9.14
*/
@ -37,7 +37,7 @@ public class SessionKeyManager {
/**
* A dummy SessionKeyManager for testing or for passing to
* ElGamalAESEngine.encrypt()
* ElGamalAESEngine.decrypt()
*
* @param context unused
* @since public since 0.9.14; protected before that

View File

@ -1,3 +1,18 @@
2014-07-19 zzz
* i2psnark: Don't prefer leeches during end game, to
prevent slowdowns or stalls
* SAM: Add support for RAW on the bridge socket in v3 (ticket #1334)
* Streaming; Disable fail-fast for now.
* SusiMail: Better error message on decode fail
2014-07-15 str4d
* I2CP: Stubs for I2CP connections over Unix domain sockets
2014-07-11 zzz
* Datagrams:
- Redefine the repliable datagram signature for non-DSA_SHA1 sig types;
was the sig of the SHA-256 of the payload, now the sig of the payload itself.
2014-07-03 zzz
* Base64:
- Catch numerous decoding errors that were previously misdecoded (ticket #1318)

View File

@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFgzCCA2ugAwIBAgIEB52rdjANBgkqhkiG9w0BAQ0FADByMQswCQYDVQQGEwJY
WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEbMBkGA1UEAwwSbWF0dEBkcm9sbGV0
dGUuY29tMB4XDTE0MDcyMTEzMjYxM1oXDTI0MDcyMDEzMjYxM1owcjELMAkGA1UE
BhMCWFgxCzAJBgNVBAgTAlhYMQswCQYDVQQHEwJYWDEeMBwGA1UEChMVSTJQIEFu
b255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxGzAZBgNVBAMMEm1hdHRAZHJv
bGxldHRlLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL5M9wKT
csNLg4EA3fW7LleTQdrm3stPnoUvFmsNZHGgsKt1Nc1qCNis3kr2QEY+4Z398U7r
7xGEQFa7D/9SPHf6n1uVXc9DIcmwBtEB0FPB1XPFp2h00ZXIv24yiLN3GQT1woAM
yEbBWsUgn8K/iMBeA5dU2vPwAbGO/0ibD62frgGdYqU2EeiJ/U6vBmKxvC+q2noL
gnyfQJEJANXgf+Cw/gBaS6yn5ZsYcenLNenID2TQKQ6Q/NxYrDYRdWdId29iwldt
dmNSmASv8C7g9d/isZkpmtYNkE4J4m0W9wKziOoyvLSMo8ec67QmCKaPaYKTHTjx
aUuja02+mnlV4DSdZo6nPkSdokRY0+5e6q7+dIPefu8ealGEAE5oedEfl5iM5Fnz
phTR+ePodBK3sB+bMi1NMppbWugpFpdqs1hg2KNKSSG8C4/eTqf2nnlDiVvvFANc
imt6tk0pZcKqveRiDSgI8mTzTcrNgVClsCLoInY5Vab7onZjY9bGijPQ2i1P6+qu
5G6LiLFW7xFq2BcX1DnTztcJ8Yu9NYHhR21J6u7Dr8YHntes3mnth1F0BX3FVA1s
9SaE9/pNhdqap9owpEhNoE1Ke3LorVLL8jyQsqgRHx8VdhWdi9Ao0mzzeI9HYX0j
nZ7uXK5DqGG74K6eWoS9jZSDJLj3IBkIr3B/AgMBAAGjITAfMB0GA1UdDgQWBBTK
YjH+9Jv82Zqi86r95/1sXUCOnDANBgkqhkiG9w0BAQ0FAAOCAgEAsDyl3dS/5pR1
iDN0zE70HN1Sjv55c5um6N39rgz8JSObbAMihhpjRXPR6yl0PdfVcswdCuEaaykp
ppPNY5ObqZIdqI92XOaOhSA3AkZwZffbwaoXFYiawq1aQG1HP7oxXzWwbnbPOxgz
6ThNP5DJan53Mk8TAhxoJkEJxVlMwIiC+QEgqDNYrP8oNOR2J1EXgzsHheEKObyP
xTwRYFqZU/7BQlFeB0LG1LIy9zXAHlb/XIor10w6ChPDW7DiDwGq3zDJw1d8eiUn
RoPRmFjTqn+3rGaEkk+vUFHoWo7cLCEIC3+P9wlY4Kel+ldXMmuJ+BZ1glFXeO3L
VO85n7iVIyBbwo7RLtNaBvrRQIEG3ld5UOKklLlWwhrX/FXksEhdFvmuF9sbiYNr
cg81sbwZlX7Gi7VicXkykFFXwRRr3UblDtfeevouxk4nMVzcDsmzGeAZKQBvcxHa
Pzc70YwnVRqTc87c0bEwPoxK1Vb26+DILyDjKb/AkTw/rwj6vcJZP2ad+hpiz5Ka
nlbY2cI3JJb0TQiDiOIk+xFqC5oHUTSEmfqA6sA5o/RqdwDpkfpgI5mCwhYzDSLD
jfS+263ylhanl7oz0sM+GtH63owVbYJAFT2EozT9siTIErvJESL4Z80yUQG63d/7
fss8T6gOo19esb/KEMZGZE4pAApakWM=
-----END CERTIFICATE-----

View File

@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFezCCA2OgAwIBAgIEPSs1SjANBgkqhkiG9w0BAQ0FADBuMQswCQYDVQQGEwJY
WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEXMBUGA1UEAwwOc2luZHVAbWFpbC5p
MnAwHhcNMTQwNzIxMDAwNjUwWhcNMjQwNzIwMDAwNjUwWjBuMQswCQYDVQQGEwJY
WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEXMBUGA1UEAwwOc2luZHVAbWFpbC5p
MnAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnYMNclgj1gIJfot6f
65jbcXpcqf9hhL/uYiU4+uxVevWyJvNHpMzhPWNN4l3HihJJsINsPs/MsZ83Guva
GW5S/93I617kyjs/ZVpEtfABGewho0m9VCBV2/N1mJpHvvR+9OR+YVuWlTB/8sTG
2smdRj/dkKvewN5PSTQH350yT18NR/DmZUU1Iwa7vrNw8ol3rP3qx9UGpFN3JE7V
Q9cA1nktMiFUm76eOPOoln04WDqW2rvArXzvhSApvt0JsLBrZDzM3cx2Rc2UdjIC
h+Ha+G4CLjszfZfQAFJYPred38Gg6wuXiza/wCBSPiB92i94hIQF/OSeukaMiqwG
dRAcBT84/U9bddqHlIICw14PkNHOGUyJGjGKWQl/2bLX43ghWkUJmsTXS3iVcOTc
gb/7MoCRBdL0q2GyEJXuAoKXD9VqD3g+EdcBTQxS9lhZ0iTR7423pg6FP43VMEUC
HUi/BOX1tCY6iRzD1Su6ISIx7klH/sAWWa+SybLFXWtZJxHXXJICiBHJWRbWgtlu
5V+at66yg/LNpyfW3Am08gDV0kiWUBN2Ct4TX9PAQmNDisNgi2AzdZHIfX6tRpU8
UnNcnZGOh4+HXQwJtI0y83C8TsXJUFYfGFWqXN69sMEmgtX8/w+YUqjtb2GcX1HN
6z9u9lH40JCFHTA/clPqOSQ+MQIDAQABoyEwHzAdBgNVHQ4EFgQU4R6x7ArVpSVs
b8VTBXmodXzyraEwDQYJKoZIhvcNAQENBQADggIBAJEHLSDBRU2x6EalmN2W952p
MEO5lGD+ZfUVK0c44t1O53naffwZx9QmDmrC4TjeQrLOpAXLQ8GJHAGeZVmYRgkf
OioKde5uuqVcxqNxArO8VyYGwsuNVPCaBV+SyIO+EmWogidSIrOP2WsRRS2NBhLV
2dp3TvMeod9bPwRl00guvv9iqL0UVSpQSlfGkAQTVpyADOaQHOzeoCpmtPOfB6OK
syB/Z/6HElKoUbvhynaASLgmo3wM93PVJQ2Ho294bQHtDl2qcOksJQvWfCgi7Zrt
KuHaM/a2kItzI6JmyNFXgsKQSDJ4UvoppppgD7K48zOtSipGuZAADC5w5HdVvIGJ
1Czva8kTcmC6AMc+4tACGqYZEAEokkeXn+pIIqKVj2eQukT/0dLGGHbKmxp3Z0f2
pIH2Draq8JPdacr9P/xqEWUuViaOuC5OBjY8Fg3fmVCpwefIuk+DBhbJjEugB0Cu
brJpqNznoYahkbyAXIA8T+QJYMhoGWmaIcaPWK6K3nArvaxzwJbb9Egyivhyp9Rr
r2QMEZ+cPO8p1mEhKpL/wGqAzYyla8SJ06PzLc1lQeGiClu1nbZj5AgkZ1DLa8SD
iO7+e6rS0q1bzc7smE5JzZRiOVqKij/ReKa2uebLLI4wgAhz5ymaD1HfZY+3dV9T
WX89Xn2UyQf5kHifiDKL
-----END CERTIFICATE-----

View File

@ -357,3 +357,4 @@ anoncoin.i2p=vA4OWvaW6ChyRACDUSq0SiWBB88SBd-3sBAPphzAsUGfQeZMvcmCLM1KuZ9kRLPZnzA
jisko.i2p=YSXAtZN7atC3kAoMLFr6vRcEYf3oUpBonrePtfzt6ydtXIqt501dUqwDXVzKP2Hkmg2Zg9HCdMy8a1JCUZLS-T9sPgYn44FEnWg4j2QFFRafpSTLrdDXMK1CpyQhZUYJr4mzg3MEY37cBGSlodFlAgm-J2sgcog7SEpoZrLJ3wNZU8aisQZlUjvn83McMEnLH-AmcTyO3feLaTX7BJE6L6OB67MBieUH0-uNeolHIne1GzcHBuC-0F~wW6pd1eDFDdoQV81VMWAPnkCPzdIW-rmF0C7nvSqzgBpeoywBmIsZwzRKpWO029vknOcioj5HCkvUT~iZeYqSyoLXcdJjM3c5ZPz0AnPss6wuhhSQTqcIqvF0r42ET6-XerwuWJVlDilKjDmzFZ6sj7ZvNiOs2vwQqyNM00geSWgWs50MEqQU1oE2~05fj9qtBw~kXVn1NqAs0~477mnvNlObTHI72USk8OBQDdEKO-OjzL6T67w5Nn3XXe-UYHXqCBvbgAjgAAAA
hiddengate.i2p=2BJrMAUHLQBc0CoRnkVpFfkx9dp74qpe3TVlLiXe-RuQGwBNztoYN7WjfmRHF5~KZ-KUEKhA3BbAFuWksGMOi7mV0hUD8Egr5ZG03-ekysSiKmVj3mfMv-GfPTdq5W-OdXK87q1Z~KV-e4Qwq6OFV8VREF81jDeMo4agdV0~388WNaQUjS-Jyh7wInh1XOaENFzsLSBPfbgZMIUEoCe5HiTaXLDTxRnDdLPgkvNfOEV9vT3rCgX2lhd8xVL48q4OObjlZ6DLdQ~O4kSIZoPX~9FWDKPB9nCVCa2zIkbDhBqN7p-r~HSPBUM2nUBB2gwuyYtpiLz3ukqEUGV20VAVZ35RqL-pWl4wAMqy2iRwFcgYnM8tvPGFmJM0lLyPlZdyRSU86QkvvVMUrZYXcylg4uP0WXPeNIP4nXOj5ZR7s9gP3AL4xW4Dh2YqPoCaWWt8J2LZugX7QSHpFVEdWZtxnppD1zDmIsbpm-UAUqdgviTIcFPyhxHaEGMUZ7Gid2FqAAAA
i2pdocs.str4d.i2p=CRayYfxrPBELUQ4tYi723g8atsyHwkR0--N8fXggNqJgHsnrKxle0ovH5qj6aqUGToay4ktJEz~opIV2lF605gdGE9rSrPONOU0v737~gzjmLpJoyW03yOhr6lGvTxTKWjgx5xRHctt11DEMlMufY4Q72~EZETE4k5E45V3YqSWGyYIzxdpzzw9zvMe9TaLZTs0ZYFgXRMIu1o5IzTkfK2FfAMNfHMcRESHHK8GcF0TkzZFnvOhtgr~Fywq5B7VMYzwq6a8ws5bPjSjQWbJqX8NR~NZl7gxSMwdlZlcICVFOo-uW9Yna2YfhzM-A5SOx60EsL26YX1VXh1zQ3Rsg2lNXbSPI4dLb9taGWxpZS914L-N3Htgih7VM-Zl1QYQGuNV-9LaEEUQKRPCeKdyG14Yry4YOVDItMFE5CHIDaoFcpD24jPE~0aHmVk~RXOIzVhmtVj~HcpBXWxT4lpIO2V3kzA-ZTvo5I0ollbP5Ep3s0Cj~EfikBhUL6zHsWVC0AAAA
mtn.i2p-projekt.i2p=I6Ha4I7rgR0JyExQnN~4sZz5CfRqdN7o-2t1i2YOExd2CxC4MHHz3nJ5KgBIqeNa0dZbugwMEYMWneXAf8nuy9RKUrjcDvGLqScuU8QCpG-e7UDR8lNregfaOwTuypBQiPh9nrc86Zc2JXyTv0eG3T5Yl1tydqs3qEz5w1vn64uRCrGLEMsnGMIZ4aXexseL6McW9ObIQ0qOIfRG9kc~3~bpD9UM4G04BXPZ1Ao5MUjGoQyxlaNCt1DrvAYcrRArzvv0QGyPjb6HpHLlK2UIoR6SumRuNYpEXCaqbXEnEicx1kB5Pyhcwm0cyaMCx-ZaUU-F1~23VurE41xNMbq4GwXtev4bVP4ycHGHjH-XYJmKrqnesIEp7InSAWfm0gdDHuy9377nSIyAhGLLFlWKtzrZPiKm57SN4~BZSQIF6CI4JutGa0x9EaO8hvzFgaYKgwS~a7-YuZNfx4VHEF2J34DrsJo4qetdPTWTKX1o-ztMP6f7DpWjp4JTKb36YstvAAAA

View File

@ -57,13 +57,13 @@ tunnel.1.option.outbound.priority=15
tunnel.1.startOnLoad=true
# I2P's mtn server
tunnel.2.name=mtn.i2p2.i2p
tunnel.2.name=mtn.i2p-projekt.i2p
tunnel.2.description=I2P Monotone Server
tunnel.2.type=client
tunnel.2.sharedClient=true
tunnel.2.interface=127.0.0.1
tunnel.2.listenPort=8998
tunnel.2.targetDestination=mtn.i2p2.i2p:4691
tunnel.2.targetDestination=mtn.i2p-projekt.i2p:4691
tunnel.2.i2cpHost=127.0.0.1
tunnel.2.i2cpPort=7654
tunnel.2.option.inbound.nickname=shared clients
@ -107,7 +107,6 @@ tunnel.4.option.outbound.nickname=shared clients
tunnel.4.option.i2cp.reduceIdleTime=900000
tunnel.4.option.i2cp.reduceOnIdle=true
tunnel.4.option.i2cp.reduceQuantity=1
tunnel.4.option.i2p.streaming.connectDelay=1000
tunnel.4.option.inbound.length=3
tunnel.4.option.inbound.lengthVariance=0
tunnel.4.option.outbound.length=3

View File

@ -14,7 +14,7 @@ _("Do not use SOCKS for this.")
_("More information can be found on the {0}I2P browser proxy setup page{1}.", "<a href=\"https://geti2p.net/about/browser-config\">", "</a>")
</p>
<p>
_("Once you have a \"shared clients\" destination listed on the left, please {0}check out{1} our {2}FAQ{3}.", "<b>", "</b>", "<a href=\"http://i2p-project.i2p/faq\">", "</a>")
_("Once you have a \"shared clients\" destination listed on the left, please {0}check out{1} our {2}FAQ{3}.", "<b>", "</b>", "<a href=\"http://i2p-projekt.i2p/faq\">", "</a>")
</p>
<p>
_("Point your IRC client to {0}localhost:6668{1} and say hi to us on {2}#i2p{3}.", "<b>", "</b>", "<a href=\"irc://127.0.0.1:6668/i2p\">", "</a>")

View File

@ -1,109 +1,96 @@
<div lang="fr">
<ul class="links"><li class="tidylist"><b>Démarrage&hellip;</b><br>Si vous venez juste de lancer I2P, le nombre de
<i>pairs actifs</i> indiqués dans la section <i>Pairs</i> du "Panneau de surveillance" sur la gauche devrait
commencer à augmenter dans les prochaines minutes et vous verrez alors en bas du panneau une <i>destination locale</i>
intitulée <i>Clients partagés</i>, avec d'éventuels autres clients et serveurs suivant la configuration initiale d'I2P
(sinon, voir plus bas la <a href=#trouble>section dépannage</a>). Ces <i>destinations locales</i> fournissent des
connexions sur différent ports (et parfois des protocoles) au réseau I2P, pour permettre le fonctionnement de votre
client BitTorrent, de votre messagerie, du mandataire Internet et autres services. Votre
<a href="/netdb">base de données réseau</a> indique tous les pairs que connaît votre routeur. Vous pouvez surveiller
les <a href="/peers">connexions de pairs</a> en cours et voir les <a href="/tunnels">tunnels</a> existants et leur
état. D'autres informations sont disponibles sur la page d'<a href="/help">aide</a>.</li>
<ul class="links"><li class="tidylist"><b>Démarrage&hellip;</b><br>Si vous venez juste de lancer I2P, dans la partie gauche de l'écran en section <i>Pairs</i>, le nombre de <i>pairs actifs</i> indiqué devrait
commencer à augmenter dans les prochaines minutes, puis vous verrez en bas du panneau une <i>Destination locale</i> intitulée <i>Clients partagés</i>, avec éventuellement d'autres clients et serveurs selon comment I2P est configuré (sinon, voir plus bas la <a href=#trouble>section dépannage</a>). Ces <i>destinations locales</i> fournissent des connexions via différent ports (et parfois protocoles) vers le réseau I2P, permettant le fonctionnement de votre client BitTorrent, messagerie, proxy web, et autres services. Votre
<a href="/netdb">base de données réseau</a> indique tous les pairs que connaît votre routeur. Vous pouvez surveiller les <a href="/peers">connexions de pairs</a> en cours et voir les <a href="/tunnels">tunnels</a> existants et leur état. D'autres informations sont disponibles dans la <a href="/help">page d'aide</a>.</li>
<li class="tidylist"><b>Intégration au réseau</b><br>La première fois que vous lancez I2P l'intégration au réseau peut
prendre quelques minutes, le temps que votre routeur soit connu et trouve d'autres pairs qui amélioreront alors son
intégration: soyez patient. Quand I2P démarre, et en fonctionnement établi, I2P affiche un indicateur d'état, (juste au
dessus de la section <i>destinations locales</i> dans le panneau de surveillance), qui peut vous signaler l'information
<li class="tidylist"><b>Intégration au réseau</b><br>La première fois que vous lancez I2P, son intégration au réseau peut prendre quelques minutes, le temps que votre routeur soit connu et trouve d'autres pairs qui amélioreront alors son intégration : soyez patient. Quand I2P démarre, et qu'il fonctionnement normalement, I2P affiche un indicateur d'état, (juste au
dessus de la section <i>Destinations locales</i> dans le panneau de contrôle), qui peut vous signaler l'information
"Refus de tunnels"; ce comportement est normal et ne doit pas vous inquiéter! Une fois que les étoiles vertes
s'affichent en face des <i>destinations locales</i>, le monde d'I2P vous est ouvert. En voici un aperçu:
s'affichent en face des <i>Destinations locales</i>, le monde d'I2P vous est ouvert, et ci-dessous nous vous en présentons quelques unes.
</li></ul>
<h3>Les services sur I2P</h3>
<ul class="links">
<li class="tidylist"><b>Internet invisible &amp; exploration anonyme du web public</b><br>Sur I2P vous pouvez accéder
<li class="tidylist"><b>Internet invisible et exploration anonyme du web public</b><br>Sur I2P vous pouvez accéder
à des sites anonymes (les sites eep) et à d'autres services (par exemple SSH sur I2P, IRC, Jabber, etc&hellip;), et
vous pouvez aussi héberger vos propres services anonyme. Vous avez également un accès anonyme au web normal via le
serveur mandataire sortant ("outproxy") I2P intégré. Pour ceci,
<a href="https://geti2p.net/fr/about/browser-config" target="_blank">configurez votre navigateur</a> pour qu'il utilise le
vous pouvez aussi héberger vos propres services. Vous pouvez également accéder au web anonymement via le
serveur mandataire sortant ("outproxy") intégré d'I2P. Pour ceci,
<a href="https://geti2p.net/fr/about/browser-config" target="_blank">configurez votre navigateur</a> afin qu'il utilise le
mandataire <code>127.0.0.1 sur le port 4444</code>, puis promenez-vous sur les sites eep ou non cryptés normaux
(adresses <code>http://</code>. Si vous voulez désactiver ou modifier l'accès mandaté à l'Internet normal, enlevez ou modifiez l'entrée
(adresses <code>http://</code>). Si vous voulez désactiver ou modifier l'accès mandaté à l'Internet normal, enlevez ou modifiez l'entrée
<code>false.i2p</code> dans les options de <i>mandataires</i> du <i>gestionnaire de tunnels</i> pour le
<a href="/i2ptunnel/edit?tunnel=0" target="_blank">mandataire HTTP I2P</a>. Dans la section "Sites intéressants"
<a href="#eepsites">ci-dessous</a>, vous trouverez notre petite sélection de sites hébergés sur I2P.</li>
<a href="#eepsites">ci-dessous</a>, nous listons quelques uns des eepsites hébergés dans I2P.</li>
<li class="tidylist"><b>Messagerie anonyme</b><br>Le système de messagerie basé sur I2P de Postman est utilisable soit
par le <a href="/webmail">client de messagerie I2P intégré</a> dans la console du routeur (susimail), soit en
configurant n'importe quel logiciel client de messagerie compatible SMTP et POP3. Les comptes peuvent recevoir et
envoyer du courrier de/vers l'Internet normal. Créez au moins votre compte sur
<li class="tidylist"><b>Messagerie anonyme</b><br>Le système de messagerie de Postman, basé sur I2P, est utilisable soit
par le <a href="/webmail">client de messagerie I2P intégré</a> (susimail) dans la console du routeur, soit en
configurant n'importe quel logiciel client de messagerie compatible SMTP et POP3. Les comptes peuvent envoyer et
recevoir du courrier vers/depuis l'Internet normal. Pour obtenir un compte visitez
<a href="http://hq.postman.i2p/" target="_blank">hq.postman.i2p</a>. En complément,
<a href="http://i2pbote.i2p/" target="_blank">I2P-Bote</a> est le nouveau système intra-I2P décentralisé, sécurisé
(crypté de bout en bout) et équipé d'un système de relayage anonymo-pseudonymique, ainsi que d'une interface web et d'un
carnet d'adresses intégré. Développé par HungryHobo, il s'installe en tant que <a href="#plugins">greffon</a>.</li>
<a href="http://i2pbote.i2p/" target="_blank">I2P-Bote</a> est un nouveau système de messagerie intra-I2P décentralisé, sécurisé
(crypté de bout en bout), et équipé d'un système de relayage anonyme/pseudonyme, disposant d'une interface web et d'un
carnet d'adresses intégré. Il est développé par HungryHobo, il s'installe en tant que <a href="#plugins">greffon</a>.</li>
<li class="tidylist"><b>Transfert de fichiers anonyme</b><br><a href="/i2psnark/" target="_blank">I2PSnark</a> est
intégré dans le router I2P. Il permet les transferts anonymes et cryptés
<a href="https://secure.wikimedia.org/wikipedia/fr/wiki/BitTorrent_%28protocole%29" target="_blank">BitTorrent</a>.
Sponge a développé en Python un autre client bittorrent appelé <a href="http://bob.i2p/Robert.html">Robert</a>.
Il y a aussi un portage d'<a href="http://www.emule-project.net/" target="_blank">eMule/aMule</a> sur I2P:&hellip;
<a href="http://echelon.i2p/imule/">iMule</a> [Cherche développeurs!], une implémentation anonyme et sécurisée d'un
intégré dans le router I2P. Il permet de faire des transferts <a href="https://secure.wikimedia.org/wikipedia/fr/wiki/BitTorrent_%28protocole%29" target="_blank">BitTorrent</a> anonymes et cryptés.
Sponge a développé un autre client bittorrent appelé <a href="http://bob.i2p/Robert.html">Robert</a> écrit en Python.
Il existe aussi un portage d'<a href="http://www.emule-project.net/" target="_blank">eMule/aMule</a> sur I2P appelé
<a href="http://echelon.i2p/imule/">iMule</a> [Besoin de développeurs !]. Il existe aussi une implémentation anonyme et sécurisée d'un
<a href="https://secure.wikimedia.org/wikipedia/fr/wiki/Gnutella" target="_blank">réseau Gnutella</a> accessible par
<a href="http://echelon.i2p/i2phex/" target="_blank">I2Phex</a> [maintenu par Complication, mais on cherche de nouveaux
développeurs!], ainsi que d'autres utilitaires dont un hébergement de fichiers basé sur le navigateur.</li>
<li class="tidylist"><b>Claviotage anonyme (non ça n'est pas le nom de mon chat)</b><br>Lancez votre client IRC (p.e.
Chatzilla, Pidgin, XChat, etc&hellip;) et connectez-vous au <a href="irc://127.0.0.1:6668/i2p">serveur</a> sur
développeurs !], ainsi que d'autres utilitaires dont l'hébergement de fichiers basé sur navigateur.</li>
<li class="tidylist"><b>Tchat anonyme</b><br>Lancez votre logiciel client IRC (p.e.
Chatzilla, Pidgin, XChat, etc&hellip;) et connectez-vous au <a href="irc://127.0.0.1:6668/i2p-help">serveur</a> sur
<code>127.0.0.1 port 6668</code>. Vous n'avez pas besoin de configurer un proxy dans votre client IRC: I2P vous fournit
un tunnel IRC local (configuré dans votre client IRC en tant qu'hôte serveur IRC distant). Votre tunnel IRC local
un tunnel IRC local (configuré dans votre client IRC en tant que serveur IRC ou hôte distant). Votre tunnel IRC local
sur <code>localhost:6668</code> vous emmènera sur un des deux serveurs hébergés sur I2P par Postman and Badger, mais
ni vous ni eux ne sauront où se trouve l'autre, et ni ta maman ni ton gouvernement ne sera capable d'intercepter ta
conversation!&hellip; (sauf,&hellip; heu&hellip; regarde quand même dans ton dos!&hellip;ET dans le faux plafond ET dis
à ton correspondant d'en faire autant&hellip; ET coulez vos PC dans du béton). Une fois là, /join
<code>#i2p-chat</code>, <code>#i2p</code>, <code>#i2p-chat</code> ou <code>#i2p-dev</code>
ne sont que quelques unes des possibilités pour mettre la tête dehors, même si ça va pas améliorer le bronzage de ta
couenne d'endive.&lt;/délire&gt; Il y a aussi une
<a href="http://echelon.i2p/qti2pmessenger/">messagerie instantanée</a> à la sauce I2P pour le claviotage anonyme
(tiens, le rev'là) non surveillable et non censurable, ainsi que d'autres serveurs IRC, Jabber, website-based chat,
and more. Et bien sûr vous avez l'entière liberté de faire tourner vos propres serveurs sur I2P, dans la version qui
vous émoustille les papilles, et si vous êtes un développeur, d'écrire vos propres
ni vous ni eux ne sauront où se trouve l'autre, et ni ta maman ni ton FAI ni ton gouvernement ne seront capables d'intercepter la
conversation !. Une fois là-bas, /join
<code>#i2p-help</code>, <code>#i2p-chat</code>, <code>#i2p</code>, <code>#i2p-chat</code> ou <code>#i2p-dev</code>
sonts quelques-uns des canaux que vous pourrez joindre. Il y a aussi une
<a href="http://echelon.i2p/qti2pmessenger/">messagerie instantanée</a> basée-I2P, permettant de faire du tchat anonyme
non surveillable et non censurable, ainsi que d'autres serveurs IRC alternatifs, serveurs Jabber, tchat basé-site-web,
et davantage. Et bien sûr vous avez l'entière liberté de faire tourner vos propres serveurs sur I2P, quelques soient les versions qui
vous plaisent, et si vous êtes un développeur, d'écrire vos propres
<a href="http://i2p-projekt.i2p/fr/get-involved/develop/applications" target="_blank">applications I2P</a> (les protocoles
<a href="https://secure.wikimedia.org/wikipedia/fr/wiki/User_Datagram_Protocol" target="_blank">UDP</a> et
<a href="https://secure.wikimedia.org/wikipedia/fr/wiki/Transmission_Control_Protocol" target="_blank">TCP</a>
sont tous deux <a href="http://i2p-projekt.i2p/fr/docs/how/tech-intro#op.transport" target="_blank">compatibles</a>), et
<a href="http://i2p-projekt.i2p/fr/docs/api/streaming" target="_blank">les flux en temps réel</a> sont aussi au menu.
<a href="http://i2p-projekt.i2p/fr/docs/api/streaming" target="_blank">les flux en temps réel</a> sont aussi possibles.
Nous fournissons aussi un accès complet à l'<a href="http://http://docs.i2p-projekt.de/javadoc/" target="_blank">API Java</a>.</li>
<li class="tidylist"><b>Forums &amp; Blogs</b><br>Si vous cherchez à faire votre propre blog ou forum, vous pourriez
être intéressé par <a href="http://syndie-project.i2p/" target="_blank">Syndie</a>, une plateforme décentralisée de
forum et blog pour I2P [Nids de développeurs! (prononcez à l'anglaise)].
Bien entendu, tous les logiciels de blog, forum et
cms fonctionnent sur I2P, bien qu'il vous soit conseillé de faire très attention à la sécurité quand vous les
configurez et de tenir tous les logiciels associés (p.e. Php, MySql, Python, Apache) bien à jour et verrouillés!
Vous trouverez aussi un petit nombre de forums I2P dans diverses langues: voir <a href="#eepsites">plus bas</a>
être intéressé par <a href="http://syndie.i2p2.de/" target="_blank">Syndie</a>, qui est une plateforme décentralisée de
forums et blogs pour I2P [Besoin de développeurs !].
Bien entendu, tous les logiciels habituels de blog, forum et
CMS fonctionnent sur I2P, bien qu'il vous soit conseillé de faire très attention à la sécurité quand vous les
configurez, et tenir tous les logiciels associés (p.e. Php, MySql, Python, Apache) bien à jour et verrouillés !
Aussi, vous trouverez dans I2P quelques forums communautaires dans diverses langues : voir <a href="#eepsites">plus bas</a>
d'autres suggestions.</li>
<li class="tidylist"><a name="plugins"></a><b>Greffons pour I2P</b><br>Étendez l'usage et la pore d'I2P en
installant des greffons&hellip; blog, chat, partage de fichiers et autres sont déjà écrits ou portés, et n'attendent
autre chose que vous les <a href="http://plugins.i2p/plugins/" target="_blank">installiez</a>!
Consultez la carte (et les secrets du chef) sur <a href="http://plugins.i2p/" target="_blank">plugins.i2p</a>.
Si vous êtes <a href="http://plugins.i2p/developers/" target="_blank">développeur</a>, vous disposez d'un
environnement d'écriture de greffons indépendant de tout langage dans la
<a href="http://i2p-projekt.i2p/fr/docs/plugins" target="_blank">documentation</a>; les greffons I2P peuvent être codés dans
<li class="tidylist"><a name="plugins"></a><b>Greffons pour I2P</b><br>Étendez l'utilité d'I2P en
installant des greffons&hellip; blog, tchat, partage de fichiers et autres greffons sont déjà écrits ou portés, et n'attendent
que votre <a href="http://plugins.i2p/plugins/" target="_blank">installation</a> !
Consultez la liste sur <a href="http://plugins.i2p/" target="_blank">plugins.i2p</a>.
Si vous êtes <a href="http://plugins.i2p/developers/" target="_blank">développeur</a>, vous pourrez disposer d'un
environnement d'écriture de greffons indépendant de tout langage, avec
<a href="http://i2p-projekt.i2p/fr/docs/plugins" target="_blank">documentation</a>; les greffons d'I2P peuvent être programmés dans
n'importe quel langage.</li>
</ul>
<h3>Hébergement crypté anonyme sur I2P</h3>
<h3>Hébergement web anonyme crypté sur I2P</h3>
<ul class="links">
<li class="tidylist"><b>Prêt à servir!</b><br>I2P arrive avec un serveur intégré, prêt à servir votre propre site web
anonyme (eepsite) sur le réseau I2P: une instance <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> qui
<li class="tidylist"><b>Prêt à servir !</b><br>I2P est fourni avec un serveur web intégré, prêt à héberger votre propre site web
anonyme (eepsite) sur le réseau I2P : c'est une instance <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> qui
écoute sur <a href="http://127.0.0.1:7658/" target="_blank">http://127.0.0.1:7658/</a>. Pour héberger votre propre
contenu, placez tout bêtement vos fichiers dans le répertoire <code>eepsite/docroot/</code> (ou déposez n'importe quel
contenu, déposez tout simplement vos fichiers dans le répertoire <code>eepsite/docroot/</code> (ou déposez n'importe quel
fichier JSP/Servlet standard .war dans <code>eepsite/webapps</code>, ou des scripts CGI standards dans
<code>eepsite/cgi-bin</code>) et ils s'afficheront. Vous gardez tout loisir de choisir le serveur web qui vous convient
pour fonctionner sur I2P et remplacer le serveur intégré, ou exécuter celui-ci sur un autre tunnel.</li>
<code>eepsite/cgi-bin</code>) et ils s'afficheront. Vous gardez l'entière liberté de remplacer le logiciel serveur intégré afin de choisir un logiciel serveur web qui vous convient, ou encore d'exécuter celui-ci sur un autre tunnel.</li>
<li class="tidylist"><b>Démarrez votre tunnel</b><br>
Après le démarrage de votre <a href="/i2ptunnel/" target="_blank">Tunnel serveurWeb I2P</a>, votre eepsite sera
visible (mais pas encore découvrable) par les I2P'nautes. Les instructions détaillées de démarrage de votre eepsite,
d'enregistrement d'un domaine .i2p et de promotion de votre site sont accessibles via votre propre serveur à
Après le démarrage de votre <a href="/i2ptunnel/" target="_blank">tunnel serveur web I2P</a>, votre eepsite sera
visible (mais pas encore découvrable) par les autres utilisateurs d'I2P. Les instructions détaillées de démarrage de votre eepsite,
d'enregistrement d'un domaine .i2p, et de promotion de votre site, sont accessibles via votre propre serveur web I2P à
l'adresse <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul>
<a name="eepsites"></a>
@ -111,75 +98,69 @@ l'adresse <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1
<ul class="links">
<li class="tidylist"><b>Le site officiel de l'Invisible Internet Project (I2P)</b><br>
<a href="http://i2p-projekt.i2p/" target="_blank">i2p-projekt.i2p</a> et son miroir
<a href="http://i2p-projekt.i2p/" target="_blank">i2p-projekt.i2p</a> sont les adresses de connexions sécurisées et
anonymes des sites classiques <a href="https://geti2p.net/" target="_blank">www.i2p2.de</a> et
<a href="http://geti2p.net/" target="_blank">geti2p.net</a>. Si vous êtes curieux du fonctionnement d'I2P et de la
façon d'y contribuer, vous venez de trouver la porte d'entrée.</li>
<li class="tidylist"><b>Les fora de la communauté</b><br>
<a href="http://forum.i2p/" target="_blank">forum.i2p</a>: le forum sur lequel les développeurs et les
utilisateurs aiment discuter de problèmes et d'idées relatifs à I2P et aux sujets apparentés, et le
<a href="http://zzz.i2p/" target="_blank">forum des développeurs de zzz</a> également ouvert aux utilisateurs.</li>
<a href="http://i2p-projekt.i2p/" target="_blank">i2p-projekt.i2p</a> : connexions anonymes et sécurisées à <a href="https://geti2p.net/" target="_blank">geti2p.net</a>. Si vous êtes curieux du fonctionnement d'I2P et de la
façon d'y contribuer, ceci est la première porte d'entrée.</li>
<li class="tidylist"><b>Forums de la communauté I2P</b><br>
<a href="http://forum.i2p/" target="_blank">forum.i2p</a> : connexion anoyme et sécurisée au forum communautaire dans lequel sont discutés les problèmes et idées concernant I2P, et sujets apparentés. Il y a aussi le <a href="http://zzz.i2p/" target="_blank">forum développeurs de zzz</a> concernant les discussions relatives à I2P.</li>
<li class="tidylist"><b>Pastebin anonyme I2P</b><br>
<a href="http://pastethis.i2p/" target="_blank">pastethis.i2p</a>: service de collage sécurisé et anonyme pour le
partage de texte et de code au format textuel sur I2P.</li>
<li class="tidylist"><b>Les ressources i2P d'Echelon</b>
<br><a href="http://echelon.i2p/" target="_blank">echelon.i2p</a>: dépôt de logiciels I2P (I2PFox, iMule,
I2P-Messenger&hellip;) avec leurs code sources (quand c'est permis), informations sur I2P, dont le
<a href="http://echelon.i2p/I2Pguide/index.html" target="_blank">guide du débutant</a> et pour les plus téméraires,
les pré-versions d'I2P à essayer.</li>
<a href="http://pastethis.i2p/" target="_blank">pastethis.i2p</a> : service de collage sécurisé et anonyme permettant le
partage de texte et de code au format textuel via I2P.</li>
<li class="tidylist"><b>Les ressources I2P d'Echelon</b>
<br><a href="http://echelon.i2p/" target="_blank">echelon.i2p</a> : dépôt de logiciels I2P avec leurs code sources (quand cela est permis), informations concernant I2P, dont le
<a href="http://echelon.i2p/I2Pguide/index.html" target="_blank">guide du débutant</a>, et pour les plus téméraires
des pré-versions d'I2P à essayer.</li>
<li class="tidylist"><b>Le Wiki d'Ugha</b><br><a href="http://ugha.i2p/" target="_blank">ugha.i2p</a> : un wiki
ouvert et anonyme sur lequel chacun peut modifier toute sorte d'informations sur I2P, l'aide pour les débutants,
des liens supplémentaires dans le réseau, etc&hellip;</li>
ouvert et anonyme dans lequel chacun peut modifier toutes sortes d'informations concernant I2P, aide pour les débutants,
liens supplémentaires dans le réseau, et plus.</li>
<li class="tidylist"><b>The Planet (sur I2P)</b><br><a href="http://planet.i2p/" target="_blank">planet.i2p</a> :
un site agrégateur RSS qui collecte les nouvelles et évènements concernant I2P et les publie toutes regroupée en un
seul endroit. Un bon aperçu de la communauté au travail!</li>
<li class="tidylist"><b>Moteur de recherches eepsites</b><br>
<a href="http://eepsites.i2p/" target="_blank">eepsites.i2p</a>: moteur de recherches sur les contenus I2P hébergé
un site web agrégateur RSS qui collecte les nouvelles et évènements concernant I2P et les publie toutes regroupée en un
seul endroit. C'est un bon site pour voir la communauté au travail !</li>
<li class="tidylist"><b>Moteur de recherches d'eepsites</b><br>
<a href="http://eepsites.i2p/" target="_blank">eepsites.i2p</a> : moteur de recherche d'eepsites hébergé
anonymement.</li>
<li class="tidylist"><b>Météo du réseau I2P</b><br>
<a href="http://stats.i2p/cgi-bin/dashboard.cgi" target="_blank">stats.i2p</a>: vérifiez divers aspects des
performances du réseau I2P avec ce site superviseur maintenu par zzz.</li>
<li class="tidylist"><b>Découvrez I2P</b><br>Il y a plein d'autres eepsites: suivez simplement les liens que vous
<li class="tidylist"><b>Découvrez I2P</b><br>Il y a beaucoup d'autres eepsites : suivez simplement les liens que vous
rencontrez, marquez-les en favoris, et retournez-y souvent !<br></li>
</ul>
<h2><a name="trouble"></a>Résolution de problèmes &amp; assistance supplémentaire</h2>
<h2><a name="trouble"></a>Résolution de problèmes et assistance supplémentaire</h2>
<ul class="links">
<li class="tidylist"><b>Soyez patient !</b><br>I2P peut être long à s'intégrer au réseau la première fois que vous le
lancez car il s'amorce en découvrant des pairs supplémentaires. Plus il tourne longtemps, mieux il fonctionnera, donc
essayez de le laisser marcher le plus longtemps que vous pouvez, 24h/24 7j/7 si possible! Si après 30mn le nombre
lancez car il s'amorce dans le réseau et prend connaissance de pairs supplémentaires. Plus il tournera longtemps, mieux il fonctionnera, donc
essayez de le laisser actif le plus longtemps que vous pouvez, 24h/24 7j/7 si possible ! Si après 30 minutes le nombre
<i>Actifs: [connectés/récents]</i> montre moins de 10 pairs, ou que le nombre de pairs <i>bien intégrés</i> est
inférieur à 5, voici ce que vous pouvez faire pour trouver l'origine du problème :
</li>
<li class="tidylist"><b>Vérifiez votre configuration &amp; allocation de bande passante</b><br>I2P fonctionne au mieux
quand vous reflétez correctement la vitesse de votre connexion Internet dans la section
<li class="tidylist"><b>Vérifiez votre configuration et votre allocation de bande passante</b><br>I2P fonctionne mieux
lorsque vous indiquez exactement la vitesse de votre connexion Internet dans la section
<a href="/config">Gestionnaire de bande passante</a>.
I2P est configuré par défaut avec des valeurs volontairement faibles qui ne conviennent généralement pas. Merci de
prendre le temps d'adapter ces valeurs à votre cas particulier. Plus vous allouez de bande passante, <i>en particulier
la bande passante sortante</i>, plus vous obtiendrez de bonnes performances.</li>
I2P est configuré par défaut avec des valeurs volontairement basses qui ne conviennent généralement pas, alors veuillez
prendre le temps d'adapter ces valeurs à votre cas particulier. D'autre part plus vous allouez de bande passante, <i>en particulier
la bande passante sortante</i>, plus vous obtiendrez de bonnes performances de la part du réseau.</li>
<li class="tidylist"><b>Pare-feux, Modems &amp; Routeurs</b><br>Si possible, assurez-vous que I2P/Java dispose d'un
accès bidirectionnel à un port accessible depuis Internet en configurant votre modem-routeur(box x-DSL) et le pare-feu
logiciel de votre PC en conséquence. Si vous êtes derrière un pare-feu hors de votre contrôle mais avec un accès
sortant non restrictif, I2P peut quand même fonctionner: vous pouvez désactiver les accès entrants et vous reposer sur
<li class="tidylist"><b>Pare-feux, modems, et routeurs</b><br>Si possible, assurez-vous que I2P/Java dispose d'un
accès bidirectionnel à un port accessible depuis Internet en configurant votre modem/routeur/pare-feu
d'ordinateur en conséquence. Si vous êtes derrière un pare-feu hors de votre contrôle mais que vous avez un accès
sortant sans restriction, I2P peut tout de même fonctionner : vous pouvez désactiver les accès entrants et vous reposer sur
la <a href="http://i2p-projekt.i2p/fr/docs/transport/ssu" target="_blank">détection d'adresse IP par SSU</a>
(<a href="https://secure.wikimedia.org/wikipedia/en/wiki/Hole_punching" target="_blank">firewall hole punching</a>)
pour vous connecter au réseau, et le panneau de surveillance indiquera alors l'état "Réseau: Bloqué par un pare-feu".
Pour obtenir des performances optimales, préférez si possible de donnez accès à I2P l'accès à un
<b><a href="/config">port externe</a> visible depuis Internet</b>.<br />
Pendant l'installation, I2P choisit aléatoirement ce port <a href="http://127.0.0.1:7657/config">modifiable ici</a>.
Vous pouvez laisser ce port ou en choisir un autre, et quel que soit votre choix régler vos pare-feux en conséquence.
afin de vous connecter au réseau, et le panneau de contrôle indiquera alors l'état "Réseau: Bloqué par un pare-feu".
Pour obtenir des performances optimales, lorsque c'est possible veuillez vous assurer que le
<b><a href="/config">port externe</a></b> d'I2P soit visible depuis Internet (lire ci-dessous pour davantage d'informations).<br />
Note : pendant l'installation, I2P choisit aléatoirement un numéro de port (<a href="/config">modifiable ici</a>), vous pouvez laisser ce numéro de port ou en choisir un autre, et quel que soit votre choix régler vos pare-feux en conséquence.
<br />
Voir plus bas pour d'autres solutions.
</li>
<li class="tidylist"><b>Vérifiez vos réglages de mandataire</b><br>Si vous n'avez accès à aucun site eep (même pas
<li class="tidylist"><b>Vérifiez vos réglages de mandataire (proxy)</b><br>Si vous n'avez accès à aucun site eep (même pas
à <a href="http://i2p-projekt.i2p/" target="_blank">i2p-projekt.i2p</a>), assurez-vous que le mandataire de votre navigateur
est réglé pour le trafic HTTP (<i>pas</i> https, <i>ni</i> socks) via <code>127.0.0.1 port 4444</code>. Si vous avez
est réglé pour accéder au trafic HTTP (<i>pas</i> https, <i>ni</i> socks) via <code>127.0.0.1 port 4444</code>. Si vous avez
besoin d'aide, voici le
<a href="http://i2p-projekt.i2p/fr/about/browser-config" target="_blank">guide</a> de configuration du navigateur pour
l'utilisation avec I2P, également
@ -189,14 +170,11 @@ l'utilisation avec I2P, également
<li class="tidylist"><b>Vérifiez vos historiques</b><br>Les <a href="/logs">historiques</a> peuvent aider à
diagnostiquer un problème. Vous pouvez en coller un extrait sur un
<a href="http://forum.i2p/viewforum.php?f=10" target="_blank">forum</a> pour obtenir de l'aide, ou plutôt le
<a href="http://pastethis.i2p/" target="_blank">coller ici</a> et faire référence au lien sur le canal IRC #i2p-fr
(Freenode).
<a href="http://pastethis.i2p/" target="_blank">coller ici</a> et demander de l'aide sur IRC en faisant référence à ce lien.
</li>
<li class="tidylist"><b>Vérifiez que Java est à jour</b><br>Assurez-vous que vous avez la dernière version de Java
[vers. 1.6 ou plus récente recommandée, et impérative pour certaines fonctionnalités]. Vérifez la version de votre JRE
(<a href="https://secure.wikimedia.org/wikipedia/fr/wiki/Environnement_d%27ex%C3%A9cution_Java" target="_blank">
Java Runtime Environment</a>) en haut de page de vos <a href="/logs">historiques</a>. Si vous êtes un développeur,
(<a href="https://secure.wikimedia.org/wikipedia/fr/wiki/Environnement_d%27ex%C3%A9cution_Java" target="_blank">Java Runtime Environment</a>) en haut de page de la <a href="/logs">page historiques</a>. Si vous êtes un développeur,
un <a href="https://secure.wikimedia.org/wikipedia/fr/wiki/Java_Development_Kit" target="_blank">SDK Java</a> et
<a href="http://ant.apache.org/" target="_blank">Apache Ant</a> sont nécessaires à la compilation des sources.
</li>
@ -211,55 +189,52 @@ consultez la documentation appropriée, visitez les forums, ou venez faire un to
<li class="tidylist"><b>Activez Universal Plug and Play (UPnP)</b><br>Votre modem-routeur est peut-être compatible avec
<a href="https://secure.wikimedia.org/wikipedia/en/wiki/Universal_Plug_and_Play" target="_blank">Universal Plug
&amp; Play</a> (UPnP) qui permet le transfert de ports automatique. Vérifiez que le support UPnP pour I2P est activé
dans la page de <a href="/config">configuration</a>, puis essayez d'activer UPnP dans votre modem-routeur et
éventuellement dans votre ordinateur. Maintenant, <a href="/">redémarrez le routeur I2P</a>. Si ça marche, le panneau
de surveillance devrait alors indiquer "Réseau: OK" une fois que le routeur I2P aura terminé ses tests de connectivité.
&amp; Play</a> (UPnP), lequel permet le transfert de ports automatiquement. Vérifiez que le support UPnP pour I2P est activé
dans la <a href="/config">page de configuration</a>, puis essayez d'activer UPnP dans votre modem/routeur et
éventuellement aussi dans votre ordinateur. Maintenant, <a href="/">redémarrez le routeur I2P</a>. Si cela marche, le panneau
de contrôle devrait alors indiquer "Réseau: OK" une fois que le routeur I2P aura terminé ses tests de connectivité.
</li>
<li class="tidylist"><b>Redirection de ports</b><br>Ouvrez le <a href="/config">port d'I2P</a> sur votre modem, routeur
et/ou pare-feu(x) logiciels pour améliorer la connectivité (idéalement, pour UDP et TCP). Plus d'informations sur la
façon de s'y prendre pour divers matériels est accessible sur
<a href="http://portforward.com/" target="_blank">portforward.com</a>, avec nos forums et canaux IRC listés ci-dessous.
Notez qu'I2P ne prend pas en charge la connexion à Internet via des mandataires (proxies) http ou socks [correctifs
bienvenus!], bien qui vous puissiez vous connecter à des mandataires via I2P lui-même quand il connecté au réseau</li>
<li class="tidylist"><b>Redirection de ports</b><br>Ouvrez le <a href="http://127.0.0.1:7657/config">port d'I2P</a> sur votre modem, routeur
et/ou pare-feu(x) logiciels afin d'améliorer la connectivité (dans l'idéal pour UDP et TCP). Beaucoup d'informations sur la
façon de s'y prendre avec divers matériels sont accessibles sur
<a href="http://portforward.com/" target="_blank">portforward.com</a>, en plus de nos forums et canaux IRC listés ci-dessous.
Notez qu'I2P ne prend pas en charge la connexion à Internet via des mandataires (proxies) http ou socks [améliorations
bienvenues !], cependant vous pourrez vous connecter à des mandataires via I2P lui-même une fois connecté au réseau</li>
<li class="tidylist"><b>Aide en ligne</b><br>Vous pouvez trouver de l'information à parcourir sur le
<a href="http://i2p-projekt.i2p/" target="_blank">site web I2P</a>, poster des messages sur le
<a href="http://forum.i2p/" target="_blank">forum de discussion I2P</a>, ou louvoyer sur les canaux IRC
<a href="irc://127.0.0.1:6668/i2p">#i2p</a> ou encore
<a href="irc://127.0.0.1:6668/i2p-chat">#i2p-chat</a> dans le réseau interne I2P (<code>irc.postman.i2p</code>, irc.echelon.i2p ou
<code>irc.dg.i2p</code>). Ces canaux sont aussi accessibles de façon non cryptée en dehors du réseau anonyme
via le serveur IRC <a href="irc://irc.freenode.net/i2p">Freenode</a>.
<a href="http://i2p-projekt.i2p/" target="_blank">site web I2P</a>, poster des messages dans le
<a href="http://forum.i2p/" target="_blank">forum de discussion I2P</a>,
ou aller sur les canaux IRC
<a href="irc://127.0.0.1:6668/i2p-help">#i2p-help</a>, <a href="irc://127.0.0.1:6668/i2p">#i2p</a> ou encore
<a href="irc://127.0.0.1:6668/i2p-chat">#i2p-chat</a> dans le réseau interne I2P (<code>irc.postman.i2p</code> ou
<code>irc.freshcoffee.i2p</code>). Ces canaux sont aussi accessibles de façon ni cryptée, ni anonyme, en dehors du réseau I2P via le réseau serveur IRC <a href="irc://irc.freenode.net/i2p">Freenode</a>.
</li>
<li class="tidylist"><b>Rapports de bogues</b><br>Si vous voulez rapporter un bogue, merci d'enregistrer un ticket sur
<li class="tidylist"><b>Rapports de bogues</b><br>Si vous voulez rapporter un bogue, veuillez enregistrer un ticket sur
<a href="http://trac.i2p2.i2p/" target="_blank">trac.i2p2.i2p</a>. Les développeurs discutent sur les
<a href="http://zzz.i2p/" target="_blank">fora de développeurs de zzz</a> ou sur le
<a href="irc://127.0.0.1:6668/i2p-dev">canal des développeurs</a>. Les développeurs peuvent consulter les sources sur
<a href="http://killyourtv.i2p/viewmtn/" target="_blank">l'explorateur du dépôt de kytv</a> ou par
<a href="https://github.com/i2p/i2p.i2p" target="_blank">Github</a>. Nous utilisons
<a href="http://i2p-projekt.i2p/fr/get-involved/guides/monotone" target="_blank">monotone</a> pour gérer les sources du code.
<a href="http://zzz.i2p/" target="_blank">forums de développeurs de zzz</a>, et dans le
<a href="irc://127.0.0.1:6668/i2p-dev">canal des développeurs</a> sur le réseau IRC. Les développeurs peuvent consulter les sources sur
<a href="http://killyourtv.i2p/viewmtn/" target="_blank">l'explorateur de dépôt mtn hébergé par Kytv</a> ou sur
<a href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>. Nous utilisons
<a href="http://i2p-projekt.i2p/fr/get-involved/guides/monotone" target="_blank">monotone</a> pour gérer nos codes sources.
</li>
<li class="tidylist"><b>Impliquez-vous!</b><br>I2P est principalement développé et maintenu bénévolement par les
membres dévoués d'une équipe de développeurs. Nous acceptons les
<a href="http://i2p-projekt.i2p/fr/get-involved/donate" target="_blank">dons</a>. Ils sont essentiellement affectés aux coûts
administratifs et d'hébergements. Nous avons un système de
membres de la communauté. Nous seront heureux d'accepter des
<a href="http://i2p-projekt.i2p/fr/get-involved/donate" target="_blank">dons</a>, ils sont essentiellement affectés aux frais
d'hébergements et administratifs. Nous avons un système de
<a href="http://i2p-projekt.i2p/fr/get-involved/bounties" target="_blank">primes</a> pour certains aspects d'I2P à l'intention de
développeurs qui rechercheraient des incitations, et nous sommes en recherche permanente de plus de
développeurs qui rechercheraient des incitations à participer, et nous sommes en recherche permanente de davantage de
<a href="http://i2p-projekt.i2p/fr/get-involved/guides/new-developers" target="_blank">codeurs Java</a>, de
<a href="http://i2p-projekt.i2p/fr/get-involved/guides/new-translators" target="_blank">traducteurs</a>, de prescripteurs et
d'utilisateurs pour accélérer la diffusion d'I2P. Plus grand sera le réseau I2P, plus tout le monde en profitera,
alors en parler simplement à l'apéro avec vos amis au lieu de vous étriper pour savoir si le PSG est plus tafiole
que l'OM n'est tarlouze, (et tendre la main à votre pire ennemi pour l'installation et les réglages chaque fois que
le besoin s'en fait sentir) sera une belle participation! Pour en savoir plus sur les façons de participer, venez
visiter le zoo sur la page "<a href="http://i2p-projekt.i2p/fr/get-involved" target="_blank">Engagez-vous!</a>" du
site web.
<a href="http://i2p-projekt.i2p/fr/get-involved/guides/new-translators" target="_blank">traducteurs</a>, de prescripteurs, et
d'utilisateurs, afin d'accélérer la diffusion d'I2P. Plus grand sera le réseau I2P, plus tout le monde en profitera,
alors parlez-en simplement à vos amis (et donnez leur un coup de main si nécessaire pour l'installation), ce sera une grande participation !. Pour en savoir plus sur les diverses façons de participer, voyez
la page "<a href="http://i2p-projekt.i2p/fr/get-involved" target="_blank">Impliquez-vous!</a>" du site web.
</li>
</ul>
<div class="topness"><a href="#top">[Haut de page]</a></div>
<div class="footnote"><hr>Document mis à jour en février 2011</div>
<div class="footnote"><hr>Document mis à jour en juillet 2014</div>
</div>

View File

@ -18,7 +18,7 @@ public class RouterVersion {
/** deprecated */
public final static String ID = "Monotone";
public final static String VERSION = CoreVersion.VERSION;
public final static long BUILD = 14;
public final static long BUILD = 19;
/** for example "-test" */
public final static String EXTRA = "";

View File

@ -65,6 +65,8 @@ class ClientListenerRunner implements Runnable {
}
}
public void run() { runServer(); }
/**
* Start up the socket listener, listens for connections, and
* fires those connections off via {@link #runConnection runConnection}.
@ -72,7 +74,7 @@ class ClientListenerRunner implements Runnable {
* failure.
*
*/
public void runServer() {
protected void runServer() {
_running = true;
int curDelay = 1000;
while (_running) {
@ -173,5 +175,4 @@ class ClientListenerRunner implements Runnable {
_socket = null;
} catch (IOException ioe) {}
}
public void run() { runServer(); }
}

View File

@ -10,8 +10,10 @@ package net.i2p.router.client;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.LinkedBlockingQueue;
@ -37,6 +39,7 @@ import net.i2p.router.JobImpl;
import net.i2p.router.RouterContext;
import net.i2p.util.I2PThread;
import net.i2p.util.Log;
import net.i2p.util.SystemVersion;
/**
* Coordinate connections and various tasks
@ -45,7 +48,7 @@ import net.i2p.util.Log;
*/
class ClientManager {
private final Log _log;
protected ClientListenerRunner _listener;
protected final List<ClientListenerRunner> _listeners;
// Destination --> ClientConnectionRunner
// Locked for adds/removes but not lookups
private final Map<Destination, ClientConnectionRunner> _runners;
@ -87,6 +90,7 @@ class ClientManager {
// "How large are messages received by the client?",
// "ClientMessages",
// new long[] { 60*1000l, 60*60*1000l, 24*60*60*1000l });
_listeners = new ArrayList<ClientListenerRunner>();
_runners = new ConcurrentHashMap<Destination, ClientConnectionRunner>();
_runnersByHash = new ConcurrentHashMap<Hash, ClientConnectionRunner>();
_pendingRunners = new HashSet<ClientConnectionRunner>();
@ -105,14 +109,22 @@ class ClientManager {
/** Todo: Start a 3rd listener for IPV6? */
protected void startListeners() {
ClientListenerRunner listener;
if (SystemVersion.isAndroid()) {
listener = new DomainClientListenerRunner(_ctx, this);
Thread t = new I2PThread(listener, "DomainClientListener", true);
t.start();
_listeners.add(listener);
}
if (!_ctx.getBooleanProperty(PROP_DISABLE_EXTERNAL)) {
// there's no option to start both an SSL and non-SSL listener
if (_ctx.getBooleanProperty(PROP_ENABLE_SSL))
_listener = new SSLClientListenerRunner(_ctx, this, _port);
listener = new SSLClientListenerRunner(_ctx, this, _port);
else
_listener = new ClientListenerRunner(_ctx, this, _port);
Thread t = new I2PThread(_listener, "ClientListener:" + _port, true);
listener = new ClientListenerRunner(_ctx, this, _port);
Thread t = new I2PThread(listener, "ClientListener:" + _port, true);
t.start();
_listeners.add(listener);
}
_isStarted = true;
}
@ -132,8 +144,9 @@ class ClientManager {
public synchronized void shutdown(String msg) {
_isStarted = false;
_log.info("Shutting down the ClientManager");
if (_listener != null)
_listener.stopListening();
for (ClientListenerRunner listener : _listeners)
listener.stopListening();
_listeners.clear();
Set<ClientConnectionRunner> runners = new HashSet<ClientConnectionRunner>();
synchronized (_runners) {
for (ClientConnectionRunner runner : _runners.values()) {
@ -169,8 +182,13 @@ class ClientManager {
return hisQueue;
}
public boolean isAlive() {
return _isStarted && (_listener == null || _listener.isListening());
public synchronized boolean isAlive() {
boolean listening = true;
if (!_listeners.isEmpty()) {
for (ClientListenerRunner listener : _listeners)
listening = listening && listener.isListening();
}
return _isStarted && (_listeners.isEmpty() || listening);
}
public void registerConnection(ClientConnectionRunner runner) {

View File

@ -0,0 +1,31 @@
package net.i2p.router.client;
import java.io.IOException;
import java.net.ServerSocket;
import net.i2p.client.DomainSocketFactory;
import net.i2p.router.RouterContext;
/**
* Unix domain socket version of ClientListenerRunner.
* <p/>
* This is a stub that does nothing.
* This class is replaced in the Android build.
*
* @author str4d
* @since 0.9.14
*/
public class DomainClientListenerRunner extends ClientListenerRunner {
public DomainClientListenerRunner(RouterContext context, ClientManager manager) {
super(context, manager, -1);
}
/**
* @throws IOException
*/
@Override
protected ServerSocket getServerSocket() throws IOException {
final DomainSocketFactory fact = new DomainSocketFactory(_context);
return fact.createServerSocket(DomainSocketFactory.I2CP_SOCKET_ADDRESS);
}
}

View File

@ -181,7 +181,7 @@ class SSLClientListenerRunner extends ClientListenerRunner {
* Create (if necessary) and load the key store, then run.
*/
@Override
public void runServer() {
protected void runServer() {
File keyStore = new File(_context.getConfigDir(), "keystore/i2cp.ks");
if (verifyKeyStore(keyStore) && initializeFactory(keyStore)) {
super.runServer();

View File

@ -534,7 +534,9 @@ public class Reseeder {
break;
}
} catch (Throwable t) {
_log.warn("Error reseeding", t);
System.err.println("Error reseeding: " + t);
_log.error("Error reseeding", t);
errors++;
} finally {
if (contentRaw != null)
contentRaw.delete();

View File

@ -10,6 +10,9 @@
Classes in this package, sub-packages, and others in router.jar are
not for use by apps, clients or plugins (except for routerconsole).
Subject to change. Not necessarily maintained as a stable API.
</p><p>
For applications bundling the I2P router, instantiate Router and call runRouter(), or use Router.main() or RouterLaunch.
Most public methods in Router are maintained as a stable I2P for those bundling the router.
</p>
</body>
</html>

View File

@ -36,9 +36,10 @@ class LocalClientManager extends ClientManager {
@Override
protected void startListeners() {
_listener = new LocalClientListenerRunner(_ctx, this, _port);
Thread t = new I2PThread(_listener, "ClientListener:" + _port, true);
ClientListenerRunner listener = new LocalClientListenerRunner(_ctx, this, _port);
Thread t = new I2PThread(listener, "ClientListener:" + _port, true);
t.start();
_listeners.add(listener);
_isStarted = true;
}