/** * Merges the DHT keys of multiple index packets into one big index packet.<br/> * The Email Destination of this packet is set to that of the first input packet. * @param indexPackets * @throws IllegalArgumentException If an empty <code>Collection</code> or <code>null</code> was passed in */ public IndexPacket(Collection<IndexPacket> indexPackets) { if (indexPackets==null || indexPackets.isEmpty()) throw new IllegalArgumentException("This method must be invoked with at least one index packet."); IndexPacket firstPacket = indexPackets.iterator().next(); destinationHash = firstPacket.getDhtKey(); entries = new ArrayList<IndexPacketEntry>(); for (IndexPacket packet: indexPackets) { for (IndexPacketEntry entry: packet) put(entry); } }
@Override public IndexPacket next() { if (currentPacketIterator==null || !currentPacketIterator.hasNext()) { currentPacket = bigPackets.next(); currentPacketIterator = currentPacket.iterator(); } IndexPacketEntry entry = currentPacketIterator.next(); IndexPacket indexPacket = new IndexPacket(currentPacket.getDhtKey()); indexPacket.put(entry); return indexPacket; }
public void put(Collection<EncryptedEmailPacket> emailPackets) { for (EncryptedEmailPacket emailPacket: emailPackets) { Hash emailPacketKey = emailPacket.getDhtKey(); Hash delVerificationHash = emailPacket.getDeleteVerificationHash(); IndexPacketEntry entry = new IndexPacketEntry(emailPacketKey, delVerificationHash); put(entry); } }
@Override public Collection<? extends DataPacket> split() { if (isTooBig()) { int bytesPerEntry = entries.get(0).emailPacketKey.toByteArray().length + entries.get(0).delVerificationHash.toByteArray().length + 4; // see toByteArray() List<IndexPacket> subpackets = new ArrayList<IndexPacket>(); IndexPacket currentSubpacket = new IndexPacket(destinationHash); for (IndexPacketEntry entry: entries) { if (currentSubpacket.getSize()+bytesPerEntry > MAX_DATAGRAM_SIZE) { subpackets.add(currentSubpacket); currentSubpacket = new IndexPacket(destinationHash); } currentSubpacket.put(entry); } subpackets.add(currentSubpacket); return subpackets; } else return Collections.singleton(this); } }
/** * Adds a new entry containing the DHT key and Delete Verification Hash of an Email Packet.<br/> * If an entry with the same DHT key exists already, nothing happens. * @param emailPacket */ public void put(EncryptedEmailPacket emailPacket) { Hash emailPacketKey = emailPacket.getDhtKey(); Hash delVerificationHash = emailPacket.getDeleteVerificationHash(); IndexPacketEntry newEntry = new IndexPacketEntry(emailPacketKey, delVerificationHash); put(newEntry); }
@Before public void setUp() throws Exception { identity = new EmailIdentity("5LqFf~U3aLbJfbfTVtp7kXLPFoeIFo4l8WTg1Wi52bWoxAYaevVVBtR9AvKqy1YmZHbnOIcu59~2X6wMmi6SveljmvAeTc5YEHvfIRrJhnxqjaC4IczYKXfUdrXfaeVEKMQ~PKuvhINh~EhlJUQne0NZQ~S6QAGfUAu83mMoBTVaz0eoUnAzySxbSf~NpxUoK-H6iULsFekmYfaz-yq8cxPFy62LyylTRMGFFwb9is7E~mFnV6Fa0iGSDJvpFfYV29efVUjxiW9JT5T0HwgdaDB4ssSNr0-hthigJmB7zLXOJ8F1gxi3qCfTX9SiGMrZ9KZsOLc7Qs7Iix3ECqesfGTIs9n5G1qnfZriyc1FZdylCMQcnq5QvTITV-Cil0XrU1csV5CEFYEUGfGdLP1xP2SCZr8KJwOI0xfUnkkVnNPc2y~ZGhqxpHeIcnZCpScW-p81vFvTe5fwvEVWixgk6MlFKYyQku28brQ19Tz5tsIH3tUvl4cqGzLVQUbi3cODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmogzaNWx7p~GTVQxl1JzqcOTyRfELoxqEGS5BowqPe4FNa3Bo-diEcU3k90Cx5MX"); // Make an IndexPacket with 3 entries emailPacket1 = makeEmailPacket("abc"); emailPacket2 = makeEmailPacket("abcd"); emailPacket3 = makeEmailPacket("abcde"); indexPacket1 = new IndexPacket(identity); indexPacket1.put(emailPacket1); indexPacket1.put(emailPacket2); indexPacket1.put(emailPacket3); // Make an IndexPacket with 2 entries emailPacket4 = makeEmailPacket("abcdef"); emailPacket5 = makeEmailPacket("abcdefg"); indexPacket2 = new IndexPacket(identity); indexPacket2.put(emailPacket4); indexPacket2.put(emailPacket5); }
@Test public void testIndividualPackets() { IndexPacket indexPacket1 = new IndexPacket(destination1); indexPacket1.put(emailPacket1); IndexPacket indexPacket2 = new IndexPacket(destination2); IndexPacket indexPacket3 = new IndexPacket(destination3); indexPacket2.put(emailPacket1); indexPacket2.put(emailPacket2); folder.store(indexPacket1); folder.store(indexPacket2); folder.store(indexPacket3); Iterator<IndexPacket> iterator = folder.individualPackets(); int numIndivEntries = 0; while (iterator.hasNext()) { iterator.next(); numIndivEntries++; } assertEquals(3, numIndivEntries); }
EncryptedEmailPacket emailPacket = new EncryptedEmailPacket(unencryptedPacket, recipientDest); send(emailPacket, hops, minDelay, maxDelay, relayRedundancy); indexPacket.put(emailPacket); metadata.addPacketInfo(recipientDest, emailPacket.getDhtKey(), emailPacket.getDeleteVerificationHash());