home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / dbmsg / mapi / remote.srv / _winds.h next >
C/C++ Source or Header  |  1996-04-11  |  9KB  |  265 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  File Name 
  4. //      _WINDS.H
  5. //
  6. //  Description
  7. //
  8. //  Author
  9. //      Irving De la Cruz
  10. //
  11. //  Revision: 1.7
  12. //
  13. // Written for Microsoft Windows Developer Support
  14. // Copyright (c) 1995-1996 Microsoft Corporation. All rights reserved.
  15. //
  16. #ifndef _WINDS_H
  17. #define _WINDS_H
  18.  
  19. #define STRICT
  20. #include <WINDOWS.H>
  21. #include "WINDSGBL.H"
  22. #include "WINDSRC.H"
  23.  
  24. #ifdef _DEBUG
  25. #define ENABLE_DEBUG_OUTPUT     1
  26. #endif // _DEBUG
  27. #define TRACES_NO_MAPI          1
  28.  
  29. #include "TRACES.H"
  30.  
  31. #define WINDS_DATABASE_VERSION          6
  32.  
  33. // Buffers and pipe symbolic constants.
  34. #define READ_TIME_OUT       INFINITE
  35. #define WRITE_TIME_OUT      INFINITE
  36. #define GENERAL_TIME_OUT    INFINITE
  37.  
  38. #define MIN_PIPE_NUMBER                 0x00000001
  39. #define MAX_PIPE_NUMBER                 0x00FFFFFF
  40.  
  41. #define ELEMENTS_TO_FETCH   25
  42.  
  43. typedef enum _ACTION
  44. {
  45.     IO_IDLE,
  46.     IO_OPEN_STORAGE_FILE,
  47.     IO_LOAD_MAILBOX_NAMES,
  48.     IO_CREATE_NEW_MAILBOX,
  49.     IO_REMOVE_MAILBOX,
  50.     IO_EMPTY_MAILBOX,
  51.     IO_GET_MAILBOX_PROPERTIES,
  52.     IO_SET_MAILBOX_PROPERTIES,
  53.  
  54.     // Message Transport services
  55.     IO_COPY_MSG_FROM_FILE,
  56.     IO_COPY_MSG_TO_FILE,
  57.     IO_MOVE_MSG_TO_FILE,
  58.     IO_COPY_HEADERS_TO_FILE,
  59.     IO_DELETE_MSG_IN_MAILBOX,
  60.     IO_CHECK_PENDING_MESSAGES,
  61.     IO_MOVE_NEXT_MSG_TO_FILE,
  62.  
  63.     // Address Book services
  64.     IO_GET_CONTAINER_RECIPIENTS,
  65.     IO_CREATE_DISTRIBUTION_LIST,
  66.     IO_DELETE_DISTRIBUTION_LIST,
  67.     IO_GET_DL_PROPERTIES,
  68.     IO_SET_DL_PROPERTIES,
  69.     IO_GET_GW_CONTAINER_COUNT,
  70.  
  71.     // Public folder services
  72.     IO_CREATE_PUBLIC_FOLDER,
  73.     IO_DELETE_PUBLIC_FOLDER,
  74.     IO_GET_PF_PROPERTIES,
  75.     IO_SET_PF_PROPERTIES,
  76.     IO_CREATE_PF_NEW_MESSAGE,
  77.     IO_DELETE_PF_MESSAGE,
  78.     IO_OPEN_PF_MESSAGE,
  79.     IO_MODIFY_PF_MESSAGE,
  80.  
  81.     // Remote Administrator
  82.     IO_ADMIN_GET_SERVER_MAILBOXES,
  83.     IO_ADMIN_GET_SERVER_DISTLISTS,
  84.     
  85.     // Helper actions for the notification mechanism
  86.     IO_SENT_SHUTDOWN_NOTIFICATION,
  87.     IO_RESTORE_CLIENT_NOTIFICATIONS
  88. } ACTION;
  89.  
  90. typedef struct _IOTHREADINFO
  91. {
  92.     BOOL                    fAppIsTerminating;
  93.     BOOL                    fCloseHandle;
  94.     ACTION                  Action;
  95.     HANDLE                  hResumeEvent;
  96.     HANDLE                  hActionCompleted;
  97.     HANDLE                  hTmpFile;
  98.     TCHAR                   szObject[MAX_ALIAS_SIZE+1];
  99.     TCHAR                   szHeader[IO_BUFFERSIZE];
  100.     PMAILBOX_INFO           pMBInfo;
  101.     PDIST_LIST_INFO         pDLInfo;
  102.     PPUBLIC_FOLDER_INFO     pPFInfo;
  103.     DWORD                   dwObjID;
  104.     HRESULT *               phLastError;
  105.     DWORD *                 pdwData;
  106.     PWINDS_NOTIFICATION     pNotif;
  107. } IOTHREADINFO, *PIOTHREADINFO;
  108.  
  109. typedef struct _DBINFO_DATA
  110. {
  111.     DWORD dwVersion;
  112. } DBINFO_DATA;
  113.  
  114. // This is the structure with the information that gets written to the
  115. // system registry database to save per-OS-USER-session information
  116. typedef struct tagAPP_OPTIONS
  117. {
  118.     DWORD       cbSize;
  119.     TCHAR       szDataFile[256];
  120. } APP_OPTIONS;
  121.  
  122. #define SERVER_PIPE_NAME_FORMAT     TEXT("\\\\.\\pipe\\%d")
  123.  
  124. #define NAME_FORMAT_SIZE        32
  125.  
  126. // Name string format for the OLE sub storages of the object database
  127. #define DBINFO_STREAM           OLESTR("DATABASE INFO")
  128. #define OBJ_ID_POOL_STREAM      OLESTR("OBJECT ID POOL")
  129. #define USER_PROPERTIES         OLESTR("USER PROPERTIES")
  130. #define HEADERS_STORAGE         OLESTR("HEADERS")
  131. #define MSGS_STORAGE            OLESTR("MESSAGES")
  132. #define MSG_STREAM_FORMAT       OLESTR("MSG %X")
  133. #define HEADER_STREAM_FORMAT    OLESTR("HEADER %X")
  134. // Server Distribution List Support
  135. #define DISTRIBUTION_LISTS      OLESTR("_DISTRIBUTION LISTS")
  136. #define DL_PROPS                OLESTR("DL PROPERTIES")
  137. #define DL_MEMBERS              OLESTR("DL MEMBERS")
  138. // Gateway Support
  139. #define FOREIGN_DIRECTORIES     OLESTR("_GATEWAYS")
  140. #define GW_OUTBOX               OLESTR("_GATEWAY OUT")
  141. #define GW_INBOX                OLESTR("_GATEWAY IN")
  142. #define SMTP_GATEWAY            OLESTR("SMTP")
  143. #define EXCHANGE_GATEWAY        OLESTR("EXCHANGE")
  144. #define FAX_GATEWAY             OLESTR("FAX")
  145. // Public Folders Support
  146. #define PUBLIC_FOLDERS_ROOT     OLESTR("_PUBLIC FOLDERS ROOT")
  147. #define FOLDER_PROPS_STREAM     OLESTR("FOLDER PROPERTIES")
  148. #define PUBLIC_FOLDER           OLESTR("FOLDER %X")
  149.  
  150. #define CREATE_FLAGS    (STGM_CREATE | STGM_DIRECT | STGM_READWRITE | STGM_SHARE_EXCLUSIVE)
  151. #define OPEN_FLAGS      (STGM_DIRECT | STGM_READWRITE | STGM_SHARE_EXCLUSIVE)
  152.  
  153. #define MAINDLGCLASS    TEXT("WindsDlgClass")
  154.  
  155. extern "C"
  156. {
  157.     extern IOTHREADINFO g_IOInfo;
  158.     extern TCHAR g_szDataFile[];
  159.     extern HRESULT g_hServerState;
  160.     extern CRITICAL_SECTION g_csIOInfo;
  161.     extern CRITICAL_SECTION g_csNotifLinks;
  162.     extern CRITICAL_SECTION g_csServiceState;
  163.     extern CRITICAL_SECTION g_csPipeID;
  164.     extern DWORD g_dwNextPipeID;
  165.     extern BOOL g_fRunningAsNTService;
  166.     extern HINSTANCE ghInstance;
  167.     extern HANDLE    ghHeap;
  168.  
  169.     HRESULT WINAPI CreateDLsDirectory
  170.                         (LPSTORAGE                  pStorage);
  171.     HRESULT WINAPI CreateGatewayDirectories
  172.                         (LPSTORAGE                  pStorage);
  173.     HRESULT WINAPI CreatePublicFoldersDirectory
  174.                         (LPSTORAGE                  pStorage);
  175.     HRESULT WINAPI GetObjectProp
  176.                         (DWORD                      dwObjID,
  177.                          DWORD *                    pdwObjType,
  178.                          MAILBOX_INFO *             pMailboxInfo);
  179.     HRESULT WINAPI GetServiceState
  180.                         ();
  181.     HRESULT WINAPI AnsiToUnicode
  182.                         (LPSTR                      szStr,
  183.                          LPWSTR                     wcStr,
  184.                          ULONG                      cchUnicode);
  185.     HRESULT WINAPI UnicodeToAnsi
  186.                         (LPWSTR                     wcStr,
  187.                          LPSTR                      szStr,
  188.                          ULONG                      cchAnsi);
  189.     DWORD WINAPI GetNextPipeID
  190.                         ();
  191.     void WINAPI ReleaseSyncObj
  192.                         ();
  193.     void WINAPI LoadSettingsFromRegistry
  194.                         ();
  195.     void WINAPI SaveSettingsToRegistry
  196.                         ();
  197.     void WINAPI RemoveAllNotifLinks
  198.                         ();
  199.     void WINAPI NotifyClients
  200.                         (PWINDS_NOTIFICATION        pNotif);
  201.     
  202.     HRESULT WINAPI GetLocalTempFileName
  203.                         (LPTSTR                     szTmpFileName);
  204.     HRESULT WINAPI FileCopy 
  205.                         (HANDLE,
  206.                          HANDLE,
  207.                          DWORD);
  208.     HRESULT WINAPI WaitForClientConnection
  209.                         (HANDLE                     hPipe,
  210.                          DWORD                      dwTimeOut);
  211.     DWORD WINAPI WorkingIOProc
  212.                         ();
  213.     DWORD WINAPI ClientNotifThreadProc
  214.                         (PWINDS_NOTIFICATION        pNotif);
  215. };
  216.  
  217. typedef struct _OBJLIST_NODE
  218. {
  219.     struct _OBJLIST_NODE *      pNext;              // 4
  220.     DWORD                       dwObjID;            // 4
  221.     WINDS_AB_OBJTYPE            ObjType;            // 4
  222.     TCHAR                       szObjAlias[20];     // 20
  223.                                    // Structure size = 32
  224. } OBJLIST_NODE, *POBJLIST_NODE;
  225.  
  226. class CObjectList
  227. {
  228. public:
  229.     STDMETHODIMP Insert
  230.                     (DWORD                      dwObjID,
  231.                      LPTSTR                     pObjName,
  232.                      WINDS_AB_OBJTYPE           ObjType);
  233.     STDMETHODIMP Delete
  234.                     (DWORD                      dwObjID);
  235.     STDMETHODIMP FindObjFromID
  236.                     (DWORD                      dwObjID,
  237.                      LPTSTR                     pObjName,
  238.                      WINDS_AB_OBJTYPE *         pObjType);
  239.     STDMETHODIMP FindObjFromName
  240.                     (WINDS_AB_OBJTYPE           ObjType,
  241.                      LPTSTR                     pObjName,
  242.                      DWORD *                    pdwObjID);
  243.     STDMETHODIMP FindObjAndTypeFromName
  244.                     (LPTSTR                     pObjName,
  245.                      WINDS_AB_OBJTYPE *         pObjType,
  246.                      DWORD *                    pdwObjID);
  247.     BOOL WINAPI IsAliasNameAvailable
  248.                     (LPTSTR                     pObjName);
  249.  
  250. public:
  251.     CObjectList();
  252.     ~CObjectList();
  253.  
  254. private:
  255.     HANDLE              m_hHeap;
  256.     CRITICAL_SECTION    m_csObj;
  257.     POBJLIST_NODE       m_pHead;
  258. };
  259.  
  260. extern CObjectList GlobalObjectMap;
  261.  
  262. #endif // _WINDS_H
  263.  
  264. // End of file for WINDS.H
  265.