windows-nt/Source/XPSP1/NT/enduser/netmeeting/av/h323/connobj.h
2020-09-26 16:20:57 +08:00

155 lines
4.7 KiB
C++

/*
* File: connobj.h
*
* implementation of Connection Object
*
* Revision History:
*
* 05/08/96 mikev created
*/
#ifndef _CONNOBJ_H
#define _CONNOBJ_H
/*
* Class definitions
*/
class ImpIConnection : public IH323Endpoint
{
friend class CH323CallControl;
public:
STDMETHOD(QueryInterface(REFIID riid, LPVOID FAR * ppvObj));
STDMETHOD_(ULONG,AddRef());
STDMETHOD_(ULONG,Release());
STDMETHOD( SetAdviseInterface(IH323ConfAdvise *pH323ConfAdvise));
STDMETHOD( ClearAdviseInterface());
STDMETHOD(PlaceCall(BOOL bUseGKResolution, PSOCKADDR_IN pCallAddr,
P_H323ALIASLIST pDestinationAliases, P_H323ALIASLIST pExtraAliases,
LPCWSTR pCalledPartyNumber, P_APP_CALL_SETUP_DATA pAppData));
STDMETHOD( Disconnect());
STDMETHOD( GetState(ConnectStateType *pState));
STDMETHOD( GetRemoteUserName(LPWSTR lpwszName, UINT uSize));
STDMETHOD( GetRemoteUserAddr(PSOCKADDR_IN psinUser));
STDMETHOD( AcceptRejectConnection(THIS_ CREQ_RESPONSETYPE RejectReason));
STDMETHOD_(HRESULT, GetSummaryCode());
STDMETHOD( CreateCommChannel(THIS_ LPGUID pMediaGuid, ICommChannel **ppICommChannel,
BOOL fSend));
STDMETHOD ( ResolveFormats (LPGUID pMediaGuidArray, UINT uNumMedia,
PRES_PAIR pResOutput));
STDMETHOD(GetVersionInfo(
PCC_VENDORINFO *ppLocalVendorInfo, PCC_VENDORINFO *ppRemoteVendorInfo));
ImpIConnection();
~ImpIConnection(){};
void Init(class CConnection FAR * pCon) {m_pConnection = pCon;};
protected:
CConnection *m_pConnection;
};
class CConnection :
public IH323Endpoint,
public IConfAdvise
{
friend class CH323CallControl;
private:
ImpIConnection m_ImpConnection;
CH323CallControl *m_pH323CallControl;
LPIH323PubCap m_pCapObject;
protected:
COBLIST m_ChannelList;
COBLIST m_MemberList;
UINT uRef;
HRESULT hrLast;
CConnection *next;
BOOL m_fCapsReady;
IH323ConfAdvise *m_pH323ConfAdvise;
LPCTRL_USER_INFO m_pUserInfo;
LPIControlChannel m_pControlChannel;
HRESULT m_hSummaryCode; // best known reason for disconnect or reject
public:
virtual HRESULT Init(class CH323CallControl *pH323CallControl, GUID PIDofProtocolType);
void DeInit(VOID) {m_pH323CallControl = NULL;};
CConnection();
~CConnection();
protected:
ConnectStateType m_ConnectionState;
VOID DoControlNotification(DWORD dwStatus);
public:
BOOL ListenOn(PORT Port);
VOID Disconnect(DWORD dwResponse);
HRESULT CloseAllChannels();
VOID NewUserInfo(LPCTRL_USER_INFO lpNewUserInfo);
public:
LPIControlChannel GetControlChannel( ){return m_pControlChannel;};
VOID ReleaseAllChannels();
STDMETHOD(GetLocalPort(PORT *lpPort));
STDMETHOD (OnCallIncomplete (
LPIControlChannel lpControlObject,
HRESULT hIncompleteCode));
VOID SummaryCode(HRESULT hCode);
// IConfAdvise interface methods
//
STDMETHOD(OnControlEvent(DWORD dwEvent, LPVOID lpvData, LPIControlChannel lpControlObject));
STDMETHOD(GetCapResolver(LPVOID *lplpCapObject, GUID CapType));
STDMETHOD_(LPWSTR, GetUserDisplayName());
STDMETHOD_(PCC_ALIASITEM, GetUserDisplayAlias());
STDMETHOD_(PCC_ALIASNAMES, GetUserAliases());
STDMETHOD_( CREQ_RESPONSETYPE, FilterConnectionRequest(
LPIControlChannel lpControlChannel, P_APP_CALL_SETUP_DATA pAppData));
STDMETHOD(GetAcceptingObject(LPIControlChannel *lplpAcceptingObject,
LPGUID pPID));
STDMETHOD(FindAcceptingObject(LPIControlChannel *lplpAcceptingObject,
LPVOID lpvConfID));
STDMETHOD_(IH323Endpoint *, GetIConnIF()) {return &m_ImpConnection;};
STDMETHOD (AddCommChannel (ICtrlCommChan *pChan));
// Shared IIntConn/IConnection interface methods
STDMETHOD( Disconnect());
// IConnection interface methods
STDMETHOD(QueryInterface(REFIID riid, LPVOID FAR * ppvObj));
STDMETHOD_(ULONG, AddRef());
STDMETHOD_(ULONG, Release());
STDMETHOD( SetAdviseInterface(IH323ConfAdvise *pH323ConfAdvise));
STDMETHOD( ClearAdviseInterface());
STDMETHOD(PlaceCall(BOOL bUseGKResolution, PSOCKADDR_IN pCallAddr,
P_H323ALIASLIST pDestinationAliases, P_H323ALIASLIST pExtraAliases,
LPCWSTR pCalledPartyNumber, P_APP_CALL_SETUP_DATA pAppData));
STDMETHOD( GetState(ConnectStateType *pState));
STDMETHOD( GetRemoteUserName(LPWSTR lpwszName, UINT uSize));
STDMETHOD( GetRemoteUserAddr(THIS_ PSOCKADDR_IN psinUser));
STDMETHOD( AcceptRejectConnection(THIS_ CREQ_RESPONSETYPE RejectReason));
STDMETHOD( GetSummaryCode());
STDMETHOD( CreateCommChannel(THIS_ LPGUID pMediaGuid, ICommChannel **ppICommChannel,
BOOL fSend));
STDMETHOD ( ResolveFormats (LPGUID pMediaGuidArray, UINT uNumMedia,
PRES_PAIR pResOutput));
STDMETHOD(GetVersionInfo(
PCC_VENDORINFO *ppLocalVendorInfo, PCC_VENDORINFO *ppRemoteVendorInfo));
};
#endif // _CONNOBJ_H