home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / mfc / include / afxinet.h < prev    next >
C/C++ Source or Header  |  1998-06-16  |  21KB  |  698 lines

  1. // This is a part of the Microsoft Foundation Classes C++ library.
  2. // Copyright (C) 1992-1998 Microsoft Corporation
  3. // All rights reserved.
  4. //
  5. // This source code is only intended as a supplement to the
  6. // Microsoft Foundation Classes Reference and related
  7. // electronic documentation provided with the library.
  8. // See these sources for detailed information regarding the
  9. // Microsoft Foundation Classes product.
  10.  
  11. #ifndef __AFXINET_H_
  12. #define __AFXINET_H_
  13.  
  14. #ifndef __AFX_H__
  15.     #include <afx.h>
  16. #endif
  17.  
  18. #ifndef _WININET_
  19. #include <wininet.h>
  20. #endif
  21.  
  22. #ifndef _AFXDLL
  23. #pragma comment(lib, "wininet.lib")
  24. #endif
  25.  
  26. /////////////////////////////////////////////////////////////////////////////
  27. // classes that are declared in this file
  28.  
  29. class CInternetSession; // from CObject
  30.  
  31. class CGopherLocator;   // from CObject
  32.  
  33. class CInternetFile;    // from CStdioFile (FILETXT.CPP)
  34.     class CHttpFile;
  35.     class CGopherFile;
  36.  
  37. class CInternetConnection;
  38.     class CFtpConnection;
  39.     class CGopherConnection;
  40.     class CHttpConnection;
  41.  
  42. class CFtpFileFind;     // from CFileFind (FILEFIND.CPP)
  43. class CGopherFileFind;
  44.  
  45. class CInternetException;
  46.  
  47. /////////////////////////////////////////////////////////////////////////////
  48.  
  49. #undef AFX_DATA
  50. #define AFX_DATA AFX_CORE_DATA
  51.  
  52. /////////////////////////////////////////////////////////////////////////////
  53. // Global Functions
  54.  
  55. BOOL AFXAPI AfxParseURL(LPCTSTR pstrURL, DWORD& dwServiceType,
  56.     CString& strServer, CString& strObject, INTERNET_PORT& nPort);
  57. BOOL AFXAPI AfxParseURLEx(LPCTSTR pstrURL, DWORD& dwServiceType,
  58.     CString& strServer, CString& strObject, INTERNET_PORT& nPort,
  59.     CString& strUsername, CString& strPassword, DWORD dwFlags = 0);
  60.  
  61. DWORD AFXAPI AfxGetInternetHandleType(HINTERNET hQuery);
  62.  
  63. // see CInternetException at the bottom of this file
  64.  
  65. void AFXAPI AfxThrowInternetException(DWORD dwContext, DWORD dwError = 0);
  66.  
  67. // these are defined by WININET.H
  68.  
  69. #define AFX_INET_SERVICE_FTP        INTERNET_SERVICE_FTP
  70. #define AFX_INET_SERVICE_HTTP       INTERNET_SERVICE_HTTP
  71. #define AFX_INET_SERVICE_GOPHER     INTERNET_SERVICE_GOPHER
  72.  
  73. // these are types that MFC parsing functions understand
  74.  
  75. #define AFX_INET_SERVICE_UNK        0x1000
  76. #define AFX_INET_SERVICE_FILE       (AFX_INET_SERVICE_UNK+1)
  77. #define AFX_INET_SERVICE_MAILTO     (AFX_INET_SERVICE_UNK+2)
  78. #define AFX_INET_SERVICE_MID        (AFX_INET_SERVICE_UNK+3)
  79. #define AFX_INET_SERVICE_CID        (AFX_INET_SERVICE_UNK+4)
  80. #define AFX_INET_SERVICE_NEWS       (AFX_INET_SERVICE_UNK+5)
  81. #define AFX_INET_SERVICE_NNTP       (AFX_INET_SERVICE_UNK+6)
  82. #define AFX_INET_SERVICE_PROSPERO   (AFX_INET_SERVICE_UNK+7)
  83. #define AFX_INET_SERVICE_TELNET     (AFX_INET_SERVICE_UNK+8)
  84. #define AFX_INET_SERVICE_WAIS       (AFX_INET_SERVICE_UNK+9)
  85. #define AFX_INET_SERVICE_AFS        (AFX_INET_SERVICE_UNK+10)
  86. #define AFX_INET_SERVICE_HTTPS      (AFX_INET_SERVICE_UNK+11)
  87.  
  88. /////////////////////////////////////////////////////////////////////////////
  89. // classes that are declared in this file
  90.  
  91. class CInternetSession : public CObject
  92. {
  93. public:
  94.     CInternetSession(LPCTSTR pstrAgent = NULL,
  95.         DWORD dwContext = 1,
  96.         DWORD dwAccessType = PRE_CONFIG_INTERNET_ACCESS,
  97.         LPCTSTR pstrProxyName = NULL,
  98.         LPCTSTR pstrProxyBypass = NULL,
  99.         DWORD dwFlags = 0);
  100.  
  101.     BOOL QueryOption(DWORD dwOption, LPVOID lpBuffer, LPDWORD lpdwBufLen) const;
  102.     BOOL QueryOption(DWORD dwOption, DWORD& dwValue) const;
  103.     BOOL QueryOption(DWORD dwOption, CString& refString) const;
  104.  
  105.     BOOL SetOption(DWORD dwOption, LPVOID lpBuffer, DWORD dwBufferLength,
  106.             DWORD dwFlags = 0);
  107.     BOOL SetOption(DWORD dwOption, DWORD dwValue, DWORD dwFlags = 0);
  108.  
  109.     CStdioFile* OpenURL(LPCTSTR pstrURL,
  110.         DWORD dwContext = 1, DWORD dwFlags = INTERNET_FLAG_TRANSFER_ASCII,
  111.         LPCTSTR pstrHeaders = NULL, DWORD dwHeadersLength = 0);
  112.  
  113.     CFtpConnection* GetFtpConnection(LPCTSTR pstrServer,
  114.         LPCTSTR pstrUserName = NULL, LPCTSTR pstrPassword = NULL,
  115.         INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
  116.         BOOL bPassive = FALSE);
  117.  
  118.     CHttpConnection* GetHttpConnection(LPCTSTR pstrServer,
  119.         INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
  120.         LPCTSTR pstrUserName = NULL, LPCTSTR pstrPassword = NULL);
  121.     CHttpConnection* GetHttpConnection(LPCTSTR pstrServer, DWORD dwFlags,
  122.         INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
  123.         LPCTSTR pstrUserName = NULL, LPCTSTR pstrPassword = NULL);
  124.  
  125.     CGopherConnection* GetGopherConnection(LPCTSTR pstrServer,
  126.         LPCTSTR pstrUserName = NULL, LPCTSTR pstrPassword = NULL,
  127.         INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER);
  128.  
  129.     BOOL EnableStatusCallback(BOOL bEnable = TRUE);
  130.  
  131.     DWORD ServiceTypeFromHandle(HINTERNET hQuery);
  132.  
  133. // operations
  134.  
  135.     DWORD GetContext() const;
  136.     operator HINTERNET() const;
  137.     virtual void Close();
  138.  
  139.     // cookies
  140.     static BOOL SetCookie(LPCSTR pstrUrl, LPCTSTR pstrCookieName, LPCTSTR pstrCookieData);
  141.     static BOOL GetCookie(LPCSTR pstrUrl, LPCTSTR pstrCookieName, LPTSTR pstrCookieData, DWORD dwBufLen);
  142.     static DWORD GetCookieLength(LPCSTR pstrUrl, LPCTSTR pstrCookieName);
  143.     static BOOL GetCookie(LPCSTR pstrUrl, LPCTSTR pstrCookieName, CString& strCookieData);
  144.  
  145. // overridables
  146.     virtual void OnStatusCallback(DWORD dwContext, DWORD dwInternetStatus,
  147.         LPVOID lpvStatusInformation, DWORD dwStatusInformationLength);
  148.  
  149. // implementation
  150.     DECLARE_DYNAMIC(CInternetSession)
  151.     ~CInternetSession();
  152.  
  153. protected:
  154.     DWORD m_dwContext;
  155.     HINTERNET m_hSession;
  156.     INTERNET_STATUS_CALLBACK m_pOldCallback;
  157.     BOOL m_bCallbackEnabled;
  158.  
  159. public:
  160. #ifdef _DEBUG
  161.     virtual void Dump(CDumpContext& dc) const;
  162. #endif
  163. };
  164.  
  165.  
  166. ////////////////////////////////////////////////////////////////////////////
  167. // Internet File Access Wrapper
  168.  
  169. class CInternetFile : public CStdioFile
  170. {
  171. // Constructors
  172. protected:
  173.     CInternetFile(HINTERNET hFile, LPCTSTR pstrFileName,
  174.         CInternetConnection* pConnection, BOOL bReadMode);
  175.     CInternetFile(HINTERNET hFile, HINTERNET hSession,
  176.         LPCTSTR pstrFileName, LPCTSTR pstrServer, DWORD dwContext,
  177.         BOOL bReadMode);
  178.  
  179. // Attributes
  180. protected:
  181.     HINTERNET m_hFile;
  182. public:
  183.     operator HINTERNET() const;
  184.     DWORD GetContext() const;
  185.  
  186. // Operations
  187.     BOOL SetWriteBufferSize(UINT nWriteSize);
  188.     BOOL SetReadBufferSize(UINT nReadSize);
  189.  
  190.     BOOL QueryOption(DWORD dwOption, LPVOID lpBuffer, LPDWORD lpdwBufLen) const;
  191.     BOOL QueryOption(DWORD dwOption, DWORD& dwValue) const;
  192.     BOOL QueryOption(DWORD dwOption, CString& refString) const;
  193.  
  194.     BOOL SetOption(DWORD dwOption, LPVOID lpBuffer, DWORD dwBufferLength,
  195.             DWORD dwFlags = 0);
  196.     BOOL SetOption(DWORD dwOption, DWORD dwValue, DWORD dwFlags = 0);
  197.  
  198. // Overridables
  199.     virtual LONG Seek(LONG lOffset, UINT nFrom);
  200.  
  201.     virtual UINT Read(void* lpBuf, UINT nCount);
  202.     virtual void Write(const void* lpBuf, UINT nCount);
  203.  
  204.     virtual void Abort();
  205.     virtual void Flush();
  206.  
  207.     virtual void Close();
  208.     virtual DWORD GetLength() const;
  209.  
  210.     virtual BOOL ReadString(CString& rString);
  211.     virtual LPTSTR ReadString(LPTSTR pstr, UINT nMax);
  212.     virtual void WriteString(LPCTSTR pstr);
  213.  
  214.     // Not supported by CInternetFile
  215.     void LockRange(DWORD dwPos, DWORD dwCount);
  216.     void UnlockRange(DWORD dwPos, DWORD dwCount);
  217.     CFile* Duplicate() const;
  218.     virtual void SetLength(DWORD dwNewLen);
  219.  
  220. // Implementation
  221. public:
  222.     virtual ~CInternetFile();
  223.  
  224. protected:
  225.     BOOL m_bReadMode;
  226.     DWORD m_dwContext;
  227.     HINTERNET m_hConnection;
  228.  
  229.     CString m_strServerName;
  230.  
  231.     UINT m_nWriteBufferSize;
  232.     UINT m_nWriteBufferPos;
  233.     LPBYTE m_pbWriteBuffer;
  234.  
  235.     UINT m_nReadBufferSize;
  236.     UINT m_nReadBufferPos;
  237.     LPBYTE m_pbReadBuffer;
  238.     UINT m_nReadBufferBytes;
  239.  
  240. #ifdef _DEBUG
  241.     virtual void AssertValid() const;
  242.     virtual void Dump(CDumpContext& dc) const;
  243. #endif
  244.  
  245.     friend class CInternetSession;
  246.     friend class CFtpConnection;
  247.     friend class CHttpConnection;
  248.     friend class CGopherConnection;
  249.     DECLARE_DYNAMIC(CInternetFile)
  250. };
  251.  
  252.  
  253. class CHttpFile : public CInternetFile
  254. {
  255. // Constructors
  256. protected:
  257.     CHttpFile(HINTERNET hFile, HINTERNET hSession, LPCTSTR pstrObject,
  258.         LPCTSTR pstrServer, LPCTSTR pstrVerb, DWORD dwContext);
  259.     CHttpFile(HINTERNET hFile, LPCTSTR pstrVerb, LPCTSTR pstrObject,
  260.         CHttpConnection* pConnection);
  261.  
  262. // Operations
  263. public:
  264.     BOOL AddRequestHeaders(LPCTSTR pstrHeaders,
  265.         DWORD dwFlags = HTTP_ADDREQ_FLAG_ADD_IF_NEW, int dwHeadersLen = -1);
  266.     BOOL AddRequestHeaders(CString& str,
  267.         DWORD dwFlags = HTTP_ADDREQ_FLAG_ADD_IF_NEW);
  268.  
  269.     BOOL SendRequest(LPCTSTR pstrHeaders = NULL, DWORD dwHeadersLen = 0,
  270.         LPVOID lpOptional = NULL, DWORD dwOptionalLen = 0);
  271.     BOOL SendRequest(CString& strHeaders,
  272.         LPVOID lpOptional = NULL, DWORD dwOptionalLen = 0);
  273.     BOOL SendRequestEx(DWORD dwTotalLen,
  274.         DWORD dwFlags = HSR_INITIATE,   DWORD dwContext = 1);
  275.     BOOL SendRequestEx(LPINTERNET_BUFFERS lpBuffIn,
  276.         LPINTERNET_BUFFERS lpBuffOut, DWORD dwFlags = HSR_INITIATE,
  277.         DWORD dwContext = 1);
  278.     BOOL EndRequest(DWORD dwFlags = 0,
  279.         LPINTERNET_BUFFERS lpBuffIn = NULL, DWORD dwContext = 1);
  280.     BOOL QueryInfo(DWORD dwInfoLevel, LPVOID lpvBuffer,
  281.         LPDWORD lpdwBufferLength, LPDWORD lpdwIndex = NULL) const;
  282.     BOOL QueryInfo(DWORD dwInfoLevel, CString& str,
  283.         LPDWORD dwIndex = NULL) const;
  284.     BOOL QueryInfo(DWORD dwInfoLevel, SYSTEMTIME* pSysTime,
  285.         LPDWORD dwIndex = NULL) const;
  286.     BOOL QueryInfo(DWORD dwInfoLevel, DWORD& dwResult,
  287.         LPDWORD dwIndex = NULL) const;
  288.     BOOL QueryInfoStatusCode(DWORD& dwStatusCode) const;
  289.  
  290.     DWORD ErrorDlg(CWnd* pParent = NULL,
  291.         DWORD dwError = ERROR_INTERNET_INCORRECT_PASSWORD,
  292.         DWORD dwFlags = FLAGS_ERROR_UI_FLAGS_GENERATE_DATA | FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS,
  293.         LPVOID* lppvData = NULL);
  294.  
  295. // Attributes
  296. public:
  297.     CString GetVerb() const;
  298.     CString GetObject() const;
  299.     virtual CString GetFileURL() const;
  300.     virtual void Close();
  301.  
  302. // Implementation
  303. public:
  304.     virtual ~CHttpFile();
  305. protected:
  306.     CString m_strObject;
  307.     CString m_strVerb;
  308.  
  309. #ifdef _DEBUG
  310.     virtual void AssertValid() const;
  311.     virtual void Dump(CDumpContext& dc) const;
  312. #endif
  313.  
  314.     friend class CHttpConnection;
  315.     friend class CInternetSession;
  316.     DECLARE_DYNAMIC(CHttpFile)
  317. };
  318.  
  319. // class CGopherFile is declared after CGopherLocator, below
  320.  
  321.  
  322. ////////////////////////////////////////////////////////////////////////////
  323. // Connection types
  324.  
  325. class CInternetConnection : public CObject
  326. {
  327. public:
  328.     CInternetConnection(CInternetSession* pSession, LPCTSTR pstrServer,
  329.         INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
  330.         DWORD dwContext = 1);
  331.  
  332. // Operations
  333.     operator HINTERNET() const;
  334.     DWORD GetContext() const;
  335.     CInternetSession* GetSession() const;
  336.  
  337.     CString GetServerName() const;
  338.  
  339.     BOOL QueryOption(DWORD dwOption, LPVOID lpBuffer, LPDWORD lpdwBufLen) const;
  340.     BOOL QueryOption(DWORD dwOption, DWORD& dwValue) const;
  341.     BOOL QueryOption(DWORD dwOption, CString& refString) const;
  342.  
  343.     BOOL SetOption(DWORD dwOption, LPVOID lpBuffer, DWORD dwBufferLength,
  344.             DWORD dwFlags = 0);
  345.     BOOL SetOption(DWORD dwOption, DWORD dwValue, DWORD dwFlags = 0);
  346.  
  347. // Implementation
  348. protected:
  349.     HINTERNET m_hConnection;
  350.     DWORD m_dwContext;
  351.     CInternetSession* m_pSession;
  352.     virtual void Close();
  353.  
  354.     CString m_strServerName;
  355.     INTERNET_PORT m_nPort;
  356.  
  357. public:
  358.     ~CInternetConnection();
  359.     DECLARE_DYNAMIC(CInternetConnection)
  360.  
  361. #ifdef _DEBUG
  362.     virtual void Dump(CDumpContext& dc) const;
  363.     void AssertValid() const;
  364. #endif
  365. };
  366.  
  367. class CFtpConnection : public CInternetConnection
  368. {
  369. public:
  370.     CFtpConnection(CInternetSession* pSession, HINTERNET hConnected,
  371.         LPCTSTR pstrServer, DWORD dwContext);
  372.     CFtpConnection(CInternetSession* pSession, LPCTSTR pstrServer,
  373.         LPCTSTR pstrUserName = NULL, LPCTSTR pstrPassword = NULL,
  374.         DWORD dwContext = 0,
  375.         INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
  376.         BOOL bPassive = FALSE);
  377.  
  378.     BOOL SetCurrentDirectory(LPCTSTR pstrDirName);
  379.  
  380.     BOOL GetCurrentDirectory(CString& strDirName) const;
  381.     BOOL GetCurrentDirectory(LPTSTR pstrDirName, LPDWORD lpdwLen) const;
  382.     BOOL GetCurrentDirectoryAsURL(LPTSTR pstrName, LPDWORD lpdwLen) const;
  383.     BOOL GetCurrentDirectoryAsURL(CString& strDirName) const;
  384.  
  385.     BOOL RemoveDirectory(LPCTSTR pstrDirName);
  386.     BOOL CreateDirectory(LPCTSTR pstrDirName);
  387.     BOOL Rename(LPCTSTR pstrExisting, LPCTSTR pstrNew);
  388.     BOOL Remove(LPCTSTR pstrFileName);
  389.  
  390.     BOOL PutFile(LPCTSTR pstrLocalFile, LPCTSTR pstrRemoteFile,
  391.         DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY, DWORD dwContext = 1);
  392.  
  393.     BOOL GetFile(LPCTSTR pstrRemoteFile, LPCTSTR pstrLocalFile,
  394.         BOOL bFailIfExists = TRUE,
  395.         DWORD dwAttributes = FILE_ATTRIBUTE_NORMAL,
  396.         DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY, DWORD dwContext = 1);
  397.  
  398.     CInternetFile* OpenFile(LPCTSTR pstrFileName,
  399.         DWORD dwAccess = GENERIC_READ,
  400.         DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY, DWORD dwContext = 1);
  401.  
  402.     virtual void Close();
  403.  
  404. // implementation
  405.     ~CFtpConnection();
  406.  
  407. protected:
  408.     CString m_strServerName;
  409.  
  410. public:
  411. #ifdef _DEBUG
  412.     virtual void Dump(CDumpContext& dc) const;
  413.     virtual void AssertValid() const;
  414. #endif
  415.  
  416.     DECLARE_DYNAMIC(CFtpConnection)
  417. };
  418.  
  419. class CHttpConnection : public CInternetConnection
  420. {
  421. public:
  422.     enum {
  423.         _HTTP_VERB_MIN      = 0,
  424.         HTTP_VERB_POST      = 0,
  425.         HTTP_VERB_GET       = 1,
  426.         HTTP_VERB_HEAD      = 2,
  427.         HTTP_VERB_PUT       = 3,
  428.         HTTP_VERB_LINK      = 4,
  429.         HTTP_VERB_DELETE    = 5,
  430.         HTTP_VERB_UNLINK    = 6,
  431.         _HTTP_VERB_MAX      = 6,
  432.     };
  433.  
  434. public:
  435.     CHttpConnection(CInternetSession* pSession, HINTERNET hConnected,
  436.         LPCTSTR pstrServer, DWORD dwContext);
  437.     CHttpConnection(CInternetSession* pSession, LPCTSTR pstrServer,
  438.         INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
  439.         LPCTSTR pstrUserName = NULL, LPCTSTR pstrPassword = NULL,
  440.         DWORD dwContext = 1);
  441.     CHttpConnection(CInternetSession* pSession, LPCTSTR pstrServer,
  442.         DWORD dwFlags, INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
  443.         LPCTSTR pstrUserName = NULL, LPCTSTR pstrPassword = NULL,
  444.         DWORD dwContext = 1);
  445.  
  446.     CHttpFile* OpenRequest(LPCTSTR pstrVerb,    LPCTSTR pstrObjectName,
  447.         LPCTSTR pstrReferer = NULL,DWORD dwContext = 1,
  448.         LPCTSTR* ppstrAcceptTypes = NULL, LPCTSTR pstrVersion = NULL,
  449.         DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT);
  450.  
  451.     CHttpFile* OpenRequest(int nVerb, LPCTSTR pstrObjectName,
  452.         LPCTSTR pstrReferer = NULL, DWORD dwContext = 1,
  453.         LPCTSTR* ppstrAcceptTypes = NULL, LPCTSTR pstrVersion = NULL,
  454.         DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT);
  455.  
  456. // implementation
  457.     ~CHttpConnection();
  458.     virtual void Close();
  459.  
  460. protected:
  461.     CString m_strServerName;
  462.     static const LPCTSTR szHtmlVerbs[];
  463.  
  464. public:
  465. #ifdef _DEBUG
  466.     virtual void Dump(CDumpContext& dc) const;
  467.     virtual void AssertValid() const;
  468. #endif
  469.  
  470.     friend class CInternetSession;  // just to access szHtmlVerbs
  471.     DECLARE_DYNAMIC(CHttpConnection)
  472. };
  473.  
  474. class CGopherConnection : public CInternetConnection
  475. {
  476. public:
  477.     CGopherConnection(CInternetSession* pSession,
  478.         HINTERNET hConnected, LPCTSTR pstrServer, DWORD dwContext);
  479.  
  480.     CGopherConnection(CInternetSession* pSession, LPCTSTR pstrServer,
  481.         LPCTSTR pstrUserName = NULL, LPCTSTR pstrPassword = NULL,
  482.         DWORD dwContext = 0,
  483.         INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER);
  484.  
  485.     CGopherFile* OpenFile(CGopherLocator& refLocator, DWORD dwFlags = 0,
  486.         LPCTSTR pstrView = NULL, DWORD dwContext = 1);
  487.  
  488.     CGopherLocator CreateLocator(LPCTSTR pstrDisplayString,
  489.         LPCTSTR pstrSelectorString, DWORD dwGopherType);
  490.  
  491.     BOOL CGopherConnection::GetAttribute(CGopherLocator& refLocator,
  492.         CString strRequestedAttributes, CString& strResult);
  493.  
  494.     static CGopherLocator CreateLocator(LPCTSTR pstrLocator);
  495.     static CGopherLocator CreateLocator(LPCTSTR pstrServerName,
  496.         LPCTSTR pstrDisplayString,
  497.         LPCTSTR pstrSelectorString, DWORD dwGopherType,
  498.         INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER);
  499.  
  500. // implementation
  501.     ~CGopherConnection();
  502.     virtual void Close();
  503.  
  504. public:
  505. #ifdef _DEBUG
  506.     virtual void Dump(CDumpContext& dc) const;
  507.     virtual void AssertValid() const;
  508. #endif
  509.     DECLARE_DYNAMIC(CGopherConnection)
  510. };
  511.  
  512.  
  513. /////////////////////////////////////////////////////////////////////////////
  514. // CFtpFileFind
  515.  
  516. class CFtpFileFind : public CFileFind
  517. {
  518. public:
  519.     CFtpFileFind(CFtpConnection* pConnection, DWORD dwContext = 1);
  520.     virtual ~CFtpFileFind();
  521.  
  522.     virtual BOOL FindFile(LPCTSTR pstrName = NULL,
  523.         DWORD dwFlags = INTERNET_FLAG_RELOAD);
  524.     virtual BOOL FindNextFile();
  525.     CString GetFileURL() const;
  526.  
  527. // implementation
  528. protected:
  529.     virtual void CloseContext();
  530.     CFtpConnection* m_pConnection;
  531.     DWORD m_dwContext;
  532.  
  533. public:
  534. #ifdef _DEBUG
  535.     virtual void Dump(CDumpContext& dc) const;
  536.     virtual void AssertValid() const;
  537. #endif
  538.  
  539.     DECLARE_DYNAMIC(CFtpFileFind)
  540. };
  541.  
  542.  
  543. /////////////////////////////////////////////////////////////////////////////
  544. // CGopherLocator
  545.  
  546. class CGopherLocator : public CObject
  547. {
  548. public:
  549.     ~CGopherLocator();
  550.     operator LPCTSTR() const;
  551.     CGopherLocator(const CGopherLocator& ref);
  552.     BOOL GetLocatorType(DWORD& dwRef) const;
  553.  
  554. private:
  555.     // this only created by CGopherConnection::CreateLocator or by serialization
  556.     CGopherLocator(LPCTSTR pstrLocator, DWORD dwLocLen);
  557.  
  558.     CString m_Locator;  // _not_ a zero-terminated string!
  559.     DWORD m_dwBufferLength;
  560.  
  561.     friend class CGopherConnection;
  562.     friend class CGopherFile;
  563. };
  564.  
  565.  
  566. /////////////////////////////////////////////////////////////////////////////
  567. // CGopherFile
  568.  
  569. class CGopherFile : public CInternetFile
  570. {
  571. // Constructors
  572. protected:
  573.     CGopherFile(HINTERNET hFile, CGopherLocator& refLocator,
  574.         CGopherConnection* pConnection);
  575.     CGopherFile(HINTERNET hFile, HINTERNET hSession,
  576.         LPCTSTR pstrLocator, DWORD dwLocLen, DWORD dwContext);
  577.  
  578. // Operations
  579. public:
  580.     virtual void Close();
  581.     virtual void Write(const void* lpBuf, UINT nCount);
  582.     void WriteString(LPCTSTR pstr);
  583.  
  584. // Implementation
  585. protected:
  586.     CGopherLocator m_Locator;
  587. public:
  588.     virtual ~CGopherFile();
  589.  
  590. #ifdef _DEBUG
  591.     virtual void AssertValid() const;
  592.     virtual void Dump(CDumpContext& dc) const;
  593. #endif
  594.  
  595.     friend class CInternetSession;
  596.     friend class CGopherConnection;
  597.     DECLARE_DYNAMIC(CGopherFile)
  598. };
  599.  
  600.  
  601. /////////////////////////////////////////////////////////////////////////////
  602. // CGopherFileFind
  603.  
  604. class CGopherFileFind : public CFileFind
  605. {
  606. public:
  607.     CGopherFileFind(CGopherConnection* pConnection, DWORD dwContext = 1);
  608.     virtual ~CGopherFileFind();
  609.  
  610.     virtual BOOL FindFile(CGopherLocator& refLocator, LPCTSTR pstrString,
  611.         DWORD dwFlags = INTERNET_FLAG_RELOAD);
  612.     virtual BOOL FindFile(LPCTSTR pstrString,
  613.         DWORD dwFlags = INTERNET_FLAG_RELOAD);
  614.     virtual BOOL FindNextFile();
  615.  
  616.     virtual BOOL IsDots() const;
  617.  
  618.     virtual BOOL GetLastWriteTime(FILETIME* pTimeStamp) const;
  619.     virtual BOOL GetLastAccessTime(FILETIME* pTimeStamp) const;
  620.     virtual BOOL GetCreationTime(FILETIME* pTimeStamp) const;
  621.     virtual BOOL GetLastWriteTime(CTime& refTime) const;
  622.     virtual BOOL GetLastAccessTime(CTime& refTime) const;
  623.     virtual BOOL GetCreationTime(CTime& refTime) const;
  624.  
  625.     CGopherLocator GetLocator() const;
  626.     CString GetScreenName() const;
  627.  
  628.     virtual DWORD GetLength() const;
  629. #if defined(_X86_) || defined(_ALPHA_)
  630.     virtual __int64 GetLength64() const;
  631. #endif
  632.  
  633. protected:
  634.     virtual void CloseContext();
  635.     CGopherConnection* m_pConnection;
  636.     DWORD m_dwContext;
  637.  
  638. // implementation
  639. public:
  640.     // Unsupported APIs
  641.     CString GetFileName() const;
  642.     CString GetFilePath() const;
  643.     CString GetFileTitle() const;
  644.     CString GetFileURL() const;
  645.     CString GetRoot() const;
  646.  
  647. #ifdef _DEBUG
  648.     virtual void Dump(CDumpContext& dc) const;
  649.     virtual void AssertValid() const;
  650. #endif
  651.     DECLARE_DYNAMIC(CGopherFileFind)
  652. };
  653.  
  654.  
  655. ///////////////////////////////////////////////////////////////////////
  656. // CInternetException
  657.  
  658. class CInternetException : public CException
  659. {
  660. public:
  661. // Constructor
  662.     CInternetException(DWORD dwError);
  663.  
  664. // Attributes
  665.     DWORD m_dwError;
  666.     DWORD m_dwContext;
  667.  
  668. // Implementation
  669. public:
  670.     ~CInternetException();
  671. #ifdef _DEBUG
  672.     virtual void Dump(CDumpContext& dc) const;
  673. #endif
  674.     virtual BOOL GetErrorMessage(LPTSTR lpstrError, UINT nMaxError,
  675.         PUINT pnHelpContext = NULL);
  676.     DECLARE_DYNAMIC(CInternetException)
  677. };
  678.  
  679. /////////////////////////////////////////////////////////////////////////////
  680. // Inline function declarations
  681.  
  682. #ifdef _AFX_ENABLE_INLINES
  683. #define _AFXINET_INLINE AFX_INLINE
  684. #include <afxinet.inl>
  685. #endif
  686.  
  687. #undef AFX_DATA
  688. #define AFX_DATA
  689.  
  690. #ifdef _AFX_MINREBUILD
  691. #pragma component(minrebuild, on)
  692. #endif
  693. #ifndef _AFX_FULLTYPEINFO
  694. #pragma component(mintypeinfo, off)
  695. #endif
  696.  
  697. #endif // __AFXINET_H__
  698.