package org.snmp4j.agent.mo.snmp;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
import org.snmp4j.agent.DuplicateRegistrationException;
import org.snmp4j.agent.MOGroup;
import org.snmp4j.agent.MOServer;
import org.snmp4j.agent.mo.DefaultMOMutableRow2PC;
import org.snmp4j.agent.mo.DefaultMOMutableRow2PCFactory;
import org.snmp4j.agent.mo.DefaultMOMutableTableModel;
import org.snmp4j.agent.mo.DefaultMOTable;
import org.snmp4j.agent.mo.DefaultMOTableRow;
import org.snmp4j.agent.mo.MOAccessImpl;
import org.snmp4j.agent.mo.MOColumn;
import org.snmp4j.agent.mo.MOTable;
import org.snmp4j.agent.mo.MOTableIndex;
import org.snmp4j.agent.mo.MOTableModel;
import org.snmp4j.agent.mo.MOTableRow;
import org.snmp4j.agent.mo.MOTableSubIndex;
import org.snmp4j.agent.mo.util.LexicographicOctetStringComparator;
import org.snmp4j.agent.security.MutableVACM;
import org.snmp4j.log.LogAdapter;
import org.snmp4j.log.LogFactory;
import org.snmp4j.security.SecurityModels;
import org.snmp4j.smi.Integer32;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.Variable;

/* JADX INFO: loaded from: classes.dex */
public class VacmMIB implements MOGroup, MutableVACM {
    public static final int colVacmAccessContextMatch = 4;
    public static final int colVacmAccessNotifyViewName = 7;
    public static final int colVacmAccessReadViewName = 5;
    public static final int colVacmAccessRowStatus = 9;
    public static final int colVacmAccessStorageType = 8;
    public static final int colVacmAccessWriteViewName = 6;
    public static final int colVacmGroupName = 3;
    public static final int colVacmSecurityToGroupRowStatus = 5;
    public static final int colVacmSecurityToGroupStorageType = 4;
    public static final int colVacmViewTreeFamilyMask = 3;
    public static final int colVacmViewTreeFamilyRowStatus = 6;
    public static final int colVacmViewTreeFamilyStorageType = 5;
    public static final int colVacmViewTreeFamilyType = 4;
    public static final int idxVacmAccessContextMatch = 0;
    public static final int idxVacmAccessContextPrefix = 1;
    public static final int idxVacmAccessNotifyViewName = 3;
    public static final int idxVacmAccessReadViewName = 1;
    public static final int idxVacmAccessRowStatus = 5;
    public static final int idxVacmAccessSecurityLevel = 3;
    public static final int idxVacmAccessSecurityModel = 2;
    public static final int idxVacmAccessStorageType = 4;
    public static final int idxVacmAccessWriteViewName = 2;
    public static final int idxVacmGroupName = 0;
    public static final int idxVacmSecurityToGroupRowStatus = 2;
    public static final int idxVacmSecurityToGroupStorageType = 1;
    public static final int idxVacmViewTreeFamilyMask = 0;
    public static final int idxVacmViewTreeFamilyRowStatus = 3;
    public static final int idxVacmViewTreeFamilyStorageType = 2;
    public static final int idxVacmViewTreeFamilyType = 1;
    public static final int idxVacmViewTreeSubtree = 1;
    private static MOTableIndex vacmAccessIndex = null;
    private static MOTableSubIndex[] vacmAccessIndexes = null;
    public static final int vacmExactMatch = 1;
    public static final int vacmPrefixMatch = 2;
    public static final int vacmViewExcluded = 2;
    public static final int vacmViewIncluded = 1;
    private static MOTableIndex vacmViewTreeFamilyIndex;
    private static MOTableSubIndex[] vacmViewTreeFamilyIndexes;
    private MOServer[] server;
    private DefaultMOTable<DefaultMOMutableRow2PC, MOColumn, DefaultMOMutableTableModel<DefaultMOMutableRow2PC>> vacmAccessTable;
    private DefaultMOMutableTableModel<DefaultMOMutableRow2PC> vacmAccessTableModel;
    private DefaultMOTable<MOTableRow, MOColumn, VacmContextTableModel> vacmContextTable;
    private DefaultMOTable<DefaultMOMutableRow2PC, MOColumn, DefaultMOMutableTableModel<DefaultMOMutableRow2PC>> vacmSecurityToGroupTable;
    private DefaultMOMutableTableModel<DefaultMOMutableRow2PC> vacmSecurityToGroupTableModel;
    private TestAndIncr vacmViewSpinLock;
    private DefaultMOTable<DefaultMOMutableRow2PC, MOColumn, DefaultMOMutableTableModel<DefaultMOMutableRow2PC>> vacmViewTreeFamilyTable;
    private DefaultMOMutableTableModel<DefaultMOMutableRow2PC> vacmViewTreeFamilyTableModel;
    private static final LogAdapter logger = LogFactory.getLogger(VacmMIB.class);
    public static final OID vacmContextEntryOID = new OID(new int[]{1, 3, 6, 1, 6, 3, 16, 1, 1, 1});
    public static final OID vacmSecurityToGroupEntryOID = new OID(new int[]{1, 3, 6, 1, 6, 3, 16, 1, 2, 1});
    public static final OID vacmAccessEntryOID = new OID(new int[]{1, 3, 6, 1, 6, 3, 16, 1, 4, 1});
    public static final OID vacmViewSpinLockOID = new OID(new int[]{1, 3, 6, 1, 6, 3, 16, 1, 5, 1, 0});
    public static final OID vacmViewTreeFamilyEntryOID = new OID(new int[]{1, 3, 6, 1, 6, 3, 16, 1, 5, 2, 1});
    private static final int[] vacmViewTreeFamilyTypeValues = {1, 2};

