导航菜单

页面标题

页面副标题

050 IP Phone v2.3.0 - u.java 源代码

正在查看: 050 IP Phone v2.3.0 应用的 u.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package i5;

import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.security.KeyStore;
import java.security.cert.X509Certificate;
import javax.net.ServerSocketFactory;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class u extends i5.a {
    private static p7.a k = s5.d.a(u.class);
    private ServerSocket f;
    private boolean g;
    private boolean h;
    private Thread i;
    private b j;

    class a implements X509TrustManager {
        a() {
        }

        @Override
        public void checkClientTrusted(X509Certificate[] x509CertificateArr, String str) {
        }

        @Override
        public void checkServerTrusted(X509Certificate[] x509CertificateArr, String str) {
        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    }

    private class b implements Runnable {
        private b() {
        }

        @Override
        public void run() {
            u.k.e("Accepting TLS connection [" + u.this.e() + ":" + u.this.c() + "]");
            while (!u.this.s()) {
                if (u.this.r()) {
                    try {
                        Socket accept = u.this.f.accept();
                        SocketAddress remoteSocketAddress = accept.getRemoteSocketAddress();
                        if (u.k.c()) {
                            u.k.a("accept TLS connection,address=[" + remoteSocketAddress + "]");
                        }
                        j i = u.this.i();
                        if (i != null) {
                            i.o(v.m(accept));
                        }
                    } catch (Throwable th) {
                        u.k.f("Connection interrupted", th);
                        if (!u.this.s()) {
                            u.this.close();
                        }
                    }
                } else {
                    u.this.j(1000L);
                }
            }
            u.k.e("TLS acceptor terminated,socket=[" + u.this + "]");
        }

        b(u uVar, a aVar) {
            this();
        }
    }

    protected u(ServerSocket serverSocket, InetAddress inetAddress, int i) {
        super(inetAddress, i, "tls");
        this.g = true;
        this.h = false;
        this.j = new b(this, null);
        this.f = serverSocket;
    }

    private static void n(ServerSocket serverSocket) {
        if (serverSocket != null) {
            try {
                serverSocket.close();
            } catch (Exception e) {
                if (k.c()) {
                    k.b("Failed to close server socket", e);
                }
            }
        }
    }

    private static ServerSocketFactory o(boolean z) {
        return z ? p() : SSLServerSocketFactory.getDefault();
    }

    private static ServerSocketFactory p() {
        try {
            return q(new TrustManager[]{new a()});
        } catch (Exception e) {
            if (k.c()) {
                k.b("Failed to initialize TLS socket for debugging", e);
            }
            if (e instanceof IOException) {
                throw ((IOException) e);
            }
            k.h("Failed to initialize TLS socket", e);
            throw new IOException("Failed to initialize TLS socket");
        }
    }

    private static ServerSocketFactory q(TrustManager[] trustManagerArr) {
        KeyManagerFactory keyManagerFactory;
        try {
            if ("BKS".equals(KeyStore.getDefaultType())) {
                KeyStore keyStore = KeyStore.getInstance("BKS");
                keyStore.load(f.a(), f.b());
                keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
                keyManagerFactory.init(keyStore, f.b());
            } else {
                KeyStore keyStore2 = KeyStore.getInstance("JKS");
                keyStore2.load(n.a(), n.b());
                keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
                keyManagerFactory.init(keyStore2, n.b());
            }
            SSLContext sSLContext = SSLContext.getInstance("TLS");
            sSLContext.init(keyManagerFactory.getKeyManagers(), trustManagerArr, null);
            return sSLContext.getServerSocketFactory();
        } catch (Exception e) {
            if (k.c()) {
                k.b("Failed to initialize TLS socket for debugging", e);
            }
            if (e instanceof IOException) {
                throw ((IOException) e);
            }
            k.h("Failed to initialize TLS socket", e);
            throw new IOException("Failed to initialize TLS socket");
        }
    }

    public synchronized boolean r() {
        return this.h;
    }

    public static u t(ServerSocketFactory serverSocketFactory, String str, int i) {
        k.e("opening server socket, IP address = \"" + str + "\", port = \"" + i + "\"");
        ServerSocket createServerSocket = str == null ? serverSocketFactory.createServerSocket(i, -1, null) : serverSocketFactory.createServerSocket(i, -1, InetAddress.getByName(str));
        InetAddress inetAddress = createServerSocket.getInetAddress();
        int localPort = createServerSocket.getLocalPort();
        k.e("server socket bound, IP address = \"" + inetAddress + "\", port = \"" + localPort + "\"");
        return new u(createServerSocket, inetAddress, localPort);
    }

    public static u u(boolean z, String str, int i) {
        return t(o(z), str, i);
    }

    private synchronized void v() {
        Thread thread = new Thread(this.j, "TLS Acceptor[" + toString() + "]");
        this.i = thread;
        thread.start();
    }

    @Override
    public String a() {
        return "tls";
    }

    @Override
    public int b() {
        return 2;
    }

    @Override
    public synchronized void close() {
        try {
            k.e("closing server socket, IP address = \"" + e() + "\", port = \"" + c() + "\"");
            if (this.g) {
                this.h = false;
                this.g = false;
                n(this.f);
            } else if (k.c()) {
                k.a("server socket already closed,address=[" + toString() + "]");
            }
        } catch (Throwable th) {
            throw th;
        }
    }

    public synchronized boolean s() {
        return !this.g;
    }

    @Override
    public synchronized void start() {
        try {
            if (this.i == null) {
                v();
                if (k.c()) {
                    k.a("acceptor started,socket=[" + toString() + "] ");
                }
                this.h = true;
            } else if (k.c()) {
                k.a("acceptor already started,address=[" + toString() + "]");
            }
        } catch (Throwable th) {
            throw th;
        }
    }
}