CRasMonitor v1.41






4.50/5 (4 votes)
Mar 10, 2000

129870

2366
A shareware application to monitor your Dial-Up Networking Connections.
CRasMonitor
Welcome to CRasMonitor v1.41, a freeware MFC class to monitor RAS (a.k.a.
Dial-Up Networking) connections. This class forms the basis of the code for
RasMan
. It uses window messages to notify client code of various
RAS events. These include notification of connections being made and closed.
Features |
Usage |
History |
API Reference |
Planned Enhancements |
Contacting the Author |
Features
- Simple and clean C++ interface.
- The code works on both Windows 95/98 and NT. The RAS API itself is very OS dependent with some of its functions only available on Windows NT.
- The code has been designed in such a way that it has a minimum impact on the performance of the OS.
- The classes are fully Unicode compliant.
Usage
- To use the class in your code, simply include rasmonitor.cpp in your
project and
#include rasmonitor.h
in which ever of your modules needs to make calls to the class. As of v1.4 the code depends on 2 additional modules of the author. These are theDynData
which encapsulate the Windows 95/98 performance counters andCPdh
which encapsulates the NT Performance Counters. You will need to download both of these modules from the Author's web site to use theCRasMonitor
class. Also ensure that these modules have been added to your project. - Your code will need to include MFC either statically or dynamically.
- You will also need to have afxtempl.h, winsock.h or afxsock.h, afxpriv.h and winsvc.h in your precompiled header. The code will work just as well in a GUI or console app. The code should also work in a multithreaded application, although it has not been explicitly tested in this scenario.
CRasMonitor
requires that the latest version of Winsock and Dial-Up Networking are installed on client machines. Even if you are running the latest version of Windows 95 (Win95 B a.k.a. OSR2), you will still need to download and install this update. Windows 98 includes the latest versions, so no additional downloads are required.The easiest way to determine if you have the correct version of Dial-Up Networking installed is to check the icon that is added to your system tray (next to the clock) when you establish a connection to your Internet Service Provider (ISP), as shown below:
or
You need to download the updates You already have Dial-Up Networking v1.3 or above installed. The updated versions are available from the Microsoft web site. At the time or writing, you can get the update by clicking here. If that page has moved (which it has in the past), you can find the update by following these steps:
- Go to the Microsoft site.
- Follow the links to Products, Windows, Windows 95, System updates.
- Download the Dial-Up Networking v1.3 update
For NT users, you need to ensure that you have the PSAPI.DLL installed into your system32 directory on NT. If this file is not already present on your machine, then you can download it from here.
History
- V1.0 (5 July 1998)
- Initial public release.
- 26 July 1998
- RasMan sample application had been updated. See the rasman.htm file for further details.
- v1.1 (1 October 1998)
- Updated code to include a virtual
OnDial
method - Optimized the code by using
CArray::ElementAt
- Added the following member variables to
CRasConnection
: Dial Time, whether or not the connection is currently connected, Dial Duration and the RAS handle - Renamed the connection variable of
CRasConnection
- Updated the sample program to v1.1
- Updated the version info in the sample app to include the build date
- Fixed a problem when enumerating more than one RAS connection at a time.
- Sample app now uses
LoadImage
instead ofLoadIcon
to avoid the shell first scaling up to 32*32 and then back to 16*16. - What this means is that the icons RasMan puts in the tray notification area will not look blurred.
- Fixed a memory leak in
CRasMonitor::DoCheck()
when multiple connections were being enumerated. - Included a new selection of tray icons in the sample app.
- Updated the documentation to reflect the name changes and the new member variables and methods
- Added a popup menu item to bring up the help file.
- Updated code to include a virtual
- v1.2 (6 November 1998)
- Major optimization added to reduce memory usage (c. 3 MB) on NT when RAS service is not running. Thanks to Daniel Harth for this very neat optimization.
- Internally, the code now uses a hidden window to perform the monitoring instead of a worker thread. This helps avoid potential deadlock problems which can occur as previously the code used a worker thread.
- Now uses window messages instead of virtual functions to implement class customization
- 17 November 1998
- Removed sample app as RasMan application is now shareware. All that is now included is the source code, header file and associated documentation.
- v1.21 (2 February 1999)
- Fixed a compile problem which was occurring when code was compiled for UNICODE.
- Fixed a crash which was occurring when the code was run on NT and you do not have RAS installed.
- When running on NT, the code now only uses
SC_MANAGER_ENUMERATE_SERVICE
privileges when connecting to the Service Configuration Manager. CRasConnection
connection now includes a standard MFCSerialize
method.CRasMonitor
now has a standard MFCSerialize
method. This can be incorporated into an app to prevent RAS events being lost if the application or OS were to crash. This is used in the author's RasMan application to ensure no RAS records were lost even if the machine crashed while any RAS connection was in progress.
- v1.4 (21 February 1999)
- Synced version number up to the same version as RasMan application.
- Now reports the following additional statistics: Connection speed (Bytes / Second) (on Windows 95, 98 only), Bytes sent (Windows 95, 98 & NT) and Bytes received (Windows 95, 98 & NT)
- Updated the usage instructions about what is required on client machines.
- v1.41 (25 January 2000)
- Removed a memory leak which was occurring on NT where the
CPdhCounter
instances in theGetInitialConnectionDetails
andGetCurrentConnectionDetails
functions were not being tidied up. This has been accomplished by restructuring the code to create and add the counters to the performance once of in theCRasConnection
constructors. - Removed reference to source code of RasMan app which is now not available.
- Removed a memory leak which was occurring on NT where the
API Reference
The API consists of the class CRasConnection
and the public
member functions of the class CRasMonitor
.
- CRasConnection::m_sName
- CRasConnection::m_sDeviceType
- CRasConnection::m_sDeviceName
- CRasConnection::m_ConnectionTime
- CRasConnection::m_DialTime
- CRasConnection::m_bConnected
- CRasConnection::m_ConnectDuration
- CRasConnection::m_DialDuration
- CRasConnection::m_HangupTime
- CRasConnection::m_dwConnectionSpeed
- CRasConnection::m_dwBytesSent
- CRasConnection::m_dwBytesReceived
- CRasMonitor::Start
- CRasMonitor::Stop
CRasConnection::m_sName
Remarks
A string that specifies the phone-book entry used to establish the remote access connection. If the connection was established using an empty entry name, this string consists of a “.” followed by the connection phone number.
CRasConnection::m_sDeviceType
Remarks
A string that specifies the type of the current device, if available. For example, common device types supported by RAS are “modem”, “pad”, “switch”, “isdn”, or “null”.
CRasConnection::m_sDeviceName
Remarks
A string that specifies the name of the current device, if available. This would be the name of the modem, for example, “Hayes Smartmodem 2400”; the name of the PAD, for example “US Sprint”; or the name of a switch device, for example “Racal-Guardata”.
CRasConnection::m_ConnectionTime
Remarks
A SYSTEMTIME
representation of when this connection was
made/connected. The time stored is Local and not UCT.
CRasConnection::m_DialTime
Remarks
A SYSTEMTIME
representation of when this connection was dialed /
attempted. The time stored is Local and not UCT. The dial time will always be
more historic than the connection, for any connection.
CRasConnection::m_ConnectDuration
Remarks
The number of seconds for which this connection was active.
CRasConnection::m_DialDuration
Remarks
The number of seconds taken to make the connection for which this RAS connection.
CRasConnection::m_HangupTime
Remarks
A SYSTEMTIME
representation of when this connection was closed.
The time stored is Local and not UCT.
CRasConnection::m_dwConnectionSpeed
Remarks
The connection speed in bits per second for this connection. Please note that this value is always reported as 0 on NT as currently there is no documented way of retrieving this value on NT. Another point to bear in mind is that on 95/98, this is the accumulated connection speed of all current RAS connections. This means that if you are using multilink features or have two separate RAS connections active at the one time, then this value will be the total of both connections.
CRasConnection::m_dwBytesSent
Remarks
The total number of bytes transmitted by this connection. Please note that this value is a total for all RAS connections similar to the Connection Speed above.
CRasConnection::m_dwBytesReceived
Remarks
The total number of bytes received by this connection. Please note that this value is a total for all RAS connections similar to the Connection Speed above.
CRasMonitor::Start
BOOL CRasMonitor::Start(CWnd* pNotifyWnd, UINT
nNotifyMessage);
Return Value
TRUE
if monitoring of RAS connections has started, otherwise
FALSE
.
Parameters
pNotifyWnd
Window to send notification messages tonNotifyMessage
the window message to use for notification messages
Remarks
Starts monitoring of active RAS connections. If the call fails, you should
use GetLastError
to determine the reason. When certain RAS related
events occur, the class will send a nNotifyMessage
to
pNotifyWnd
. The meaning of WPARAM
and
LPARAM
are as follows:
WPARAM | LPARAM | Meaning |
RAS_DIAL_EVENT |
Contains a pointer to the CRasConnection instance
which has just dialed. Its type is CRasConnection* |
Called when a RAS connection is initially dialed |
RAS_CONNECT_EVENT |
Contains a pointer to the CRasConnection instance
which has just connected. Its type is CRasConnection* |
Called when a RAS connection has just connected |
RAS_DISCONNECT_EVENT |
Contains a pointer to the CRasConnection instance
which has just disconnected. Its type is CRasConnection* |
Called when a RAS connection disconnects |
RAS_CHECK_EVENT |
Contains a pointer to the array of currently active
CRasConnection s. Its type is CArray<CRasConnection,
CRasConnection&>* |
Called periodically with the current RAS connections |
See Also
CRasMonitor::Stop
BOOL CRasMonitor::Stop();
Return Value
TRUE
if monitoring of RAS connections has stopped, otherwise
FALSE
.
Parameters
None
Remarks
Stops monitoring of active RAS connections. If the call fails, you should use
GetLastError
to determine the reason.
See Also
CRasMonitor::OnDial
virtual void CRasMonitor::OnDial(const CRasConnection&
connection);
Return Value
None
Parameters
connection
A class representation of the RAS connection which has just been dialed.
Remarks
Derived classes are responsible for implementing their own version of
OnConnect
.
See Also
CRasMonitor::OnConnect
virtual void CRasMonitor::OnConnect(const CRasConnection&
connection);
Return Value
None
Parameters
connection
A class representation of the RAS connection which has just become active.
Remarks
Derived classes are responsible for implementing their own version of
OnConnect
.
See Also
CRasMonitor::OnDisconnect
virtual void CRasMonitor::OnDisconnect(const CRasConnection&
connection);
Return Value
None
Parameters
connection
A class representation of the RAS connection which has just been closed.
Remarks
Derived classes are responsible for implementing their own version of
OnDisconnect
. If you look at the sample app "RasMan", you will see
that it does a SendMessage
to the mainfrm
window.
See Also
CRasMonitor::OnCheck
virtual void CRasMonitor::OnCheck(RASCONN* pConnections, DWORD
dwConnections);
Return Value
None
Parameters
pConnections
pointer to an array of the currently active connections. The structure used is the same as that used by native SDK RAS calls.
dwConnections
The number of elements inpConnections
.
Remarks
This function is called every second internally by CRasMonitor
.
The parameters it is called with include an array of the newly active
connections. The implementation in CRasMonitor
does 2 things:
- Iterates through all the previously active connections which has now
disappeared and calls the virtual
OnDisconnect
function for that connection. - For any new connections which have appeared, call the virtual
OnConnect
for that connection and add it to the internal array of active connections.
Planned Enhancements
- Package the code up into an OCX to allow non MFC apps to use the code.
- If you have any other suggested improvements, please let me know so that I can incorporate them into the next release.
Contacting the Author
Please send any comments or bug reports to me via email. For any updates to this article, check my site here.