    public static class VacmContextIterator implements Iterator<MOTableRow> {
        private OctetString[] contexts;
        private int index;

        VacmContextIterator(OctetString[] octetStringArr, int i2) {
            this.index = 0;
            this.contexts = octetStringArr;
            this.index = i2;
        }

        @Override // java.util.Iterator
        public boolean hasNext() {
            return this.index < this.contexts.length;
        }

        @Override // java.util.Iterator
        public void remove() {
            throw new UnsupportedOperationException();
        }

        @Override // java.util.Iterator
        public MOTableRow next() {
            int i2 = this.index;
            OctetString[] octetStringArr = this.contexts;
            if (i2 >= octetStringArr.length) {
                throw new NoSuchElementException();
            }
            this.index = i2 + 1;
            OctetString octetString = octetStringArr[i2];
            return new DefaultMOTableRow(octetString.toSubIndex(false), new Variable[]{octetString});
        }
    }

    class VacmContextTableModel implements MOTableModel<MOTableRow> {
        VacmContextTableModel() {
        }

        private OctetString[] getContexts() {
            ArrayList arrayList = new ArrayList();
            for (MOServer mOServer : VacmMIB.this.server) {
                arrayList.addAll(Arrays.asList(mOServer.getContexts()));
            }
            return (OctetString[]) arrayList.toArray(new OctetString[arrayList.size()]);
        }

        @Override // org.snmp4j.agent.mo.MOTableModel
        public boolean containsRow(OID oid) {
            return VacmMIB.this.isContextSupported(VacmMIB.getContextFromIndex(oid));
        }

        @Override // org.snmp4j.agent.mo.MOTableModel
        public OID firstIndex() {
            OctetString[] contexts = getContexts();
            if (contexts == null || contexts.length == 0) {
                return null;
            }
            Arrays.sort(contexts, new LexicographicOctetStringComparator());
            return contexts[0].toSubIndex(false);
        }

        @Override // org.snmp4j.agent.mo.MOTableModel
        public MOTableRow firstRow() {
            return getRow(firstIndex());
        }

        @Override // org.snmp4j.agent.mo.MOTableModel
        public int getColumnCount() {
            return 1;
        }

        @Override // org.snmp4j.agent.mo.MOTableModel
        public MOTableRow getRow(OID oid) {
            if (oid == null) {
                return null;
            }
            OctetString contextFromIndex = VacmMIB.getContextFromIndex(oid);
            if (VacmMIB.this.isContextSupported(contextFromIndex)) {
                return new DefaultMOTableRow(oid, new Variable[]{contextFromIndex});
            }
            return null;
        }

        @Override // org.snmp4j.agent.mo.MOTableModel
        public int getRowCount() {
            int length = 0;
            for (MOServer mOServer : VacmMIB.this.server) {
                length += mOServer.getContexts().length;
            }
            return length;
        }

