Back to index

lightning-sunbird  0.9+nobinonly
Public Member Functions | Private Types | Private Member Functions | Private Attributes | Static Private Attributes
nsRASAutodial Class Reference

#include <nsAutodialWin.h>

Collaboration diagram for nsRASAutodial:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 nsRASAutodial ()
virtual ~nsRASAutodial ()
nsresult Init ()
nsresult DialDefault (const char *hostName)
PRBool ShouldDialOnNetworkError ()

Private Types

enum  { AUTODIAL_NEVER = 1 }
enum  { AUTODIAL_ALWAYS = 2 }
enum  { AUTODIAL_ON_NETWORKERROR = 3 }
enum  { AUTODIAL_USE_SERVICE = 4 }

Private Member Functions

PRBool IsAutodialServiceRunning ()
int NumRASEntries ()
nsresult GetDefaultEntryName (char *entryName, int bufferSize)
nsresult GetFirstEntryName (char *entryName, int bufferSize)
PRBool IsRASConnected ()
int QueryAutodialBehavior ()
PRBool AddAddressToAutodialDirectory (const char *hostName)
int GetCurrentLocation ()
PRBool IsAutodialServiceEnabled (int location)
PRBool LoadRASapi32DLL ()
PRBool LoadRASdlgDLL ()

Private Attributes

int mAutodialBehavior
int mAutodialServiceDialingLocation
int mNumRASConnectionEntries
char mDefaultEntryName [RAS_MaxEntryName+1]
OSVERSIONINFO mOSVerInfo

Static Private Attributes

static PRIntervalTime mDontRetryUntil = 0
static HINSTANCE mhRASdlg = nsnull
static HINSTANCE mhRASapi32 = nsnull
static tRASPHONEBOOKDLG mpRasPhonebookDlg = nsnull
static tRASENUMCONNECTIONS mpRasEnumConnections = nsnull
static tRASENUMENTRIES mpRasEnumEntries = nsnull
static tRASDIALDLG mpRasDialDlg = nsnull
static tRASSETAUTODIALADDRESS mpRasSetAutodialAddress = nsnull
static tRASGETAUTODIALADDRESS mpRasGetAutodialAddress = nsnull
static tRASGETAUTODIALENABLE mpRasGetAutodialEnable = nsnull
static tRASGETAUTODIALPARAM mpRasGetAutodialParam = nsnull

Detailed Description

Definition at line 95 of file nsAutodialWin.h.


Member Enumeration Documentation

anonymous enum [private]
Enumerator:
AUTODIAL_NEVER 

Definition at line 139 of file nsAutodialWin.h.

{ AUTODIAL_NEVER = 1 };            // Never autodial.
anonymous enum [private]
Enumerator:
AUTODIAL_ALWAYS 

Definition at line 140 of file nsAutodialWin.h.

{ AUTODIAL_ALWAYS = 2 };           // Always autodial as set in Internet Options.
anonymous enum [private]
Enumerator:
AUTODIAL_ON_NETWORKERROR 

Definition at line 141 of file nsAutodialWin.h.

{ AUTODIAL_ON_NETWORKERROR = 3 };  // Autodial when a connection error occurs as set in Internet Options.
anonymous enum [private]
Enumerator:
AUTODIAL_USE_SERVICE 

Definition at line 142 of file nsAutodialWin.h.

{ AUTODIAL_USE_SERVICE = 4 };      // Use the RAS autodial service to dial.

Constructor & Destructor Documentation

Definition at line 98 of file nsAutodialWin.cpp.

:   mAutodialBehavior(AUTODIAL_DEFAULT),
    mNumRASConnectionEntries(0),
    mAutodialServiceDialingLocation(-1)
{
    mOSVerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    GetVersionEx(&mOSVerInfo);

#ifndef WINCE
    // We only need to dial on nt based systems. For all other platforms, 
    // mAutodialBehavior will remain AUTODIAL_NEVER, and we can skip
    // these initializations.
    if ((mOSVerInfo.dwPlatformId == VER_PLATFORM_WIN32_NT) 
     && (mOSVerInfo.dwMajorVersion >= 4))
#endif
    {
        // Initializations that can be made again since RAS OS settings can 
        // change.
        Init();
    }
}

Here is the call graph for this function:

