forked from I2P_Developers/i2p.i2p
Compare commits
2 Commits
i2p-1.9.0
...
i2p-jpacka
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b03811af24 | ||
![]() |
fcae43547b |
@@ -77,6 +77,13 @@
|
||||
<h3 id="addrtitle"><%=intl._t("Address book")%>: <%=intl._t(book.getBook())%></h3>
|
||||
<h4 id="storagepath"><%=intl._t("Storage")%>: ${book.displayName}</h4>
|
||||
|
||||
<%
|
||||
// This is what does the form processing.
|
||||
// We need to do this before any notEmpty test and before loadBookMessages() which displays the entry count.
|
||||
// Messages will be displayed below.
|
||||
String formMessages = book.getMessages();
|
||||
%>
|
||||
|
||||
${book.loadBookMessages}
|
||||
|
||||
<% if (book.getBook().equals("private")) { %>
|
||||
@@ -128,15 +135,18 @@ ${book.loadBookMessages}
|
||||
</div>
|
||||
</form>
|
||||
<% } /* book.getEntries().length() > 0 */ %>
|
||||
</c:if><% /* book.notEmpty */ %>
|
||||
|
||||
</div>
|
||||
</div><% /* headline */ %>
|
||||
|
||||
<div id="messages">${book.messages}<%
|
||||
<% /* need this whether book is empty or not to display the form messages */ %>
|
||||
<div id="messages"><%=formMessages%><%
|
||||
if (importMessages != null) {
|
||||
%><%=importMessages%><%
|
||||
}
|
||||
%></div>
|
||||
|
||||
<c:if test="${book.notEmpty}">
|
||||
<div id="filter">
|
||||
<c:if test="${book.hasFilter}">
|
||||
<span><%=intl._t("Current filter")%>: <b>${book.filter}</b>
|
||||
@@ -287,10 +297,12 @@ ${book.loadBookMessages}
|
||||
</table>
|
||||
<p class="buttons" id="addnewaddrbutton">
|
||||
<input class="cancel" type="reset" value="<%=intl._t("Cancel")%>" >
|
||||
<c:if test="${book.notEmpty}">
|
||||
<input class="accept" type="submit" name="action" value="<%=intl._t("Replace")%>" >
|
||||
<% if (!book.getBook().equals("published")) { %>
|
||||
<input class="add" type="submit" name="action" value="<%=intl._t("Add Alternate")%>" >
|
||||
<% } %>
|
||||
</c:if><% /* book.notEmpty */ %>
|
||||
<input class="add" type="submit" name="action" value="<%=intl._t("Add")%>" >
|
||||
</p>
|
||||
</div>
|
||||
|
29
history.txt
29
history.txt
@@ -1,3 +1,32 @@
|
||||
2022-09-04 zzz
|
||||
* SusiDNS: Fix adding to empty address book
|
||||
|
||||
2022-09-03 zzz
|
||||
* NetDB: Query connected peers for their RI directly
|
||||
* UPnP: Fix opening IPv6 ports
|
||||
|
||||
2022-09-01 zzz
|
||||
* Router: Ensure database store message is processed before reply job (Gitlab #364)
|
||||
|
||||
2022-08-29 zzz
|
||||
* SSU2: Implement ack-immediate flag
|
||||
|
||||
2022-08-28 zzz
|
||||
* Console:
|
||||
- Add notification and summary bar info on deadlock
|
||||
- Linkify router hash even if not in netdb
|
||||
* Util: Add option to gzip router logs
|
||||
|
||||
2022-08-25 zzz
|
||||
* Router: Fix deadlock via rebuildRouterAddress() and UDPTransport
|
||||
* SSU2:
|
||||
- Implement path challenge and connection migration
|
||||
- Fix packets exceeding MTU by up to 3 bytes
|
||||
- Immediately fail session request containing zero token
|
||||
|
||||
2022-08-23 zzz
|
||||
* Router: Add deadlocks to event log
|
||||
|
||||
2022-08-22 1.9.0 released
|
||||
|
||||
2022-08-10 zzz
|
||||
|
@@ -18,7 +18,7 @@ public class RouterVersion {
|
||||
/** deprecated */
|
||||
public final static String ID = "Git";
|
||||
public final static String VERSION = CoreVersion.VERSION;
|
||||
public final static long BUILD = 0;
|
||||
public final static long BUILD = 6;
|
||||
|
||||
/** for example "-test" */
|
||||
public final static String EXTRA = "";
|
||||
|
@@ -90,7 +90,7 @@ class IntroductionManager {
|
||||
/** map of relay tag to PeerState who have given us introduction tags */
|
||||
private final Map<Long, PeerState> _inbound;
|
||||
/** map of relay nonce to alice PeerState who requested it */
|
||||
private final Map<Long, PeerState2> _nonceToAlice;
|
||||
private final ConcurrentHashMap<Long, PeerState2> _nonceToAlice;
|
||||
private final Set<InetAddress> _recentHolePunches;
|
||||
private long _lastHolePunchClean;
|
||||
|
||||
|
@@ -343,7 +343,7 @@ class PacketBuilder2 {
|
||||
*
|
||||
*/
|
||||
public UDPPacket buildACK(PeerState2 peer) {
|
||||
return buildPacket(Collections.emptyList(), peer);
|
||||
return buildPacket(Collections.<Fragment>emptyList(), peer);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -363,7 +363,7 @@ class PacketBuilder2 {
|
||||
}
|
||||
Block block = new SSU2Payload.TerminationBlock(reason, peer.getReceivedMessages().getHighestSet());
|
||||
blocks.add(block);
|
||||
UDPPacket packet = buildPacket(Collections.emptyList(), blocks, peer);
|
||||
UDPPacket packet = buildPacket(Collections.<Fragment>emptyList(), blocks, peer);
|
||||
packet.setMessageType(TYPE_DESTROY);
|
||||
return packet;
|
||||
}
|
||||
@@ -652,7 +652,7 @@ class PacketBuilder2 {
|
||||
*/
|
||||
public UDPPacket buildPeerTestFromAlice(byte[] signedData, PeerState2 bob) {
|
||||
Block block = new SSU2Payload.PeerTestBlock(1, 0, null, signedData);
|
||||
UDPPacket rv = buildPacket(Collections.emptyList(), Collections.singletonList(block), bob);
|
||||
UDPPacket rv = buildPacket(Collections.<Fragment>emptyList(), Collections.singletonList(block), bob);
|
||||
rv.setMessageType(TYPE_TFA);
|
||||
return rv;
|
||||
}
|
||||
@@ -688,7 +688,7 @@ class PacketBuilder2 {
|
||||
*/
|
||||
public UDPPacket buildPeerTestToAlice(int code, Hash charlieHash, byte[] signedData, PeerState2 alice) {
|
||||
Block block = new SSU2Payload.PeerTestBlock(4, code, charlieHash, signedData);
|
||||
UDPPacket rv = buildPacket(Collections.emptyList(), Collections.singletonList(block), alice);
|
||||
UDPPacket rv = buildPacket(Collections.<Fragment>emptyList(), Collections.singletonList(block), alice);
|
||||
rv.setMessageType(TYPE_TTA);
|
||||
return rv;
|
||||
}
|
||||
@@ -724,7 +724,7 @@ class PacketBuilder2 {
|
||||
*/
|
||||
public UDPPacket buildPeerTestToCharlie(Hash aliceHash, byte[] signedData, PeerState2 charlie) {
|
||||
Block block = new SSU2Payload.PeerTestBlock(2, 0, aliceHash, signedData);
|
||||
UDPPacket rv = buildPacket(Collections.emptyList(), Collections.singletonList(block), charlie);
|
||||
UDPPacket rv = buildPacket(Collections.<Fragment>emptyList(), Collections.singletonList(block), charlie);
|
||||
rv.setMessageType(TYPE_TBC);
|
||||
return rv;
|
||||
}
|
||||
@@ -737,7 +737,7 @@ class PacketBuilder2 {
|
||||
*/
|
||||
public UDPPacket buildPeerTestToBob(int code, byte[] signedData, PeerState2 bob) {
|
||||
Block block = new SSU2Payload.PeerTestBlock(3, code, null, signedData);
|
||||
UDPPacket rv = buildPacket(Collections.emptyList(), Collections.singletonList(block), bob);
|
||||
UDPPacket rv = buildPacket(Collections.<Fragment>emptyList(), Collections.singletonList(block), bob);
|
||||
rv.setMessageType(TYPE_TCB);
|
||||
return rv;
|
||||
}
|
||||
@@ -751,7 +751,7 @@ class PacketBuilder2 {
|
||||
*/
|
||||
UDPPacket buildRelayRequest(byte[] signedData, PeerState2 bob) {
|
||||
Block block = new SSU2Payload.RelayRequestBlock(signedData);
|
||||
UDPPacket rv = buildPacket(Collections.emptyList(), Collections.singletonList(block), bob);
|
||||
UDPPacket rv = buildPacket(Collections.<Fragment>emptyList(), Collections.singletonList(block), bob);
|
||||
rv.setMessageType(TYPE_RREQ);
|
||||
rv.setPriority(PRIORITY_HIGH);
|
||||
return rv;
|
||||
@@ -766,7 +766,7 @@ class PacketBuilder2 {
|
||||
*/
|
||||
UDPPacket buildRelayIntro(byte[] signedData, PeerState2 charlie) {
|
||||
Block block = new SSU2Payload.RelayIntroBlock(signedData);
|
||||
UDPPacket rv = buildPacket(Collections.emptyList(), Collections.singletonList(block), charlie);
|
||||
UDPPacket rv = buildPacket(Collections.<Fragment>emptyList(), Collections.singletonList(block), charlie);
|
||||
rv.setMessageType(TYPE_INTRO);
|
||||
return rv;
|
||||
}
|
||||
@@ -781,7 +781,7 @@ class PacketBuilder2 {
|
||||
*/
|
||||
UDPPacket buildRelayResponse(byte[] signedData, PeerState2 state) {
|
||||
Block block = new SSU2Payload.RelayResponseBlock(signedData);
|
||||
UDPPacket rv = buildPacket(Collections.emptyList(), Collections.singletonList(block), state);
|
||||
UDPPacket rv = buildPacket(Collections.<Fragment>emptyList(), Collections.singletonList(block), state);
|
||||
rv.setMessageType(TYPE_RESP);
|
||||
return rv;
|
||||
}
|
||||
|
@@ -25,6 +25,8 @@ import net.i2p.data.i2np.I2NPMessageImpl;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
|
||||
import net.i2p.router.transport.udp.InboundMessageFragments.ModifiableLong;
|
||||
import net.i2p.router.transport.udp.PacketBuilder.Fragment;
|
||||
|
||||
import static net.i2p.router.transport.udp.SSU2Util.*;
|
||||
import net.i2p.util.HexDump;
|
||||
import net.i2p.util.Log;
|
||||
@@ -457,7 +459,7 @@ public class PeerState2 extends PeerState implements SSU2Payload.PayloadCallback
|
||||
}
|
||||
if (tag > 0) {
|
||||
SSU2Payload.Block block = new SSU2Payload.RelayTagBlock(tag);
|
||||
UDPPacket pkt = _transport.getBuilder2().buildPacket(Collections.emptyList(),
|
||||
UDPPacket pkt = _transport.getBuilder2().buildPacket(Collections.<Fragment>emptyList(),
|
||||
Collections.singletonList(block),
|
||||
this);
|
||||
_transport.send(pkt);
|
||||
@@ -649,7 +651,7 @@ public class PeerState2 extends PeerState implements SSU2Payload.PayloadCallback
|
||||
if (_log.shouldInfo())
|
||||
_log.info("Got PATH CHALLENGE block, length: " + data.length + " on " + this);
|
||||
SSU2Payload.Block block = new SSU2Payload.PathResponseBlock(data);
|
||||
UDPPacket pkt = _transport.getBuilder2().buildPacket(Collections.emptyList(),
|
||||
UDPPacket pkt = _transport.getBuilder2().buildPacket(Collections.<Fragment>emptyList(),
|
||||
Collections.singletonList(block),
|
||||
this);
|
||||
// TODO send to from address?
|
||||
|
Reference in New Issue
Block a user