        @Override // org.snmp4j.agent.mo.MOTableModel
        public boolean isEmpty() {
            for (MOServer mOServer : VacmMIB.this.server) {
                if (mOServer.getContexts().length > 0) {
                    return false;
                }
            }
            return true;
        }

        @Override // org.snmp4j.agent.mo.MOTableModel
        public Iterator<MOTableRow> iterator() {
            return tailIterator(new OID());
        }

        @Override // org.snmp4j.agent.mo.MOTableModel
        public OID lastIndex() {
            OctetString[] contexts = getContexts();
            if (contexts == null || contexts.length == 0) {
                return null;
            }
            Arrays.sort(contexts, new LexicographicOctetStringComparator());
            return contexts[contexts.length - 1].toSubIndex(false);
        }

        @Override // org.snmp4j.agent.mo.MOTableModel
        public MOTableRow lastRow() {
            return getRow(lastIndex());
        }

        @Override // org.snmp4j.agent.mo.MOTableModel
        public Iterator<MOTableRow> tailIterator(OID oid) {
            OctetString[] contexts = getContexts();
            if (contexts == null) {
                return new VacmContextIterator(new OctetString[0], 0);
            }
            Arrays.sort(contexts, new LexicographicOctetStringComparator());
            int iBinarySearch = oid != null ? Arrays.binarySearch(contexts, VacmMIB.getContextFromIndex(oid)) : 0;
            if (iBinarySearch < 0) {
                iBinarySearch = -(iBinarySearch + 1);
            }
            return new VacmContextIterator(contexts, iBinarySearch);
        }
    }

    static {
        MOTableSubIndex[] mOTableSubIndexArr = {new MOTableSubIndex(4, 1, 32), new MOTableSubIndex(6, 0, 96)};
        vacmViewTreeFamilyIndexes = mOTableSubIndexArr;
        vacmViewTreeFamilyIndex = new MOTableIndex(mOTableSubIndexArr);
        MOTableSubIndex[] mOTableSubIndexArr2 = {new MOTableSubIndex(4, 1, 32), new MOTableSubIndex(4, 0, 32), new MOTableSubIndex(2, 1, 1), new MOTableSubIndex(2, 1, 1)};
        vacmAccessIndexes = mOTableSubIndexArr2;
        vacmAccessIndex = new MOTableIndex(mOTableSubIndexArr2) { // from class: org.snmp4j.agent.mo.snmp.VacmMIB.1
            @Override // org.snmp4j.agent.mo.MOTableIndex, org.snmp4j.agent.mo.MOTableIndexValidator
            public boolean isValidIndex(OID oid) {
                int i2;
                boolean zIsValidIndex = super.isValidIndex(oid);
                if (zIsValidIndex) {
                    SecurityModels securityModels = SecurityModels.getInstance();
                    Integer32 integer32 = new Integer32(oid.get(oid.size() - 2));
                    if ((integer32.getValue() != 0 && securityModels.getSecurityModel(integer32) == null) || (i2 = oid.get(oid.size() - 1)) < 1 || i2 > 3) {
                        return false;
                    }
                }
                return zIsValidIndex;
            }
        };
    }

    public VacmMIB(MOServer[] mOServerArr) {
        this.server = mOServerArr;
        createVacmContextTable();
        createVacmSecuritToGroupTable();
        createVacmAccessTable();
        createVacmViewTreeFamilyTable();
        this.vacmViewSpinLock = new TestAndIncr(vacmViewSpinLockOID);
    }

    private static OID createAccessIndex(OctetString octetString, OctetString octetString2, int i2, int i3) {
        OID subIndex = octetString.toSubIndex(false);
        subIndex.append(octetString2.toSubIndex(false));
        subIndex.append(i2);
        subIndex.append(i3);
        return subIndex;
    }

    private static OID createGroupIndex(int i2, OctetString octetString) {
        OID oid = new OID();
        oid.append(i2);
        oid.append(octetString.toSubIndex(false));
        return oid;
    }

