ktor-http-cio / io.ktor.server.cio.backend / ServerRequestScope

ServerRequestScope

class ServerRequestScope : CoroutineScope

Represents a request scope.

Properties

coroutineContext

val coroutineContext: <ERROR CLASS>

input

val input: ByteReadChannel

channel connected to request body bytes stream

localAddress

val localAddress: SocketAddress?

on which the client was accepted (if known)

output

val output: ByteWriteChannel

channel connected to response body

remoteAddress

val remoteAddress: SocketAddress?

of the client (if known)

upgraded

val upgraded: CompletableDeferred<Boolean>?

deferred should be completed on upgrade request

Functions

withContext

fun withContext(coroutineContext: <ERROR CLASS>): ServerRequestScope

Creates another request scope with same parameters except coroutine context

Extension Functions

decodeChunked

fun CoroutineScope.decodeChunked(input: ByteReadChannel): DecoderJob
fun CoroutineScope.decodeChunked(input: ByteReadChannel, contentLength: Long): DecoderJob

Start a chunked stream decoder coroutine

parseMultipart

fun CoroutineScope.parseMultipart(input: ByteReadChannel, headers: HttpHeadersMap): ReceiveChannel<MultipartEvent>
fun CoroutineScope.parseMultipart(input: ByteReadChannel, contentType: CharSequence, contentLength: Long?): ReceiveChannel<MultipartEvent>
fun CoroutineScope.parseMultipart(boundaryPrefixed: ByteBuffer, input: ByteReadChannel, totalLength: Long?): ReceiveChannel<MultipartEvent>

Starts a multipart parser coroutine producing multipart events

pinger

fun CoroutineScope.pinger(outgoing: SendChannel<Frame>, periodMillis: Long, timeoutMillis: Long, pool: ObjectPool<ByteBuffer> = KtorDefaultPool): SendChannel<Pong>

Launch pinger coroutine on CoroutineScope that is sending ping every specified periodMillis to outgoing channel, waiting for and verifying client's pong frames. It is also handling timeoutMillis and sending timeout close frame

ponger

fun CoroutineScope.ponger(outgoing: SendChannel<Pong>, pool: ObjectPool<ByteBuffer> = KtorDefaultPool): SendChannel<Ping>

Launch a ponger actor job on the CoroutineScope sending pongs to outgoing channel. It is acting for every client's ping frame and replying with corresponding pong

startConnectionPipeline

fun CoroutineScope.startConnectionPipeline(input: ByteReadChannel, output: ByteWriteChannel, timeout: WeakTimeoutQueue, handler: suspend CoroutineScope.(request: Request, input: ByteReadChannel, output: ByteWriteChannel, upgraded: CompletableDeferred<Boolean>?) -> Unit): Job

Start connection HTTP pipeline invoking handler for every request. Note that handler could be invoked multiple times concurrently due to HTTP pipeline nature

startServerConnectionPipeline

fun CoroutineScope.startServerConnectionPipeline(connection: ServerIncomingConnection, timeout: WeakTimeoutQueue, handler: HttpRequestHandler): Job

Start connection HTTP pipeline invoking handler for every request. Note that handler could be invoked multiple times concurrently due to HTTP pipeline nature