Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@file:Suppress(
"CANNOT_OVERRIDE_INVISIBLE_MEMBER",
"INVISIBLE_MEMBER",
"INVISIBLE_REFERENCE",
)

package okhttp3

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ class OkHttpClientTestRule :
private lateinit var testName: String
private var defaultUncaughtExceptionHandler: Thread.UncaughtExceptionHandler? = null
private var taskQueuesWereIdle: Boolean = false
private val connectionListener = RecordingConnectionListener()
val connectionListener = RecordingConnectionListener()

var logger: Logger? = null

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@file:Suppress(
"CANNOT_OVERRIDE_INVISIBLE_MEMBER",
"INVISIBLE_MEMBER",
"INVISIBLE_REFERENCE",
)

package okhttp3

import assertk.assertThat
Expand All @@ -30,12 +24,11 @@ import java.util.Deque
import java.util.concurrent.ConcurrentLinkedDeque
import java.util.concurrent.TimeUnit
import okhttp3.ConnectionEvent.NoNewExchanges
import okhttp3.internal.connection.ConnectionListener
import okhttp3.internal.connection.RealConnection
import okio.IOException
import org.junit.jupiter.api.Assertions

internal open class RecordingConnectionListener(
open class RecordingConnectionListener(
/**
* An override to ignore the normal order that is enforced.
* EventListeners added by Interceptors will not see all events.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ import okhttp3.internal.concurrent.TaskFaker
import okhttp3.internal.concurrent.TaskRunner
import okhttp3.internal.concurrent.withLock
import okhttp3.internal.connection.CallConnectionUser
import okhttp3.internal.connection.ConnectionListener
import okhttp3.internal.connection.FastFallbackExchangeFinder
import okhttp3.internal.connection.RealCall
import okhttp3.internal.connection.RealConnection
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* Copyright (C) 2023 Block, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package okhttp3.internal.http2

import okhttp3.ConnectionListener
import okhttp3.internal.http2.flowcontrol.WindowCounter

/**
* ConnectionListener that outputs CSV for flow control of client receiving streams.
*/
class Http2FlowControlConnectionListener :
ConnectionListener(),
FlowControlListener {
val start = System.currentTimeMillis()

override fun receivingStreamWindowChanged(
streamId: Int,
windowCounter: WindowCounter,
bufferSize: Long,
) {
println("${System.currentTimeMillis() - start},$streamId,${windowCounter.unacknowledged},$bufferSize")
}

override fun receivingConnectionWindowChanged(windowCounter: WindowCounter) {
println("${System.currentTimeMillis() - start},0,${windowCounter.unacknowledged},")
}
}
18 changes: 18 additions & 0 deletions okhttp/api/android/okhttp.api
Original file line number Diff line number Diff line change
Expand Up @@ -344,9 +344,27 @@ public abstract interface class okhttp3/Connection {
public abstract fun socket ()Ljava/net/Socket;
}

public abstract class okhttp3/ConnectionListener {
public static final field Companion Lokhttp3/ConnectionListener$Companion;
public fun <init> ()V
public fun connectEnd (Lokhttp3/Connection;Lokhttp3/Route;Lokhttp3/Call;)V
public fun connectFailed (Lokhttp3/Route;Lokhttp3/Call;Ljava/io/IOException;)V
public fun connectStart (Lokhttp3/Route;Lokhttp3/Call;)V
public fun connectionAcquired (Lokhttp3/Connection;Lokhttp3/Call;)V
public fun connectionClosed (Lokhttp3/Connection;)V
public fun connectionReleased (Lokhttp3/Connection;Lokhttp3/Call;)V
public fun noNewExchanges (Lokhttp3/Connection;)V
}

public final class okhttp3/ConnectionListener$Companion {
public final fun getNONE ()Lokhttp3/ConnectionListener;
}

public final class okhttp3/ConnectionPool {
public fun <init> ()V
public fun <init> (IJLjava/util/concurrent/TimeUnit;)V
public fun <init> (IJLjava/util/concurrent/TimeUnit;Lokhttp3/ConnectionListener;)V
public synthetic fun <init> (IJLjava/util/concurrent/TimeUnit;Lokhttp3/ConnectionListener;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun connectionCount ()I
public final fun evictAll ()V
public final fun idleConnectionCount ()I
Expand Down
18 changes: 18 additions & 0 deletions okhttp/api/jvm/okhttp.api
Original file line number Diff line number Diff line change
Expand Up @@ -344,9 +344,27 @@ public abstract interface class okhttp3/Connection {
public abstract fun socket ()Ljava/net/Socket;
}

public abstract class okhttp3/ConnectionListener {
public static final field Companion Lokhttp3/ConnectionListener$Companion;
public fun <init> ()V
public fun connectEnd (Lokhttp3/Connection;Lokhttp3/Route;Lokhttp3/Call;)V
public fun connectFailed (Lokhttp3/Route;Lokhttp3/Call;Ljava/io/IOException;)V
public fun connectStart (Lokhttp3/Route;Lokhttp3/Call;)V
public fun connectionAcquired (Lokhttp3/Connection;Lokhttp3/Call;)V
public fun connectionClosed (Lokhttp3/Connection;)V
public fun connectionReleased (Lokhttp3/Connection;Lokhttp3/Call;)V
public fun noNewExchanges (Lokhttp3/Connection;)V
}

public final class okhttp3/ConnectionListener$Companion {
public final fun getNONE ()Lokhttp3/ConnectionListener;
}

public final class okhttp3/ConnectionPool {
public fun <init> ()V
public fun <init> (IJLjava/util/concurrent/TimeUnit;)V
public fun <init> (IJLjava/util/concurrent/TimeUnit;Lokhttp3/ConnectionListener;)V
public synthetic fun <init> (IJLjava/util/concurrent/TimeUnit;Lokhttp3/ConnectionListener;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun connectionCount ()I
public final fun evictAll ()V
public final fun idleConnectionCount ()I
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2017 Square, Inc.
* Copyright (C) 2025 Block, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -13,11 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package okhttp3.internal.connection
package okhttp3

import okhttp3.Call
import okhttp3.Connection
import okhttp3.Route
import okio.IOException

/**
Expand All @@ -27,7 +24,7 @@ import okio.IOException
* attempt to mutate the event parameters, or be reentrant back into the client.
* Any IO - writing to files or network should be done asynchronously.
*/
internal abstract class ConnectionListener {
abstract class ConnectionListener {
/**
* Invoked as soon as a call causes a connection to be started.
*/
Expand Down
5 changes: 2 additions & 3 deletions okhttp/src/commonJvmAndroid/kotlin/okhttp3/ConnectionPool.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package okhttp3

import java.util.concurrent.TimeUnit
import okhttp3.internal.concurrent.TaskRunner
import okhttp3.internal.connection.ConnectionListener
import okhttp3.internal.connection.FastFallbackExchangeFinder
import okhttp3.internal.connection.ForceConnectRoutePlanner
import okhttp3.internal.connection.RealConnectionPool
Expand Down Expand Up @@ -83,8 +82,8 @@ class ConnectionPool internal constructor(
),
)

// Internal until we promote ConnectionListener to be a public API.
internal constructor(
// Public API
constructor(
maxIdleConnections: Int = 5,
keepAliveDuration: Long = 5,
timeUnit: TimeUnit = TimeUnit.MINUTES,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import java.net.InetAddress
import java.net.Proxy
import java.net.Socket
import okhttp3.Connection
import okhttp3.ConnectionListener
import okhttp3.EventListener
import okhttp3.Handshake
import okhttp3.HttpUrl
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import javax.net.ssl.SSLPeerUnverifiedException
import javax.net.ssl.SSLSocket
import okhttp3.Address
import okhttp3.Connection
import okhttp3.ConnectionListener
import okhttp3.Handshake
import okhttp3.HttpUrl
import okhttp3.OkHttpClient
Expand Down Expand Up @@ -59,7 +60,7 @@ import okio.Buffer
* Connections are shared in a connection pool. Accesses to the connection's state must be guarded
* by holding a lock on the connection.
*/
class RealConnection internal constructor(
class RealConnection(
val taskRunner: TaskRunner,
val connectionPool: RealConnectionPool,
override val route: Route,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import java.util.concurrent.ThreadLocalRandom
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater
import okhttp3.Address
import okhttp3.ConnectionListener
import okhttp3.ConnectionPool
import okhttp3.Route
import okhttp3.internal.closeQuietly
Expand All @@ -35,7 +36,7 @@ import okhttp3.internal.okHttpName
import okhttp3.internal.platform.Platform
import okio.IOException

class RealConnectionPool internal constructor(
class RealConnectionPool(
private val taskRunner: TaskRunner,
/**
* The maximum number of idle connections across all addresses.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import java.nio.charset.Charset
import javax.net.ssl.SSLSocket
import okhttp3.Cache
import okhttp3.CipherSuite
import okhttp3.ConnectionListener
import okhttp3.ConnectionPool
import okhttp3.ConnectionSpec
import okhttp3.Cookie
Expand All @@ -35,7 +36,6 @@ import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import okhttp3.internal.concurrent.TaskRunner
import okhttp3.internal.connection.ConnectionListener
import okhttp3.internal.connection.RealConnection

internal fun parseCookie(
Expand Down
6 changes: 0 additions & 6 deletions okhttp/src/jvmTest/kotlin/okhttp3/ConnectionListenerTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@file:Suppress(
"CANNOT_OVERRIDE_INVISIBLE_MEMBER",
"INVISIBLE_MEMBER",
"INVISIBLE_REFERENCE",
)

package okhttp3

import assertk.assertThat
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import java.net.URI
import java.net.UnknownHostException
import kotlin.test.assertFailsWith
import okhttp3.Address
import okhttp3.ConnectionListener
import okhttp3.FakeDns
import okhttp3.OkHttpClientTestRule
import okhttp3.Request
Expand Down
Loading