Beispiel #1
0
 public void SetNICsState(NICHandler.IP_CHOICES Where, bool bNICSet)
 {
     m_bNICsSet = bNICSet;
     m_NICsWhere = Where;
 }
 public bool GetNICsSet(ref NICHandler.IP_CHOICES Where)
 {
     Where = m_NICsWhere;
     return(m_bNICsSet);
 }
    private void SetState()
    {
        NICHandler.IP_CHOICES Where = NICHandler.IP_CHOICES.DEFAULT;
        bool bNICsSet = m_CurState.GetNICsSet(ref Where);

        bool bGotNetwork      = false;
        bool bODNSAvailable   = false;
        bool bIsProxyRunning  = false;
        bool bIsAltPort       = false;
        bool bCanUseEncrypted = false;

        m_CurState.GetNetworkState(ref bGotNetwork, ref bODNSAvailable, ref bIsAltPort, ref bIsProxyRunning, ref bCanUseEncrypted);

        bool bUseDNSCrypt    = false;
        bool bUseDNSCryptTCP = false;
        bool bUseOpenDNS     = false;
        bool bUseInsecure    = false;

        m_CurState.GetCanDoDesiredNetworkState(ref bUseDNSCrypt, ref bUseDNSCryptTCP, ref bUseOpenDNS, ref bUseInsecure);

        // If we're not using TCP, and we want to use DNSCrypt, we must make sure we're encrypted
        if (!bUseDNSCryptTCP && bUseDNSCrypt)
        {
            // No secure connection means FAIL OVER
            if (!bGotNetwork || !bCanUseEncrypted)
            {
                if (bUseInsecure)
                {
                    m_CurState.SetRunState(RUN_STATE.FAIL_OPEN);
                }
                else
                {
                    m_CurState.SetRunState(RUN_STATE.FAIL_CLOSED);
                }

                if (!bUseDNSCryptTCP)
                {
                    return;
                }
            }
        }

        switch (m_CurState.GetRunState())
        {
        case RUN_STATE.FAIL_OPEN:

            if (bUseDNSCrypt && !bUseDNSCryptTCP && bCanUseEncrypted)
            {
                m_CurState.SetRunState(RUN_STATE.DNSCRYPT_FULL);
            }
            else if (bUseDNSCrypt && bUseDNSCryptTCP && bCanUseEncrypted)
            {
                m_CurState.SetRunState(RUN_STATE.DNSCRYPT_TCP);
            }
            else if (!bUseDNSCryptTCP && bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.OPENDNS_ONLY);
            }
            else if (!bUseDNSCrypt && !bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.DEFAULT);
            }

            break;

        case RUN_STATE.FAIL_CLOSED:

            if (bUseDNSCrypt && !bUseDNSCryptTCP && bCanUseEncrypted)
            {
                m_CurState.SetRunState(RUN_STATE.DNSCRYPT_FULL);
            }
            else if (bUseDNSCrypt && bUseDNSCryptTCP && bCanUseEncrypted)
            {
                m_CurState.SetRunState(RUN_STATE.DNSCRYPT_TCP);
            }
            else if (!bUseDNSCrypt && !bUseDNSCryptTCP && bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.OPENDNS_ONLY);
            }
            else if (!bUseDNSCrypt && !bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.DEFAULT);
            }

            break;

        case RUN_STATE.SERVICE_RUNNING:

            if (bUseDNSCrypt && bUseDNSCryptTCP && bIsProxyRunning && bNICsSet && Where == NICHandler.IP_CHOICES.LOCALHOST)
            {
                m_CurState.SetRunState(RUN_STATE.DNSCRYPT_TCP);
            }
            else if (bUseDNSCrypt && bIsProxyRunning && bNICsSet && Where == NICHandler.IP_CHOICES.LOCALHOST)
            {
                m_CurState.SetRunState(RUN_STATE.DNSCRYPT_FULL);
            }
            else if (!bUseDNSCrypt && !bUseDNSCryptTCP && bUseOpenDNS && bNICsSet && Where == NICHandler.IP_CHOICES.OPENDNS)
            {
                m_CurState.SetRunState(RUN_STATE.OPENDNS_ONLY);
            }
            else if (!bUseDNSCrypt && !bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.DEFAULT);
            }

            break;

        case RUN_STATE.SERVICE_RESTART:

            if (bUseDNSCrypt && bUseDNSCryptTCP && bIsProxyRunning && bNICsSet && Where == NICHandler.IP_CHOICES.LOCALHOST)
            {
                m_CurState.SetRunState(RUN_STATE.DNSCRYPT_TCP);
            }
            else if (bUseDNSCrypt && !bUseDNSCryptTCP && bIsProxyRunning && bNICsSet && Where == NICHandler.IP_CHOICES.LOCALHOST)
            {
                m_CurState.SetRunState(RUN_STATE.DNSCRYPT_FULL);
            }
            else if (!bUseDNSCrypt && !bUseDNSCryptTCP && bUseOpenDNS && bNICsSet && Where == NICHandler.IP_CHOICES.OPENDNS)
            {
                m_CurState.SetRunState(RUN_STATE.OPENDNS_ONLY);
            }
            else if (!bUseDNSCrypt && !bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.DEFAULT);
            }

            break;

        case RUN_STATE.DNSCRYPT_FULL:
            if (bUseDNSCrypt && !bUseDNSCryptTCP && !bCanUseEncrypted && bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.FAIL_OPEN);
            }
            else if (bUseDNSCrypt && !bUseDNSCryptTCP && !bCanUseEncrypted && !bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.FAIL_CLOSED);
            }
            else if (bUseDNSCrypt && bUseDNSCryptTCP && bIsProxyRunning)
            {
                m_CurState.SetRunState(RUN_STATE.SERVICE_RESTART);
            }
            else if (!bUseDNSCrypt && bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.OPENDNS_ONLY);
            }
            else if (!bUseDNSCrypt && !bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.DEFAULT);
            }

            break;

        case RUN_STATE.DNSCRYPT_TCP:
            if (bUseDNSCrypt && bUseDNSCryptTCP && !bCanUseEncrypted && bUseInsecure)
            {
                m_CurState.SetRunState(RUN_STATE.FAIL_OPEN);
            }
            else if (bUseDNSCrypt && bUseDNSCryptTCP && !bCanUseEncrypted && !bUseInsecure)
            {
                m_CurState.SetRunState(RUN_STATE.FAIL_CLOSED);
            }
            else if (bUseDNSCrypt && !bUseDNSCryptTCP && bIsProxyRunning)
            {
                m_CurState.SetRunState(RUN_STATE.SERVICE_RESTART);
            }
            else if (!bUseDNSCrypt && bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.OPENDNS_ONLY);
            }
            else if (!bUseDNSCrypt && !bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.DEFAULT);
            }

            break;

        case RUN_STATE.OPENDNS_ONLY:

            if (bUseDNSCrypt && !bUseDNSCryptTCP && bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.DNSCRYPT_FULL);
            }
            if (bUseDNSCrypt && bUseDNSCryptTCP && bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.DNSCRYPT_TCP);
            }
            else if (bUseDNSCrypt && bUseOpenDNS && bUseInsecure)
            {
                m_CurState.SetRunState(RUN_STATE.FAIL_OPEN);
            }
            else if (bUseDNSCrypt && !bUseOpenDNS && !bUseInsecure)
            {
                m_CurState.SetRunState(RUN_STATE.FAIL_CLOSED);
            }
            else if (!bUseDNSCrypt && !bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.DEFAULT);
            }

            break;

        case RUN_STATE.DEFAULT:

            if (bUseDNSCrypt && !bUseDNSCryptTCP && bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.DNSCRYPT_FULL);
            }
            else if (bUseDNSCrypt && bUseDNSCryptTCP && bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.DNSCRYPT_TCP);
            }
            else if (!bUseDNSCrypt && bUseOpenDNS)
            {
                m_CurState.SetRunState(RUN_STATE.OPENDNS_ONLY);
            }

            break;
        }
    }
 public void SetNICsState(NICHandler.IP_CHOICES Where, bool bNICSet)
 {
     m_bNICsSet  = bNICSet;
     m_NICsWhere = Where;
 }