@Override public void push(Face face, Name name) throws IOException { Optional<Blob> blob = get(name); if (blob.isPresent()) { Data t = new Data(template); t.setName(name); ByteArrayInputStream b = new ByteArrayInputStream(blob.get().getImmutableArray()); for (Data d : SegmentationHelper.segment(t, b)) { face.putData(d); } } }
@Override public void push(Face face, Interest interest) throws IOException { Optional<NameTree<Blob>> leaf = getWithSelectors(interest); if (leaf.isPresent() && leaf.get().content().isPresent()) { Data t = new Data(template); t.setName(leaf.get().fullName()); ByteArrayInputStream b = new ByteArrayInputStream(leaf.get().content().get().getImmutableArray()); for (Data d : SegmentationHelper.segment(t, b)) { face.putData(d); } } }
public InMemoryContentStore(int freshnessMs) { this.template = new Data(); this.template.getMetaInfo().setFreshnessPeriod(freshnessMs); this.store = DefaultNameTree.newRootTree(); }
@Override public Data onInterest(Name prefix, Interest interest) throws Exception { Data data = new Data(interest.getName()); Blob content = callback.onInterest(prefix, interest); data.setContent(content); return data; } };
private static void sendAttributes(Face face, Name publisherName) { Data data = new Data(publisherName); data.setContent(new Blob("[attributes here]")); data.getMetaInfo().setFreshnessPeriod(ATTRIBUTES_FRESHNESS_PERIOD); try { face.putData(data); } catch (IOException e) { LOGGER.log(Level.SEVERE, "Failed to publish attributes for publisher: " + publisherName, e); } }
/** * Segment a stream of bytes into a list of Data packets; this must read all the bytes first in order to determine the * end segment for FinalBlockId. TODO this could be smarter and only add segments if necessary * * @param template the {@link Data} packet to use for the segment {@link Name}, {@link net.named_data.jndn.MetaInfo}, * etc. * @param bytes an {@link InputStream} to the bytes to segment * @return a list of segmented {@link Data} packets * @throws IOException if the stream fails */ public static List<Data> segment(Data template, InputStream bytes, int segmentSize) throws IOException { List<Data> segments = new ArrayList<>(); byte[] readBytes = readAll(bytes); int numBytes = readBytes.length; int numPackets = (int) Math.ceil((double) numBytes / segmentSize); ByteBuffer buffer = ByteBuffer.wrap(readBytes, 0, numBytes); Name.Component lastSegment = Name.Component.fromNumberWithMarker((long) numPackets - 1, NDN_SEGMENT_MARKER); for (int i = 0; i < numPackets; i++) { Data segment = new Data(template); segment.getName().appendSegment(i); segment.getMetaInfo().setFinalBlockId(lastSegment); byte[] content = new byte[Math.min(segmentSize, buffer.remaining())]; buffer.get(content); segment.setContent(new Blob(content)); segments.add(segment); } return segments; }
/** * @return a combined packet based on the properties of the first packet and * the concatenated bytes of the entire list of packets */ Data assemble() { if (packets.length == 0) { throw new IllegalStateException("No packets to assemble."); } // build from first returned packet Data combined = new Data(packets[0]); combined.setName(SegmentationHelper.removeSegment(combined.getName(), marker)); try { combined.setContent(assembleBlob()); } catch (IOException ex) { throw new IllegalStateException(ex); } return combined; }
/** * {@inheritDoc} */ @Override public void emit(final ByteBuffer buffer) { // @todo Implement NDNLP processing try { if (buffer.get(0) == Tlv.Interest || buffer.get(0) == Tlv.Data) { TlvDecoder decoder = new TlvDecoder(buffer); if (decoder.peekType(Tlv.Interest, buffer.remaining())) { Interest interest = new Interest(); interest.wireDecode(buffer, TlvWireFormat.get()); for (SignalOnSendInterest signal : onSendInterest) { signal.emit(interest); } } else if (decoder.peekType(Tlv.Data, buffer.remaining())) { Data data = new Data(); data.wireDecode(buffer, TlvWireFormat.get()); for (SignalOnSendData signal : onSendData) { signal.emit(data); } } } else { LOGGER.info("Received an unknown packet"); } } catch (EncodingException e) { LOGGER.log(Level.INFO, "Failed to decodeParameters incoming packet", e); } } }
@Override public void emit(ByteBuffer buffer) { try { if (isInterest(buffer) || isData(buffer)) { TlvDecoder decoder = new TlvDecoder(buffer); if (decoder.peekType(Tlv.Interest, buffer.remaining())) { Interest interest = new Interest(); interest.wireDecode(buffer, TlvWireFormat.get()); forward(interest, transport); } else if (decoder.peekType(Tlv.Data, buffer.remaining())) { Data data = new Data(); data.wireDecode(buffer, TlvWireFormat.get()); forward(data); } } else { LOGGER.warning("Received an unknown packet"); } } catch (EncodingException e) { LOGGER.log(Level.INFO, "Failed to decodeParameters incoming packet", e); } }
@Override public void in(Interest interest, Transport destinationTransport, Face localFace) { LOGGER.info("Received registration request: " + interest.toUri()); ControlParameters params = decodeParameters(interest); MockForwarder.FibEntry entry = new ClientFibEntry(params.getName(), (MockTransport) destinationTransport, params.getForwardingFlags()); fib.add(entry); LOGGER.info("Added new route " + params.getName() + " to: " + destinationTransport); ControlResponse response = encodeResponse(params); Data data = new Data(); data.setName(interest.getName()); data.setContent(response.wireEncode()); signResponse(data); try { localFace.putData(data); } catch (IOException e) { LOGGER.log(Level.SEVERE, "Failed to send registration response", e); } }
response.setBodyAsControlParameters(params); Data data = new Data(); data.setName(interest.getName()); data.setContent(response.wireEncode());