Definition at line 121 of file nsAutodialWin.cpp.

{
}

Member Function Documentation

Definition at line 667 of file nsAutodialWin.cpp.

{
    // Need to load the DLL if not loaded yet.
    if (!LoadRASapi32DLL())
        return PR_FALSE;

    // First see if there is already a db entry for this address. 
    RASAUTODIALENTRY autodialEntry;
    autodialEntry.dwSize = sizeof(RASAUTODIALENTRY);
    DWORD size = sizeof(RASAUTODIALENTRY);
    DWORD entries = 0;

    DWORD result = (*mpRasGetAutodialAddress)(hostName, 
                                    nsnull, 
                                    &autodialEntry, 
                                    &size, 
                                    &entries);

    // If there is already at least 1 entry in db for this address, return.
    if (result != ERROR_FILE_NOT_FOUND)
    {
        LOGD(("Autodial: Address %s already in autodial db.", hostName));
        return PR_FALSE;
    }

    autodialEntry.dwSize = sizeof(RASAUTODIALENTRY);
    autodialEntry.dwFlags = 0;
    autodialEntry.dwDialingLocation = mAutodialServiceDialingLocation;
    GetDefaultEntryName(autodialEntry.szEntry, RAS_MaxEntryName);

    result = (*mpRasSetAutodialAddress)(hostName, 
                                    0, 
                                    &autodialEntry, 
                                    sizeof(RASAUTODIALENTRY), 
                                    1);

    if (result != ERROR_SUCCESS)
    {
        LOGE(("Autodial ::RasSetAutodialAddress failed result %d.", result));
        return PR_FALSE;
    }

    LOGD(("Autodial: Added address %s to RAS autodial db for entry %s.",
     hostName, autodialEntry.szEntry));

    return PR_TRUE;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 333 of file nsAutodialWin.cpp.

{
#ifndef WINCE
    mDontRetryUntil = 0;

    if (mAutodialBehavior == AUTODIAL_NEVER)
    {
        return NS_ERROR_FAILURE;    // don't retry the network error
    }

    // If already a RAS connection, bail.
    if (IsRASConnected())
    {
        LOGD(("Autodial: Not dialing: active connection."));
        return NS_ERROR_FAILURE;    // don't retry
    }

    // If no dialup connections configured, bail.
    if (mNumRASConnectionEntries <= 0)
    {
        LOGD(("Autodial: Not dialing: no entries."));
        return NS_ERROR_FAILURE;    // don't retry
    }


    // If autodial service is running, let it dial. In order for it to dial more
    // reliably, we have to add the target address to the autodial database.
    // This is the only way the autodial service dial if there is a network
    // adapter installed. But even then it might not dial. We have to assume that
    // it will though, or we could end up with two attempts to dial on the same
    // network error if the user cancels the first one: one from the service and
    // one from us.
    // See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rras/ras4over_3dwl.asp
    if (mAutodialBehavior == AUTODIAL_USE_SERVICE)
    {
        AddAddressToAutodialDirectory(hostName);
        return NS_ERROR_FAILURE;    // don't retry
    }

    // Do the dialing ourselves.
    else
    {
        // Don't need to load the dll before this.
        if (!LoadRASdlgDLL())
            return NS_ERROR_NULL_POINTER;

        // If a default dial entry is configured, use it.
        if (mDefaultEntryName[0] != '\0') 
        {
            LOGD(("Autodial: Dialing default: %s.",mDefaultEntryName));

            RASDIALDLG rasDialDlg;
            memset(&rasDialDlg, 0, sizeof(RASDIALDLG));
            rasDialDlg.dwSize = sizeof(RASDIALDLG);

            PRBool dialed = 
             (*mpRasDialDlg)(nsnull, mDefaultEntryName, nsnull, &rasDialDlg);

            if (!dialed)
            {
                if (rasDialDlg.dwError != 0)
                {
                    LOGE(("Autodial ::RasDialDlg failed: Error: %d.", 
                     rasDialDlg.dwError));
                }
                else
                {
                    mDontRetryUntil = PR_IntervalNow() + PR_SecondsToInterval(NO_RETRY_PERIOD_SEC);
                    LOGD(("Autodial: User cancelled dial."));
                }
                return NS_ERROR_FAILURE;    // don't retry
            }

            LOGD(("Autodial: RAS dialup connection successful."));
        }

        // If no default connection specified, open the dialup dialog that lets
        // the user specifiy which connection to dial.
        else
        {
            LOGD(("Autodial: Prompting for phonebook entry."));

            RASPBDLG rasPBDlg;
            memset(&rasPBDlg, 0, sizeof(RASPBDLG));
            rasPBDlg.dwSize = sizeof(RASPBDLG);
 
            PRBool dialed = (*mpRasPhonebookDlg)(nsnull, nsnull, &rasPBDlg);

            if (!dialed)
            {
                if (rasPBDlg.dwError != 0)
                {
                    LOGE(("Autodial: ::RasPhonebookDlg failed: Error = %d.", 
                     rasPBDlg.dwError));
                }
                else
                {
                    mDontRetryUntil = PR_IntervalNow() + PR_SecondsToInterval(NO_RETRY_PERIOD_SEC);
                    LOGD(("Autodial: User cancelled dial."));
                }

                return NS_ERROR_FAILURE;    // don't retry
            }

            LOGD(("Autodial: RAS dialup connection successful."));
        }
    }

    // Retry because we just established a dialup connection.
    return NS_OK;

#else
    return  DoPPCConnection();
#endif
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 716 of file nsAutodialWin.cpp.

{
    HKEY hKey = 0;
    LONG result = ::RegOpenKeyEx(
                    HKEY_LOCAL_MACHINE, 
                    "Software\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Locations", 
                    0, 
                    KEY_READ, 
                    &hKey);

    if (result != ERROR_SUCCESS)
    {
        LOGE(("Autodial: Error opening reg key ...CurrentVersion\\Telephony\\Locations"));
        return -1;
    }

    DWORD entryType = 0;
    DWORD location = 0;
    DWORD paramSize = sizeof(DWORD);

    result = ::RegQueryValueEx(hKey, "CurrentID", nsnull, &entryType, (LPBYTE)&location, &paramSize);
    if (result != ERROR_SUCCESS)
    {
        ::RegCloseKey(hKey);
        LOGE(("Autodial: Error reading reg value CurrentID."));
        return -1;
    }

    ::RegCloseKey(hKey);
    return location;

}

Here is the caller graph for this function:

nsresult nsRASAutodial::GetDefaultEntryName ( char *  entryName,
int  bufferSize 
) [private]

Definition at line 526 of file nsAutodialWin.cpp.

{
    // No RAS dialup entries. 
    if (mNumRASConnectionEntries <= 0)
    {
        return NS_ERROR_FAILURE;
    }

    // Single RAS dialup entry. Use it as the default to autodial.
    if (mNumRASConnectionEntries == 1)
    {
        return GetFirstEntryName(entryName, bufferSize);
    }

    // Multiple RAS dialup entries. If a default configured in the registry,
    // use it. 
    //
    // For Windows XP: HKCU/Software/Microsoft/RAS Autodial/Default/DefaultInternet.
    //              or HKLM/Software/Microsoft/RAS Autodial/Default/DefaultInternet.
    // For Windows 2K: HKCU/RemoteAccess/InternetProfile.

    char* key = nsnull;
    char* val = nsnull;

    HKEY hKey = 0;
    LONG result = 0;

    // Windows NT and 2000
    if ((mOSVerInfo.dwMajorVersion == 4) // Windows NT
     || ((mOSVerInfo.dwMajorVersion == 5) && (mOSVerInfo.dwMinorVersion == 0))) // Windows 2000
    {
        key = "RemoteAccess";
        val = "InternetProfile";

        result = ::RegOpenKeyEx(
                    HKEY_CURRENT_USER, 
                    key, 
                    0, 
                    KEY_READ, 
                    &hKey);

        if (result != ERROR_SUCCESS)
        {
            return NS_ERROR_FAILURE;
        }
    }
    else  // Windows XP
    {
        key = "Software\\Microsoft\\RAS Autodial\\Default";
        val = "DefaultInternet";

        
        // Try HKCU first.
        result = ::RegOpenKeyEx(
                    HKEY_CURRENT_USER, 
                    key, 
                    0, 
                    KEY_READ, 
                    &hKey);

        if (result != ERROR_SUCCESS)
        {
            // If not present, try HKLM.
            result = ::RegOpenKeyEx(
                        HKEY_LOCAL_MACHINE, 
                        key, 
                        0, 
                        KEY_READ, 
                        &hKey);

            if (result != ERROR_SUCCESS)
            {
                return NS_ERROR_FAILURE;
            }
        }
    }


    DWORD entryType = 0;
    DWORD buffSize = bufferSize;

    result = ::RegQueryValueEx(hKey, 
                                val, 
                                nsnull, 
                                &entryType, 
                                (LPBYTE)entryName, 
                                &buffSize);

    ::RegCloseKey(hKey);


    if (result != ERROR_SUCCESS)
    {
        // Results in a prompt for which to use at dial time.
        return NS_ERROR_FAILURE;
    }

    return NS_OK;
}

Here is the call graph for this function:

Here is the caller graph for this function:

nsresult nsRASAutodial::GetFirstEntryName ( char *  entryName,
int  bufferSize 
) [private]

Definition at line 474 of file nsAutodialWin.cpp.

{
    // Need to load the DLL if not loaded yet.
    if (!LoadRASapi32DLL())
        return NS_ERROR_NULL_POINTER;

    RASENTRYNAME rasEntryName;
    rasEntryName.dwSize = sizeof(RASENTRYNAME);
    DWORD cb = sizeof(RASENTRYNAME);
    DWORD cEntries = 0;

    DWORD result = 
     (*mpRasEnumEntries)(nsnull, nsnull, &rasEntryName, &cb, &cEntries);

    // ERROR_BUFFER_TOO_SMALL is OK because we only need one struct.
    if (result == ERROR_SUCCESS || result == ERROR_BUFFER_TOO_SMALL)
    {
#ifndef WINCE
        strncpy(entryName, rasEntryName.szEntryName, bufferSize);
#endif
        return NS_OK;
    }

    return NS_ERROR_FAILURE;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 129 of file nsAutodialWin.cpp.

{
#ifdef PR_LOGGING
    if (!gLog)
        gLog = PR_NewLogModule("Autodial");
#endif

    mDefaultEntryName[0] = '\0';
    mNumRASConnectionEntries = 0;
    mAutodialBehavior = QueryAutodialBehavior();
    
    // No need to continue in this case.
    if (mAutodialBehavior == AUTODIAL_NEVER)
    {
        return NS_OK;
    }


    // Get the number of dialup entries in the phonebook.
    mNumRASConnectionEntries = NumRASEntries();
    
    // Get the name of the default entry.
    nsresult result = GetDefaultEntryName(mDefaultEntryName, 
                                           RAS_MaxEntryName + 1);
    
    return result;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 750 of file nsAutodialWin.cpp.

{
    if (location < 0)
        return PR_FALSE;

    if (!LoadRASapi32DLL())
        return PR_FALSE;

    PRBool enabled;
    if ((*mpRasGetAutodialEnable)(location, &enabled) != ERROR_SUCCESS)
    {
        LOGE(("Autodial: Error calling RasGetAutodialEnable()"));
        return PR_FALSE;
    }

    return enabled;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 628 of file nsAutodialWin.cpp.

{
#ifndef WINCE
    SC_HANDLE hSCManager = 
      OpenSCManager(nsnull, SERVICES_ACTIVE_DATABASE, SERVICE_QUERY_STATUS);

    if (hSCManager == nsnull)
    {
        LOGE(("Autodial: failed to open service control manager. Error %d.", 
          ::GetLastError()));

        return PR_FALSE;
    }

    SC_HANDLE hService = 
      OpenService(hSCManager, "RasAuto", SERVICE_QUERY_STATUS);

    if (hSCManager == nsnull)
    {
        LOGE(("Autodial: failed to open RasAuto service."));
        return PR_FALSE;
    }

    SERVICE_STATUS status;
    if (!QueryServiceStatus(hService, &status))
    {
        LOGE(("Autodial: ::QueryServiceStatus() failed. Error: %d", 
          ::GetLastError()));

        return PR_FALSE;
    }

    return (status.dwCurrentState == SERVICE_RUNNING);
#else
    return PR_TRUE;
#endif
}

Here is the caller graph for this function:

Definition at line 451 of file nsAutodialWin.cpp.

{
    DWORD connections;
    RASCONN rasConn;
    rasConn.dwSize = sizeof(RASCONN);
    DWORD structSize = sizeof(RASCONN);

    if (!LoadRASapi32DLL())
        return NS_ERROR_NULL_POINTER;

    DWORD result = (*mpRasEnumConnections)(&rasConn, &structSize, &connections);

    // ERROR_BUFFER_TOO_SMALL is OK because we only need one struct.
    if (result == ERROR_SUCCESS || result == ERROR_BUFFER_TOO_SMALL)
    {
        return (connections > 0);
    }

    LOGE(("Autodial: ::RasEnumConnections failed: Error = %d", result));
    return PR_FALSE;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 770 of file nsAutodialWin.cpp.

{
    if (!mhRASapi32)
    {
        mhRASapi32 = ::LoadLibrary("rasapi32.dll");
        if ((UINT)mhRASapi32 > 32)
        {
            // RasEnumConnections
            mpRasEnumConnections = (tRASENUMCONNECTIONS)
             ::GetProcAddress(mhRASapi32, "RasEnumConnectionsA");

            // RasEnumEntries
            mpRasEnumEntries = (tRASENUMENTRIES)
             ::GetProcAddress(mhRASapi32, "RasEnumEntriesA");

            // RasSetAutodialAddress
            mpRasSetAutodialAddress = (tRASSETAUTODIALADDRESS)
                ::GetProcAddress(mhRASapi32, "RasSetAutodialAddressA");

            // RasGetAutodialAddress
            mpRasGetAutodialAddress = (tRASGETAUTODIALADDRESS)
             ::GetProcAddress(mhRASapi32, "RasGetAutodialAddressA");

            // RasGetAutodialEnable
            mpRasGetAutodialEnable = (tRASGETAUTODIALENABLE)
             ::GetProcAddress(mhRASapi32, "RasGetAutodialEnableA");

            // RasGetAutodialParam
            mpRasGetAutodialParam = (tRASGETAUTODIALPARAM)
             ::GetProcAddress(mhRASapi32, "RasGetAutodialParamA");
        }

    }

    if (!mhRASapi32 
        || !mpRasEnumConnections 
        || !mpRasEnumEntries 
        || !mpRasSetAutodialAddress
        || !mpRasGetAutodialAddress
        || !mpRasGetAutodialEnable
        || !mpRasGetAutodialParam)
    {
        LOGE(("Autodial: Error loading RASAPI32.DLL."));
        return PR_FALSE;
    }

    return PR_TRUE;
}

Here is the caller graph for this function:

Definition at line 819 of file nsAutodialWin.cpp.

{
    if (!mhRASdlg)
    {
        mhRASdlg = ::LoadLibrary("rasdlg.dll");
        if ((UINT)mhRASdlg > 32)
        {
            // RasPhonebookDlg
            mpRasPhonebookDlg =
             (tRASPHONEBOOKDLG)::GetProcAddress(mhRASdlg, "RasPhonebookDlgA");

            // RasDialDlg
            mpRasDialDlg =
             (tRASDIALDLG)::GetProcAddress(mhRASdlg, "RasDialDlgA");

        }
    }

    if (!mhRASdlg || !mpRasPhonebookDlg || !mpRasDialDlg)
    {
        LOGE(("Autodial: Error loading RASDLG.DLL."));
        return PR_FALSE;
    }

    return PR_TRUE;
}

Here is the caller graph for this function:

Definition at line 501 of file nsAutodialWin.cpp.

{
    // Need to load the DLL if not loaded yet.
    if (!LoadRASapi32DLL())
        return 0;

    RASENTRYNAME rasEntryName;
    rasEntryName.dwSize = sizeof(RASENTRYNAME);
    DWORD cb = sizeof(RASENTRYNAME);
    DWORD cEntries = 0;


    DWORD result = 
     (*mpRasEnumEntries)(nsnull, nsnull, &rasEntryName, &cb, &cEntries);

    // ERROR_BUFFER_TOO_SMALL is OK because we only need one struct.
    if (result == ERROR_SUCCESS || result == ERROR_BUFFER_TOO_SMALL)
    {
        return (int)cEntries;
    }

    return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 189 of file nsAutodialWin.cpp.

{
#ifndef WINCE
    if (IsAutodialServiceRunning())
    {
        if (!LoadRASapi32DLL())
            return AUTODIAL_NEVER;

        // Is Autodial service enabled for the current login session?
        DWORD disabled = 0;
        DWORD size = sizeof(DWORD);
        if ((*mpRasGetAutodialParam)(RASADP_LoginSessionDisable, &disabled, &size) == ERROR_SUCCESS)
        {
            if (!disabled)
            {
                // If current dialing location has autodial on, we'll let the service dial.
                mAutodialServiceDialingLocation = GetCurrentLocation();
                if (IsAutodialServiceEnabled(mAutodialServiceDialingLocation))
                {
                    return AUTODIAL_USE_SERVICE;
                }
            }
        }
    }

    // If we get to here, then the service is not going to dial on error, so we
    // can dial ourselves if the control panel settings are set up that way.
    HKEY hKey = 0;
    LONG result = ::RegOpenKeyEx(
                    HKEY_CURRENT_USER, 
                    "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", 
                    0, 
                    KEY_READ, 
                    &hKey);

    if (result != ERROR_SUCCESS)
    {
        LOGE(("Autodial: Error opening reg key Internet Settings"));
        return AUTODIAL_NEVER;
    }

    DWORD entryType = 0;
    DWORD autodial = 0;
    DWORD onDemand = 0;
    DWORD paramSize = sizeof(DWORD);

    result = ::RegQueryValueEx(hKey, "EnableAutodial", nsnull, &entryType, (LPBYTE)&autodial, &paramSize);
    if (result != ERROR_SUCCESS)
    {
        ::RegCloseKey(hKey);
        LOGE(("Autodial: Error reading reg value EnableAutodial."));
        return AUTODIAL_NEVER;
    }

    result = ::RegQueryValueEx(hKey, "NoNetAutodial", nsnull, &entryType, (LPBYTE)&onDemand, &paramSize);
    if (result != ERROR_SUCCESS)
    {
        ::RegCloseKey(hKey);
        LOGE(("Autodial: Error reading reg value NoNetAutodial."));
        return AUTODIAL_NEVER;
    }
  
    ::RegCloseKey(hKey);

    if (!autodial)
    {
        return AUTODIAL_NEVER;
    }
    else 
    {
        if (onDemand)
        {
            return AUTODIAL_ON_NETWORKERROR;
        }
        else
        {
            return AUTODIAL_ALWAYS;
        }
    }
#else
    return AUTODIAL_DEFAULT;
#endif
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 161 of file nsAutodialWin.cpp.

{
#ifndef WINCE
    // Don't try to dial again within a few seconds of when user pressed cancel.
    if (mDontRetryUntil) 
    {
        PRIntervalTime intervalNow = PR_IntervalNow();
        if (intervalNow < mDontRetryUntil) 
        {
            LOGD(("Autodial: Not dialing: too soon."));
            return PR_FALSE;
        }
    }
     

    return ((mAutodialBehavior == AUTODIAL_ALWAYS) 
             || (mAutodialBehavior == AUTODIAL_ON_NETWORKERROR)
             || (mAutodialBehavior == AUTODIAL_USE_SERVICE));
#else
    return PR_TRUE;
#endif
}

Here is the caller graph for this function:


Member Data Documentation

Definition at line 135 of file nsAutodialWin.h.

Definition at line 137 of file nsAutodialWin.h.

char nsRASAutodial::mDefaultEntryName[RAS_MaxEntryName+1] [private]

Definition at line 148 of file nsAutodialWin.h.

Definition at line 151 of file nsAutodialWin.h.

Definition at line 158 of file nsAutodialWin.h.

Definition at line 157 of file nsAutodialWin.h.

Definition at line 145 of file nsAutodialWin.h.

OSVERSIONINFO nsRASAutodial::mOSVerInfo [private]

Definition at line 154 of file nsAutodialWin.h.

Definition at line 164 of file nsAutodialWin.h.

Definition at line 162 of file nsAutodialWin.h.

Definition at line 163 of file nsAutodialWin.h.

Definition at line 166 of file nsAutodialWin.h.

Definition at line 167 of file nsAutodialWin.h.

Definition at line 168 of file nsAutodialWin.h.

Definition at line 161 of file nsAutodialWin.h.

Definition at line 165 of file nsAutodialWin.h.


The documentation for this class was generated from the following files: