Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/***************************************************************************
* * Copyright (C) 2001-2002 Microsoft Corporation. All Rights Reserved. * * File: dpnhupnpdevice.h * * Content: Header for device object class. * * History: * Date By Reason * ======== ======== ========= * 04/16/01 VanceO Split DPNATHLP into DPNHUPNP and DPNHPAST. * ***************************************************************************/
//=============================================================================
// Object flags
//=============================================================================
#ifndef DPNBUILD_NOHNETFWAPI
#define DEVICE_CHECKEDFORHNETFIREWALL 0x0001 // the check for a local HomeNet firewall has been performed for the device at least once
#define DEVICE_HNETFIREWALLED 0x0002 // the device is firewalled, and can be controlled with the HomeNet APIs
#define DEVICE_UPNPDISCOVERYSOCKETMAPPEDONHNETFIREWALL 0x0004 // the UPnP discovery socket for this device was mapped on the firewall
#endif // ! DPNBUILD_NOHNETFWAPI
#define DEVICE_PERFORMINGREMOTEUPNPDISCOVERY 0x0008 // the check for a remote UPnP gateway device is being performed
#define DEVICE_PERFORMINGLOCALUPNPDISCOVERY 0x0010 // the check for a local UPnP gateway device is being performed
#define DEVICE_GOTREMOTEUPNPDISCOVERYCONNRESET 0x0020 // the check for a remote UPnP gateway device generated a WSAECONNRESET error
#define DEVICE_GOTLOCALUPNPDISCOVERYCONNRESET 0x0040 // the check for a local UPnP gateway device generated a WSAECONNRESET error
#ifdef DBG
#ifndef DPNBUILD_NOWINSOCK2
#define DEVICE_PRIMARY 0x0080 // this device appears to be the primary adapter with which its gateway should be reached
#define DEVICE_SECONDARY 0x0100 // this device appears to be a secondary adapter on a shared network
#define DEVICE_NOGATEWAY 0x0200 // this device does not currently have a gateway
#endif // ! DPNBUILD_NOWINSOCK2
#endif // DBG
//=============================================================================
// Macros
//=============================================================================
#define DEVICE_FROM_BILINK(b) (CONTAINING_OBJECT(b, CDevice, m_blList))
#define DEVICE_FROM_TEMP_BILINK(b) (CONTAINING_OBJECT(b, CDevice, m_blTempList))
//=============================================================================
// Typedefs
//=============================================================================
class CDevice; class CUPnPDevice;
//=============================================================================
// Device object class
//=============================================================================
class CDevice { public: #undef DPF_MODNAME
#define DPF_MODNAME "CDevice::CDevice"
CDevice(const DWORD dwLocalAddressV4) { this->m_blList.Initialize(); this->m_blTempList.Initialize(); this->m_blOwnedRegPorts.Initialize();
this->m_Sig[0] = 'D'; this->m_Sig[1] = 'E'; this->m_Sig[2] = 'V'; this->m_Sig[3] = 'I';
this->m_dwFlags = 0; this->m_dwLocalAddressV4 = dwLocalAddressV4; this->m_wUPnPDiscoverySocketPort = 0; this->m_sUPnPDiscoverySocket = INVALID_SOCKET; this->m_pUPnPDevice = NULL; this->m_dwFirstUPnPDiscoveryTime = 0;
#ifdef DBG
this->m_dwNumUPnPDeviceFailures = 0; #endif // DBG
};
#undef DPF_MODNAME
#define DPF_MODNAME "CDevice::~CDevice"
~CDevice(void) { #ifdef DBG
DPFX(DPFPREP, 8, "(0x%p) NumUPnPDeviceFailures = %u", this, this->m_dwNumUPnPDeviceFailures);
DNASSERT(this->m_blList.IsEmpty()); DNASSERT(this->m_blTempList.IsEmpty()); DNASSERT(this->m_blOwnedRegPorts.IsEmpty());
#ifndef DPNBUILD_NOHNETFWAPI
DNASSERT(! (this->m_dwFlags & DEVICE_UPNPDISCOVERYSOCKETMAPPEDONHNETFIREWALL)); #endif // ! DPNBUILD_NOHNETFWAPI
DNASSERT(this->m_sUPnPDiscoverySocket == INVALID_SOCKET); DNASSERT(this->m_pUPnPDevice == NULL); #endif // DBG
};
#ifndef DPNBUILD_NOHNETFWAPI
inline BOOL HasCheckedForFirewallAvailability(void) const { return ((this->m_dwFlags & DEVICE_CHECKEDFORHNETFIREWALL) ? TRUE : FALSE); }; inline BOOL IsHNetFirewalled(void) const { return ((this->m_dwFlags & DEVICE_HNETFIREWALLED) ? TRUE : FALSE); }; inline BOOL IsUPnPDiscoverySocketMappedOnHNetFirewall(void) const { return ((this->m_dwFlags & DEVICE_UPNPDISCOVERYSOCKETMAPPEDONHNETFIREWALL) ? TRUE : FALSE); }; #endif // ! DPNBUILD_NOHNETFWAPI
inline BOOL IsOKToPerformRemoteUPnPDiscovery(void) const { return (((this->m_dwFlags & DEVICE_PERFORMINGREMOTEUPNPDISCOVERY) && (! (this->m_dwFlags & DEVICE_GOTREMOTEUPNPDISCOVERYCONNRESET)))? TRUE : FALSE); }; inline BOOL IsOKToPerformLocalUPnPDiscovery(void) const { return (((this->m_dwFlags & DEVICE_PERFORMINGLOCALUPNPDISCOVERY) && (! (this->m_dwFlags & DEVICE_GOTLOCALUPNPDISCOVERYCONNRESET)))? TRUE : FALSE); };
inline BOOL GotRemoteUPnPDiscoveryConnReset(void) const { return ((this->m_dwFlags & DEVICE_GOTREMOTEUPNPDISCOVERYCONNRESET) ? TRUE : FALSE); }; inline BOOL GotLocalUPnPDiscoveryConnReset(void) const { return ((this->m_dwFlags & DEVICE_GOTLOCALUPNPDISCOVERYCONNRESET) ? TRUE : FALSE); }; #ifdef DBG
inline BOOL IsPerformingRemoteUPnPDiscovery(void) const { return ((this->m_dwFlags & DEVICE_PERFORMINGREMOTEUPNPDISCOVERY) ? TRUE : FALSE); }; inline BOOL IsPerformingLocalUPnPDiscovery(void) const { return ((this->m_dwFlags & DEVICE_PERFORMINGLOCALUPNPDISCOVERY) ? TRUE : FALSE); };
#ifndef DPNBUILD_NOWINSOCK2
inline BOOL IsPrimaryDevice(void) const { return ((this->m_dwFlags & DEVICE_PRIMARY) ? TRUE : FALSE); }; inline BOOL IsSecondaryDevice(void) const { return ((this->m_dwFlags & DEVICE_SECONDARY) ? TRUE : FALSE); }; inline BOOL HasNoGateway(void) const { return ((this->m_dwFlags & DEVICE_NOGATEWAY) ? TRUE : FALSE); }; #endif // ! DPNBUILD_NOWINSOCK2
#endif // DBG
inline DWORD GetLocalAddressV4(void) const { return this->m_dwLocalAddressV4; };
inline WORD GetUPnPDiscoverySocketPort(void) const { return this->m_wUPnPDiscoverySocketPort; };
inline SOCKET GetUPnPDiscoverySocket(void) const { return this->m_sUPnPDiscoverySocket; };
//
// This does not add a reference (when not NULL)!
//
inline CUPnPDevice * GetUPnPDevice(void) { return this->m_pUPnPDevice; };
inline DWORD GetFirstUPnPDiscoveryTime(void) const { return this->m_dwFirstUPnPDiscoveryTime; };
#ifndef DPNBUILD_NOHNETFWAPI
inline void NoteCheckedForFirewallAvailability(void) { this->m_dwFlags |= DEVICE_CHECKEDFORHNETFIREWALL; };
#undef DPF_MODNAME
#define DPF_MODNAME "CDevice::NoteHNetFirewalled"
inline void NoteHNetFirewalled(void) { DNASSERT(! (this->m_dwFlags & DEVICE_HNETFIREWALLED)); this->m_dwFlags |= DEVICE_HNETFIREWALLED; };
#undef DPF_MODNAME
#define DPF_MODNAME "CDevice::NoteUPnPDiscoverySocketMappedOnHNetFirewall"
inline void NoteUPnPDiscoverySocketMappedOnHNetFirewall(void) { DNASSERT(! (this->m_dwFlags & DEVICE_UPNPDISCOVERYSOCKETMAPPEDONHNETFIREWALL)); this->m_dwFlags |= DEVICE_UPNPDISCOVERYSOCKETMAPPEDONHNETFIREWALL; }; #endif // ! DPNBUILD_NOHNETFWAPI
inline void NotePerformingRemoteUPnPDiscovery(void) { this->m_dwFlags |= DEVICE_PERFORMINGREMOTEUPNPDISCOVERY; }; inline void NotePerformingLocalUPnPDiscovery(void) { this->m_dwFlags |= DEVICE_PERFORMINGLOCALUPNPDISCOVERY; }; inline void NoteGotRemoteUPnPDiscoveryConnReset(void) { this->m_dwFlags |= DEVICE_GOTREMOTEUPNPDISCOVERYCONNRESET; }; inline void NoteGotLocalUPnPDiscoveryConnReset(void) { this->m_dwFlags |= DEVICE_GOTLOCALUPNPDISCOVERYCONNRESET; };
#ifndef DPNBUILD_NOHNETFWAPI
inline void NoteNotHNetFirewalled(void) { this->m_dwFlags &= ~DEVICE_HNETFIREWALLED; }; inline void NoteNotUPnPDiscoverySocketMappedOnHNetFirewall(void) { this->m_dwFlags &= ~DEVICE_UPNPDISCOVERYSOCKETMAPPEDONHNETFIREWALL; }; #endif // ! DPNBUILD_NOHNETFWAPI
inline void NoteNotPerformingRemoteUPnPDiscovery(void) { this->m_dwFlags &= ~DEVICE_PERFORMINGREMOTEUPNPDISCOVERY; }; inline void NoteNotPerformingLocalUPnPDiscovery(void) { this->m_dwFlags &= ~DEVICE_PERFORMINGLOCALUPNPDISCOVERY; }; inline void NoteNotGotRemoteUPnPDiscoveryConnReset(void) { this->m_dwFlags &= ~DEVICE_GOTREMOTEUPNPDISCOVERYCONNRESET; }; inline void NoteNotGotLocalUPnPDiscoveryConnReset(void) { this->m_dwFlags &= ~DEVICE_GOTLOCALUPNPDISCOVERYCONNRESET; };
#ifdef DBG
#ifndef DPNBUILD_NOWINSOCK2
inline void NotePrimaryDevice(void) { this->m_dwFlags |= DEVICE_PRIMARY; }; inline void NoteSecondaryDevice(void) { this->m_dwFlags |= DEVICE_SECONDARY; }; inline void NoteNoGateway(void) { this->m_dwFlags |= DEVICE_NOGATEWAY; };
inline void ClearGatewayFlags(void) { this->m_dwFlags &= ~(DEVICE_PRIMARY | DEVICE_SECONDARY | DEVICE_NOGATEWAY); }; #endif // ! DPNBUILD_NOWINSOCK2
#endif // DBG
inline void SetUPnPDiscoverySocketPort(const WORD wPort) { this->m_wUPnPDiscoverySocketPort = wPort; }; inline void SetUPnPDiscoverySocket(const SOCKET sSocket) { this->m_sUPnPDiscoverySocket = sSocket; }; inline void SetUPnPDevice(CUPnPDevice * const pUPnPDevice) { this->m_pUPnPDevice = pUPnPDevice; }; inline void SetFirstUPnPDiscoveryTime(const DWORD dwTime) { this->m_dwFirstUPnPDiscoveryTime = dwTime; };
#ifdef DBG
inline void IncrementUPnPDeviceFailures(void) { this->m_dwNumUPnPDeviceFailures++; }; #endif // DBG
CBilink m_blList; // list of all the available devices
CBilink m_blTempList; // temporary list of all the available devices
CBilink m_blOwnedRegPorts; // list of all the ports registered using this device
private: //
// Note that all values here are protected by the global CNATHelpUPnP lock.
//
BYTE m_Sig[4]; // debugging signature ('DEVI')
DWORD m_dwFlags; // flags describing this object
DWORD m_dwLocalAddressV4; // address this object represents
WORD m_wUPnPDiscoverySocketPort; // port being used by UPnP discovery socket
SOCKET m_sUPnPDiscoverySocket; // socket opened for UPnP discovery communication on this device
CUPnPDevice * m_pUPnPDevice; // pointer to UPnP Internet gateway for this device, if any
DWORD m_dwFirstUPnPDiscoveryTime; // the time we first sent UPnP discovery traffic from this particular port, locally or remotely
#ifdef DBG
DWORD m_dwNumUPnPDeviceFailures; // how many times a UPnP device returned an error or stopped responding and had to be cleared
#endif // DBG
};
|