    private void createVacmAccessTable() {
        this.vacmAccessTable = new DefaultMOTable<>(vacmAccessEntryOID, vacmAccessIndex, new MOColumn[]{new Enumerated(4, 2, MOAccessImpl.ACCESS_READ_CREATE, new Integer32(1), true, new int[]{1, 2}), new SnmpAdminString(5, MOAccessImpl.ACCESS_READ_CREATE, new OctetString(), true, 0, 32), new SnmpAdminString(6, MOAccessImpl.ACCESS_READ_CREATE, new OctetString(), true, 0, 32), new SnmpAdminString(7, MOAccessImpl.ACCESS_READ_CREATE, new OctetString(), true, 0, 32), new StorageType(8, MOAccessImpl.ACCESS_READ_CREATE, new Integer32(3), true), new RowStatus(9)});
        DefaultMOMutableTableModel<DefaultMOMutableRow2PC> defaultMOMutableTableModel = new DefaultMOMutableTableModel<>();
        this.vacmAccessTableModel = defaultMOMutableTableModel;
        defaultMOMutableTableModel.setRowFactory(new DefaultMOMutableRow2PCFactory());
        this.vacmAccessTable.setModel(this.vacmAccessTableModel);
    }

    private void createVacmContextTable() {
        DefaultMOTable<MOTableRow, MOColumn, VacmContextTableModel> defaultMOTable = new DefaultMOTable<>(vacmContextEntryOID, new MOTableIndex(new MOTableSubIndex[]{new MOTableSubIndex(4, 0, 32)}), new MOColumn[]{new MOColumn(1, 4, MOAccessImpl.ACCESS_READ_ONLY)});
        this.vacmContextTable = defaultMOTable;
        defaultMOTable.setVolatile(true);
        this.vacmContextTable.setModel(new VacmContextTableModel());
    }

    private void createVacmSecuritToGroupTable() {
        this.vacmSecurityToGroupTable = new DefaultMOTable<>(vacmSecurityToGroupEntryOID, new MOTableIndex(new MOTableSubIndex[]{new MOTableSubIndex(2, 1, 1), new MOTableSubIndex(4, 1, 32)}) { // from class: org.snmp4j.agent.mo.snmp.VacmMIB.2
            @Override // org.snmp4j.agent.mo.MOTableIndex, org.snmp4j.agent.mo.MOTableIndexValidator
            public boolean isValidIndex(OID oid) {
                boolean zIsValidIndex = super.isValidIndex(oid);
                int i2 = oid.get(0);
                if (zIsValidIndex && i2 > 2 && SecurityModels.getInstance().getSecurityModel(new Integer32(i2)) == null) {
                    return false;
                }
                return zIsValidIndex;
            }
        }, new MOColumn[]{new SnmpAdminString(3, MOAccessImpl.ACCESS_READ_CREATE, null, true, 1, 32), new StorageType(4, MOAccessImpl.ACCESS_READ_CREATE, new Integer32(3), true), new RowStatus(5)});
        DefaultMOMutableTableModel<DefaultMOMutableRow2PC> defaultMOMutableTableModel = new DefaultMOMutableTableModel<>();
        this.vacmSecurityToGroupTableModel = defaultMOMutableTableModel;
        defaultMOMutableTableModel.setRowFactory(new DefaultMOMutableRow2PCFactory());
        this.vacmSecurityToGroupTable.setModel(this.vacmSecurityToGroupTableModel);
    }

    private void createVacmViewTreeFamilyTable() {
        this.vacmViewTreeFamilyTable = new DefaultMOTable<>(vacmViewTreeFamilyEntryOID, vacmViewTreeFamilyIndex, new MOColumn[]{new SnmpAdminString(3, MOAccessImpl.ACCESS_READ_CREATE, new OctetString(), true, 0, 16), new Enumerated(4, 2, MOAccessImpl.ACCESS_READ_CREATE, new Integer32(1), true, vacmViewTreeFamilyTypeValues), new StorageType(5, MOAccessImpl.ACCESS_READ_CREATE, new Integer32(3), true), new RowStatus(6)});
        DefaultMOMutableTableModel<DefaultMOMutableRow2PC> defaultMOMutableTableModel = new DefaultMOMutableTableModel<>();
        this.vacmViewTreeFamilyTableModel = defaultMOMutableTableModel;
        defaultMOMutableTableModel.setRowFactory(new DefaultMOMutableRow2PCFactory());
        this.vacmViewTreeFamilyTable.setModel(this.vacmViewTreeFamilyTableModel);
    }

    private static OID createViewIndex(OctetString octetString, OID oid) {
        OID subIndex = octetString.toSubIndex(false);
        subIndex.append(oid.toSubIndex(false));
        return subIndex;
    }

