package io.netty.handler.codec.http.websocketx; import androidx.work.WorkRequest; import io.netty.handler.codec.http.EmptyHttpHeaders; import io.netty.handler.codec.http.HttpHeaders; import io.netty.util.internal.ObjectUtil; import java.net.URI; public final class WebSocketClientProtocolConfig { static final boolean DEFAULT_ALLOW_MASK_MISMATCH = false; static final boolean DEFAULT_DROP_PONG_FRAMES = true; static final boolean DEFAULT_HANDLE_CLOSE_FRAMES = true; static final boolean DEFAULT_PERFORM_MASKING = true; private final boolean absoluteUpgradeUrl; private final boolean allowExtensions; private final boolean allowMaskMismatch; private final HttpHeaders customHeaders; private final boolean dropPongFrames; private final long forceCloseTimeoutMillis; private final boolean handleCloseFrames; private final long handshakeTimeoutMillis; private final int maxFramePayloadLength; private final boolean performMasking; private final WebSocketCloseStatus sendCloseFrame; private final String subprotocol; private final WebSocketVersion version; private final URI webSocketUri; public static final class Builder { private boolean absoluteUpgradeUrl; private boolean allowExtensions; private boolean allowMaskMismatch; private HttpHeaders customHeaders; private boolean dropPongFrames; private long forceCloseTimeoutMillis; private boolean handleCloseFrames; private long handshakeTimeoutMillis; private int maxFramePayloadLength; private boolean performMasking; private WebSocketCloseStatus sendCloseFrame; private String subprotocol; private WebSocketVersion version; private URI webSocketUri; private Builder(WebSocketClientProtocolConfig webSocketClientProtocolConfig) { this(((WebSocketClientProtocolConfig) ObjectUtil.checkNotNull(webSocketClientProtocolConfig, "clientConfig")).webSocketUri(), webSocketClientProtocolConfig.subprotocol(), webSocketClientProtocolConfig.version(), webSocketClientProtocolConfig.allowExtensions(), webSocketClientProtocolConfig.customHeaders(), webSocketClientProtocolConfig.maxFramePayloadLength(), webSocketClientProtocolConfig.performMasking(), webSocketClientProtocolConfig.allowMaskMismatch(), webSocketClientProtocolConfig.handleCloseFrames(), webSocketClientProtocolConfig.sendCloseFrame(), webSocketClientProtocolConfig.dropPongFrames(), webSocketClientProtocolConfig.handshakeTimeoutMillis(), webSocketClientProtocolConfig.forceCloseTimeoutMillis(), webSocketClientProtocolConfig.absoluteUpgradeUrl()); } private Builder(URI uri, String str, WebSocketVersion webSocketVersion, boolean z10, HttpHeaders httpHeaders, int i10, boolean z11, boolean z12, boolean z13, WebSocketCloseStatus webSocketCloseStatus, boolean z14, long j2, long j10, boolean z15) { this.webSocketUri = uri; this.subprotocol = str; this.version = webSocketVersion; this.allowExtensions = z10; this.customHeaders = httpHeaders; this.maxFramePayloadLength = i10; this.performMasking = z11; this.allowMaskMismatch = z12; this.handleCloseFrames = z13; this.sendCloseFrame = webSocketCloseStatus; this.dropPongFrames = z14; this.handshakeTimeoutMillis = j2; this.forceCloseTimeoutMillis = j10; this.absoluteUpgradeUrl = z15; } public Builder absoluteUpgradeUrl(boolean z10) { this.absoluteUpgradeUrl = z10; return this; } public Builder allowExtensions(boolean z10) { this.allowExtensions = z10; return this; } public Builder allowMaskMismatch(boolean z10) { this.allowMaskMismatch = z10; return this; } public WebSocketClientProtocolConfig build() { return new WebSocketClientProtocolConfig(this.webSocketUri, this.subprotocol, this.version, this.allowExtensions, this.customHeaders, this.maxFramePayloadLength, this.performMasking, this.allowMaskMismatch, this.handleCloseFrames, this.sendCloseFrame, this.dropPongFrames, this.handshakeTimeoutMillis, this.forceCloseTimeoutMillis, this.absoluteUpgradeUrl); } public Builder customHeaders(HttpHeaders httpHeaders) { this.customHeaders = httpHeaders; return this; } public Builder dropPongFrames(boolean z10) { this.dropPongFrames = z10; return this; } public Builder forceCloseTimeoutMillis(long j2) { this.forceCloseTimeoutMillis = j2; return this; } public Builder handleCloseFrames(boolean z10) { this.handleCloseFrames = z10; return this; } public Builder handshakeTimeoutMillis(long j2) { this.handshakeTimeoutMillis = j2; return this; } public Builder maxFramePayloadLength(int i10) { this.maxFramePayloadLength = i10; return this; } public Builder performMasking(boolean z10) { this.performMasking = z10; return this; } public Builder sendCloseFrame(WebSocketCloseStatus webSocketCloseStatus) { this.sendCloseFrame = webSocketCloseStatus; return this; } public Builder subprotocol(String str) { this.subprotocol = str; return this; } public Builder version(WebSocketVersion webSocketVersion) { this.version = webSocketVersion; return this; } public Builder webSocketUri(String str) { return webSocketUri(URI.create(str)); } public Builder webSocketUri(URI uri) { this.webSocketUri = uri; return this; } } private WebSocketClientProtocolConfig(URI uri, String str, WebSocketVersion webSocketVersion, boolean z10, HttpHeaders httpHeaders, int i10, boolean z11, boolean z12, boolean z13, WebSocketCloseStatus webSocketCloseStatus, boolean z14, long j2, long j10, boolean z15) { this.webSocketUri = uri; this.subprotocol = str; this.version = webSocketVersion; this.allowExtensions = z10; this.customHeaders = httpHeaders; this.maxFramePayloadLength = i10; this.performMasking = z11; this.allowMaskMismatch = z12; this.forceCloseTimeoutMillis = j10; this.handleCloseFrames = z13; this.sendCloseFrame = webSocketCloseStatus; this.dropPongFrames = z14; this.handshakeTimeoutMillis = ObjectUtil.checkPositive(j2, "handshakeTimeoutMillis"); this.absoluteUpgradeUrl = z15; } public static Builder newBuilder() { return new Builder(URI.create("https://localhost/"), null, WebSocketVersion.V13, false, EmptyHttpHeaders.INSTANCE, 65536, true, false, true, WebSocketCloseStatus.NORMAL_CLOSURE, true, WorkRequest.MIN_BACKOFF_MILLIS, -1, false); } public boolean absoluteUpgradeUrl() { return this.absoluteUpgradeUrl; } public boolean allowExtensions() { return this.allowExtensions; } public boolean allowMaskMismatch() { return this.allowMaskMismatch; } public HttpHeaders customHeaders() { return this.customHeaders; } public boolean dropPongFrames() { return this.dropPongFrames; } public long forceCloseTimeoutMillis() { return this.forceCloseTimeoutMillis; } public boolean handleCloseFrames() { return this.handleCloseFrames; } public long handshakeTimeoutMillis() { return this.handshakeTimeoutMillis; } public int maxFramePayloadLength() { return this.maxFramePayloadLength; } public boolean performMasking() { return this.performMasking; } public WebSocketCloseStatus sendCloseFrame() { return this.sendCloseFrame; } public String subprotocol() { return this.subprotocol; } public Builder toBuilder() { return new Builder(); } public String toString() { return "WebSocketClientProtocolConfig {webSocketUri=" + this.webSocketUri + ", subprotocol=" + this.subprotocol + ", version=" + this.version + ", allowExtensions=" + this.allowExtensions + ", customHeaders=" + this.customHeaders + ", maxFramePayloadLength=" + this.maxFramePayloadLength + ", performMasking=" + this.performMasking + ", allowMaskMismatch=" + this.allowMaskMismatch + ", handleCloseFrames=" + this.handleCloseFrames + ", sendCloseFrame=" + this.sendCloseFrame + ", dropPongFrames=" + this.dropPongFrames + ", handshakeTimeoutMillis=" + this.handshakeTimeoutMillis + ", forceCloseTimeoutMillis=" + this.forceCloseTimeoutMillis + ", absoluteUpgradeUrl=" + this.absoluteUpgradeUrl + "}"; } public WebSocketVersion version() { return this.version; } public URI webSocketUri() { return this.webSocketUri; } }