package com.seewo.vcommons.helper;

import android.util.Log;
import com.seewo.vcommons.utils.ShellCommandUtils;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;

/* JADX INFO: loaded from: classes.dex */
public class PortMappingHelper {
    public static final String CUSTOM_CHAIN_NAME = "custom_dnat_chain";
    private static final String OP_ADD = "-A";
    public static final String TAG = "PortMappingHelper";
    private static volatile PortMappingHelper sPortMappingHelper;

    public static PortMappingHelper getInstance() {
        if (sPortMappingHelper == null) {
            synchronized (PortMappingHelper.class) {
                if (sPortMappingHelper == null) {
                    sPortMappingHelper = new PortMappingHelper();
                }
            }
        }
        return sPortMappingHelper;
    }

    public void initDnatChain() {
        createCustomChain(CUSTOM_CHAIN_NAME);
        applyChainTo(CUSTOM_CHAIN_NAME, "PREROUTING", OP_ADD);
    }

    public void clearAll() {
        execute("iptables -t nat -F custom_dnat_chain");
    }

    public void mapAll(String str, String str2, String str3) {
        DNATBuilder dNATBuilder = new DNATBuilder();
        dNATBuilder.setChain(CUSTOM_CHAIN_NAME).setMultiSourcePorts(str3).setFromIP(str).setToIP(str2).setOp(OP_ADD).setProtocol("tcp");
        execute(dNATBuilder.build());
        dNATBuilder.setProtocol("udp");
        execute(dNATBuilder.build());
    }

    public void createCustomChain(String str) {
        execute("iptables -t nat -N " + str);
    }

    private void applyChainTo(String str, String str2, String str3) {
        execute("iptables -t nat " + str3 + " " + str2 + " -j " + str);
    }

    private void execute(String str) {
        ShellCommandUtils.CommandResult commandResultExecuteCommand = ShellCommandUtils.executeCommand(str);
        Log.i(TAG, "create chain cmd: " + str);
        Log.i(TAG, "create chain result= " + commandResultExecuteCommand.errorMsg + " " + commandResultExecuteCommand.successMsg);
    }

    public String getTranslatedPorts(int[] iArr) {
        Arrays.sort(iArr);
        StringBuilder sb = new StringBuilder();
        for (int i : iArr) {
            if (i <= 65535) {
                sb.append(i);
                sb.append(",");
            }
        }
        sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }

    public String getRestPorts(int[] iArr) {
        int i;
        Arrays.sort(iArr);
        LinkedList<Integer> linkedList = new LinkedList<>();
        for (int i2 : iArr) {
            if (!linkedList.contains(Integer.valueOf(i2))) {
                linkedList.add(Integer.valueOf(i2));
            }
        }
        LinkedList<Integer> linkedList2 = new LinkedList<>();
        linkedList2.addFirst(1);
        Iterator<Integer> it = linkedList.iterator();
        while (it.hasNext()) {
            addBeforeAndAfter(it.next().intValue(), linkedList2, linkedList);
        }
        linkedList2.addLast(65535);
        StringBuilder sb = new StringBuilder();
        for (int i3 = 0; i3 < linkedList2.size(); i3++) {
            if (i3 % 2 != 1 && (i = i3 + 1) < linkedList2.size()) {
                sb.append(linkedList2.get(i3));
                sb.append(":");
                sb.append(linkedList2.get(i));
                sb.append(",");
            }
        }
        sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }

    private void addBeforeAndAfter(int i, LinkedList<Integer> linkedList, LinkedList<Integer> linkedList2) {
        int i2 = i - 1;
        int i3 = i + 1;
        while (linkedList.contains(Integer.valueOf(i2))) {
            linkedList.remove(Integer.valueOf(i2));
            i2--;
        }
        if (i2 > 0 && !linkedList2.contains(Integer.valueOf(i2))) {
            linkedList.add(Integer.valueOf(i2));
        }
        while (linkedList.contains(Integer.valueOf(i3))) {
            linkedList.remove(Integer.valueOf(i2));
            i3++;
        }
        if (i3 >= 65536 || linkedList2.contains(Integer.valueOf(i3))) {
            return;
        }
        linkedList.add(Integer.valueOf(i3));
    }

    static class DNATBuilder {
        private String chain;
        private String fromIP;
        private String fromPort;
        private String multiSourcePorts;
        private String op;
        private String protocol;
        private String toIP;
        private String toPort;

        DNATBuilder() {
        }

        public DNATBuilder setChain(String str) {
            this.chain = str;
            return this;
        }

        public DNATBuilder setMultiSourcePorts(String str) {
            this.multiSourcePorts = str;
            this.fromPort = null;
            this.toPort = null;
            return this;
        }

        public DNATBuilder setToPort(String str) {
            this.toPort = str;
            this.multiSourcePorts = null;
            return this;
        }

        public DNATBuilder setFromPort(String str) {
            this.fromPort = str;
            this.multiSourcePorts = null;
            return this;
        }

        public DNATBuilder setFromIP(String str) {
            this.fromIP = str;
            return this;
        }

        public DNATBuilder setOp(String str) {
            this.op = str;
            return this;
        }

        public DNATBuilder setProtocol(String str) {
            this.protocol = str;
            return this;
        }

        public DNATBuilder setToIP(String str) {
            this.toIP = str;
            return this;
        }

        public String build() {
            StringBuilder sb = new StringBuilder("iptables -t nat");
            sb.append(" " + this.op + " " + this.chain);
            sb.append(" -d " + this.fromIP);
            sb.append(" -p " + this.protocol);
            if (this.multiSourcePorts != null) {
                sb.append(" -m multiport --dports " + this.multiSourcePorts);
            } else if (this.fromPort != null) {
                sb.append(" --dport " + this.fromPort);
            }
            sb.append(" -j DNAT");
            sb.append(" --to-destination " + this.toIP);
            if (this.toPort != null) {
                sb.append(":" + this.toPort);
            }
            return sb.toString();
        }
    }
}
