<%
String nameStr = request.getParameter("name");
+String protoStr = request.getParameter("proto");
String locStr = request.getParameter("location");
String schemaStr = request.getParameter("schema");
String name = null;
+String proto = null;
String location = null;
String schema = null;
try {
name = DataHelper.getUTF8(Base64.decode(nameStr));
+ if ( (protoStr != null) && (protoStr.trim().length() > 0) )
+ proto = DataHelper.getUTF8(Base64.decode(protoStr));
location = DataHelper.getUTF8(Base64.decode(locStr));
schema = DataHelper.getUTF8(Base64.decode(schemaStr));
} catch (NullPointerException npe) {
@@ -30,7 +34,7 @@ try {
if ( (name == null) || (location == null) || (schema == null) ) {
out.write("No location specified");
} else if (user.getAuthenticated() && ("Add".equals(request.getParameter("action"))) ) {
- out.write("" + BlogManager.instance().addAddress(user, name, location, schema) + "");
+ out.write("" + BlogManager.instance().addAddress(user, name, proto, location, schema) + "");
} else { %>Are you sure you really want to add the
addressbook mapping of <%=HTMLRenderer.sanitizeString(name)%> to
, applicable within the
diff --git a/apps/syndie/jsp/addresses.jsp b/apps/syndie/jsp/addresses.jsp
new file mode 100644
index 0000000000..e591dcad1c
--- /dev/null
+++ b/apps/syndie/jsp/addresses.jsp
@@ -0,0 +1,158 @@
+<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="net.i2p.data.Base64, net.i2p.syndie.web.*, net.i2p.syndie.sml.*, net.i2p.syndie.data.*, net.i2p.syndie.*, org.mortbay.servlet.MultiPartRequest, java.util.*, java.io.*" %>
+<% request.setCharacterEncoding("UTF-8"); %>
+
+
+
+SyndieMedia addressbook
+
+
+
+
+ |
+ |
+
+ |
+<%
+if (!user.getAuthenticated()) {
+ %>You must log in to view your addressbook<%
+} else {
+ PetNameDB names = user.getPetNameDB();
+ String action = request.getParameter("action");
+ if ( (action != null) && ("Change".equals(action)) ) {
+ String oldPetname = request.getParameter("petname");
+ PetName cur = names.get(oldPetname);
+ if (cur != null) {
+ cur.setName(request.getParameter("name"));
+ cur.setNetwork(request.getParameter("network"));
+ cur.setProtocol(request.getParameter("protocol"));
+ cur.setIsPublic(null != request.getParameter("isPublic"));
+ cur.setLocation(request.getParameter("location"));
+ cur.setGroups(request.getParameter("groups"));
+ names.store(user.getAddressbookLocation());
+ %>Address updated<%
+ }
+ } else if ( (action != null) && ("Add".equals(action)) ) {
+ PetName cur = names.get(request.getParameter("name"));
+ if (cur != null) { %>Address already exists<% } else {
+ cur = new PetName();
+ cur.setName(request.getParameter("name"));
+ cur.setNetwork(request.getParameter("network"));
+ cur.setProtocol(request.getParameter("protocol"));
+ cur.setIsPublic(null != request.getParameter("isPublic"));
+ cur.setLocation(request.getParameter("location"));
+ cur.setGroups(request.getParameter("groups"));
+ names.set(cur.getName(), cur);
+ names.store(user.getAddressbookLocation());
+ %>Address added<%
+ }
+ } else if ( (action != null) && ("Delete".equals(action)) ) {
+ PetName cur = names.get(request.getParameter("name"));
+ if (cur != null) {
+ names.remove(cur.getName());
+ names.store(user.getAddressbookLocation());
+ %>Address removed<%
+ }
+ }
+ TreeSet sorted = new TreeSet(names.getNames());
+ %>
+Name | Network | Protocol | Location | Public? | Groups | |
+<%
+ StringBuffer buf = new StringBuffer(128);
+ for (Iterator iter = sorted.iterator(); iter.hasNext(); ) {
+ PetName name = names.get((String)iter.next());
+ buf.append(" ");
+ out.write(buf.toString());
+ buf.setLength(0);
+ }
+ %>
+
+ <%
+}
+%>
+ |
+
+
diff --git a/history.txt b/history.txt
index ef2770b47b..393a46bf24 100644
--- a/history.txt
+++ b/history.txt
@@ -1,4 +1,12 @@
-$Id: history.txt,v 1.236 2005/09/02 13:34:14 jrandom Exp $
+$Id: history.txt,v 1.237 2005/09/02 14:10:05 jrandom Exp $
+
+2005-09-04 jrandom
+ * Don't persist peer profiles until we are shutting down, as the
+ persistence process gobbles RAM and wall time.
+ * Bugfix to allow you to check/uncheck the sharedClient setting on the
+ I2PTunnel web interface.
+ * Be more careful when expiring a failed tunnel message fragment so we
+ don't drop the data while attempting to read it.
* 2005-09-02 0.6.0.5 released
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index 02d92e0b7b..7ac8785575 100644
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -15,9 +15,9 @@ import net.i2p.CoreVersion;
*
*/
public class RouterVersion {
- public final static String ID = "$Revision: 1.225 $ $Date: 2005/09/02 13:34:15 $";
+ public final static String ID = "$Revision: 1.226 $ $Date: 2005/09/02 14:10:06 $";
public final static String VERSION = "0.6.0.5";
- public final static long BUILD = 0;
+ public final static long BUILD = 1;
public static void main(String args[]) {
System.out.println("I2P Router version: " + VERSION);
System.out.println("Router ID: " + RouterVersion.ID);
diff --git a/router/java/src/net/i2p/router/peermanager/PeerManager.java b/router/java/src/net/i2p/router/peermanager/PeerManager.java
index 68aa11e9b7..9eae727915 100644
--- a/router/java/src/net/i2p/router/peermanager/PeerManager.java
+++ b/router/java/src/net/i2p/router/peermanager/PeerManager.java
@@ -39,7 +39,7 @@ class PeerManager {
_organizer.setUs(context.routerHash());
loadProfiles();
_context.jobQueue().addJob(new EvaluateProfilesJob(_context));
- _context.jobQueue().addJob(new PersistProfilesJob(_context, this));
+ //_context.jobQueue().addJob(new PersistProfilesJob(_context, this));
}
void storeProfiles() {
diff --git a/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java b/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java
index 4b80c32e12..b3ea7dac97 100644
--- a/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java
+++ b/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java
@@ -408,7 +408,7 @@ class PeerTestManager {
charlieInfo = _context.netDb().lookupRouterInfoLocally(charlie.getRemotePeer());
}
- if (charlie == null) {
+ if ( (charlie == null) || (charlieInfo == null) ) {
if (_log.shouldLog(Log.WARN))
_log.warn("Unable to pick a charlie");
return;
diff --git a/router/java/src/net/i2p/router/tunnel/FragmentHandler.java b/router/java/src/net/i2p/router/tunnel/FragmentHandler.java
index 9aefba1f39..e8f81d50b4 100644
--- a/router/java/src/net/i2p/router/tunnel/FragmentHandler.java
+++ b/router/java/src/net/i2p/router/tunnel/FragmentHandler.java
@@ -353,6 +353,8 @@ public class FragmentHandler {
_completed++;
try {
byte data[] = msg.toByteArray();
+ if (msg == null)
+ return;
if (_log.shouldLog(Log.DEBUG))
_log.debug("RECV(" + data.length + "): " + Base64.encode(data)
+ " " + _context.sha().calculateHash(data).toBase64());
diff --git a/router/java/src/net/i2p/router/tunnel/FragmentedMessage.java b/router/java/src/net/i2p/router/tunnel/FragmentedMessage.java
index d39a5e56b2..186843d815 100644
--- a/router/java/src/net/i2p/router/tunnel/FragmentedMessage.java
+++ b/router/java/src/net/i2p/router/tunnel/FragmentedMessage.java
@@ -214,15 +214,20 @@ public class FragmentedMessage {
_completed = true;
}
public byte[] toByteArray() {
- byte rv[] = new byte[getCompleteSize()];
- writeComplete(rv, 0);
- releaseFragments();
- return rv;
+ synchronized (this) {
+ if (_releasedAfter > 0) return null;
+ byte rv[] = new byte[getCompleteSize()];
+ writeComplete(rv, 0);
+ releaseFragments();
+ return rv;
+ }
}
public long getReleasedAfter() { return _releasedAfter; }
public void failed() {
- releaseFragments();
+ synchronized (this) {
+ releaseFragments();
+ }
}
/**
|