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.
105 lines
2.9 KiB
105 lines
2.9 KiB
/*
|
|
IMSession.h
|
|
*/
|
|
|
|
#ifndef __IMSESSION__
|
|
#define __IMSESSION__
|
|
|
|
#include "resource.h"
|
|
#include "sessions.h"
|
|
#include "mdispid.h"
|
|
#include "wincrypt.h"
|
|
#include "statusdlg.h"
|
|
|
|
EXTERN_C const IID DIID_DMsgrSessionEvents;
|
|
EXTERN_C const IID DIID_DMsgrSessionManagerEvents;
|
|
EXTERN_C const IID LIBID_MsgrSessionManager;
|
|
|
|
class CIMSession;
|
|
|
|
#include "Shared.h"
|
|
#include "sessevnt.h"
|
|
#include "sessmgrevnt.h"
|
|
|
|
#define IDC_IMSession 100
|
|
|
|
class ATL_NO_VTABLE CIMSession :
|
|
public CComObjectRootEx<CComSingleThreadModel>,
|
|
public CComCoClass<CIMSession, &CLSID_IMSession>,
|
|
public IDispatchImpl<IIMSession, &IID_IIMSession, &LIBID_RCBDYCTLLib>
|
|
{
|
|
public:
|
|
CIMSession();
|
|
|
|
~CIMSession();
|
|
|
|
DECLARE_REGISTRY_RESOURCEID(IDR_IMSESSION)
|
|
|
|
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
|
|
|
BEGIN_COM_MAP(CIMSession)
|
|
COM_INTERFACE_ENTRY(IIMSession)
|
|
COM_INTERFACE_ENTRY(IDispatch)
|
|
END_COM_MAP()
|
|
|
|
public:
|
|
STDMETHOD(put_OnSessionStatus)(/*[in]*/ IDispatch * pfn);
|
|
STDMETHOD(HSC_Invite)(IDispatch *pUser);
|
|
STDMETHOD(get_ReceivedUserTicket)(/*[out,retval]*/ BSTR* pNewTicket);
|
|
STDMETHOD(GetLaunchingSession)(LONG lID);
|
|
STDMETHOD(SendOutExpertTicket)(BSTR pbstrData);
|
|
STDMETHOD(ProcessContext)(BSTR pContext);
|
|
STDMETHOD(CloseRA)();
|
|
STDMETHOD(get_User)(IDispatch** ppVal);
|
|
STDMETHOD(Hook)(IMsgrSession*, HWND);
|
|
STDMETHOD(Notify)(int);
|
|
STDMETHOD(ContextDataProperty)(BSTR pName, BSTR* ppValue);
|
|
STDMETHOD(get_IsInviter)(BOOL* pVal);
|
|
STDMETHOD(UninitObjects)();
|
|
|
|
public:
|
|
IMsgrSessionManager* m_pSessMgr;
|
|
IMsgrSession* m_pSessObj;
|
|
IMsgrLock* m_pMsgrLockKey;
|
|
IDispatch* m_pInvitee;
|
|
CSessionMgrEvent* m_pSessionMgrEvent;
|
|
BOOL m_bIsHSC;
|
|
CComPtr<IDispatch> m_pfnSessionStatus;
|
|
|
|
private:
|
|
CComObject<CSessionEvent>* m_pSessionEvent;
|
|
CComBSTR m_bstrSalemTicket;
|
|
CComBSTR m_bstrContextData;
|
|
|
|
BOOL m_bIsInviter;
|
|
HCRYPTPROV m_hCryptProv;
|
|
HCRYPTKEY m_hPublicKey;
|
|
int m_iState;
|
|
DWORD GetExchangeRegValue();
|
|
BOOL m_bExchangeUser;
|
|
|
|
CStatusDlg m_StatusDlg;
|
|
|
|
public:
|
|
CComBSTR m_bstrExpertTicket;
|
|
HWND m_hWnd;
|
|
BOOL m_bLocked;
|
|
|
|
public:
|
|
HRESULT InitCSP(BOOL bGenPublicKey=TRUE);
|
|
HRESULT InitSessionEvent(IMsgrSession* pSessObj);
|
|
HRESULT DoSessionStatus(int);
|
|
HRESULT GetKeyExportString(HCRYPTKEY hKey, HCRYPTKEY hExKey, DWORD dwBlobType, BSTR* pBlob, DWORD *pdwCount);
|
|
HRESULT ExtractSalemTicket(BSTR pContext);
|
|
HRESULT BinaryToString(LPBYTE pBinBuf, DWORD dwLen, BSTR* pBlob, DWORD *pdwCount);
|
|
HRESULT StringToBinary(BSTR pBlob, DWORD dwCount, LPBYTE *ppBuf, DWORD* pdwLen);
|
|
HRESULT GenEncryptdNoviceBlob(BSTR pPublicKeyBlob, BSTR pSalemTicket, BSTR* pBlob);
|
|
HRESULT InviterSendSalemTicket(BSTR pContext);
|
|
HRESULT ProcessNotify(BSTR);
|
|
HRESULT OnLockResult(BOOL, LONG);
|
|
HRESULT OnLockChallenge(BSTR, LONG);
|
|
HRESULT Invite(IDispatch*);
|
|
|
|
};
|
|
|
|
#endif // __IMSession__
|