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

VxWorks

开发平台:

C/C++

  1. /* NdrStreams.h - ORPC NDR (un)marshaling streams */
  2. /* Copyright (c) 1999 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01g,01oct01,nel  SPR#69557. Add extra padding bytes to make VT_BOOL type work.
  7. 01f,18sep00,nel  SPR#33730. Merge T2 OPC fixes into T3 branch.
  8. 01e,25may99,dbs  make sure stream dtors free buffer memory
  9. 01d,20may99,dbs  move NDR phase into streams
  10. 01c,18may99,dbs  add marshaling phase accessor methods
  11. 01b,18may99,dbs  add proxy/stub marshaling phase to NDR-streams
  12. 01a,12may99,dbs  created
  13. */
  14. #ifndef __INCNdrStreams_h
  15. #define __INCNdrStreams_h
  16. #include "dcomProxy.h"
  17. //////////////////////////////////////////////////////////////////////////
  18. //
  19. // NdrPhase -- the current marshaling phase a stream is involved in
  20. //
  21. struct NdrPhase
  22.     {
  23.     enum Phase_t
  24. {
  25. NOPHASE=0,
  26. PROXY_MSHL,
  27. STUB_UNMSHL,
  28. STUB_MSHL,
  29. PROXY_UNMSHL
  30. };
  31.     };
  32.     
  33. //////////////////////////////////////////////////////////////////////////
  34. //
  35. // NdrMarshalStream -- provides a stream into which any of the basic
  36. // C/C++ data-types (of size 1, 2, 4 or 8 bytes) can be marshaled,
  37. // using the insert() method. It provides 2 constructors - the first
  38. // uses a fixed-size, user-supplied buffer, and only allows data to be
  39. // marshaled into that buffer, until it is full. The second
  40. // constructor takes only the data-representation argument, and causes
  41. // the stream to internally allocate memory as required, so it can
  42. // cope with variable-sized marshaling easily.
  43. //
  44. class NdrMarshalStream
  45.     {
  46.   public:
  47.     // ctor -- user-supplied fixed-size memory buffer
  48.     NdrMarshalStream (NdrPhase::Phase_t ph, DREP drep, byte*, size_t);
  49.     // ctor -- internally-managed expanding buffer
  50.     NdrMarshalStream (NdrPhase::Phase_t ph, DREP drep);
  51.     // dtor
  52.     ~NdrMarshalStream ();
  53.     
  54.     HRESULT align (size_t);
  55.     HRESULT insert (size_t wordSize, const void* pvData, bool reformat);
  56.     size_t  size () const;
  57.     DREP    drep () const { return m_drep; }
  58.     byte*   begin () const { return m_buffer; }
  59.     byte*   end () const { return m_iptr; }
  60.     NdrPhase::Phase_t phaseGet () const { return m_phase; }
  61.     void addEndPadding (DWORD amount) { m_endPadding += amount; };
  62.     DWORD getEndPadding () const { return m_endPadding; };
  63.     
  64.   private:
  65.     DREP m_drep; // data representation
  66.     byte* m_buffer; // base of buffer
  67.     byte* m_iptr; // insert pointer
  68.     byte* m_end; // end of buffer
  69.     bool m_bOwnMemory; // does it own the buffer mem?
  70.     NdrPhase::Phase_t m_phase; // marshaling phase
  71.     DWORD m_endPadding; // extra padding to be added to 
  72.      // end of stream.
  73.     HRESULT reserve (size_t);
  74.     };
  75. //////////////////////////////////////////////////////////////////////////
  76. //
  77. // NdrUnmarshalStream -- provides a stream from which data can be
  78. // unmarshaled into any of the standard data sizes (1, 2, 4 or 8 byte
  79. // quantities) via the extract() method. It is constructed with the
  80. // address and length of a buffer holding the data to be unmarshaled,
  81. // and a data-representation identifier indicating that buffer's NDR
  82. // encoding.
  83. //
  84. class NdrUnmarshalStream
  85.     {
  86.   public:
  87.     NdrUnmarshalStream (NdrPhase::Phase_t ph, DREP drep, byte*, size_t);
  88.     NdrUnmarshalStream ();
  89.     ~NdrUnmarshalStream ();
  90.     NdrUnmarshalStream& operator= (const NdrUnmarshalStream& rhs);
  91.     HRESULT align (size_t);
  92.     HRESULT extract (size_t wordSize, void* pvData, bool reformat);
  93.     size_t  size () const;
  94.     DREP    drep () const { return m_drep; }
  95.     byte*   begin () const { return m_buffer; }
  96.     byte*   end () const { return m_end; }
  97.     const byte*   curr () const { return m_optr; }
  98.     NdrPhase::Phase_t phaseGet () const { return m_phase; }
  99.     byte*   stubAlloc (size_t n);
  100.   private:
  101.     DREP m_drep; // data representation
  102.     byte* m_buffer; // base of buffer
  103.     byte* m_optr; // extract pointer
  104.     byte* m_end; // end of buffer
  105.     NdrPhase::Phase_t m_phase; // marshaling phase
  106.     byte* m_stubBuffer; // stub-only buffer
  107.     byte* m_stubNext; // ptr into that buffer
  108.     };
  109. #endif