ApplicationCall

interface ApplicationCall

Represents a single act of communication between client and server.

Properties

application

abstract val application: Application

Application being called

attributes

abstract val attributes: Attributes

Attributes attached to this instance

parameters

abstract val parameters: Parameters

Parameters associated with this call

request

abstract val request: ApplicationRequest

Client request

response

abstract val response: ApplicationResponse

Server response

Extension Properties

authentication

Retrieves an AuthenticationContext for this call

callId

val ApplicationCall.callId: String?

A call id that is retrieved or generated by CallId feature or null (this is possible if there is no call id provided and no generators configured or CallId feature is not installed)

locations

val ApplicationCall.locations: Locations

Gets the Application.locations feature

sessions

Get current session or fail if no session feature installed

Extension Functions

defaultTextContentType

fun ApplicationCall.defaultTextContentType(
    contentType: ContentType?
): ContentType

Creates a default ContentType based on the given contentType and current call

digestAuthenticationCredentials

fun ApplicationCall.digestAuthenticationCredentials(): DigestCredential?

Retrieves DigestCredential from this call

principal

fun <P : Principal> ApplicationCall.principal(): P?

Retrieves authenticated Principal for this call

push

fun ApplicationCall.push(pathAndQuery: String): Unit
fun ApplicationCall.push(
    encodedPath: String,
    parameters: Parameters
): Unit

Produces HTTP/2 push from server to client or sets HTTP/1.x hint header or does nothing. Exact behaviour is up to engine implementation.

fun ApplicationCall.push(
    block: ResponsePushBuilder.() -> Unit
): Unit

Produces HTTP/2 push from server to client or sets HTTP/1.x hint header or does nothing (may call or not call block). Exact behaviour is up to engine implementation.

receive

suspend fun <T : Any> ApplicationCall.receive(): T
suspend fun <T : Any> ApplicationCall.receive(
    type: KClass<T>
): T

Receives content for this request.

receiveChannel

suspend fun ApplicationCall.receiveChannel(): ByteReadChannel

Receives channel content for this call.

receiveMultipart

suspend fun ApplicationCall.receiveMultipart(): MultiPartData

Receives multipart data for this call.

receiveOrNull

suspend fun <T : Any> ApplicationCall.receiveOrNull(): T?
suspend fun <T : Any> ApplicationCall.receiveOrNull(
    type: KClass<T>
): T?

Receives content for this request.

receiveParameters

suspend fun ApplicationCall.receiveParameters(): Parameters

Receives form parameters for this call.

receiveStream

suspend fun ApplicationCall.receiveStream(): InputStream

Receives stream content for this call.

receiveText

suspend fun ApplicationCall.receiveText(): String

Receives incoming content for this call as String.

resolveResource

fun ApplicationCall.resolveResource(
    path: String,
    resourcePackage: String? = null,
    classLoader: ClassLoader = application.environment.classLoader,
    mimeResolve: (String) -> ContentType = { ContentType.defaultForFileExtension(it) }
): OutgoingContent?

respond

suspend fun ApplicationCall.respond(message: Any): Unit

Sends a message as a response

suspend fun ApplicationCall.respond(
    status: HttpStatusCode,
    message: Any
): Unit

Sets status and sends a message as a response

respondBytes

suspend fun ApplicationCall.respondBytes(
    contentType: ContentType? = null,
    status: HttpStatusCode? = null,
    provider: suspend () -> ByteArray
): Unit

Responds to a client with a raw bytes response, using specified provider to build a byte array

suspend fun ApplicationCall.respondBytes(
    bytes: ByteArray,
    contentType: ContentType? = null,
    status: HttpStatusCode? = null,
    configure: OutgoingContent.() -> Unit = {}
): Unit

Responds to a client with a raw bytes response, using specified bytes

respondFile

suspend fun ApplicationCall.respondFile(
    baseDir: File,
    fileName: String,
    configure: OutgoingContent.() -> Unit = {}
): Unit

Responds to a client with a contents of a file with the name fileName in the baseDir folder

suspend fun ApplicationCall.respondFile(
    file: File,
    configure: OutgoingContent.() -> Unit = {}
): Unit

Responds to a client with a contents of a file

respondHtml

suspend fun ApplicationCall.respondHtml(
    status: HttpStatusCode = HttpStatusCode.OK,
    block: HTML.() -> Unit
): Unit