    private List<MOTableRow> getAccessEntries(OctetString octetString) {
        OctetString octetString2 = new OctetString(octetString);
        byte b = octetString2.length() > 0 ? octetString2.get(octetString2.length() - 1) : (byte) -1;
        if (b == -1) {
            octetString2.append((byte) 0);
        } else {
            octetString2.set(octetString2.length() - 1, (byte) (b + 1));
        }
        return this.vacmAccessTableModel.getRows(octetString.toSubIndex(false), octetString2.toSubIndex(false));
    }

    /* JADX INFO: Access modifiers changed from: private */
    public static OctetString getContextFromIndex(OID oid) {
        return oid.size() > 0 ? new OctetString(oid.toByteArray(), 1, oid.size() - 1) : new OctetString();
    }

    private OctetString getGroupName(OctetString octetString, int i2) {
        OID oid = new OID();
        oid.append(i2);
        oid.append(octetString.toSubIndex(false));
        DefaultMOMutableRow2PC row = this.vacmSecurityToGroupTableModel.getRow(oid);
        if (row == null) {
            return null;
        }
        OctetString octetString2 = (OctetString) row.getValue(0);
        if (logger.isDebugEnabled()) {
            logger.debug("Found group name '" + octetString2 + "' for secName '" + octetString + "' and secModel " + i2);
        }
        return octetString2;
    }

    private OctetString getViewNameByGroup(OctetString octetString, int i2, int i3, int i4, OctetString octetString2) {
        int i5;
        boolean z;
        int i6;
        boolean z2;
        String str;
        OctetString octetString3 = octetString;
        List<MOTableRow> accessEntries = getAccessEntries(octetString2);
        String str2 = "'";
        if (logger.isDebugEnabled()) {
            logger.debug("Got views " + accessEntries + " for group name '" + octetString2 + "'");
        }
        Iterator<MOTableRow> it = accessEntries.iterator();
        MOTableRow mOTableRow = null;
        boolean z3 = false;
        boolean z4 = false;
        int length = 0;
        int i7 = 0;
        while (it.hasNext()) {
            MOTableRow next = it.next();
            if (((Integer32) next.getValue(5)).getValue() == 1) {
                Variable[] indexValues = vacmAccessIndex.getIndexValues(next.getIndex());
                OctetString octetString4 = (OctetString) indexValues[1];
                int value = ((Integer32) indexValues[2]).getValue();
                int value2 = ((Integer32) indexValues[3]).getValue();
                int value3 = ((Integer32) next.getValue(0)).getValue();
                boolean zEquals = octetString4.equals(octetString3);
                Iterator<MOTableRow> it2 = it;
                if (!zEquals && value3 == 2 && octetString3.startsWith(octetString4)) {
                    i5 = i2;
                    z = true;
                } else {
                    i5 = i2;
                    z = false;
                }
                if (value == i5 || value == 0) {
                    i6 = i3;
                    z2 = true;
                } else {
                    i6 = i3;
                    z2 = false;
                }
                boolean z5 = value2 <= i6;
                if (logger.isDebugEnabled()) {
                    str = str2;
                    logger.debug("Matching against access entry " + next + " with exactContextMatch=" + zEquals + ", prefixMatch=" + z + ", matchSecModel=" + z2 + " and matchSecLevel=" + z5);
                } else {
                    str = str2;
                }
                if ((zEquals || z) && z2 && z5 && (mOTableRow == null || ((!z3 && z2) || (((!z3 || z2) && !z4 && zEquals) || (((!z4 || zEquals) && length < octetString4.length()) || (length == octetString4.length() && i7 < value2)))))) {
                    if (z) {
                        length = octetString4.length();
                    }
                    z3 = z2;
                    z4 = zEquals;
                    i7 = value2;
                    mOTableRow = next;
                }
                octetString3 = octetString;
                it = it2;
                str2 = str;
            }
        }
        String str3 = str2;
        if (mOTableRow == null) {
            return null;
        }
        OctetString octetString5 = i4 != 0 ? i4 != 1 ? i4 != 2 ? null : (OctetString) mOTableRow.getValue(2) : (OctetString) mOTableRow.getValue(1) : (OctetString) mOTableRow.getValue(3);
        if (logger.isDebugEnabled()) {
            logger.debug("Matching view found for group name '" + octetString2 + "' is '" + octetString5 + str3);
        }
        return octetString5;
    }

