in ktor-client/ktor-client-curl/posix/src/io/ktor/client/engine/curl/internal/CurlMultiApiHandler.kt [43:80]
public fun scheduleRequest(request: CurlRequestData): EasyHandle {
val easyHandle = curl_easy_init()
?: throw @Suppress("DEPRECATION") CurlIllegalStateException("Could not initialize an easy handle")
val responseData = CurlResponseBuilder(request)
val responseDataRef = responseData.asStablePointer()
setupMethod(easyHandle, request.method, request.content.size)
val contentHolder = setupUploadContent(easyHandle, request.content)
activeHandles[easyHandle] = RequestHolders(contentHolder?.asStableRef(), responseDataRef.asStableRef())
easyHandle.apply {
option(CURLOPT_URL, request.url)
option(CURLOPT_HTTPHEADER, request.headers)
option(CURLOPT_HEADERFUNCTION, staticCFunction(::onHeadersReceived))
option(CURLOPT_HEADERDATA, responseDataRef)
option(CURLOPT_WRITEFUNCTION, staticCFunction(::onBodyChunkReceived))
option(CURLOPT_WRITEDATA, responseDataRef)
option(CURLOPT_PRIVATE, responseDataRef)
option(CURLOPT_ACCEPT_ENCODING, "")
request.connectTimeout?.let {
if (it != HttpTimeout.INFINITE_TIMEOUT_MS) {
option(CURLOPT_CONNECTTIMEOUT_MS, request.connectTimeout)
} else {
option(CURLOPT_CONNECTTIMEOUT_MS, Long.MAX_VALUE)
}
}
request.proxy?.let { proxy ->
option(CURLOPT_PROXY, proxy.toString())
}
}
curl_multi_add_handle(multiHandle, easyHandle).verify()
return easyHandle
}