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.

168 lines
6.0 KiB

  1. // File: iMember.h
  2. #ifndef _IMEMBER_H_
  3. #define _IMEMBER_H_
  4. #include "nmenum.h"
  5. #include "cuserdta.hpp"
  6. #include <ih323cc.h>
  7. #define INVALID_GCCID ((DWORD) -1)
  8. #define H323_GCCID_LOCAL ((DWORD) -2)
  9. #define H323_GCCID_REMOTE ((DWORD) -3)
  10. class USER_DATA_LIST;
  11. // A valid T.120 GCC ID must be in this range:
  12. #define FValidGccId(dw) ((dw >= 1) && (dw <= 65535))
  13. // *** DO NOT CHANGE these flags without checking the
  14. // corresponding CONF_UF_* items in msconf.h
  15. // PARTICIPANT flags:
  16. // Media Types:
  17. const DWORD PF_MEDIA_DATA = 0x00000001;
  18. const DWORD PF_MEDIA_AUDIO = 0x00000002;
  19. const DWORD PF_MEDIA_VIDEO = 0x00000004;
  20. const DWORD PF_T120 = 0x00000010;
  21. const DWORD PF_H323 = 0x00000020;
  22. const DWORD PF_T127_LAUNCHED = 0x00000040; // Requested T.127 (FT) be started
  23. const DWORD PF_LOCAL_NODE = 0x00000100; // Local User
  24. const DWORD PF_T120_MCU = 0x00000200; // MCU
  25. const DWORD PF_T120_TOP_PROV = 0x00000400; // Top Provider
  26. // Control Arbitration specific
  27. const DWORD PF_CA_VIEWING = 0x00001000;
  28. const DWORD PF_CA_DETACHED = 0x00002000; // Working alone
  29. const DWORD PF_CA_CONTROL = 0x00004000; // In Control
  30. const DWORD PF_CA_MASK = 0x0000F000;
  31. const DWORD PF_CA_MODEMASK = (PF_CA_VIEWING | PF_CA_DETACHED);
  32. // NetMeeting Version
  33. const DWORD PF_VER_UNKNOWN = 0x00000000; // Not Microsoft NetMeeting
  34. const DWORD PF_VER_NM_1 = 0x00010000; // NetMeeting 1.0 (Build 1133)
  35. const DWORD PF_VER_NM_2 = 0x00020000; // NetMeeting 2.0 (Build 1368)
  36. const DWORD PF_VER_NM_3 = 0x00030000; // NetMeeting 2.1x (Build 2135)
  37. const DWORD PF_VER_NM_4 = 0x00040000; // NetMeeting 3.0
  38. const DWORD PF_VER_FUTURE = 0x000F0000; // Future NetMeeting version
  39. const DWORD PF_VER_MASK = 0x000F0000;
  40. const DWORD PF_RESERVED = 0x80000000;
  41. const DWORD PF_VER_CURRENT = PF_VER_NM_4; // Current version
  42. const DWORD PF_DATA_ALL = ( PF_MEDIA_DATA |
  43. PF_CA_MASK |
  44. PF_T120 |
  45. PF_T120_MCU |
  46. PF_T120_TOP_PROV);
  47. class CNmMember : public DllRefCount, public INmMember
  48. {
  49. private:
  50. BSTR m_bstrName; // Display Name
  51. DWORD m_dwGCCID; // GCC UserId
  52. BOOL m_fLocal; // True if local user
  53. ULONG m_uCaps; // Current Roster Caps (CAPFLAG_*)
  54. ULONG m_uNmchCaps; // Current Channel Capabilities (NMCH_*)
  55. DWORD m_dwFlags; // PF_*
  56. DWORD m_dwGccIdParent; // GCCID of parent node
  57. GUID m_guidNode; // unique Id of this node
  58. UINT m_cbUserInfo; // size of user info (in bytes)
  59. PWSTR m_pwszUserInfo; // user info
  60. USER_DATA_LIST m_UserData; // user data
  61. IH323Endpoint* m_pConnection;
  62. public:
  63. CNmMember(PWSTR pwszName, DWORD dwGCCID, DWORD dwFlags, ULONG uCaps,
  64. REFGUID pguidNode, PVOID pwszUserInfo, UINT cbUserInfo);
  65. ~CNmMember();
  66. // Internal methods
  67. IH323Endpoint * GetH323Endpoint() { return m_pConnection;};
  68. VOID AddH323Endpoint(IH323Endpoint *pConnection)
  69. {
  70. if(pConnection)
  71. {
  72. ASSERT(m_pConnection == NULL);
  73. m_pConnection = pConnection;
  74. m_pConnection->AddRef();
  75. }
  76. }
  77. VOID DeleteH323Endpoint(IH323Endpoint *pConnection)
  78. {
  79. ASSERT(m_pConnection && (m_pConnection == pConnection ));
  80. m_pConnection->Release();
  81. m_pConnection = NULL;
  82. }
  83. DWORD GetDwFlags() {return m_dwFlags;}
  84. VOID SetDwFlags(DWORD dw) {m_dwFlags = dw;}
  85. VOID AddPf(DWORD dw) {m_dwFlags |= dw;}
  86. VOID RemovePf(DWORD dw) {m_dwFlags &= ~dw;}
  87. ULONG GetNmchCaps() {return m_uNmchCaps;}
  88. VOID SetNmchCaps(ULONG uNmchCaps) {m_uNmchCaps = uNmchCaps;}
  89. VOID AddNmchCaps(ULONG uNmchCaps) {m_uNmchCaps |= uNmchCaps;}
  90. VOID RemoveNmchCaps(ULONG uNmchCaps) {m_uNmchCaps &= ~uNmchCaps;}
  91. DWORD GetGCCID() {return m_dwGCCID;}
  92. VOID SetGCCID(DWORD dw) {m_dwGCCID = dw;}
  93. DWORD GetGccIdParent() {return m_dwGccIdParent;}
  94. VOID SetGccIdParent(DWORD dw);
  95. ULONG GetCaps() {return m_uCaps;}
  96. VOID SetCaps(ULONG uCaps) {m_uCaps = uCaps;}
  97. PVOID GetUserInfo() {return m_pwszUserInfo;}
  98. VOID SetUserInfo(PVOID pwszUserInfo, UINT cbUserInfo);
  99. BOOL GetSecurityData(PBYTE * ppb, ULONG * pcb);
  100. BOOL FLocal() {return m_fLocal;}
  101. BOOL FTopProvider() {return (0 != (m_dwFlags & PF_T120_TOP_PROV));}
  102. BOOL FMcu() {return (0 != (m_dwFlags & PF_T120_MCU));}
  103. BOOL FHasData() {return (0 != (m_dwFlags & PF_T120));}
  104. BSTR GetName() {return m_bstrName;}
  105. REFGUID GetNodeGuid() {return m_guidNode;}
  106. HRESULT ExtractUserData(LPTSTR psz, UINT cchMax, PWSTR pwszKey);
  107. HRESULT GetIpAddr(LPTSTR psz, UINT cchMax);
  108. HRESULT STDMETHODCALLTYPE SetUserData(REFGUID rguid, BYTE *pb, ULONG cb);
  109. // INmMember methods
  110. HRESULT STDMETHODCALLTYPE GetName(BSTR *pbstrName);
  111. HRESULT STDMETHODCALLTYPE GetID(ULONG * puID);
  112. HRESULT STDMETHODCALLTYPE GetNmVersion(ULONG *puVersion);
  113. HRESULT STDMETHODCALLTYPE GetAddr(BSTR *pbstrAddr, NM_ADDR_TYPE *puType);
  114. HRESULT STDMETHODCALLTYPE GetUserData(REFGUID rguid, BYTE **ppb, ULONG *pcb);
  115. HRESULT STDMETHODCALLTYPE GetConference(INmConference **ppConference);
  116. HRESULT STDMETHODCALLTYPE GetNmchCaps(ULONG *puchCaps);
  117. HRESULT STDMETHODCALLTYPE GetShareState(NM_SHARE_STATE *puState);
  118. HRESULT STDMETHODCALLTYPE IsSelf(void);
  119. HRESULT STDMETHODCALLTYPE IsMCU(void);
  120. HRESULT STDMETHODCALLTYPE Eject(void);
  121. // IUnknown methods
  122. ULONG STDMETHODCALLTYPE AddRef(void);
  123. ULONG STDMETHODCALLTYPE Release(void);
  124. HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, PVOID *ppvObj);
  125. };
  126. // Utility Functions
  127. CNmMember * GetLocalMember(void);
  128. CNmMember * PMemberFromGCCID(UINT uNodeID);
  129. CNmMember * PMemberFromNodeGuid(REFGUID rguidNode);
  130. CNmMember * PDataMemberFromName(PCWSTR pwszName);
  131. typedef CEnumNmX<IEnumNmMember, &IID_IEnumNmMember, INmMember, CNmMember> CEnumNmMember;
  132. #endif // _IMEMBER_H_