    private List getViews(OctetString octetString) {
        if (octetString.length() == 0) {
            return Collections.EMPTY_LIST;
        }
        OctetString octetString2 = new OctetString(octetString);
        byte b = octetString2.get(octetString2.length() - 1);
        if (b == -1) {
            octetString2.append((byte) 0);
        } else {
            octetString2.set(octetString2.length() - 1, (byte) (b + 1));
        }
        return this.vacmViewTreeFamilyTableModel.getRows(octetString.toSubIndex(false), octetString2.toSubIndex(false));
    }

    private static boolean isBitSet(int i2, OctetString octetString) {
        int i3 = i2 / 8;
        if (octetString.length() > i3) {
            return ((1 << (7 - (i2 % 8))) & octetString.get(i3)) > 0;
        }
        return true;
    }

    /* JADX INFO: Access modifiers changed from: private */
    public boolean isContextSupported(OctetString octetString) {
        for (MOServer mOServer : this.server) {
            if (mOServer.isContextSupported(octetString)) {
                return true;
            }
        }
        return false;
    }

    @Override // org.snmp4j.agent.security.MutableVACM
    public void addAccess(OctetString octetString, OctetString octetString2, int i2, int i3, int i4, OctetString octetString3, OctetString octetString4, OctetString octetString5, int i5) {
        OID oidCreateAccessIndex = createAccessIndex(octetString, octetString2, i2, i3);
        Variable[] variableArr = new Variable[this.vacmAccessTable.getColumnCount()];
        variableArr[0] = new Integer32(i4);
        variableArr[1] = octetString3;
        variableArr[2] = octetString4;
        variableArr[3] = octetString5;
        variableArr[4] = new Integer32(i5);
        variableArr[5] = new Integer32(1);
        this.vacmAccessTable.addRow(this.vacmAccessTableModel.createRow(oidCreateAccessIndex, variableArr));
    }

    @Override // org.snmp4j.agent.security.MutableVACM
    public void addGroup(int i2, OctetString octetString, OctetString octetString2, int i3) {
        OID oidCreateGroupIndex = createGroupIndex(i2, octetString);
        Variable[] variableArr = new Variable[this.vacmSecurityToGroupTable.getColumnCount()];
        variableArr[0] = octetString2;
        variableArr[1] = new Integer32(i3);
        variableArr[2] = new Integer32(1);
        this.vacmSecurityToGroupTable.addRow((DefaultMOMutableRow2PC) this.vacmSecurityToGroupTable.createRow(oidCreateGroupIndex, variableArr));
    }

    @Override // org.snmp4j.agent.security.MutableVACM
    public void addViewTreeFamily(OctetString octetString, OID oid, OctetString octetString2, int i2, int i3) {
        OID oidCreateViewIndex = createViewIndex(octetString, oid);
        Variable[] variableArr = new Variable[this.vacmViewTreeFamilyTable.getColumnCount()];
        variableArr[0] = octetString2;
        variableArr[1] = new Integer32(i2);
        variableArr[2] = new Integer32(i3);
        variableArr[3] = new Integer32(1);
        this.vacmViewTreeFamilyTable.addRow((DefaultMOMutableRow2PC) this.vacmViewTreeFamilyTableModel.createRow(oidCreateViewIndex, variableArr));
    }

    public MOTable getVacmSecurityToGroupTable() {
        return this.vacmSecurityToGroupTable;
    }

    @Override // org.snmp4j.agent.security.VACM
    public OctetString getViewName(OctetString octetString, OctetString octetString2, int i2, int i3, int i4) {
        OctetString groupName = getGroupName(octetString2, i2);
        if (groupName == null) {
            return null;
        }
        return getViewNameByGroup(octetString, i2, i3, i4, groupName);
    }

