more ipv6 fixes

pull/1/head
Michael Peter Christen 11 years ago
parent afd5bd5f5f
commit f818f84adb

@ -25,18 +25,27 @@
//javac -classpath .:../Classes MessageSend_p.java //javac -classpath .:../Classes MessageSend_p.java
//if the shell's current path is HTROOT //if the shell's current path is HTROOT
import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import org.apache.http.entity.mime.content.ContentBody;
import net.yacy.cora.document.encoding.ASCII;
import net.yacy.cora.document.encoding.UTF8; import net.yacy.cora.document.encoding.UTF8;
import net.yacy.cora.protocol.RequestHeader; import net.yacy.cora.protocol.RequestHeader;
import net.yacy.kelondro.util.FileUtils;
import net.yacy.peers.Network;
import net.yacy.peers.Protocol; import net.yacy.peers.Protocol;
import net.yacy.peers.Protocol.Post;
import net.yacy.peers.Seed; import net.yacy.peers.Seed;
import net.yacy.peers.SeedDB;
import net.yacy.search.Switchboard; import net.yacy.search.Switchboard;
import net.yacy.server.serverObjects; import net.yacy.server.serverObjects;
import net.yacy.server.serverSwitch; import net.yacy.server.serverSwitch;
import net.yacy.utils.crypt;
public class MessageSend_p { public class MessageSend_p {
@ -68,51 +77,52 @@ public class MessageSend_p {
// open an editor page for the message // open an editor page for the message
// first ask if the other peer is online, and also what kind of document it accepts // first ask if the other peer is online, and also what kind of document it accepts
final Map<String, String> result = Protocol.permissionMessage(sb.peers.targetAddress(hash), hash); Seed seed = sb.peers.getConnected(ASCII.getBytes(hash));
//System.out.println("DEBUG: permission request result = " + result.toString()); for(String ip: seed.getIPs()) {
String peerName; final Map<String, String> result = Protocol.permissionMessage(seed.getPublicAddress(ip), hash);
Seed targetPeer = null; //System.out.println("DEBUG: permission request result = " + result.toString());
if (hash.equals(sb.peers.mySeed().hash)) { String peerName;
peerName = sb.peers.mySeed().get(Seed.NAME,"nameless"); Seed targetPeer = null;
} else { if (hash.equals(sb.peers.mySeed().hash)) {
targetPeer = sb.peers.getConnected(hash); peerName = sb.peers.mySeed().get(Seed.NAME,"nameless");
if (targetPeer == null) } else {
peerName = "nameless"; targetPeer = sb.peers.getConnected(hash);
else if (targetPeer == null)
peerName = targetPeer.get(Seed.NAME,"nameless"); peerName = "nameless";
} else
peerName = targetPeer.get(Seed.NAME,"nameless");
prop.putXML("mode_permission_peerName", peerName);
final String response = (result == null) ? null : result.get("response");
if (response == null || result == null) {
// we don't have permission or other peer does not exist
prop.put("mode_permission", "0");
if (targetPeer != null) {
sb.peers.peerActions.peerDeparture(targetPeer, "peer responded upon message send request: " + response);
} }
} else {
prop.put("mode_permission", "1"); prop.putXML("mode_permission_peerName", peerName);
final String response = (result == null) ? null : result.get("response");
// write input form if (response == null || result == null) {
try { // we don't have permission or other peer does not exist
final int messagesize = Integer.parseInt(result.get("messagesize")); prop.put("mode_permission", "0");
final int attachmentsize = Integer.parseInt(result.get("attachmentsize")); if (targetPeer != null) {
sb.peers.peerActions.interfaceDeparture(targetPeer, ip);
prop.putXML("mode_permission_response", response); }
prop.put("mode_permission_messagesize", messagesize); } else {
prop.put("mode_permission_attachmentsize", attachmentsize); prop.put("mode_permission", "1");
prop.putXML("mode_permission_subject", subject);
prop.putXML("mode_permission_message", message); // write input form
prop.putHTML("mode_permission_hash", hash); try {
if (post.containsKey("preview")) { final int messagesize = Integer.parseInt(result.get("messagesize"));
prop.putWiki(sb.peers.mySeed().getPublicAddress(sb.peers.mySeed().getIP()), "mode_permission_previewmessage", message); final int attachmentsize = Integer.parseInt(result.get("attachmentsize"));
prop.putXML("mode_permission_response", response);
prop.put("mode_permission_messagesize", messagesize);
prop.put("mode_permission_attachmentsize", attachmentsize);
prop.putXML("mode_permission_subject", subject);
prop.putXML("mode_permission_message", message);
prop.putHTML("mode_permission_hash", hash);
if (post.containsKey("preview")) {
prop.putWiki(sb.peers.mySeed().getPublicAddress(ip), "mode_permission_previewmessage", message);
}
} catch (final NumberFormatException e) {
// "unresolved pattern", the remote peer is alive but had an exception
prop.put("mode_permission", "2");
} }
} catch (final NumberFormatException e) {
// "unresolved pattern", the remote peer is alive but had an exception
prop.put("mode_permission", "2");
} }
} }
} else { } else {
@ -127,7 +137,30 @@ public class MessageSend_p {
if (subject.length() > 100) subject = subject.substring(0, 100); if (subject.length() > 100) subject = subject.substring(0, 100);
if (message.length() > messagesize) message = message.substring(0, messagesize); if (message.length() > messagesize) message = message.substring(0, messagesize);
final byte[] mb = UTF8.getBytes(message); final byte[] mb = UTF8.getBytes(message);
final Map<String, String> result = Protocol.postMessage(sb.peers, hash, subject, mb); SeedDB seedDB = sb.peers;
// prepare request
final String salt = crypt.randomSalt();
// send request
final Map<String, ContentBody> parts = Protocol.basicRequestParts(Switchboard.getSwitchboard(), hash, salt);
parts.put("process", UTF8.StringBody("post"));
parts.put("myseed", UTF8.StringBody(seedDB.mySeed().genSeedStr(salt)));
parts.put("subject", UTF8.StringBody(subject));
parts.put("message", UTF8.StringBody(mb));
Seed seed = seedDB.getConnected(ASCII.getBytes(hash));
Post post1 = null;
for (String ip: seed.getIPs()) {
try {
post1 = new Post(seed.getPublicAddress(ip), hash, "/yacy/message.html", parts, 20000);
} catch (IOException e) {
Network.log.warn("yacyClient.postMessage error:" + e.getMessage());
post1 = null;
}
if (post1 != null) break;
seedDB.peerActions.interfaceDeparture(seed, ip);
}
final Map<String, String> result1 = post1 == null ? null : FileUtils.table(post1.result);
final Map<String, String> result = result1;
//message has been sent //message has been sent
prop.put("mode_status_response", result.get("response")); prop.put("mode_status_response", result.get("response"));

@ -133,7 +133,7 @@ public final class Protocol {
/** /**
* wrapper class for multi-post attempts to multiple IPs * wrapper class for multi-post attempts to multiple IPs
*/ */
private static class Post { public static class Post {
public byte[] result; // contains the result from a successful post or null if no attempt was successful public byte[] result; // contains the result from a successful post or null if no attempt was successful
public Set<String> unsuccessfulAddresses; // contains a set of addresses which had been tested for submission was without success public Set<String> unsuccessfulAddresses; // contains a set of addresses which had been tested for submission was without success
@ -1153,32 +1153,6 @@ public final class Protocol {
} }
} }
public static Map<String, String> postMessage(
final SeedDB seedDB,
final String targetHash,
final String subject,
final byte[] message) {
// this post a message to the remote message board
// prepare request
final String salt = crypt.randomSalt();
// send request
try {
final Map<String, ContentBody> parts = basicRequestParts(Switchboard.getSwitchboard(), targetHash, salt);
parts.put("process", UTF8.StringBody("post"));
parts.put("myseed", UTF8.StringBody(seedDB.mySeed().genSeedStr(salt)));
parts.put("subject", UTF8.StringBody(subject));
parts.put("message", UTF8.StringBody(message));
final Post post = new Post(seedDB.targetAddress(targetHash), targetHash, "/yacy/message.html", parts, 20000);
final Map<String, String> result = FileUtils.table(post.result);
return result;
} catch (final Exception e ) {
Network.log.warn("yacyClient.postMessage error:" + e.getMessage());
return null;
}
}
public static Map<String, String> crawlReceipt( public static Map<String, String> crawlReceipt(
final Seed mySeed, final Seed mySeed,
final Seed target, final Seed target,
@ -1634,7 +1608,7 @@ public final class Protocol {
* @param salt * @param salt
* @return * @return
*/ */
private static final LinkedHashMap<String, ContentBody> basicRequestParts(final Switchboard sb, final String targetHash, final String salt) { public static final LinkedHashMap<String, ContentBody> basicRequestParts(final Switchboard sb, final String targetHash, final String salt) {
final LinkedHashMap<String, ContentBody> parts = new LinkedHashMap<String, ContentBody>(); final LinkedHashMap<String, ContentBody> parts = new LinkedHashMap<String, ContentBody>();
// just standard identification essentials // just standard identification essentials

@ -956,7 +956,7 @@ public final class SeedDB implements AlternativeDomainNames {
seed = lookupByName(domain); seed = lookupByName(domain);
if (seed == null) return null; if (seed == null) return null;
if (this.mySeed == null) initMySeed(); if (this.mySeed == null) initMySeed();
if ((seed == this.mySeed) && (!(seed.isOnline()))) { if (seed == this.mySeed && !(seed.isOnline())) {
// take local ip instead of external // take local ip instead of external
return Switchboard.getSwitchboard().myPublicIP() + ":" + Switchboard.getSwitchboard().getLocalPort("port", 8090) + ((subdom == null) ? "" : ("/" + subdom)); return Switchboard.getSwitchboard().myPublicIP() + ":" + Switchboard.getSwitchboard().getLocalPort("port", 8090) + ((subdom == null) ? "" : ("/" + subdom));
} }
@ -966,26 +966,6 @@ public final class SeedDB implements AlternativeDomainNames {
} }
} }
/**
* use getConnected(hash) instead and retrieve the addresses from the seed
* @param targetHash
* @return
*/
@Deprecated
public String targetAddress(final String targetHash) {
// find target address
String address;
if (targetHash.equals(mySeed().hash)) {
address = mySeed().getPublicAddress(mySeed().getIP());
} else {
final Seed targetSeed = getConnected(targetHash);
if (targetSeed == null) { return null; }
address = targetSeed.getPublicAddress(targetSeed.getIP());
}
if (address == null) address = "localhost" + (this.mySeed.getPort() > 0 ? ":" + this.mySeed.getPort() : "");
return address;
}
private class seedEnum implements Iterator<Seed> { private class seedEnum implements Iterator<Seed> {
private Iterator<Map.Entry<byte[], Map<String, String>>> it; private Iterator<Map.Entry<byte[], Map<String, String>>> it;

Loading…
Cancel
Save