Responds to a client with a HTML response, using specified block to build an HTML page

respondHtmlTemplate

suspend fun <TTemplate : Template<HTML>> ApplicationCall.respondHtmlTemplate(
    template: TTemplate,
    status: HttpStatusCode = HttpStatusCode.OK,
    body: TTemplate.() -> Unit
): Unit

respondOutputStream

suspend fun ApplicationCall.respondOutputStream(
    contentType: ContentType? = null,
    status: HttpStatusCode? = null,
    producer: suspend OutputStream.() -> Unit
): Unit

Respond with binary content producer.

respondRedirect

suspend fun ApplicationCall.respondRedirect(
    url: String,
    permanent: Boolean = false
): Unit

Responds to a client with a 301 Moved Permanently or 302 Found redirect

suspend fun ApplicationCall.respondRedirect(
    permanent: Boolean = false,
    block: URLBuilder.() -> Unit
): Unit

Responds to a client with a 301 Moved Permanently or 302 Found redirect. Unlike the other respondRedirect it provides a way to build URL based on current call using block function

respondTemplate

suspend fun ApplicationCall.respondTemplate(
    template: String,
    model: Any? = null,
    etag: String? = null,
    contentType: ContentType = ContentType.Text.Html.withCharset(Charsets.UTF_8)
): Unit

Respond with the specified template passing model

respondTemplate

suspend fun ApplicationCall.respondTemplate(
    template: String,
    model: Any? = null,
    etag: String? = null,
    contentType: ContentType = ContentType.Text.Html.withCharset( Charsets.UTF_8 )
): Unit

Respond with the specified template passing model

respondTemplate

suspend fun ApplicationCall.respondTemplate(
    template: String,
    model: Map<String, Any> = emptyMap(),
    etag: String? = null,
    contentType: ContentType = ContentType.Text.Html.withCharset(Charsets.UTF_8)
): Unit

Respond with template applying model

respondTemplate

suspend fun ApplicationCall.respondTemplate(
    template: String,
    model: Map<String, Any> = emptyMap(),
    etag: String? = null,
    contentType: ContentType = ContentType.Text.Html.withCharset(Charsets.UTF_8)
): Unit

Respond with template applying model

respondText

suspend fun ApplicationCall.respondText(
    text: String,
    contentType: ContentType? = null,
    status: HttpStatusCode? = null,
    configure: OutgoingContent.() -> Unit = {}
): Unit

Responds to a client with a plain text response, using specified text

suspend fun ApplicationCall.respondText(
    contentType: ContentType? = null,
    status: HttpStatusCode? = null,
    provider: suspend () -> String
): Unit

Responds to a client with a plain text response, using specified provider to build a text

respondTextWriter

suspend fun ApplicationCall.respondTextWriter(
    contentType: ContentType? = null,
    status: HttpStatusCode? = null,
    writer: suspend Writer.() -> Unit
): Unit

Respond with text content writer.

respondWrite

suspend fun ApplicationCall.respondWrite(
    contentType: ContentType? = null,
    status: HttpStatusCode? = null,
    writer: suspend Writer.() -> Unit
): Unit

suitableCharset

fun ApplicationCall.suitableCharset(
    defaultCharset: Charset = Charsets.UTF_8
): Charset

Detect suitable charset for an application call by Accept header or fallback to defaultCharset

url

fun ApplicationCall.url(
    location: Any,
    block: URLBuilder.() -> Unit = {}
): String

Constructs a String with the url of a instance location whose class must be annotated with Location.

url

fun ApplicationCall.url(
    block: URLBuilder.() -> Unit = {}
): String

Creates an url using current call’s schema, path and parameters as initial and then invokes block function on the url builder so amend parameters

withETag

suspend fun ApplicationCall.withETag(
    etag: String,
    putHeader: Boolean = true,
    block: suspend () -> Unit
): Unit

Checks current etag value and pass it through conditions supplied by the remote client. Depends on conditions it produces 410 Precondition Failed or 304 Not modified responses when necessary. Otherwise sets ETag header and delegates to the block function

Inheritors

BaseApplicationCall

abstract class BaseApplicationCall : ApplicationCall

Base class for implementing an ApplicationCall.

RoutingApplicationCall

class RoutingApplicationCall : ApplicationCall

Represents an application call being handled by Routing