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.

626 lines
30 KiB

  1. /**MOD+**********************************************************************/
  2. /* Module: ccapi.cpp */
  3. /* */
  4. /* Purpose: Call Controller APIs */
  5. /* */
  6. /* Copyright(C) Microsoft Corporation 1997-1999 */
  7. /* */
  8. /****************************************************************************/
  9. #include <adcg.h>
  10. extern "C" {
  11. #define TRC_GROUP TRC_GROUP_CORE
  12. #define TRC_FILE "accapi"
  13. #include <atrcapi.h>
  14. }
  15. #include "cc.h"
  16. #include "aco.h"
  17. #ifdef OS_WINCE
  18. #include "ceconfig.h"
  19. #endif
  20. /****************************************************************************/
  21. /* If you add a capability set, update the following also (in accdata.h): */
  22. /* - CC_COMBINED_CAPS_NUMBER_CAPABILITIES */
  23. /* - the definition of the CC_COMBINED_CAPABILITIES struct. */
  24. /* This is used to initialize the per instance capabilities */
  25. /****************************************************************************/
  26. CC_COMBINED_CAPABILITIES ccInitCombinedCapabilities = {
  27. CC_COMBINED_CAPS_NUMBER_CAPABILITIES, /* Number of capabilities */
  28. 0, /* padding */
  29. /************************************************************************/
  30. /* General caps */
  31. /************************************************************************/
  32. {
  33. TS_CAPSETTYPE_GENERAL, /* capabilitySetType */
  34. sizeof(TS_GENERAL_CAPABILITYSET), /* lengthCapability */
  35. TS_OSMAJORTYPE_WINDOWS, /* OSMajorType */
  36. TS_OSMINORTYPE_WINDOWS_NT, /* OSMinorType */
  37. TS_CAPS_PROTOCOLVERSION, /* protocolVersion */
  38. 0, /* pad1 */
  39. 0, /* generalCompressionTypes (none) */
  40. TS_EXTRA_NO_BITMAP_COMPRESSION_HDR |
  41. TS_FASTPATH_OUTPUT_SUPPORTED |
  42. TS_LONG_CREDENTIALS_SUPPORTED |
  43. TS_AUTORECONNECT_COOKIE_SUPPORTED, // extraFlags
  44. FALSE, /* updateCapabilityFlag */
  45. FALSE, /* remoteUnshareFlag */
  46. 0, /* generalCompressionLevel (none) */
  47. 0, /* refreshRectSupport */
  48. 0 /* suppressOutputSupport */
  49. },
  50. /************************************************************************/
  51. /* Bitmap caps */
  52. /************************************************************************/
  53. {
  54. TS_CAPSETTYPE_BITMAP, /* capabilitySetType */
  55. sizeof(TS_BITMAP_CAPABILITYSET), /* lengthCapability */
  56. 0, /* Set in CC */ /* preferredBitsPerPixel */
  57. TRUE, /* receive1BitPerPixel */
  58. TRUE, /* receive4BitsPerPixel */
  59. TRUE, /* receive8BitsPerPixel */
  60. 0, /* Set in CC */ /* desktopWidth */
  61. 0, /* Set in CC */ /* desktopHeight */
  62. 0, /* pad2 */
  63. TS_CAPSFLAG_SUPPORTED, /* desktopResizeFlag */
  64. 1, /* bitmapCompressionFlag */
  65. 0, /* highColorFlags */
  66. 0, /* pad1 */
  67. TRUE, /* multipleRectangleSupport*/
  68. 0 /* pad2 */
  69. },
  70. /************************************************************************/
  71. /* Order Caps */
  72. /************************************************************************/
  73. {
  74. TS_CAPSETTYPE_ORDER, /* capabilitySetType */
  75. sizeof(TS_ORDER_CAPABILITYSET), /* lengthCapability */
  76. {'\0','\0','\0','\0','\0','\0','\0','\0',
  77. '\0','\0','\0','\0','\0','\0','\0','\0'}, /* terminalDescriptor */
  78. 0, /* pad1 */
  79. UH_SAVE_BITMAP_X_GRANULARITY, /* desktopSaveXGranularity */
  80. UH_SAVE_BITMAP_Y_GRANULARITY, /* desktopSaveYGranularity */
  81. 0, /* pad2 */
  82. 1, /* maximumOrderLevel */
  83. 0, /* numberFonts */
  84. #ifdef OS_WINCE
  85. TS_ORDERFLAGS_SOLIDPATTERNBRUSHONLY |
  86. #endif
  87. #ifdef NO_ORDER_SUPPORT
  88. TS_ORDERFLAGS_CANNOTRECEIVEORDERS |
  89. #endif
  90. TS_ORDERFLAGS_ZEROBOUNDSDELTASSUPPORT |
  91. TS_ORDERFLAGS_NEGOTIATEORDERSUPPORT, /* orderFlags */
  92. {
  93. /****************************************************************/
  94. /* Order Support flags. */
  95. /* */
  96. /* The array index corresponds to the TS_NEG_xxx_INDEX value */
  97. /* indicated (from at128.h) The values marked with an x in the */
  98. /* first column are overwritten at run time by UH before CC */
  99. /* sends the combined capabilities. */
  100. /****************************************************************/
  101. 1, /* 0 TS_NEG_DSTBLT_INDEX destinationBltSupport */
  102. 1, /* 1 TS_NEG_PATBLT_INDEX patternBltSupport */
  103. 0, /* x 2 TS_NEG_SCRBLT_INDEX screenBltSupport */
  104. 1, /* x 3 TS_NEG_MEMBLT_INDEX memoryBltSupport */
  105. 1, /* x 4 TS_NEG_MEM3BLT_INDEX memoryThreeWayBltSupport */
  106. 0, /* 5 TS_NEG_ATEXTOUT_INDEX textASupport */
  107. 0, /* 6 TS_NEG_AEXTTEXTOUT_INDEX extendedTextASupport */
  108. #ifdef DRAW_NINEGRID
  109. 1, /* 7 TS_NEG_DRAWNINEGRID_INDEX */
  110. #else
  111. 0,
  112. #endif
  113. 1, /* x 8 TS_NEG_LINETO_INDEX lineSupport */
  114. #ifdef DRAW_NINEGRID
  115. 1, /* 9 TS_NEG_MULTI_DRAWNINEGRID_INDEX */
  116. #else
  117. 0,
  118. #endif
  119. 0, /* 10 TS_NEG_OPAQUERECT_INDEX opaqueRectangleSupport */
  120. 0, /* 11 TS_NEG_SAVEBITMAP_INDEX desktopSaveSupport */
  121. 0, /* 12 TS_NEG_WTEXTOUT_INDEX textWSupport */
  122. 0, /* 13 TS_NEG_MEMBLT_R2_INDEX Reserved entry */
  123. 0, /* 14 TS_NEG_MEM3BLT_R2_INDEX Reserved entry */
  124. 1, /* x15 TS_NEG_MULTIDSTBLT_INDEX multi DstBlt support */
  125. 1, /* x16 TS_NEG_MULTIPATBLT_INDEX multi PatBlt support */
  126. 1, /* x17 TS_NEG_MULTISCRBLT_INDEX multi ScrBlt support */
  127. 1, /* x18 TS_NEG_MULTIOPAQUERECT_INDEX multi OpaqueRect support */
  128. 1, /* x19 TS_NEG_FAST_INDEX_INDEX fast index order support */
  129. #ifdef OS_WINCE
  130. 0, /* 20 Polygon not supported for WinCE */
  131. 0, /* 21 Polygon not supported for WinCE */
  132. #else
  133. 1, /* x20 TS_NEG_POLYGON_SC_INDEX polygon sc support */
  134. 1, /* x21 TS_NEG_POLYGON_CB_INDEX polygon cb support */
  135. #endif
  136. 1, /* x22 TS_NEG_POLYLINE_INDEX polyLineSupport */
  137. 0, /* x23 not used */
  138. 1, /* x24 TS_NEG_FAST_GLYPH_INDEX fast glyph order support */
  139. #ifdef OS_WINCE
  140. 0, /* 25 Ellipse not supported for WinCE */
  141. 0, /* 26 Ellipse not supported for WinCE */
  142. #else
  143. 1, /* x25 TS_NEG_ELLIPSE_SC_INDEX ellipse sc support */
  144. 1, /* x26 TS_NEG_ELLIPSE_CB_INDEX ellipse cb support */
  145. #endif
  146. 0, /* 27 MS reserved entry 6 */
  147. 0, /* 28 TS_NEG_WEXTTEXTOUT_INDEX extendedTextWSupport */
  148. 0, /* 29 TS_NEG_WLONGTEXTOUT_INDEX longTextWSupport */
  149. 0, /* 30 TS_NEG_WLONGEXTTEXTOUT_INDEX longExtendedTextWSupport */
  150. 0, /* 31 DCL reserved entry 3 */
  151. },
  152. /****************************************************************/
  153. /* Don't use font signatures for Windows CE */
  154. /****************************************************************/
  155. #ifdef OS_WINCE
  156. ( ((TS_TEXT_AND_MASK)|(TS_TEXT_OR_MASK)) &
  157. (~TS_TEXTFLAGS_CHECKFONTSIGNATURES) ), /* textFlags */
  158. #else
  159. (TS_TEXT_AND_MASK)|(TS_TEXT_OR_MASK), /* textFlags */
  160. #endif
  161. 0, /* pad2 */
  162. 0, /* pad4 */
  163. UH_SAVE_BITMAP_SIZE, /* desktopSaveSize */
  164. 0, /* pad2 */
  165. 0, /* pad2 */
  166. 0, /* textANSICodePage */
  167. 0 /* pad2 */
  168. },
  169. /************************************************************************/
  170. // BitmapCache Caps
  171. // Note that this same space is used for rev1 and rev2, we declare as
  172. // rev1 because it is the larger of the two. We will cast to rev2 if
  173. // we get a server advertisement that it supports rev2 (via
  174. // TS_BITMAPCACHE_CAPABILITYSET_HOSTSUPPORT).
  175. /************************************************************************/
  176. {
  177. TS_CAPSETTYPE_BITMAPCACHE, /* capabilitySetType */
  178. sizeof(TS_BITMAPCACHE_CAPABILITYSET), /* lengthCapability */
  179. 0, 0, 0, 0, 0, 0, /* 6 pad DWORDs */
  180. 0, 0, /* Cache1 */
  181. 0, 0, /* Cache2 */
  182. 0, 0, /* Cache3 */
  183. },
  184. /************************************************************************/
  185. /* ColorTableCache Caps */
  186. /************************************************************************/
  187. {
  188. TS_CAPSETTYPE_COLORCACHE, /* capabilitySetType */
  189. sizeof(TS_COLORTABLECACHE_CAPABILITYSET), /* lengthCapability */
  190. UH_COLOR_TABLE_CACHE_ENTRIES, /* colortableCacheSize */
  191. 0 /* notpartOfTSharePad */
  192. },
  193. /************************************************************************/
  194. /* WindowActivation Caps */
  195. /************************************************************************/
  196. {
  197. TS_CAPSETTYPE_ACTIVATION, /* capabilitySetType */
  198. sizeof(TS_WINDOWACTIVATION_CAPABILITYSET), /* lengthCapability */
  199. FALSE, /* helpKeyFlag */
  200. FALSE, /* helpKeyIndexFlag */
  201. FALSE, /* helpExtendedKeyFlag */
  202. FALSE /* windowManagerKeyFlag */
  203. },
  204. /************************************************************************/
  205. /* Control Caps */
  206. /************************************************************************/
  207. {
  208. TS_CAPSETTYPE_CONTROL, /* capabilitySetType */
  209. sizeof(TS_CONTROL_CAPABILITYSET), /* lengthCapability */
  210. 0, /* controlFlags */
  211. FALSE, /* remoteDetachFlag */
  212. TS_CONTROLPRIORITY_NEVER, /* controlInterest */
  213. TS_CONTROLPRIORITY_NEVER /* detachInterest */
  214. },
  215. /************************************************************************/
  216. /* Pointer Caps */
  217. /************************************************************************/
  218. {
  219. TS_CAPSETTYPE_POINTER, /* capabilitySetType */
  220. sizeof(TS_POINTER_CAPABILITYSET), /* lengthCapability */
  221. TRUE, /* colorPointerFlag */
  222. CM_COLOR_CACHE_SIZE, /* colorPointerCacheSize */
  223. CM_CURSOR_CACHE_SIZE /* pointerCacheSize */
  224. },
  225. /************************************************************************/
  226. /* Share Caps */
  227. /************************************************************************/
  228. {
  229. TS_CAPSETTYPE_SHARE, /* capabilitySetType */
  230. sizeof(TS_SHARE_CAPABILITYSET), /* lengthCapability */
  231. 0, /* nodeId */
  232. 0 /* padding */
  233. },
  234. /************************************************************************/
  235. /* Input Caps */
  236. /************************************************************************/
  237. {
  238. TS_CAPSETTYPE_INPUT,
  239. sizeof(TS_INPUT_CAPABILITYSET), /* lengthCapability */
  240. TS_INPUT_FLAG_SCANCODES | /* inputFlags */
  241. TS_INPUT_FLAG_VKPACKET |
  242. #if !defined(OS_WINCE)
  243. TS_INPUT_FLAG_MOUSEX,
  244. #endif
  245. TS_INPUT_FLAG_FASTPATH_INPUT2,
  246. RNS_UD_KBD_DEFAULT /* keyboard layout */
  247. },
  248. /************************************************************************/
  249. /* Sound */
  250. /************************************************************************/
  251. {
  252. TS_CAPSETTYPE_SOUND,
  253. sizeof(TS_SOUND_CAPABILITYSET), /* lengthCapability */
  254. TS_SOUND_FLAG_BEEPS, /* soundFlags */
  255. 0, /* padding */
  256. },
  257. /************************************************************************/
  258. /* Font */
  259. /************************************************************************/
  260. {
  261. TS_CAPSETTYPE_FONT,
  262. sizeof(TS_FONT_CAPABILITYSET), /* lengthCapability */
  263. TS_FONTSUPPORT_FONTLIST, /* fontSupportFlags */
  264. 0, /* padding */
  265. },
  266. /************************************************************************/
  267. /* GlyphCache Caps */
  268. /************************************************************************/
  269. {
  270. TS_CAPSETTYPE_GLYPHCACHE, /* capabilitySetType */
  271. sizeof(TS_GLYPHCACHE_CAPABILITYSET), /* lengthCapability */
  272. 0, /* GlyphCache */
  273. 0, /* FragCache */
  274. 0, /* GlyphSupportLevel */
  275. },
  276. /************************************************************************/
  277. /* Brush Caps */
  278. /************************************************************************/
  279. {
  280. TS_CAPSETTYPE_BRUSH, /* capabilitySetType */
  281. sizeof(TS_BRUSH_CAPABILITYSET), /* lengthCapability */
  282. 0, /* brushSupportLevel */
  283. },
  284. /************************************************************************/
  285. /* Offscreen Caps */
  286. /************************************************************************/
  287. {
  288. TS_CAPSETTYPE_OFFSCREENCACHE, /* capabilitySetType */
  289. sizeof(TS_OFFSCREEN_CAPABILITYSET), /* lengthCapability */
  290. 0, /* offscreenSupportLevel */
  291. 0, /* offscreenCacheSize */
  292. 0, /* offscreenCacheEntries */
  293. },
  294. /************************************************************************/
  295. /* Virtual Channel Caps */
  296. /************************************************************************/
  297. {
  298. TS_CAPSETTYPE_VIRTUALCHANNEL, /* capabilitySetType */
  299. sizeof(TS_VIRTUALCHANNEL_CAPABILITYSET), /* lengthCapability */
  300. //
  301. // What this particular cap means is that the client understands
  302. // virtual channels compressed from the server at 64K.
  303. //
  304. // The client recevies what compression cap the server supports
  305. // from the client and compresses appropriately
  306. //
  307. TS_VCCAPS_COMPRESSION_64K, /* vc support flags */
  308. #ifdef DRAW_NINEGRID
  309. },
  310. /************************************************************************/
  311. // DrawNineGrid Caps
  312. /************************************************************************/
  313. {
  314. TS_CAPSETTYPE_DRAWNINEGRIDCACHE, // capabilitySetType
  315. sizeof(TS_DRAW_NINEGRID_CAPABILITYSET), // lengthCapability
  316. 0, // drawNineGridSupportLevel
  317. 0, // drawNineGridCacheSize
  318. 0, // drawNineGridCacheEntries
  319. #endif
  320. #ifdef DRAW_GDIPLUS
  321. },
  322. {
  323. TS_CAPSETTYPE_DRAWGDIPLUS,
  324. sizeof(TS_DRAW_GDIPLUS_CAPABILITYSET),
  325. 0, //drawGdiplusSupportLevel
  326. 0, //GdipVersion;
  327. 0, //drawGdiplusCacheLevel
  328. 0, //GdipGraphicsCacheEntries;
  329. 0, //GdipObjectBrushCacheEntries;
  330. 0, //GdipObjectPenCacheEntries;
  331. 0, //GdipObjectImageCacheEntries;
  332. 0, //GdipObjectImageAttributesCacheEntries;
  333. 0, //GdipGraphicsCacheChunkSize;
  334. 0, //GdipObjectBrushCacheChunkSize;
  335. 0, //GdipObjectPenCacheChunkSize;
  336. 0, //GdipObjectImageAttributesCacheChunkSize;
  337. 0, //GdipObjectImageCacheChunkSize;
  338. 0, //GdipObjectImageCacheTotalSize;
  339. 0, //GdipObjectImageCacheMaxSize;
  340. #endif
  341. }
  342. };
  343. CCC::CCC(CObjs* objs)
  344. {
  345. _pClientObjects = objs;
  346. DC_MEMCPY(&_ccCombinedCapabilities, &ccInitCombinedCapabilities,
  347. sizeof(_ccCombinedCapabilities));
  348. }
  349. CCC::~CCC()
  350. {
  351. }
  352. /**PROC+*********************************************************************/
  353. /* Name: CC_Init */
  354. /* */
  355. /* Purpose: Initializes the Call Controller */
  356. /* */
  357. /* Returns: Nothing */
  358. /* */
  359. /* Params: None */
  360. /* */
  361. /**PROC-*********************************************************************/
  362. DCVOID DCAPI CCC::CC_Init(DCVOID)
  363. {
  364. DC_BEGIN_FN("CC_Init");
  365. //Setup local object pointers
  366. _pUt = _pClientObjects->_pUtObject;
  367. _pUi = _pClientObjects->_pUiObject;
  368. _pSl = _pClientObjects->_pSlObject;
  369. _pUh = _pClientObjects->_pUHObject;
  370. _pCd = _pClientObjects->_pCdObject;
  371. _pIh = _pClientObjects->_pIhObject;
  372. _pOr = _pClientObjects->_pOrObject;
  373. _pFs = _pClientObjects->_pFsObject;
  374. _pCm = _pClientObjects->_pCMObject;
  375. _pCChan = _pClientObjects->_pChanObject;
  376. DC_MEMSET(&_CC, 0, sizeof(_CC));
  377. _CC.fsmState = CC_DISCONNECTED;
  378. DC_END_FN();
  379. return;
  380. } /* CC_Init */
  381. /**PROC+*********************************************************************/
  382. /* Name: CC_Term */
  383. /* */
  384. /* Purpose: Terminates the Call Controller */
  385. /* */
  386. /* Returns: Nothing */
  387. /* */
  388. /* Params: None */
  389. /* */
  390. /**PROC-*********************************************************************/
  391. DCVOID DCAPI CCC::CC_Term(DCVOID)
  392. {
  393. DC_BEGIN_FN("CC_Term");
  394. /************************************************************************/
  395. /* No Action */
  396. /************************************************************************/
  397. DC_END_FN();
  398. return;
  399. } /* CC_Term */
  400. /**PROC+*********************************************************************/
  401. /* Name: CC_Event */
  402. /* */
  403. /* Purpose: Handles calls from the Component Decoupler by passing on the */
  404. /* event to the CCFSMProc whilst leaving the data parameter null */
  405. /* */
  406. /* Returns: Nothing */
  407. /* */
  408. /* Params: IN - event - event to be passed on */
  409. /* */
  410. /* Operation: Takes a PDCVOID passed via the Component Decoupler */
  411. /* CD_DecoupleMessage function */
  412. /* */
  413. /**PROC-*********************************************************************/
  414. DCVOID DCAPI CCC::CC_Event(ULONG_PTR apiEvent)
  415. {
  416. DCUINT internalEvent;
  417. DC_BEGIN_FN("CC_Event");
  418. TRC_DBG((TB, _T("CC_Event handling Event %u"), apiEvent));
  419. switch ((DCUINT)apiEvent)
  420. {
  421. case CC_EVT_API_ONCONNECTOK:
  422. {
  423. internalEvent = CC_EVT_ONCONNECTOK;
  424. }
  425. break;
  426. case CC_EVT_API_ONBUFFERAVAILABLE:
  427. {
  428. internalEvent = CC_EVT_ONBUFFERAVAILABLE;
  429. }
  430. break;
  431. case CC_EVT_API_ONDEACTIVATEALL:
  432. {
  433. internalEvent = CC_EVT_ONDEACTIVATEALL;
  434. }
  435. break;
  436. case CC_EVT_API_DISCONNECT:
  437. {
  438. internalEvent = CC_EVT_DISCONNECT;
  439. }
  440. break;
  441. case CC_EVT_API_SHUTDOWN:
  442. {
  443. internalEvent = CC_EVT_SHUTDOWN;
  444. }
  445. break;
  446. case CC_EVT_API_ONSHUTDOWNDENIED:
  447. {
  448. internalEvent = CC_EVT_ONSHUTDOWNDENIED;
  449. }
  450. break;
  451. case CC_EVT_API_DISCONNECTANDEXIT:
  452. {
  453. internalEvent = CC_EVT_DISCONNECT_AND_EXIT;
  454. }
  455. break;
  456. default:
  457. {
  458. TRC_ABORT((TB,_T("Unexpected event passed to CC_Event")));
  459. DC_QUIT;
  460. }
  461. break;
  462. }
  463. CCFSMProc(internalEvent, 0, 0);
  464. DC_EXIT_POINT:
  465. DC_END_FN();
  466. return;
  467. } /* CC_Event */
  468. /**PROC+*********************************************************************/
  469. /* Name: CC_Connect */
  470. /* */
  471. /* Purpose: Handles calls from the component Decoupler by passing on the */
  472. /* RNSAddress with a CC_EVENT_CONNECTOK event to CCFSMProc */
  473. /* */
  474. /* Returns: Nothing */
  475. /* */
  476. /* Params: IN - RNSAddress - pointer to RNSAddress string to be called */
  477. /* IN - unusedParam - not used */
  478. /* */
  479. /**PROC-*********************************************************************/
  480. DCVOID DCAPI CCC::CC_Connect(PDCVOID pData, DCUINT dataLen)
  481. {
  482. PCONNECTSTRUCT pConnectStruct = (PCONNECTSTRUCT)pData;
  483. DC_BEGIN_FN("CC_Connect");
  484. TRC_ASSERT((dataLen == sizeof(CONNECTSTRUCT) ), (TB,_T("Bad connect data")));
  485. CCFSMProc(CC_EVT_STARTCONNECT, (ULONG_PTR)pConnectStruct, dataLen);
  486. DC_END_FN();
  487. return;
  488. } /* CC_Connect */
  489. /**PROC+*********************************************************************/
  490. /* Name: CC_ConnectFail */
  491. /* */
  492. /* Purpose: Handles calls from the Component Decoupler by passing on the */
  493. /* failId and with a CC_EVENT_CONNECTFAIL event to CCFSMProc */
  494. /* */
  495. /* Returns: Nothing */
  496. /* */
  497. /* Params: IN - failID - Reason of failure to connect */
  498. /* */
  499. /**PROC-*********************************************************************/
  500. DCVOID DCAPI CCC::CC_OnDisconnected(ULONG_PTR failId)
  501. {
  502. DC_BEGIN_FN("CC_OnDisconnected");
  503. TRC_DBG((TB, _T("CC_ConnectFail handling failure %hd"), failId));
  504. CCFSMProc(CC_EVT_ONDISCONNECTED, (DCUINT32)failId, sizeof(DCUINT32));
  505. #ifdef OS_WINCE
  506. if (gbFlushHKLM)
  507. {
  508. #ifdef DC_DEBUG
  509. DWORD dwTick = GetTickCount();
  510. #endif
  511. RegFlushKey(HKEY_LOCAL_MACHINE);
  512. gbFlushHKLM = FALSE;
  513. #ifdef DC_DEBUG
  514. TRC_NRM((TB, _T("RegFlushKey took %d milliseconds"), (GetTickCount() - dwTick)));
  515. #endif
  516. }
  517. #endif
  518. DC_END_FN();
  519. return;
  520. } /* CC_ConnectFail */
  521. /**PROC+*********************************************************************/
  522. /* Name: CC_OnDemandActivePDU */
  523. /* */
  524. /* Purpose: Handles calls from the Component Decoupler by storing */
  525. /* the serverMCSId locally and calling */
  526. /* CCFSMProc with a CC_EVENT_DEMAND_ACTIVE event */
  527. /* */
  528. /* Returns: Nothing */
  529. /* */
  530. /* Params: IN - pPDU - pointer to a demand active PDU */
  531. /* IN - dataLen - length of data pointed to by pPDU */
  532. /* */
  533. /**PROC-*********************************************************************/
  534. DCVOID DCAPI CCC::CC_OnDemandActivePDU(PDCVOID pData, DCUINT dataLen)
  535. {
  536. DC_BEGIN_FN("CC_OnDemandActivePDU");
  537. CCFSMProc(CC_EVT_ONDEMANDACTIVE, (ULONG_PTR) pData, dataLen);
  538. DC_END_FN();
  539. return;
  540. } /* CC_DemandActiveRequest */