    @Override // org.snmp4j.agent.security.VACM
    public int isAccessAllowed(OctetString octetString, OctetString octetString2, int i2, int i3, int i4, OID oid) {
        if (logger.isDebugEnabled()) {
            logger.debug("VACM access requested for context=" + octetString + ", securityName=" + octetString2 + ", securityModel=" + i2 + ", securityLevel=" + i3 + ", viewType=" + i4 + ", OID=" + oid);
        }
        if (!isContextSupported(octetString)) {
            if (!logger.isDebugEnabled()) {
                return 3;
            }
            logger.debug("Context '" + octetString + "' ist not supported");
            return 3;
        }
        OctetString groupName = getGroupName(octetString2, i2);
        if (groupName != null) {
            OctetString viewNameByGroup = getViewNameByGroup(octetString, i2, i3, i4, groupName);
            if (viewNameByGroup == null) {
                return 5;
            }
            if (viewNameByGroup.length() == 0) {
                return 2;
            }
            return isAccessAllowed(viewNameByGroup, oid);
        }
        if (!logger.isDebugEnabled()) {
            return 4;
        }
        logger.debug("No group name for securityName=" + octetString2 + " and securityModel=" + i2);
        return 4;
    }

    @Override // org.snmp4j.agent.MOGroup
    public void registerMOs(MOServer mOServer, OctetString octetString) throws DuplicateRegistrationException {
        mOServer.register(this.vacmContextTable, octetString);
        mOServer.register(this.vacmSecurityToGroupTable, octetString);
        mOServer.register(this.vacmAccessTable, octetString);
        mOServer.register(this.vacmViewSpinLock, octetString);
        mOServer.register(this.vacmViewTreeFamilyTable, octetString);
    }

    @Override // org.snmp4j.agent.security.MutableVACM
    public boolean removeAccess(OctetString octetString, OctetString octetString2, int i2, int i3) {
        return this.vacmAccessTable.removeRow(createAccessIndex(octetString, octetString2, i2, i3)) != null;
    }

    @Override // org.snmp4j.agent.security.MutableVACM
    public boolean removeGroup(int i2, OctetString octetString) {
        return this.vacmSecurityToGroupTable.removeRow(createGroupIndex(i2, octetString)) != null;
    }

    @Override // org.snmp4j.agent.security.MutableVACM
    public boolean removeViewTreeFamily(OctetString octetString, OID oid) {
        return this.vacmViewTreeFamilyTable.removeRow(createViewIndex(octetString, oid)) != null;
    }

    @Override // org.snmp4j.agent.MOGroup
    public void unregisterMOs(MOServer mOServer, OctetString octetString) {
        mOServer.unregister(this.vacmContextTable, octetString);
        mOServer.unregister(this.vacmSecurityToGroupTable, octetString);
        mOServer.unregister(this.vacmAccessTable, octetString);
        mOServer.unregister(this.vacmViewSpinLock, octetString);
        mOServer.unregister(this.vacmViewTreeFamilyTable, octetString);
    }

    @Override // org.snmp4j.agent.security.VACM
    public int isAccessAllowed(OctetString octetString, OID oid) {
        boolean z;
        List views = getViews(octetString);
        if (views.size() == 0) {
            if (!logger.isDebugEnabled()) {
                return 2;
            }
            logger.debug("No view tree family entry for view '" + octetString + "'");
            return 2;
        }
        for (int size = views.size() - 1; size >= 0; size--) {
            MOTableRow mOTableRow = (MOTableRow) views.get(size);
            if (((Integer32) mOTableRow.getValue(3)).getValue() == 1) {
                OID oid2 = (OID) vacmViewTreeFamilyIndex.getIndexValues(mOTableRow.getIndex())[1];
                if (oid.size() < oid2.size()) {
                    continue;
                } else {
                    OctetString octetString2 = (OctetString) mOTableRow.getValue(0);
                    int i2 = 0;
                    while (true) {
                        if (i2 >= oid2.size()) {
                            z = true;
                            break;
                        }
                        if (oid2.get(i2) != oid.get(i2) && isBitSet(i2, octetString2)) {
                            z = false;
                            break;
                        }
                        i2++;
                    }
                    if (z) {
                        if (((Integer32) mOTableRow.getValue(1)).getValue() == 1) {
                            if (logger.isDebugEnabled()) {
                                logger.debug("Access allowed for view '" + octetString + "' by subtree " + oid2 + " for OID " + oid);
                            }
                            return 0;
                        }
                        if (logger.isDebugEnabled()) {
                            logger.debug("Access denied for view '" + octetString + "' by subtree " + oid2 + " for OID " + oid);
                        }
                        return 1;
                    }
                }
            }
        }
        return 1;
    }
}
