source.sendAsync(DMT.createFNPGetOfferedKeyInvalid(uid, DMT.GET_OFFERED_KEY_REJECTED_NO_KEY), null, senderCounter);
tag.unlockHandler();
return;
}
final Message data = DMT.createFNPSSKDataFoundData(uid, block.getRawData(), realTimeFlag);
Message headers = DMT.createFNPSSKDataFoundHeaders(uid, block.getRawHeaders(), realTimeFlag);
final int dataLength = block.getRawData().length;
source.sendAsync(headers, null, senderCounter);
node.executor.execute(new PrioRunnable() {
@Override
public int getPriority() {
return NativeThread.HIGH_PRIORITY;
}
@Override
public void run() {
try {
source.sendSync(data, senderCounter, realTimeFlag);
senderCounter.sentPayload(dataLength);
} catch (NotConnectedException e) {
// :(
} catch (SyncSendWaitedTooLongException e) {
// Impossible
} finally {
tag.unlockHandler();
}
}
}, "Send offered SSK");
if(needPubKey) {
Message pk = DMT.createFNPSSKPubKey(uid, block.getPubKey(), realTimeFlag);
source.sendAsync(pk, null, senderCounter);
}
} else {
CHKBlock block = node.fetch((NodeCHK)key, false, false, false, false, true, null);
if(block == null) {
// Don't have the key
source.sendAsync(DMT.createFNPGetOfferedKeyInvalid(uid, DMT.GET_OFFERED_KEY_REJECTED_NO_KEY), null, senderCounter);
tag.unlockHandler();
return;
}
Message df = DMT.createFNPCHKDataFound(uid, block.getRawHeaders());
source.sendAsync(df, null, senderCounter);
PartiallyReceivedBlock prb =
new PartiallyReceivedBlock(Node.PACKETS_IN_BLOCK, Node.PACKET_SIZE, block.getRawData());
final BlockTransmitter bt =
new BlockTransmitter(node.usm, node.getTicker(), source, uid, prb, senderCounter, BlockTransmitter.NEVER_CASCADE,