in provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/tcp/TcpTransport.java [569:600]
public int read(ByteBuffer dst) throws IOException {
if( max_read_rate==0 ) {
return channel.read(dst);
} else {
int remaining = dst.remaining();
if( read_allowance ==0 || remaining ==0 ) {
return 0;
}
int reduction = 0;
if( remaining > read_allowance) {
reduction = remaining - read_allowance;
dst.limit(dst.limit() - reduction);
}
int rc;
try {
rc = channel.read(dst);
read_allowance -= rc;
} finally {
if( reduction!=0 ) {
if( dst.remaining() == 0 ) {
// we need to suspend the read now until we get
// a new allowance...
readSource.suspend();
read_suspended = true;
}
dst.limit(dst.limit() + reduction);
}
}
return rc;
}
}