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.
335 lines
7.4 KiB
335 lines
7.4 KiB
/*
|
|
File hnportmapping.h
|
|
|
|
Definition of the set port mapping functions for intergrating incoming
|
|
connection with personal firewall, for whistler bug#123769
|
|
|
|
Gang Zhao 11/6/2000
|
|
*/
|
|
|
|
#ifndef __rassrvui_hnportmapping_h
|
|
#define __rassrvui_hnportmapping_h
|
|
|
|
#include <windows.h>
|
|
#include <hnetcfg.h>
|
|
|
|
|
|
typedef struct {
|
|
//An Array to store Connections of INetConnection * type
|
|
//
|
|
INetConnection ** ConnArray;
|
|
|
|
//Number of Connections found
|
|
DWORD ConnCount;
|
|
|
|
//An Array to store connection properties
|
|
//
|
|
NETCON_PROPERTIES* ConnPropTable;
|
|
|
|
//Connection Manager used to generate another member EnumCon
|
|
//
|
|
INetConnectionManager* ConnMan;
|
|
|
|
//Connection Enumerator
|
|
//
|
|
IEnumNetConnection* EnumCon;
|
|
|
|
//Connection on which to Set Up PortMapping right now
|
|
// pNetConnection and pGuid can both represent connections
|
|
//but only one of them is used and valid for portmapping at each time
|
|
//
|
|
INetConnection * pNetConnection;
|
|
|
|
//The Guid of the current connection on which to Set Up PortMapping right now
|
|
//
|
|
GUID * pGuid;
|
|
|
|
//Converted from pNetConnection, the PortMapping needs
|
|
//the connection to be of type (IHNetConnection *)
|
|
//In all, Enumerate Connection will return connections of
|
|
// INetConnection * type, PortMapping operations require
|
|
//IHNetConnection * type
|
|
//
|
|
IHNetConnection * pHNetConn;
|
|
|
|
//High level COM interface to generate pSettings
|
|
//
|
|
IHNetCfgMgr * pHNetCfgMgr;
|
|
|
|
//Used to generate pEnumPMP(PortMapping protocol enumerator)
|
|
//
|
|
IHNetProtocolSettings * pSettings;
|
|
|
|
//PortMapping protocol enumerator, to enumerate existing
|
|
//PortMapping protocols like (PPTP, L2TP, IKE (if exist)), FTP, ....
|
|
//
|
|
IEnumHNetPortMappingProtocols* pEnumPMP;
|
|
|
|
|
|
//PortMapping Protocol for PPTP
|
|
//
|
|
IHNetPortMappingProtocol * pProtocolPPTP;
|
|
|
|
//PortMapping Protocol for L2TP
|
|
//
|
|
IHNetPortMappingProtocol * pProtocolL2TP;
|
|
|
|
//PortMapping Protocol for IKE
|
|
//
|
|
IHNetPortMappingProtocol * pProtocolIKE;
|
|
|
|
//PortMapping Protocol for IKE
|
|
//
|
|
IHNetPortMappingProtocol * pProtocolNAT_T; // IKE Negotiation
|
|
|
|
//Title for PPTP, read from resource file
|
|
//
|
|
WCHAR * pwszTitlePPTP;
|
|
|
|
//Title for L2TP, read from resource file
|
|
//
|
|
WCHAR * pwszTitleL2TP;
|
|
|
|
//Title for IKE, read from resource file
|
|
//
|
|
WCHAR * pwszTitleIKE;
|
|
|
|
//Title for Nat-Traveral, read from resource file
|
|
WCHAR * pwszTitleNAT_T;
|
|
|
|
//Title for PortMapping address, read from resource file
|
|
//currently, it is always 127.0.0.1 loopback address
|
|
//
|
|
TCHAR * pszLoopbackAddr;
|
|
|
|
//Indicating if COM is already initialized
|
|
//
|
|
BOOL fComInitialized;
|
|
|
|
//Indicating if we need to do the COM un-initialization
|
|
BOOL fCleanupOle;
|
|
|
|
} HNPMParams, * LPHNPMParams;
|
|
|
|
|
|
//Define callback function type for Pick Protocol
|
|
typedef DWORD (APIENTRY * PFNHNPMPICKPROTOCOL) ( LPHNPMParams, IHNetPortMappingProtocol* , WCHAR *, UCHAR, USHORT );
|
|
|
|
|
|
//When Using CoSetProxyBlanket, we should set both the interface
|
|
//and the IUnknown interface queried from it
|
|
//
|
|
HRESULT
|
|
HnPMSetProxyBlanket (
|
|
IUnknown* pUnk);
|
|
|
|
|
|
//Do the CoInitialize() COM if necessary
|
|
//Set up cleanup flag and initialized flag
|
|
//
|
|
DWORD
|
|
HnPMInit(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
DWORD
|
|
HnPMCleanUp(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
DWORD
|
|
HnPMParamsInitParameterCheck(
|
|
IN LPHNPMParams pInfo);
|
|
|
|
HnPMParamsInit(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
DWORD
|
|
HnPMParamsCleanUp(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
DWORD
|
|
HnPMCfgMgrInit(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
DWORD
|
|
HnPMCfgMgrCleanUp(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
|
|
DWORD
|
|
HnPMConnectionEnumInit(
|
|
IN LPHNPMParams pInfo);
|
|
|
|
DWORD
|
|
HnPMConnectionEnumCleanUp(
|
|
IN LPHNPMParams pInfo);
|
|
|
|
//Return all the connections like DUN, VPN, LAN and Incoming Connection
|
|
//and the properties of them
|
|
//
|
|
DWORD
|
|
HnPMConnectionEnum(
|
|
IN LPHNPMParams pInfo);
|
|
|
|
|
|
|
|
DWORD
|
|
HnPMPickProtcolParameterCheck(
|
|
IN LPHNPMParams pInfo);
|
|
|
|
//Pick PortMapping protocols: PPTP, L2TP, IKE
|
|
//
|
|
DWORD
|
|
HnPMPickProtocol(
|
|
IN OUT LPHNPMParams pInfo,
|
|
IN IHNetPortMappingProtocol * pProtocolTemp,
|
|
IN WCHAR * pszwName,
|
|
IN UCHAR uchIPProtocol,
|
|
IN USHORT usPort );
|
|
|
|
|
|
DWORD
|
|
HnPMPProtoclEnumParameterCheck(
|
|
IN LPHNPMParams pInfo);
|
|
|
|
//Enumerate all existing Port Mapping protocols
|
|
//
|
|
DWORD
|
|
HnPMProtocolEnum(
|
|
IN OUT LPHNPMParams pInfo,
|
|
IN PFNHNPMPICKPROTOCOL pfnPickProtocolCallBack
|
|
);
|
|
|
|
DWORD
|
|
HnPMCreatePorotocolParameterCheck(
|
|
IN LPHNPMParams pInfo);
|
|
|
|
//Create PortMapping Protocols for PPTP, L2TP, IKE
|
|
// if they are not found by HnPMPProtocolEnum()
|
|
//
|
|
DWORD
|
|
HnPMCreateProtocol(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
|
|
//Set up a single PortMapping protocol on
|
|
//a single connection
|
|
//
|
|
DWORD
|
|
HnPMSetSinglePMForSingleConnection(
|
|
IN IHNetConnection * pHNetConn,
|
|
IN IHNetPortMappingProtocol * pProtocol,
|
|
IN TCHAR * pszLoopbackAddr,
|
|
IN BOOL fEnabled);
|
|
|
|
|
|
//Clean up the ConnArray and ConnPropTable items
|
|
//in the HNPMParams struct
|
|
//
|
|
DWORD
|
|
HnPMParamsConnectionCleanUp(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
|
|
//Set up the PortMapping of PPTP, L2TP for a single
|
|
//Connection
|
|
//
|
|
DWORD
|
|
HnPMConfigureAllPMForSingleConnection(
|
|
IN OUT LPHNPMParams pInfo,
|
|
BOOL fEnabled);
|
|
|
|
DWORD
|
|
HnPMConfigureAllPMForSingleConnectionParameterCheck(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
DWORD
|
|
HnPMConfigureSingleConnectionInitParameterCheck(
|
|
IN LPHNPMParams pInfo );
|
|
|
|
DWORD
|
|
HnPMConfigureSingleConnectionInit(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
DWORD
|
|
HnPMConfigureSingleConnectionCleanUp(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
//Set the PortMapping on a single connection
|
|
//According to pInfo->pNetConnection
|
|
//
|
|
DWORD
|
|
HnPMConfigureSingleConnection(
|
|
IN OUT LPHNPMParams pInfo,
|
|
BOOL fEnabled);
|
|
|
|
//Delete the PortMapping protocols:PPTP, L2TP, IKE
|
|
//
|
|
DWORD
|
|
HnPMDeletePortMapping();
|
|
|
|
DWORD
|
|
HnPMDeletePortMappingInit(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
DWORD
|
|
HnPMDeletePortMappingCleanUp(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
|
|
DWORD
|
|
HnPMConfigureAllConnectionsInit(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
DWORD
|
|
HnPMConfigureAllConnectionsCleanUp(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
//
|
|
//Set up the PortMapping of PPTP, L2TP for a
|
|
//group of Connections
|
|
//
|
|
DWORD
|
|
HnPMConfigureAllConnections(
|
|
IN BOOL fEnabled );
|
|
|
|
|
|
//Configure Port Mapping on a single connection
|
|
//
|
|
DWORD
|
|
HnPMConfigureSingleConnectionGUID(
|
|
IN GUID * pGuid,
|
|
IN BOOL fEnabled);
|
|
|
|
|
|
DWORD
|
|
HnPMConfigureSingleConnectionGUIDInit(
|
|
IN OUT LPHNPMParams pInfo,
|
|
GUID * pGuid);
|
|
|
|
|
|
DWORD
|
|
HnPMConfigureSingleConnectionGUIDCleanUp(
|
|
IN OUT LPHNPMParams pInfo);
|
|
|
|
|
|
//Set up the port mapping for only one
|
|
//connection according to its GUID only when
|
|
//Incoming Connection exists and
|
|
//the VPN is enabled
|
|
//
|
|
DWORD
|
|
HnPMConfigureSingleConnectionGUIDIfVpnEnabled(
|
|
GUID* pGuid,
|
|
BOOL fDual,
|
|
HANDLE hDatabase);
|
|
|
|
//Set up the port mapping on all connections
|
|
//only when Incoming Connection exists and
|
|
//the VPN is enabled
|
|
//
|
|
DWORD
|
|
HnPMConfigureIfVpnEnabled(
|
|
BOOL fDual,
|
|
HANDLE hDatabase);
|
|
|
|
#endif
|