home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / winbase / winnt / pop3 / pop3ctx.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-05  |  6.3 KB  |  205 lines

  1.  
  2. /******************************************************************************\
  3. *       This is a part of the Microsoft Source Code Samples.
  4. *       Copyright (C) 1992-1997 Microsoft Corporation.
  5. *       All rights reserved. 
  6. *       This source code is only intended as a supplement to 
  7. *       Microsoft Development Tools and/or WinHelp documentation.
  8. *       See these sources for detailed information regarding the 
  9. *       Microsoft samples programs.
  10. \******************************************************************************/
  11.  
  12. //+---------------------------------------------------------------------------
  13. //
  14. //  File:       pop3ctx.h
  15. //
  16. //  Contents:
  17. //
  18. //  Classes:
  19. //
  20. //  Functions:
  21. //
  22. //----------------------------------------------------------------------------
  23.  
  24. #ifndef __POP3CTX_H__
  25. #define __POP3CTX_H__
  26.  
  27. #define POP3_MESSAGE_DELETE     0x00000001  // Message has been "deleted"
  28.  
  29. typedef enum _LAST_CLIENT_IO {
  30.     ClientIoRead,
  31.     ClientIoWrite,
  32.     ClientIoTransmitFile
  33. } LAST_CLIENT_IO, *PLAST_CLIENT_IO;
  34.  
  35. typedef struct _CLIENT_CONTEXT {
  36.     SOCKET Socket;
  37.     PVOID Context;
  38.     LAST_CLIENT_IO LastClientIo;
  39.     DWORD BytesReadSoFar;
  40.     HANDLE TransmittedFile;
  41.     HANDLE TransmittedBuffer;
  42.     OVERLAPPED Overlapped;
  43.     CHAR Buffer[8192];
  44. } CLIENT_CONTEXT, *PCLIENT_CONTEXT;
  45.  
  46. typedef struct _PopMessageHeader {
  47.     DWORD       Flags;                  // Flags about this message
  48.     DWORD       Size;                   // Size of this message
  49.     PWSTR       pszFileName;            // File name containing message
  50. } PopMessageHeader, * PPopMessageHeader;
  51.  
  52. typedef struct _PopMailDirectory {
  53.     DWORD               Flags;          // Flags about this directory
  54.     DWORD               cMessages;      // Number of messages
  55.     DWORD               NextMessage;    // Next message number
  56.     DWORD               TotalSize;      // Total size of directory, in bytes
  57.     DWORD               cAvailMessages; // Number of messages not deleted
  58.     DWORD               AvailSize;      // Size of available messages
  59.     PWSTR               pBaseDir;       // Base directory
  60.     PPopMessageHeader   Messages;       // Array of message headers
  61. } PopMailDirectory, * PPopMailDirectory;
  62.  
  63. typedef enum _PopState {
  64.     PopNegotiate,
  65.     PopAuthorization,                   // Authorization State (wait for USER)
  66.     PopAuthorization2,                  // Waiting for PASS
  67.     PopTransact,                        // Transact State
  68.     PopUpdate,                          // Update state
  69.     PopShutdown                         // Rundown state
  70. } PopState, * PPopState;
  71.  
  72.  
  73. #define USERNAME_LENGTH 32
  74. typedef struct _PopContext {
  75.     PopState            State;          // State of the connection
  76.     HANDLE              hUserToken;     // Token for impersonation
  77.     HANDLE              hDirectoryLock; // Lock for directory
  78.     DWORD               LastError;      // Last error occurred
  79.     DWORD               RetryCount;     // Number of retries
  80.     PPopMailDirectory   pDirectory;     // Directory for retrieval
  81.     CHAR                UserName[USERNAME_LENGTH];   // User Name for auth
  82. } PopContext, * PPopContext;
  83.  
  84. typedef enum _Pop3Disposition {
  85.     Pop3_Discard,                       // Discard the request
  86.     Pop3_SendError,                     // Send the error string
  87.     Pop3_SendBuffer,                    // Send the buffer returned
  88.     Pop3_SendFile,                      // Send the File returned
  89.     Pop3_SendBufferThenFile,            // Send the buffer, then the file
  90.     Pop3_SendFileThenBuffer             // Send the file, then the buffer
  91. } Pop3Disposition;
  92.  
  93. typedef Pop3Disposition
  94. (* Pop3DispatchFn)(
  95.     PPopContext pContext,               // Client's connection context
  96.     PUCHAR      InputBuffer,            // Buffer sent from client
  97.     DWORD       InputBufferLen,         // Size of buffer
  98.     PHANDLE     SendHandle,             // Handle of file to send
  99.     PUCHAR *    OutputBuffer,           // Output buffer to send
  100.     PDWORD      OutputBufferLen         // Size of output buffer
  101.     );
  102.  
  103. Pop3Disposition
  104. HeloDispatch(
  105.     PPopContext pContext,
  106.     PUCHAR      InputBuffer,
  107.     DWORD       InputBufferLen,
  108.     PHANDLE     SendHandle,
  109.     PUCHAR *    OutputBuffer,
  110.     PDWORD      OutputBufferLen
  111.     );
  112.  
  113. Pop3Disposition
  114. UserDispatch(
  115.     PPopContext pContext,
  116.     PUCHAR      InputBuffer,
  117.     DWORD       InputBufferLen,
  118.     PHANDLE     SendHandle,
  119.     PUCHAR *    OutputBuffer,
  120.     PDWORD      OutputBufferLen
  121.     );
  122.  
  123. Pop3Disposition
  124. PassDispatch(
  125.     PPopContext pContext,
  126.     PUCHAR      InputBuffer,
  127.     DWORD       InputBufferLen,
  128.     PHANDLE     SendHandle,
  129.     PUCHAR *    OutputBuffer,
  130.     PDWORD      OutputBufferLen
  131.     );
  132.  
  133. Pop3Disposition
  134. QuitDispatch(
  135.     PPopContext pContext,
  136.     PUCHAR      InputBuffer,
  137.     DWORD       InputBufferLen,
  138.     PHANDLE     SendHandle,
  139.     PUCHAR *    OutputBuffer,
  140.     PDWORD      OutputBufferLen
  141.     );
  142.  
  143. Pop3Disposition
  144. StatDispatch(
  145.     PPopContext pContext,
  146.     PUCHAR      InputBuffer,
  147.     DWORD       InputBufferLen,
  148.     PHANDLE     SendHandle,
  149.     PUCHAR *    OutputBuffer,
  150.     PDWORD      OutputBufferLen
  151.     );
  152.  
  153. Pop3Disposition
  154. ListDispatch(
  155.     PPopContext pContext,
  156.     PUCHAR      InputBuffer,
  157.     DWORD       InputBufferLen,
  158.     PHANDLE     SendHandle,
  159.     PUCHAR *    OutputBuffer,
  160.     PDWORD      OutputBufferLen
  161.     );
  162.  
  163. Pop3Disposition
  164. RetrDispatch(
  165.     PPopContext pContext,
  166.     PUCHAR      InputBuffer,
  167.     DWORD       InputBufferLen,
  168.     PHANDLE     SendHandle,
  169.     PUCHAR *    OutputBuffer,
  170.     PDWORD      OutputBufferLen
  171.     );
  172.  
  173. Pop3Disposition
  174. DeleDispatch(
  175.     PPopContext pContext,
  176.     PUCHAR      InputBuffer,
  177.     DWORD       InputBufferLen,
  178.     PHANDLE     SendHandle,
  179.     PUCHAR *    OutputBuffer,
  180.     PDWORD      OutputBufferLen
  181.     );
  182.  
  183. Pop3Disposition
  184. LastDispatch(
  185.     PPopContext pContext,
  186.     PUCHAR      InputBuffer,
  187.     DWORD       InputBufferLen,
  188.     PHANDLE     SendHandle,
  189.     PUCHAR *    OutputBuffer,
  190.     PDWORD      OutputBufferLen
  191.     );
  192.  
  193. Pop3Disposition
  194. RsetDispatch(
  195.     PPopContext pContext,
  196.     PUCHAR      InputBuffer,
  197.     DWORD       InputBufferLen,
  198.     PHANDLE     SendHandle,
  199.     PUCHAR *    OutputBuffer,
  200.     PDWORD      OutputBufferLen
  201.     );
  202.  
  203.  
  204. #endif
  205.