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.

229 lines
4.0 KiB

  1. // File: icawrap.cpp
  2. #include "precomp.h"
  3. #include "icawrap.h"
  4. CICA* CICA::m_pThis = NULL;
  5. CICA::CICA() :
  6. RefCount(NULL),
  7. m_pfnICA_Start(NULL),
  8. m_pfnICA_Stop(NULL),
  9. m_pfnICA_DisplayPanel(NULL),
  10. m_pfnICA_RemovePanel(NULL),
  11. m_pfnICA_SetOptions(NULL),
  12. m_hICA_General(NULL),
  13. m_hICA_Audio(NULL),
  14. m_hICA_Video(NULL),
  15. m_hICA_SetOptions(NULL),
  16. m_hWndICADlg(NULL)
  17. {
  18. }
  19. CICA::~CICA()
  20. {
  21. m_pThis = NULL;
  22. }
  23. CICA* CICA::Instance()
  24. {
  25. if (NULL == m_pThis)
  26. {
  27. m_pThis = new CICA;
  28. if (!m_pThis->Initialize())
  29. {
  30. WARNING_OUT(("ICA Failed to initialize"));
  31. delete m_pThis;
  32. m_pThis = NULL;
  33. }
  34. }
  35. else
  36. {
  37. m_pThis->AddRef();
  38. }
  39. return m_pThis;
  40. }
  41. BOOL CICA::Initialize()
  42. {
  43. HINSTANCE hInst = NmLoadLibrary(SZ_ICADLL,FALSE);
  44. if (NULL == hInst)
  45. {
  46. return FALSE;
  47. }
  48. m_pfnICA_Start = (PFnICA_Start)GetProcAddress(hInst, TEXT("ICA_Start"));
  49. if (NULL == m_pfnICA_Start)
  50. {
  51. goto ErrorLeave;
  52. }
  53. m_pfnICA_Stop = (PFnICA_Stop)GetProcAddress(hInst, TEXT("ICA_Stop"));
  54. if( NULL == m_pfnICA_Stop)
  55. {
  56. goto ErrorLeave;
  57. }
  58. m_pfnICA_DisplayPanel =
  59. (PFnICA_DisplayPanel)GetProcAddress(hInst, TEXT("ICA_DisplayPanel"));
  60. if(NULL == m_pfnICA_DisplayPanel)
  61. {
  62. goto ErrorLeave;
  63. }
  64. m_pfnICA_RemovePanel =
  65. (PFnICA_RemovePanel)GetProcAddress(hInst, TEXT("ICA_RemovePanel"));
  66. if(NULL == m_pfnICA_RemovePanel)
  67. {
  68. goto ErrorLeave;
  69. }
  70. m_pfnICA_SetOptions =
  71. (PFnICA_SetOptions)GetProcAddress(hInst, TEXT("ICA_SetOptions"));
  72. if(NULL == m_pfnICA_SetOptions)
  73. {
  74. goto ErrorLeave;
  75. }
  76. return TRUE;
  77. ErrorLeave:
  78. FreeLibrary(hInst);
  79. return FALSE;
  80. }
  81. BOOL CICA::Start()
  82. {
  83. if (IsRunning())
  84. {
  85. return TRUE;
  86. }
  87. LPSTR pszHelpFile = SZ_ICAHELP;
  88. ASSERT(m_pfnICA_Start);
  89. if (S_OK != m_pfnICA_Start(TEXT(""), TEXT("RRCM.DLL"), &m_hWndICADlg))
  90. {
  91. return FALSE;
  92. }
  93. ASSERT(m_pfnICA_DisplayPanel);
  94. if (S_OK != m_pfnICA_DisplayPanel(
  95. NULL, // pszModuleName
  96. "ICA_GENERAL_PANEL", // pzName
  97. pszHelpFile, // pszHelpFile
  98. NULL,
  99. &m_hICA_General))
  100. {
  101. m_hICA_General = NULL;
  102. goto ErrorLeave;
  103. }
  104. if (S_OK != m_pfnICA_DisplayPanel(
  105. NULL, // pszModuleName
  106. "NM2.0_H323_AUDIO", // pzName
  107. pszHelpFile, // pszHelpFile
  108. NULL,
  109. &m_hICA_Audio))
  110. {
  111. m_hICA_Audio = NULL;
  112. goto ErrorLeave;
  113. }
  114. if (S_OK != m_pfnICA_DisplayPanel(
  115. NULL, // pszModuleName
  116. "NM2.0_H323_VIDEO", // pzName
  117. pszHelpFile, // pszHelpFile
  118. NULL,
  119. &m_hICA_Video))
  120. {
  121. m_hICA_Video = NULL;
  122. goto ErrorLeave;
  123. }
  124. #if 0
  125. RegEntry re( AUDIO_KEY, HKEY_CURRENT_USER );
  126. UINT uSoundCardCaps = re.GetNumber(REGVAL_SOUNDCARDCAPS,SOUNDCARD_NONE);
  127. BOOL fFullDuplex = FALSE;
  128. ASSERT(ISSOUNDCARDPRESENT(uSoundCardCaps));
  129. if (ISSOUNDCARDFULLDUPLEX(uSoundCardCaps))
  130. {
  131. fFullDuplex = (BOOL)
  132. ( re.GetNumber(REGVAL_FULLDUPLEX,0) == FULLDUPLEX_ENABLED );
  133. }
  134. ASSERT(g_pfnICA_SetOptions);
  135. if (S_OK != m_pfnICA_SetOptions( (fFullDuplex ? ICA_SET_FULL_DUPLEX : ICA_SET_HALF_DUPLEX)))
  136. {
  137. m_hICA_SetOptions = NULL;
  138. goto ErrorLeave;
  139. }
  140. #endif // 0
  141. // normal return path
  142. return TRUE;
  143. ErrorLeave:
  144. Stop();
  145. return FALSE;
  146. }
  147. VOID CICA::Stop()
  148. {
  149. ASSERT(m_hWndICADlg);
  150. ASSERT(m_pfnICA_RemovePanel);
  151. if (NULL != m_hICA_General)
  152. {
  153. m_pfnICA_RemovePanel(m_hICA_General);
  154. m_hICA_General = NULL;
  155. }
  156. if (NULL != m_hICA_Audio)
  157. {
  158. m_pfnICA_RemovePanel(m_hICA_Audio);
  159. m_hICA_Audio = NULL;
  160. }
  161. if (NULL != m_hICA_Video)
  162. {
  163. m_pfnICA_RemovePanel(m_hICA_Video);
  164. m_hICA_Video = NULL;
  165. }
  166. ASSERT(m_pfnICA_Stop);
  167. m_pfnICA_Stop();
  168. m_hWndICADlg = NULL;
  169. }
  170. VOID CICA::SetInTray(BOOL fInTray)
  171. {
  172. if (NULL != m_pfnICA_SetOptions)
  173. {
  174. UINT uOptions = ICA_DONT_SHOW_TRAY_ICON;
  175. if (fInTray)
  176. {
  177. uOptions = ICA_SHOW_TRAY_ICON;
  178. }
  179. m_pfnICA_SetOptions(uOptions);
  180. }
  181. }
  182. STDMETHODIMP_(ULONG) CICA::AddRef(void)
  183. {
  184. return RefCount::AddRef();
  185. }
  186. STDMETHODIMP_(ULONG) CICA::Release(void)
  187. {
  188. return RefCount::Release();
  189. }