in ktor-io/jvm/src/io/ktor/utils/io/ByteBufferChannel.kt [1979:1998]
override fun request(skip: Int, atLeast: Int): ByteBuffer? {
return state.let { s ->
val available = s.capacity.availableForRead
val rp = readPosition
if (available < atLeast + skip) return null
if (s.idle || (s !is ReadWriteBufferState.Reading && s !is ReadWriteBufferState.ReadingWriting)) {
setupStateForRead() ?: return null
return request(skip, atLeast)
}
val buffer = s.readBuffer
val position = buffer.carryIndex(rp + skip)
@Suppress("DEPRECATION_ERROR")
buffer.prepareBuffer(readByteOrder, position, available - skip)
if (buffer.remaining() >= atLeast) buffer else null
}
}