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.

174 lines
5.0 KiB

  1. // webgate.h : Declaration of the CWebGate
  2. #ifndef __WEBGATE_H_
  3. #define __WEBGATE_H_
  4. #include <windowsx.h>
  5. // Start with a 16 KB read buffer
  6. #define READ_BUFFER_SIZE 0x4000
  7. #include "resource.h" // main symbols
  8. /////////////////////////////////////////////////////////////////////////////
  9. // CWebGate
  10. class ATL_NO_VTABLE CWebGate :
  11. public CComObjectRootEx<CComSingleThreadModel>,
  12. public CComCoClass<CWebGate,&CLSID_WebGate>,
  13. public CComControl<CWebGate>,
  14. public IDispatchImpl<IWebGate, &IID_IWebGate, &LIBID_ICWHELPLib>,
  15. public IProvideClassInfo2Impl<&CLSID_WebGate, &DIID__WebGateEvents, &LIBID_ICWHELPLib>,
  16. public IPersistStreamInitImpl<CWebGate>,
  17. public IOleControlImpl<CWebGate>,
  18. public IOleObjectImpl<CWebGate>,
  19. public IOleInPlaceActiveObjectImpl<CWebGate>,
  20. public IViewObjectExImpl<CWebGate>,
  21. public IOleInPlaceObjectWindowlessImpl<CWebGate>,
  22. public CProxy_WebGateEvents<CWebGate>,
  23. public IConnectionPointContainerImpl<CWebGate>,
  24. public IObjectSafetyImpl<CWebGate>
  25. {
  26. public:
  27. CWebGate()
  28. {
  29. m_pmk = 0;
  30. m_pbc = 0;
  31. m_pbsc = 0;
  32. m_cbBuffer = 0;
  33. m_bKeepFile = FALSE;
  34. // setup and allocate a data buffer
  35. m_cbdata = READ_BUFFER_SIZE;
  36. m_lpdata = (LPSTR) GlobalAllocPtr(GHND, m_cbdata);
  37. m_hEventComplete = 0;
  38. }
  39. ~CWebGate()
  40. {
  41. USES_CONVERSION;
  42. m_bstrFormData.Empty();
  43. m_bstrBuffer.Empty();
  44. m_bstrPath.Empty();
  45. m_bstrCacheFileName.Empty();
  46. if (m_bstrDumpFileName)
  47. {
  48. #ifdef UNICODE
  49. DeleteFile(m_bstrDumpFileName);
  50. #else
  51. DeleteFile(OLE2A(m_bstrDumpFileName));
  52. #endif
  53. m_bstrDumpFileName.Empty();
  54. }
  55. // Release the binding context callback
  56. if (m_pbsc && m_pbc)
  57. {
  58. RevokeBindStatusCallback(m_pbc, m_pbsc);
  59. m_pbsc->Release();
  60. m_pbsc = 0;
  61. }
  62. // Release the binding context
  63. if (m_pbc)
  64. {
  65. m_pbc->Release();
  66. m_pbc = 0;
  67. }
  68. // release the monikor
  69. if (m_pmk)
  70. {
  71. m_pmk->Release();
  72. m_pmk = 0;
  73. }
  74. // free the data buffer
  75. if (m_lpdata)
  76. GlobalFreePtr(m_lpdata);
  77. }
  78. DECLARE_REGISTRY_RESOURCEID(IDR_WEBGATE)
  79. BEGIN_COM_MAP(CWebGate)
  80. COM_INTERFACE_ENTRY(IDispatch)
  81. COM_INTERFACE_ENTRY(IWebGate)
  82. COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject, IViewObjectEx)
  83. COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject2, IViewObjectEx)
  84. COM_INTERFACE_ENTRY_IMPL(IViewObjectEx)
  85. COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleWindow, IOleInPlaceObjectWindowless)
  86. COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleInPlaceObject, IOleInPlaceObjectWindowless)
  87. COM_INTERFACE_ENTRY_IMPL(IOleInPlaceObjectWindowless)
  88. COM_INTERFACE_ENTRY_IMPL(IOleInPlaceActiveObject)
  89. COM_INTERFACE_ENTRY_IMPL(IOleControl)
  90. COM_INTERFACE_ENTRY_IMPL(IOleObject)
  91. COM_INTERFACE_ENTRY_IMPL(IPersistStreamInit)
  92. COM_INTERFACE_ENTRY_IMPL(IObjectSafety)
  93. COM_INTERFACE_ENTRY(IProvideClassInfo)
  94. COM_INTERFACE_ENTRY(IProvideClassInfo2)
  95. COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
  96. END_COM_MAP()
  97. BEGIN_PROPERTY_MAP(CWebGate)
  98. // Example entries
  99. // PROP_ENTRY("Property Description", dispid, clsid)
  100. // PROP_PAGE(CLSID_StockColorPage)
  101. END_PROPERTY_MAP()
  102. BEGIN_CONNECTION_POINT_MAP(CWebGate)
  103. CONNECTION_POINT_ENTRY(DIID__WebGateEvents)
  104. END_CONNECTION_POINT_MAP()
  105. BEGIN_MSG_MAP(CWebGate)
  106. MESSAGE_HANDLER(WM_PAINT, OnPaint)
  107. MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
  108. MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus)
  109. END_MSG_MAP()
  110. // IViewObjectEx
  111. STDMETHOD(GetViewStatus)(DWORD* pdwStatus)
  112. {
  113. ATLTRACE(_T("IViewObjectExImpl::GetViewStatus\n"));
  114. *pdwStatus = 0;
  115. return S_OK;
  116. }
  117. // IWebGate
  118. public:
  119. STDMETHOD(get_DownloadFname)(/*out, retval]*/ BSTR *pVal);
  120. STDMETHOD(get_Buffer)(/*[out, retval]*/ BSTR *pVal);
  121. STDMETHOD(FetchPage)(/*[in]*/ DWORD dwKeepFile, /*[in]*/ DWORD dwDoAsync, /*[out, retval]*/ BOOL *pbRetVal);
  122. STDMETHOD(DumpBufferToFile)(/*[out]*/ BSTR *pFileName, /*[out, retval]*/ BOOL *pbRetVal);
  123. STDMETHOD(put_FormData)(/*[in]*/ BSTR newVal);
  124. STDMETHOD(put_Path)(/*[in]*/ BSTR newVal);
  125. HRESULT OnDraw(ATL_DRAWINFO& di);
  126. // needs to be public, so the bindcallback can access it
  127. DWORD m_cbBuffer;
  128. CComBSTR m_bstrBuffer;
  129. CComBSTR m_bstrCacheFileName;
  130. CComBSTR m_bstrDumpFileName;
  131. BOOL m_bKeepFile;
  132. LPSTR m_lpdata;
  133. DWORD m_cbdata;
  134. HANDLE m_hEventComplete;
  135. protected:
  136. CComBSTR m_bstrFormData;
  137. CComBSTR m_bstrPath;
  138. private:
  139. IMoniker* m_pmk;
  140. IBindCtx* m_pbc;
  141. IBindStatusCallback* m_pbsc;
  142. };
  143. #endif //__WEBGATE_H_