package freenet.clients.fcp; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import freenet.keys.FreenetURI; import freenet.node.DarknetPeerNode; import freenet.support.SimpleFieldSet; import freenet.support.io.BucketTools; public class SendBookmarkMessage extends SendPeerMessage { public final static String NAME = "SendBookmark"; private final FreenetURI uri; private final String name; private final boolean hasAnAnActiveLink; public SendBookmarkMessage(SimpleFieldSet fs) throws MessageInvalidException { super(fs); try { name = fs.get("Name"); if (name == null) throw new MessageInvalidException( ProtocolErrorMessage.MISSING_FIELD, "No name", identifier, false); uri = new FreenetURI(fs.get("URI")); hasAnAnActiveLink = fs.getBoolean("HasAnActivelink", false); } catch (MalformedURLException e) { throw new MessageInvalidException( ProtocolErrorMessage.FREENET_URI_PARSE_ERROR, e .getMessage(), identifier, false); } } @Override public SimpleFieldSet getFieldSet() { SimpleFieldSet fs = super.getFieldSet(); fs.putSingle("Name", name); fs.putSingle("URI", uri.toString()); fs.put("HasAnActivelink", hasAnAnActiveLink); return fs; } @Override public String getName() { return NAME; } @Override protected int handleFeed(DarknetPeerNode pn) throws MessageInvalidException { try { if(dataLength() > 0) { byte[] description = BucketTools.toByteArray(bucket); return pn.sendBookmarkFeed(uri, name, new String(description, "UTF-8"), hasAnAnActiveLink); } else return pn.sendBookmarkFeed(uri, name, null, hasAnAnActiveLink); } catch (UnsupportedEncodingException e) { throw new Error("Impossible: JVM doesn't support UTF-8: " + e, e); } catch (IOException e) { throw new MessageInvalidException(ProtocolErrorMessage.INVALID_MESSAGE, "", null, false); } } }