829 lines
33 KiB
Java
829 lines
33 KiB
Java
package c.a.q.n0;
|
|
|
|
import android.os.Handler;
|
|
import android.os.Looper;
|
|
import android.os.Process;
|
|
import androidx.annotation.AnyThread;
|
|
import androidx.core.app.NotificationCompat;
|
|
import androidx.core.view.PointerIconCompat;
|
|
import com.airbnb.lottie.parser.AnimatableValueParser;
|
|
import com.discord.models.domain.ModelAuditLogEntry;
|
|
import com.discord.rtcconnection.socket.io.Opcodes;
|
|
import com.discord.rtcconnection.socket.io.Payloads;
|
|
import com.discord.utilities.debug.DebugPrintBuilder;
|
|
import com.discord.utilities.debug.DebugPrintable;
|
|
import com.discord.utilities.logging.Logger;
|
|
import com.discord.utilities.networking.Backoff;
|
|
import com.discord.utilities.rest.SendUtils;
|
|
import com.discord.utilities.time.Clock;
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.JsonElement;
|
|
import com.google.gson.reflect.TypeToken;
|
|
import d0.z.d.m;
|
|
import d0.z.d.o;
|
|
import f0.e0.k.h;
|
|
import f0.x;
|
|
import java.lang.reflect.Type;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Objects;
|
|
import java.util.Timer;
|
|
import java.util.TimerTask;
|
|
import java.util.concurrent.CopyOnWriteArraySet;
|
|
import java.util.concurrent.TimeUnit;
|
|
import javax.net.ssl.SSLException;
|
|
import javax.net.ssl.SSLSocketFactory;
|
|
import kotlin.Unit;
|
|
import kotlin.jvm.functions.Function0;
|
|
import kotlin.jvm.functions.Function1;
|
|
import kotlin.jvm.internal.DefaultConstructorMarker;
|
|
import okhttp3.Request;
|
|
import okhttp3.Response;
|
|
import okhttp3.WebSocket;
|
|
import okhttp3.WebSocketListener;
|
|
/* compiled from: RtcControlSocket.kt */
|
|
public final class a extends WebSocketListener implements DebugPrintable {
|
|
public static int i;
|
|
public static final Type j = new C0040a().getType();
|
|
public static final b k = new b(null);
|
|
public c A;
|
|
public boolean B;
|
|
public final String C;
|
|
public final String D;
|
|
public final SSLSocketFactory E;
|
|
public final Logger F;
|
|
public final c.a.q.c G;
|
|
public final Clock H;
|
|
public final String I;
|
|
public final String l;
|
|
public final Gson m = new c.i.d.e().a();
|
|
public final Timer n = new Timer();
|
|
public final Backoff o;
|
|
public final CopyOnWriteArraySet<d> p;
|
|
public int q;
|
|
public WebSocket r;
|
|
|
|
/* renamed from: s reason: collision with root package name */
|
|
public String f221s;
|
|
public String t;
|
|
public Long u;
|
|
public boolean v;
|
|
public b w;
|
|
|
|
/* renamed from: x reason: collision with root package name */
|
|
public Long f222x;
|
|
|
|
/* renamed from: y reason: collision with root package name */
|
|
public TimerTask f223y;
|
|
|
|
/* renamed from: z reason: collision with root package name */
|
|
public Long f224z;
|
|
|
|
/* compiled from: RtcControlSocket.kt */
|
|
/* renamed from: c.a.q.n0.a$a reason: collision with other inner class name */
|
|
public static final class C0040a extends TypeToken<Map<String, ? extends Integer>> {
|
|
}
|
|
|
|
/* compiled from: RtcControlSocket.kt */
|
|
public static final class b {
|
|
public b(DefaultConstructorMarker defaultConstructorMarker) {
|
|
}
|
|
}
|
|
|
|
/* compiled from: RtcControlSocket.kt */
|
|
public enum c {
|
|
DISCONNECTED,
|
|
CONNECTING,
|
|
IDENTIFYING,
|
|
RESUMING,
|
|
CONNECTED,
|
|
RECONNECTING
|
|
}
|
|
|
|
/* compiled from: RtcControlSocket.kt */
|
|
public interface d {
|
|
void a(String str, String str2);
|
|
|
|
void b(boolean z2, Integer num, String str);
|
|
|
|
void c(String str, List<Integer> list);
|
|
|
|
void d(String str);
|
|
|
|
void e(long j, int i, int i2, List<Payloads.Stream> list);
|
|
|
|
void f(Map<String, Integer> map);
|
|
|
|
void g(long j);
|
|
|
|
void h();
|
|
|
|
void i();
|
|
|
|
void j(long j);
|
|
|
|
void k(int i, int i2, String str, List<Payloads.Stream> list);
|
|
|
|
void onConnecting();
|
|
|
|
void onSpeaking(long j, int i, boolean z2);
|
|
}
|
|
|
|
/* compiled from: RtcControlSocket.kt */
|
|
public static final class e extends o implements Function1<WebSocket, Unit> {
|
|
public static final e i = new e();
|
|
|
|
public e() {
|
|
super(1);
|
|
}
|
|
|
|
/* Return type fixed from 'java.lang.Object' to match base method */
|
|
/* JADX DEBUG: Method arguments types fixed to match base method, original types: [java.lang.Object] */
|
|
@Override // kotlin.jvm.functions.Function1
|
|
public Unit invoke(WebSocket webSocket) {
|
|
WebSocket webSocket2 = webSocket;
|
|
m.checkNotNullParameter(webSocket2, "it");
|
|
webSocket2.e(1000, "Force Close");
|
|
return Unit.a;
|
|
}
|
|
}
|
|
|
|
/* compiled from: RtcControlSocket.kt */
|
|
public static final class f extends o implements Function1<WebSocket, Unit> {
|
|
public static final f i = new f();
|
|
|
|
public f() {
|
|
super(1);
|
|
}
|
|
|
|
/* Return type fixed from 'java.lang.Object' to match base method */
|
|
/* JADX DEBUG: Method arguments types fixed to match base method, original types: [java.lang.Object] */
|
|
@Override // kotlin.jvm.functions.Function1
|
|
public Unit invoke(WebSocket webSocket) {
|
|
WebSocket webSocket2 = webSocket;
|
|
m.checkNotNullParameter(webSocket2, "it");
|
|
webSocket2.e(SendUtils.MAX_MESSAGE_CHARACTER_COUNT_PREMIUM, "close reason");
|
|
return Unit.a;
|
|
}
|
|
}
|
|
|
|
/* compiled from: RtcControlSocket.kt */
|
|
public static final class g extends TimerTask {
|
|
public final /* synthetic */ a i;
|
|
|
|
/* compiled from: RtcControlSocket.kt */
|
|
/* renamed from: c.a.q.n0.a$g$a reason: collision with other inner class name */
|
|
public static final class C0041a extends o implements Function0<Unit> {
|
|
public final /* synthetic */ g this$0;
|
|
|
|
/* JADX INFO: super call moved to the top of the method (can break code semantics) */
|
|
public C0041a(g gVar) {
|
|
super(0);
|
|
this.this$0 = gVar;
|
|
}
|
|
|
|
/* Return type fixed from 'java.lang.Object' to match base method */
|
|
@Override // kotlin.jvm.functions.Function0
|
|
/* renamed from: invoke */
|
|
public Unit mo1invoke() {
|
|
a.a(this.this$0.i, true, null, "The connection timed out. Did not receive OP_HELLO in time.");
|
|
return Unit.a;
|
|
}
|
|
}
|
|
|
|
public g(a aVar) {
|
|
this.i = aVar;
|
|
}
|
|
|
|
@Override // java.util.TimerTask, java.lang.Runnable
|
|
public void run() {
|
|
this.i.o(new C0041a(this));
|
|
}
|
|
}
|
|
|
|
/* compiled from: RtcControlSocket.kt */
|
|
public static final class h extends o implements Function0<Unit> {
|
|
public final /* synthetic */ int $code;
|
|
public final /* synthetic */ String $reason;
|
|
public final /* synthetic */ WebSocket $webSocket;
|
|
public final /* synthetic */ a this$0;
|
|
|
|
/* JADX INFO: super call moved to the top of the method (can break code semantics) */
|
|
public h(a aVar, WebSocket webSocket, int i, String str) {
|
|
super(0);
|
|
this.this$0 = aVar;
|
|
this.$webSocket = webSocket;
|
|
this.$code = i;
|
|
this.$reason = str;
|
|
}
|
|
|
|
/* Return type fixed from 'java.lang.Object' to match base method */
|
|
@Override // kotlin.jvm.functions.Function0
|
|
/* renamed from: invoke */
|
|
public Unit mo1invoke() {
|
|
if (!(!m.areEqual(this.$webSocket, this.this$0.r))) {
|
|
a.a(this.this$0, true, Integer.valueOf(this.$code), this.$reason);
|
|
}
|
|
return Unit.a;
|
|
}
|
|
}
|
|
|
|
/* compiled from: RtcControlSocket.kt */
|
|
public static final class i extends o implements Function0<Unit> {
|
|
public final /* synthetic */ Throwable $t;
|
|
public final /* synthetic */ WebSocket $webSocket;
|
|
public final /* synthetic */ a this$0;
|
|
|
|
/* JADX INFO: super call moved to the top of the method (can break code semantics) */
|
|
public i(a aVar, WebSocket webSocket, Throwable th) {
|
|
super(0);
|
|
this.this$0 = aVar;
|
|
this.$webSocket = webSocket;
|
|
this.$t = th;
|
|
}
|
|
|
|
/* Return type fixed from 'java.lang.Object' to match base method */
|
|
@Override // kotlin.jvm.functions.Function0
|
|
/* renamed from: invoke */
|
|
public Unit mo1invoke() {
|
|
if (!(!m.areEqual(this.$webSocket, this.this$0.r))) {
|
|
if (this.$t instanceof SSLException) {
|
|
a.d(this.this$0, null, 1);
|
|
a aVar = this.this$0;
|
|
aVar.b();
|
|
for (d dVar : aVar.p) {
|
|
m.checkNotNullExpressionValue(dVar, "it");
|
|
dVar.b(false, Integer.valueOf((int) PointerIconCompat.TYPE_CONTEXT_MENU), null);
|
|
}
|
|
} else {
|
|
a aVar2 = this.this$0;
|
|
StringBuilder L = c.d.b.a.a.L("An error with the websocket occurred: ");
|
|
L.append(this.$t.getMessage());
|
|
a.a(aVar2, true, null, L.toString());
|
|
}
|
|
}
|
|
return Unit.a;
|
|
}
|
|
}
|
|
|
|
/* compiled from: RtcControlSocket.kt */
|
|
public static final class j extends o implements Function0<Unit> {
|
|
public final /* synthetic */ Payloads.Incoming $message;
|
|
public final /* synthetic */ WebSocket $webSocket;
|
|
public final /* synthetic */ a this$0;
|
|
|
|
/* JADX INFO: super call moved to the top of the method (can break code semantics) */
|
|
public j(a aVar, WebSocket webSocket, Payloads.Incoming incoming) {
|
|
super(0);
|
|
this.this$0 = aVar;
|
|
this.$webSocket = webSocket;
|
|
this.$message = incoming;
|
|
}
|
|
|
|
/* Return type fixed from 'java.lang.Object' to match base method */
|
|
@Override // kotlin.jvm.functions.Function0
|
|
/* renamed from: invoke */
|
|
public Unit mo1invoke() {
|
|
boolean z2 = true;
|
|
if (!(!m.areEqual(this.$webSocket, this.this$0.r))) {
|
|
switch (this.$message.getOpcode()) {
|
|
case 2:
|
|
a aVar = this.this$0;
|
|
Object c2 = aVar.m.c(this.$message.getData(), Payloads.Ready.class);
|
|
m.checkNotNullExpressionValue(c2, "gson.fromJson(message.da…yloads.Ready::class.java)");
|
|
Payloads.Ready ready = (Payloads.Ready) c2;
|
|
aVar.o.succeed();
|
|
long currentTimeMillis = aVar.H.currentTimeMillis();
|
|
Long l = aVar.f224z;
|
|
long longValue = currentTimeMillis - (l != null ? l.longValue() : 0);
|
|
aVar.k("[READY] took " + longValue + " ms");
|
|
aVar.b();
|
|
for (d dVar : aVar.p) {
|
|
m.checkNotNullExpressionValue(dVar, "it");
|
|
dVar.k(ready.getPort(), ready.getSsrc(), ready.getIp(), ready.getStreams());
|
|
}
|
|
break;
|
|
case 3:
|
|
a aVar2 = this.this$0;
|
|
aVar2.p(3, String.valueOf(aVar2.H.currentTimeMillis()));
|
|
break;
|
|
case 4:
|
|
a aVar3 = this.this$0;
|
|
Object c3 = aVar3.m.c(this.$message.getData(), Payloads.Description.class);
|
|
m.checkNotNullExpressionValue(c3, "gson.fromJson(message.da….Description::class.java)");
|
|
Payloads.Description description = (Payloads.Description) c3;
|
|
aVar3.b();
|
|
for (d dVar2 : aVar3.p) {
|
|
m.checkNotNullExpressionValue(dVar2, "it");
|
|
dVar2.c(description.getMode(), description.getSecretKey());
|
|
dVar2.a(description.getAudioCodec(), description.getVideoCodec());
|
|
String mediaSessionId = description.getMediaSessionId();
|
|
if (mediaSessionId != null) {
|
|
dVar2.d(mediaSessionId);
|
|
}
|
|
}
|
|
aVar3.B = true;
|
|
break;
|
|
case 5:
|
|
a aVar4 = this.this$0;
|
|
Object c4 = aVar4.m.c(this.$message.getData(), Payloads.Speaking.class);
|
|
m.checkNotNullExpressionValue(c4, "gson.fromJson(message.da…ads.Speaking::class.java)");
|
|
Payloads.Speaking speaking = (Payloads.Speaking) c4;
|
|
if (!(speaking.getUserId() == null || speaking.getSpeaking() == null)) {
|
|
Integer speaking2 = speaking.getSpeaking();
|
|
if (speaking2 == null || speaking2.intValue() != 1) {
|
|
z2 = false;
|
|
}
|
|
aVar4.b();
|
|
for (d dVar3 : aVar4.p) {
|
|
m.checkNotNullExpressionValue(dVar3, "it");
|
|
dVar3.onSpeaking(speaking.getUserId().longValue(), speaking.getSsrc(), z2);
|
|
}
|
|
break;
|
|
}
|
|
case 6:
|
|
a aVar5 = this.this$0;
|
|
Object c5 = aVar5.m.c(this.$message.getData(), Long.TYPE);
|
|
m.checkNotNullExpressionValue(c5, "gson.fromJson(message.data, Long::class.java)");
|
|
long longValue2 = ((Number) c5).longValue();
|
|
long currentTimeMillis2 = aVar5.H.currentTimeMillis();
|
|
long j = currentTimeMillis2 - longValue2;
|
|
aVar5.j("got heartbeat ack after " + j + " ms");
|
|
aVar5.f222x = Long.valueOf(currentTimeMillis2);
|
|
aVar5.v = true;
|
|
aVar5.b();
|
|
for (d dVar4 : aVar5.p) {
|
|
m.checkNotNullExpressionValue(dVar4, "it");
|
|
dVar4.g(j);
|
|
}
|
|
break;
|
|
case 7:
|
|
case 10:
|
|
case 11:
|
|
default:
|
|
a aVar6 = this.this$0;
|
|
StringBuilder L = c.d.b.a.a.L("unknown opcode: ");
|
|
L.append(this.$message.getOpcode());
|
|
aVar6.k(L.toString());
|
|
break;
|
|
case 8:
|
|
a aVar7 = this.this$0;
|
|
Object c6 = aVar7.m.c(this.$message.getData(), Payloads.Hello.class);
|
|
m.checkNotNullExpressionValue(c6, "gson.fromJson(message.da…yloads.Hello::class.java)");
|
|
Payloads.Hello hello = (Payloads.Hello) c6;
|
|
TimerTask timerTask = aVar7.f223y;
|
|
if (timerTask != null) {
|
|
timerTask.cancel();
|
|
}
|
|
aVar7.k("[HELLO] raw: " + hello);
|
|
aVar7.u = Long.valueOf(hello.getHeartbeatIntervalMs());
|
|
aVar7.q = hello.getServerVersion();
|
|
aVar7.w.cancel();
|
|
aVar7.v = true;
|
|
aVar7.m();
|
|
break;
|
|
case 9:
|
|
this.this$0.o.succeed();
|
|
break;
|
|
case 12:
|
|
a aVar8 = this.this$0;
|
|
Object c7 = aVar8.m.c(this.$message.getData(), Payloads.Video.class);
|
|
m.checkNotNullExpressionValue(c7, "gson.fromJson(message.da…yloads.Video::class.java)");
|
|
Payloads.Video video = (Payloads.Video) c7;
|
|
if (video.getUserId() != null) {
|
|
aVar8.b();
|
|
for (d dVar5 : aVar8.p) {
|
|
m.checkNotNullExpressionValue(dVar5, "it");
|
|
dVar5.e(video.getUserId().longValue(), video.getAudioSsrc(), video.getVideoSsrc(), video.getStreams());
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 13:
|
|
a aVar9 = this.this$0;
|
|
Object c8 = aVar9.m.c(this.$message.getData(), Payloads.ClientDisconnect.class);
|
|
m.checkNotNullExpressionValue(c8, "gson.fromJson(message.da…ntDisconnect::class.java)");
|
|
Payloads.ClientDisconnect clientDisconnect = (Payloads.ClientDisconnect) c8;
|
|
aVar9.b();
|
|
for (d dVar6 : aVar9.p) {
|
|
m.checkNotNullExpressionValue(dVar6, "it");
|
|
dVar6.j(clientDisconnect.getUserId());
|
|
}
|
|
break;
|
|
case 14:
|
|
a aVar10 = this.this$0;
|
|
Object c9 = aVar10.m.c(this.$message.getData(), Payloads.SessionUpdate.class);
|
|
m.checkNotNullExpressionValue(c9, "gson.fromJson(message.da…essionUpdate::class.java)");
|
|
Payloads.SessionUpdate sessionUpdate = (Payloads.SessionUpdate) c9;
|
|
aVar10.b();
|
|
for (d dVar7 : aVar10.p) {
|
|
m.checkNotNullExpressionValue(dVar7, "it");
|
|
String mediaSessionId2 = sessionUpdate.getMediaSessionId();
|
|
if (mediaSessionId2 != null) {
|
|
dVar7.d(mediaSessionId2);
|
|
}
|
|
}
|
|
break;
|
|
case 15:
|
|
a aVar11 = this.this$0;
|
|
Gson gson = aVar11.m;
|
|
JsonElement data = this.$message.getData();
|
|
Type type = a.j;
|
|
Objects.requireNonNull(gson);
|
|
Object d = data == null ? null : gson.d(new c.i.d.q.x.a(data), type);
|
|
m.checkNotNullExpressionValue(d, "gson.fromJson(message.data, MEDIA_SINK_WANTS_TYPE)");
|
|
Map<String, Integer> map = (Map) d;
|
|
aVar11.b();
|
|
for (d dVar8 : aVar11.p) {
|
|
m.checkNotNullExpressionValue(dVar8, "it");
|
|
dVar8.f(map);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return Unit.a;
|
|
}
|
|
}
|
|
|
|
/* compiled from: RtcControlSocket.kt */
|
|
public static final class k extends o implements Function0<Unit> {
|
|
public final /* synthetic */ WebSocket $webSocket;
|
|
public final /* synthetic */ a this$0;
|
|
|
|
/* JADX INFO: super call moved to the top of the method (can break code semantics) */
|
|
public k(a aVar, WebSocket webSocket) {
|
|
super(0);
|
|
this.this$0 = aVar;
|
|
this.$webSocket = webSocket;
|
|
}
|
|
|
|
/* Return type fixed from 'java.lang.Object' to match base method */
|
|
@Override // kotlin.jvm.functions.Function0
|
|
/* renamed from: invoke */
|
|
public Unit mo1invoke() {
|
|
boolean z2 = true;
|
|
if (!(!m.areEqual(this.$webSocket, this.this$0.r))) {
|
|
a aVar = this.this$0;
|
|
c cVar = aVar.A;
|
|
if (cVar == c.CONNECTING) {
|
|
aVar.b();
|
|
for (d dVar : aVar.p) {
|
|
m.checkNotNullExpressionValue(dVar, "it");
|
|
dVar.i();
|
|
}
|
|
} else if (cVar == c.RECONNECTING) {
|
|
String str = aVar.t;
|
|
String str2 = aVar.f221s;
|
|
String str3 = aVar.D;
|
|
Long l = aVar.f222x;
|
|
if (l != null && aVar.H.currentTimeMillis() - l.longValue() > 60000) {
|
|
z2 = false;
|
|
}
|
|
if (str == null || str2 == null || !aVar.B || !z2) {
|
|
StringBuilder L = c.d.b.a.a.L("Cannot resume connection. resumable: ");
|
|
L.append(aVar.B);
|
|
L.append(" -- isHeartbeatRecentEnough: ");
|
|
L.append(z2);
|
|
aVar.h(false, 4801, L.toString());
|
|
} else {
|
|
aVar.k("[RESUME] resuming session. serverId=" + str2 + " sessionId=" + str);
|
|
aVar.b();
|
|
for (d dVar2 : aVar.p) {
|
|
m.checkNotNullExpressionValue(dVar2, "it");
|
|
dVar2.h();
|
|
}
|
|
aVar.A = c.RESUMING;
|
|
aVar.p(7, new Payloads.Resume(str3, str, str2));
|
|
}
|
|
}
|
|
a aVar2 = this.this$0;
|
|
aVar2.A = c.CONNECTED;
|
|
long currentTimeMillis = aVar2.H.currentTimeMillis();
|
|
Long l2 = this.this$0.f224z;
|
|
long longValue = currentTimeMillis - (l2 != null ? l2.longValue() : 0);
|
|
a aVar3 = this.this$0;
|
|
StringBuilder L2 = c.d.b.a.a.L("[CONNECTED] to ");
|
|
L2.append(this.this$0.C);
|
|
aVar3.k(L2.toString());
|
|
a aVar4 = this.this$0;
|
|
aVar4.b();
|
|
for (d dVar3 : aVar4.p) {
|
|
m.checkNotNullExpressionValue(dVar3, "it");
|
|
dVar3.g(longValue / ((long) 2));
|
|
}
|
|
}
|
|
return Unit.a;
|
|
}
|
|
}
|
|
|
|
/* compiled from: RtcControlSocket.kt */
|
|
public static final class l extends o implements Function1<WebSocket, Unit> {
|
|
public static final l i = new l();
|
|
|
|
public l() {
|
|
super(1);
|
|
}
|
|
|
|
/* Return type fixed from 'java.lang.Object' to match base method */
|
|
/* JADX DEBUG: Method arguments types fixed to match base method, original types: [java.lang.Object] */
|
|
@Override // kotlin.jvm.functions.Function1
|
|
public Unit invoke(WebSocket webSocket) {
|
|
WebSocket webSocket2 = webSocket;
|
|
m.checkNotNullParameter(webSocket2, "it");
|
|
webSocket2.e(SendUtils.MAX_MESSAGE_CHARACTER_COUNT_PREMIUM, "reconnecting");
|
|
return Unit.a;
|
|
}
|
|
}
|
|
|
|
public a(String str, String str2, SSLSocketFactory sSLSocketFactory, Logger logger, c.a.q.c cVar, Clock clock, String str3) {
|
|
m.checkNotNullParameter(str, "endpoint");
|
|
m.checkNotNullParameter(str2, "token");
|
|
m.checkNotNullParameter(logger, "logger");
|
|
m.checkNotNullParameter(cVar, "mediaEngineThreadExecutor");
|
|
m.checkNotNullParameter(clock, "clock");
|
|
m.checkNotNullParameter(str3, "loggingTagPrefix");
|
|
this.C = str;
|
|
this.D = str2;
|
|
this.E = sSLSocketFactory;
|
|
this.F = logger;
|
|
this.G = cVar;
|
|
this.H = clock;
|
|
this.I = str3;
|
|
StringBuilder P = c.d.b.a.a.P(str3, "->RtcControlSocket ");
|
|
int i2 = i + 1;
|
|
i = i2;
|
|
P.append(i2);
|
|
String sb = P.toString();
|
|
this.l = sb;
|
|
this.o = new Backoff(1000, 5000, 3, false, new Backoff.TimerScheduler(sb, cVar), 8, null);
|
|
this.p = new CopyOnWriteArraySet<>();
|
|
this.q = 3;
|
|
this.w = new b(this);
|
|
this.A = c.DISCONNECTED;
|
|
}
|
|
|
|
public static final void a(a aVar, boolean z2, Integer num, String str) {
|
|
aVar.A = c.DISCONNECTED;
|
|
if ((num != null && num.intValue() == 4004) || ((num != null && num.intValue() == 4015) || ((num != null && num.intValue() == 4011) || (num != null && num.intValue() == 4006)))) {
|
|
aVar.h(true, num, str);
|
|
} else if (aVar.o.hasReachedFailureThreshold()) {
|
|
aVar.l("[WS CLOSED] Backoff exceeded. Resetting.");
|
|
aVar.h(z2, num, str);
|
|
} else {
|
|
aVar.c(null);
|
|
String H = c.d.b.a.a.H(new Object[]{Double.valueOf(((double) aVar.o.fail(new c(aVar, z2, num, str))) / 1000.0d)}, 1, "%.2f", "java.lang.String.format(this, *args)");
|
|
aVar.l("`[WS CLOSED] (" + z2 + ", " + num + ", " + str + ") retrying in " + H + " seconds.");
|
|
}
|
|
}
|
|
|
|
public static /* synthetic */ void d(a aVar, Function1 function1, int i2) {
|
|
int i3 = i2 & 1;
|
|
aVar.c(null);
|
|
}
|
|
|
|
public final void b() {
|
|
c.a.q.c cVar = this.G;
|
|
Objects.requireNonNull(cVar);
|
|
if (Process.myTid() != cVar.j) {
|
|
IllegalStateException illegalStateException = new IllegalStateException("oops! not called on the MediaEngineExecutor");
|
|
AnimatableValueParser.E1("MediaEngineExecutor", "oops! not called on the MediaEngineExecutor", illegalStateException);
|
|
if (cVar.l) {
|
|
new Handler(Looper.getMainLooper()).post(new c.a.q.d(illegalStateException));
|
|
}
|
|
}
|
|
}
|
|
|
|
public final void c(Function1<? super WebSocket, Unit> function1) {
|
|
this.o.cancel();
|
|
this.w.cancel();
|
|
TimerTask timerTask = this.f223y;
|
|
if (timerTask != null) {
|
|
timerTask.cancel();
|
|
}
|
|
WebSocket webSocket = this.r;
|
|
if (!(webSocket == null || function1 == null)) {
|
|
function1.invoke(webSocket);
|
|
}
|
|
this.r = null;
|
|
}
|
|
|
|
@Override // com.discord.utilities.debug.DebugPrintable
|
|
public void debugPrint(DebugPrintBuilder debugPrintBuilder) {
|
|
m.checkNotNullParameter(debugPrintBuilder, "dp");
|
|
debugPrintBuilder.appendKeyValue("serverId", this.f221s);
|
|
debugPrintBuilder.appendKeyValue("sessionId", this.t);
|
|
debugPrintBuilder.appendKeyValue("heartbeatInterval", this.u);
|
|
debugPrintBuilder.appendKeyValue("lastHeartbeatAckTime", this.f222x);
|
|
debugPrintBuilder.appendKeyValue("connectionStartTime", this.f224z);
|
|
debugPrintBuilder.appendKeyValue("connectionState", this.A);
|
|
debugPrintBuilder.appendKeyValue("resumable", Boolean.valueOf(this.B));
|
|
}
|
|
|
|
public final void e() {
|
|
b();
|
|
k("[CLOSE]");
|
|
c(e.i);
|
|
this.f221s = null;
|
|
this.t = null;
|
|
this.B = false;
|
|
this.A = c.DISCONNECTED;
|
|
b();
|
|
for (d dVar : this.p) {
|
|
m.checkNotNullExpressionValue(dVar, "it");
|
|
dVar.b(false, 1000, "Force Close");
|
|
}
|
|
}
|
|
|
|
public final boolean f() {
|
|
b();
|
|
if (this.A != c.DISCONNECTED) {
|
|
l("Cannot start a new connection, connection state is not disconnected");
|
|
return false;
|
|
}
|
|
this.A = c.CONNECTING;
|
|
g();
|
|
b();
|
|
for (d dVar : this.p) {
|
|
m.checkNotNullExpressionValue(dVar, "it");
|
|
dVar.onConnecting();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public final void g() {
|
|
StringBuilder L = c.d.b.a.a.L("[CONNECT] ");
|
|
L.append(this.C);
|
|
k(L.toString());
|
|
if (this.r != null) {
|
|
this.F.e(this.l, "Connect called with already existing websocket", null, null);
|
|
c(f.i);
|
|
return;
|
|
}
|
|
this.f224z = Long.valueOf(this.H.currentTimeMillis());
|
|
TimerTask timerTask = this.f223y;
|
|
if (timerTask != null) {
|
|
timerTask.cancel();
|
|
}
|
|
g gVar = new g(this);
|
|
this.f223y = gVar;
|
|
this.n.schedule(gVar, 20000);
|
|
x.a aVar = new x.a();
|
|
aVar.a(1, TimeUnit.MINUTES);
|
|
SSLSocketFactory sSLSocketFactory = this.E;
|
|
if (sSLSocketFactory != null) {
|
|
h.a aVar2 = f0.e0.k.h.f2791c;
|
|
aVar.b(sSLSocketFactory, f0.e0.k.h.a.n());
|
|
}
|
|
String D = c.d.b.a.a.D(new StringBuilder(), this.C, "?v=5");
|
|
k("attempting WSS connection with " + D);
|
|
x xVar = new x(aVar);
|
|
Request.a aVar3 = new Request.a();
|
|
aVar3.f(D);
|
|
this.r = xVar.g(aVar3.a(), this);
|
|
}
|
|
|
|
public final void h(boolean z2, Integer num, String str) {
|
|
l("[DISCONNECT] (" + z2 + ", " + num + ", " + str + ')');
|
|
c(null);
|
|
this.f221s = null;
|
|
this.t = null;
|
|
this.B = false;
|
|
this.A = c.DISCONNECTED;
|
|
b();
|
|
for (d dVar : this.p) {
|
|
m.checkNotNullExpressionValue(dVar, "it");
|
|
dVar.b(z2, num, str);
|
|
}
|
|
}
|
|
|
|
public final void i(long j2, String str, boolean z2) {
|
|
m.checkNotNullParameter(str, ModelAuditLogEntry.CHANGE_KEY_REASON);
|
|
b();
|
|
if (this.r != null) {
|
|
k("Performing an immediate heartbeat on existing socket: " + str);
|
|
this.w.cancel();
|
|
b bVar = new b(this);
|
|
this.w = bVar;
|
|
this.n.schedule(bVar, j2);
|
|
} else if (!z2) {
|
|
k("Immediate heartbeat requested, but is disconnected and a reset was not requested: " + str);
|
|
} else if (this.o.isPending() && this.r == null) {
|
|
k("Connection backoff reset Immediate heartbeat when socket was disconnected.");
|
|
this.o.succeed();
|
|
n(false, 4802, "Reset backoff.");
|
|
}
|
|
}
|
|
|
|
public final void j(String str) {
|
|
Logger.d$default(this.F, this.l, str, null, 4, null);
|
|
}
|
|
|
|
public final void k(String str) {
|
|
Logger.i$default(this.F, this.l, str, null, 4, null);
|
|
}
|
|
|
|
public final void l(String str) {
|
|
Logger.w$default(this.F, this.l, str, null, 4, null);
|
|
}
|
|
|
|
public final void m() {
|
|
if (this.v) {
|
|
this.v = false;
|
|
p(3, String.valueOf(this.H.currentTimeMillis()));
|
|
Long l2 = this.u;
|
|
if (l2 != null) {
|
|
b bVar = new b(this);
|
|
this.w = bVar;
|
|
this.n.schedule(bVar, l2.longValue());
|
|
return;
|
|
}
|
|
l("onHeartbeatInterval called when heartbeatInterval was null");
|
|
return;
|
|
}
|
|
c(d.i);
|
|
String H = c.d.b.a.a.H(new Object[]{Double.valueOf(((double) this.o.fail(new e(this))) / 1000.0d)}, 1, "%.2f", "java.lang.String.format(this, *args)");
|
|
l("[ACK TIMEOUT] reconnecting in " + H + " seconds.");
|
|
}
|
|
|
|
public final void n(boolean z2, Integer num, String str) {
|
|
k("[RECONNECT] wasFatal=" + z2 + " code=" + num + " reason=" + str);
|
|
c(l.i);
|
|
this.A = c.RECONNECTING;
|
|
g();
|
|
}
|
|
|
|
/* JADX WARN: Multi-variable type inference failed */
|
|
/* JADX WARNING: Unknown variable types count: 1 */
|
|
@AnyThread
|
|
public final void o(Function0<Unit> function0) {
|
|
c.a.q.c cVar = this.G;
|
|
if (function0 != null) {
|
|
function0 = new f(function0);
|
|
}
|
|
cVar.k.execute((Runnable) function0);
|
|
}
|
|
|
|
@Override // okhttp3.WebSocketListener
|
|
public void onClosed(WebSocket webSocket, int i2, String str) {
|
|
m.checkNotNullParameter(webSocket, "webSocket");
|
|
m.checkNotNullParameter(str, ModelAuditLogEntry.CHANGE_KEY_REASON);
|
|
super.onClosed(webSocket, i2, str);
|
|
o(new h(this, webSocket, i2, str));
|
|
}
|
|
|
|
@Override // okhttp3.WebSocketListener
|
|
public void onClosing(WebSocket webSocket, int i2, String str) {
|
|
m.checkNotNullParameter(webSocket, "webSocket");
|
|
m.checkNotNullParameter(str, ModelAuditLogEntry.CHANGE_KEY_REASON);
|
|
((f0.e0.n.d) webSocket).e(i2, str);
|
|
}
|
|
|
|
@Override // okhttp3.WebSocketListener
|
|
public void onFailure(WebSocket webSocket, Throwable th, Response response) {
|
|
m.checkNotNullParameter(webSocket, "webSocket");
|
|
m.checkNotNullParameter(th, "t");
|
|
super.onFailure(webSocket, th, response);
|
|
o(new i(this, webSocket, th));
|
|
}
|
|
|
|
@Override // okhttp3.WebSocketListener
|
|
public void onMessage(WebSocket webSocket, String str) {
|
|
m.checkNotNullParameter(webSocket, "webSocket");
|
|
m.checkNotNullParameter(str, NotificationCompat.MessagingStyle.Message.KEY_TEXT);
|
|
Payloads.Incoming incoming = (Payloads.Incoming) c.i.a.f.e.o.c.q0(Payloads.Incoming.class).cast(this.m.g(str, Payloads.Incoming.class));
|
|
super.onMessage(webSocket, str);
|
|
StringBuilder L = c.d.b.a.a.L("received (");
|
|
L.append(Opcodes.INSTANCE.getNameOf(incoming.getOpcode()));
|
|
L.append("): ");
|
|
L.append(incoming);
|
|
j(L.toString());
|
|
o(new j(this, webSocket, incoming));
|
|
}
|
|
|
|
@Override // okhttp3.WebSocketListener
|
|
public void onOpen(WebSocket webSocket, Response response) {
|
|
m.checkNotNullParameter(webSocket, "webSocket");
|
|
m.checkNotNullParameter(response, "response");
|
|
super.onOpen(webSocket, response);
|
|
o(new k(this, webSocket));
|
|
}
|
|
|
|
public final void p(int i2, Object obj) {
|
|
WebSocket webSocket = this.r;
|
|
if (webSocket == null) {
|
|
StringBuilder L = c.d.b.a.a.L("opcode() websocket null. opcode: ");
|
|
L.append(Opcodes.INSTANCE.getNameOf(i2));
|
|
this.F.e(this.l, L.toString(), null, null);
|
|
return;
|
|
}
|
|
try {
|
|
String m = this.m.m(new Payloads.Outgoing(i2, obj));
|
|
j("sending (" + Opcodes.INSTANCE.getNameOf(i2) + "): " + m);
|
|
m.checkNotNullExpressionValue(m, "json");
|
|
webSocket.a(m);
|
|
} catch (Exception unused) {
|
|
l("exception sending opcode: " + i2 + " and payload: " + obj);
|
|
}
|
|
}
|
|
}
|