*/
final protected PDU receivePDUFromConnection(Connection connection, Unprocessed unprocessed)
throws UnknownCommandIdException, TimeoutException, PDUException, IOException {
debug.write(DRXTXD2, "ReceiverBase.receivePDUFromConnection start");
PDU pdu = null;
ByteBuffer buffer;
ByteBuffer unprocBuffer;
try {
// first check if there is something left from the last time
if (unprocessed.getHasUnprocessed()) {
unprocBuffer = unprocessed.getUnprocessed();
debug.write(DRXTX, "have unprocessed " + unprocBuffer.length() + " bytes from previous try");
pdu = tryGetUnprocessedPDU(unprocessed);
}
if (pdu == null) { // only if we didn't manage to get pdu from unproc
buffer = connection.receive();
unprocBuffer = unprocessed.getUnprocessed();
// if received something now or have something from the last receive
if (buffer.length() != 0) {
unprocBuffer.appendBuffer(buffer);
unprocessed.setLastTimeReceived();
pdu = tryGetUnprocessedPDU(unprocessed);
} else {
debug.write(DRXTXD2, "no data received this time.");
// check if it's not too long since we received any data
long timeout = getReceiveTimeout();
if ((unprocBuffer.length() > 0)
&& ((unprocessed.getLastTimeReceived() + timeout) < Data.getCurrentTime())) {
debug.write(DRXTX, "and it's been very long time.");
unprocessed.reset();
throw new TimeoutException(timeout, unprocessed.getExpected(), unprocBuffer.length());
}
}
}
}
catch (UnknownCommandIdException e) {