orpcLib.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:5k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* orpcLib.h - ORPC PUBLIC interfaces (VxDCOM) */
  2. /* Copyright (c) 1999 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01z,13jul01,dbs  fix up includes
  7. 01y,15feb00,dbs  add OBJREF etc
  8. 01x,09jul99,dbs  use new filenames
  9. 01w,24jun99,dbs  move authn into new class
  10. 01v,17jun99,dbs  remove RPC_MEM_ALLOC macro
  11. 01u,26may99,dbs  fix auth func ptr type
  12. 01t,24may99,dbs  remove VXDCOM_IPPORT constant
  13. 01s,19may99,dbs  change orpcListenTaskCreate to orpcEndpointCreate
  14. 01r,18may99,dbs  remove old marshaling scheme
  15. 01q,16may99,dbs  use new NDR type-descriptors for marshaling
  16. 01p,13may99,drm  added prototypes for ORPC_EXTENT_ARRAY marshalling functions
  17. 01o,11may99,dbs  rename VXCOM to VXDCOM
  18. 01n,10may99,dbs  simplify binding-handle usage
  19. 01m,07may99,dbs  move major functionality into this lib
  20. 01l,22apr99,dbs  add task priorities
  21. 01k,21apr99,dbs  fix includes for dcomProxy.h
  22. 01j,21apr99,dbs  change RPCMSG to RPCPDU
  23. 01i,21apr99,dbs  add length arg to orpcDSAFormat()
  24. 01h,15feb99,dbs  move ORPC dispatch into orpcLib
  25. 01g,10feb99,dbs  improve handling of endpoints
  26. 01f,08feb99,dbs  formalise naming convention and ORPC/RPC interface
  27. 01e,04feb99,dbs  change wchar_t to OLECHAR
  28. 01d,22jan99,dbs  move some stuff into new rpcLib
  29. 01c,20jan99,dbs  fix file names, move to new VOBs
  30. 01b,23dec98,dbs  improve documentation
  31. 01a,22dec98,dbs  created from orpcLibP.h
  32. */
  33. /*
  34.   DESCRIPTION:
  35.   This header collects some miscellaneous ORPC-related stuff together
  36.   and prototypes some functions which are required for handling
  37.   plain-DCE RPCs as well as ORPCs.
  38.   
  39.   */
  40. #ifndef __INCorpcLib_h
  41. #define __INCorpcLib_h
  42. #ifdef _MSC_VER
  43. #pragma warning (disable:4786)
  44. #endif
  45. #include "private/comMisc.h"
  46. #include "dcomLib.h" // basic types
  47. #include "dcomProxy.h" // proxy support
  48. #include "RemoteActivation.h" // DUALSTRINGARRAY
  49. #include "rpcDceProto.h" // protocol
  50. ////////////////////////////////////////////////////////////////////////////
  51. //
  52. // Task Names -- this allows them to be changed easily...
  53. //
  54. #define SCM_TASK_NAME "tScmTask"
  55. #define EP_TASK_NAME "tRpcTask"
  56. #define WORK_TASK_NAME "tRpcWorker"
  57. ////////////////////////////////////////////////////////////////////////////
  58. //
  59. // OBJREF -- ORPC wire protocol marshaled interface pointer
  60. // definition. (see also orpc.idl)
  61. //
  62. const unsigned int OBJREF_MAX = 1024;
  63. typedef struct tagOBJREF
  64.     {
  65.     unsigned long signature;
  66.     unsigned long flags;
  67.     GUID iid;
  68.     union
  69. {
  70. // case OBJREF_STANDARD
  71. struct
  72.     {
  73.     STDOBJREF std;
  74.     DUALSTRINGARRAY saResAddr;
  75.     } u_standard;
  76. // case OBJREF_HANDLER
  77. struct
  78.     {
  79.     STDOBJREF std;
  80.     CLSID clsid; // of handler code
  81.     DUALSTRINGARRAY saResAddr;
  82.     } u_handler;
  83. // case OBJREF_CUSTOM
  84. struct
  85.     {
  86.     CLSID clsid; // of unmarshaler
  87.     unsigned long cbExtension;
  88.     unsigned long size;
  89.     char* pData;
  90.     } u_custom;
  91. } u_objref;
  92.     } OBJREF;
  93. ////////////////////////////////////////////////////////////////////////////
  94. //
  95. // _ACTIVATION_MAX -- the limit on the number of interfaces that can
  96. // be dealt with in a single call to RemoteActivation() and/or
  97. // CoCreateInstanceEx(). This limit is imposed by ASSERTs in the code,
  98. // and should be plenty for most cases we have come across. It could
  99. // be replaced by dynamic allocation, but there would be a speed and
  100. // fragmentation penalty...
  101. //
  102. const int _ACTIVATION_MAX = 16;
  103. ///////////////////////////////////////////////////////////////////////////
  104. //
  105. // Private runtime support functions...
  106. //
  107. extern IPID    orpcIpidCreate (void* itf, OID oid);
  108. extern OID     orpcOidFromIpid (REFIPID ipid);
  109. extern HRESULT orpcDSAFormat
  110.     (
  111.     DUALSTRINGARRAY* pdsa,
  112.     DWORD dsaLen,
  113.     LPCOLESTR addrInfo,
  114.     LPCOLESTR secInfo
  115.     );
  116. /////////////////////////////////////////////////////////////////////////
  117. //
  118. // Marshaling functions for ORPC types (OBJREF, ORPCTHIS) which are
  119. // not publically exposed through DCOM APIs.
  120. //
  121. extern HRESULT ndrMarshalORPCTHIS (NdrMarshalStream*, ORPCTHIS*);
  122. extern HRESULT ndrUnmarshalORPCTHIS (NdrUnmarshalStream*, ORPCTHIS*);
  123. extern HRESULT ndrMarshalOBJREF (NdrMarshalStream*, OBJREF*);
  124. extern HRESULT ndrUnmarshalOBJREF (NdrUnmarshalStream*, OBJREF*);
  125. /////////////////////////////////////////////////////////////////////////
  126. //
  127. // The GUID used for NDR transfer syntax, which is the only transfer
  128. // syntax DCOM recognises...
  129. //
  130. extern const GUID DCOM_XFER_SYNTAX;
  131. /////////////////////////////////////////////////////////////////////////
  132. //
  133. // Define constants for common protocol-sequences...
  134. //
  135. #define NCACN_IP_TCP (0x07)
  136. #define NCALRPC (0x99)
  137. /////////////////////////////////////////////////////////////////////////
  138. //
  139. // Wire-format NDR always little-endian -- NT cannot cope with
  140. // big-endian packets, even though DCE-RPC says it should...
  141. //
  142. #define ORPC_WIRE_DREP                  VXDCOM_DREP_LITTLE_ENDIAN
  143. #endif