XPBASE.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:11k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*
  2.  -  X P B A S E . H
  3.  -
  4.  *
  5.  *  Definitions, typedefs and prototypes used by the Sample Transport
  6.  *  Provider modules.
  7.  *
  8.  *  Copyright 1992-1995 Microsoft Corporation.  All Rights Reserved.
  9.  */
  10. /* Make sure that we are thinking "C" here... */
  11. #ifdef __cplusplus
  12. extern "C"
  13. {
  14. #endif
  15. /*
  16.  *  Linked-List of deferred messages
  17.  */
  18. typedef struct _DEFMSG *LPDEFMSG;
  19. typedef struct _DEFMSG
  20. {
  21.     ULONG ulMsgRef;
  22.     SBinary sbinEIDDef;
  23.     LPDEFMSG lpNext;
  24. } DEFMSG;
  25. /*
  26.  *  Sample Transport Provider DLL exported entry points.
  27.  */
  28. /* Transport Init Object */
  29. #undef  INTERFACE
  30. #define INTERFACE struct _XPP
  31. #undef  MAPIMETHOD_
  32. #define MAPIMETHOD_(type, method)   MAPIMETHOD_DECLARE(type, method, XPP_)
  33.         MAPI_IUNKNOWN_METHODS(IMPL)
  34.         MAPI_IXPPROVIDER_METHODS(IMPL)
  35. #undef  MAPIMETHOD_
  36. #define MAPIMETHOD_(type, method)   STDMETHOD_(type, method)
  37. DECLARE_MAPI_INTERFACE(XPP_)
  38. {
  39.     MAPI_IUNKNOWN_METHODS(IMPL)
  40.     MAPI_IXPPROVIDER_METHODS(IMPL)
  41. };
  42. typedef struct _XPP {
  43.     XPP_Vtbl FAR *      lpVtbl;         /* Methods                          */
  44.     LONG                lcInit;         /* Usage Count                      */
  45.     struct _XPP FAR *   lpxppMyAddress; /* Pointer to myself, for validation*/
  46.     CRITICAL_SECTION    csTransport;    /* Critical section for this object */
  47.     struct _XPL FAR *   XPSessionList;  /* List of logon sessions on obj    */
  48.     BOOL                fInited;        /* Are we in an inited state?       */
  49.     HINSTANCE           hInst;          /* Instance of our library          */
  50.     LPMALLOC            lpMalloc;       /* IMalloc object                   */
  51.     LPFREEBUFFER        lpFreeBuffer;   /* Need this to free the object     */
  52. } XPP, FAR *LPXPP;
  53. /* Transport Logon Object */
  54. #undef  INTERFACE
  55. #define INTERFACE struct _XPL
  56. #undef  MAPIMETHOD_
  57. #define MAPIMETHOD_(type, method)   MAPIMETHOD_DECLARE(type, method, XPL_)
  58.         MAPI_IUNKNOWN_METHODS(IMPL)
  59.         MAPI_IXPLOGON_METHODS(IMPL)
  60. #undef  MAPIMETHOD_
  61. #define MAPIMETHOD_(type, method)   STDMETHOD_(type, method)
  62. DECLARE_MAPI_INTERFACE(XPL_)
  63. {
  64.     MAPI_IUNKNOWN_METHODS(IMPL)
  65.     MAPI_IXPLOGON_METHODS(IMPL)
  66. };
  67. /*
  68.  *  Logon object structure.
  69.  */
  70. typedef struct _XPL
  71. {
  72.     XPL_Vtbl FAR *      lpVtbl;             /* Methods                                  */
  73.     LONG                lcInit;             /* Usage Count                              */
  74.     struct _XPL FAR *   lpNextSession;      /* Link to next session                 */
  75.     struct _XPL FAR *   lpMySession;        /* My address, used to validate         */
  76.     LPXPP               lpxppParent;        /* Parent XPP object                        */
  77.     LPMAPISTATUS        lpXPStatus;         /* Child Status Object                      */
  78.     ULONG               ulSessionFlags;     /* Session flags                            */
  79.     LPMAPISUP           lpMAPISup;          /* Support object for this session          */
  80.     LPALLOCATEBUFFER    AllocateBuffer;     /* MAPIAllocateBuffer pointer           */
  81.     LPALLOCATEMORE      AllocateMore;       /* MAPIAllocateMore pointer             */
  82.     LPFREEBUFFER        FreeBuffer;         /* MAPIFreeBuffer function pointer          */
  83.     ULONG               cLogonPropValues;   /* Number of Logon property values          */
  84.     LPSPropValue        lpPropArray;        /* Logon property array                     */
  85.     LPSPropValue        lpMyIDArray;        /* Properties to set on transmit            */
  86.     ULONG               cOptData;           /* Number of Options we support             */
  87.     LPOPTIONDATA        lpOptData;          /* Per-Message & Recip OptionData           */
  88.     LPTSTR              lpszAdrType;        /* Used to pass back on AddressType call    */
  89.     ULONG               ulTransportStatus;  /* Howzit going? Used by status             */
  90.     ULONG               ulResourceMethods;  /* Methods supported by our status object   */
  91.     
  92.     /* Deferred message handling elements */
  93.     ULONG               ulDeferredMsgRef;
  94.     BOOL                fResendDeferred;
  95.     LPDEFMSG            lpDeferredList;
  96.     
  97.     BOOL                fRefSupport;        /* We AddRef'd the support object */
  98.     BOOL                fFoundInMessage;    /* Found a inbound message flag   */
  99.     HANDLE              hInFindHandle;      /* Used in Poll(), StartMessage() */
  100.     WIN32_FIND_DATA     wfdInFindData;      /* Used in Poll(), StartMessage() */
  101.     HANDLE              hOutFindHandle;     /* Used in Outbound Queue         */
  102.     WIN32_FIND_DATA     wfdOutFindData;     /* Used in Outbound Queue         */
  103. } XPL, FAR *LPXPL;
  104. /*
  105.  *  Properties we store in the Profile.
  106.  *
  107.  * NOTE!!! THE ORDERING OF THE PROPERTY ID'S HERE MUST BE THE SAME
  108.  * AS THE ORDERING OF PROP TAG ARRAY sptLogonArray IN SMPLXPT.C, WITH
  109.  * SEQUENTIAL NUMBERING!!!!
  110.  *
  111.  */
  112. #define BASE_PROVIDER_ID    0x6600  /* From MAPITAGS.H comments */
  113. #define BASE_MSG_OPT_ID     0x4000  /* From MAPITAGS.H comments */
  114. #define BASE_RECIP_OPT_ID   0x5800  /* From MAPITAGS.H comments */
  115. /* Display name of user. Optional property. If not present we will use
  116.    the email address as the display name -- ugly but effective.            */
  117. #define PR_SAMPLE_DISPLAY_NAME      PROP_TAG (PT_TSTRING,   (BASE_PROVIDER_ID + 0x0001))
  118. /* Address type of sample transport. This will be used to construct inbound
  119.    and outbound addresses where needed. It also will be used to tell the
  120.    Spooler what address types we should get.                               */
  121. #define PR_SAMPLE_EMAIL_ADDR_TYPE   PROP_TAG (PT_TSTRING,   (BASE_PROVIDER_ID + 0x0002))
  122. /* Email address. This will usually be the same as the inbound directory,
  123.    although this may tend to have a more canonical form for remote access. */
  124. #define PR_SAMPLE_EMAIL_ADDRESS     PROP_TAG (PT_TSTRING,   (BASE_PROVIDER_ID + 0x0003))
  125. /* Inbound directory. This is where the transport will look in order to
  126.    determine whether it has received any mail.                             */
  127. #define PR_SAMPLE_INBOUND_DIR       PROP_TAG (PT_TSTRING,   (BASE_PROVIDER_ID + 0x0004))
  128. /* Outbound directory. The transport will store its message files here
  129.    while it is in the process of sending them. The presence of a file
  130.    in this directory implies that the transport still has work to do.      */
  131. #define PR_SAMPLE_OUTBOUND_DIR      PROP_TAG (PT_TSTRING,   (BASE_PROVIDER_ID + 0x0005))
  132. /* Filename. This is an 8-character root for use by mail-enabled or
  133.    workgroup applications to build a complete file specification (by
  134.    adding an extension) for data they wish to store for this user.         */
  135. #define PR_SAMPLE_FILENAME          PROP_TAG (PT_TSTRING,   (BASE_PROVIDER_ID + 0x0006))
  136. /* Directory. This is a directory in which workgroup applications may
  137.    wish to store their files pertaining to this user.                      */
  138. #define PR_SAMPLE_DIRECTORY         PROP_TAG (PT_TSTRING,   (BASE_PROVIDER_ID + 0x0007))
  139. /* Flags. Contain various options for this transport provider.             */
  140. #define PR_SAMPLE_FLAGS             PROP_TAG (PT_LONG,      (BASE_PROVIDER_ID + 0x0008))
  141. #define PR_SAMPLE_FLAG_PEER_TO_PEER ((ULONG) 0x00000001)
  142. #define PR_SAMPLE_FLAG_UI_ALWAYS    ((ULONG) 0x00000002)
  143. #define PR_SAMPLE_FLAG_LOG_EVENTS   ((ULONG) 0x00000004)
  144. #define PR_SAMPLE_FLAG_SAVE_DATA    ((ULONG) 0x00000008)
  145. /* Logfile. This is where logging information will be written. If this
  146.    property is not present, we will use (PR_SAMPLE_FILENAME)".LOG"         */
  147. #define PR_SAMPLE_LOGFILE           PROP_TAG (PT_TSTRING,   (BASE_PROVIDER_ID + 0x0009))
  148. /* Logfile high water mark. This is the point at which the log writer will
  149.    truncate the logfile so as not to fill up the disk.                     */
  150. #define PR_SAMPLE_LOGHIGHWATER      PROP_TAG (PT_LONG,      (BASE_PROVIDER_ID + 0x000A))
  151. /* Logfile low water mark. This is the approximate size that the logfile
  152.    writer will truncate the logfile to (modulo a line ending).             */
  153. #define PR_SAMPLE_LOGLOWWATER       PROP_TAG (PT_LONG,      (BASE_PROVIDER_ID + 0x000B))
  154. /* The following property tags are temporaries. They are here because
  155.    the configuration property sheets want one property tag for every
  156.    control; after we run the dialogs, we roll them back up into
  157.    PR_SAMPLE_FLAGS.                                                        */
  158. #define PR_TEMP_PEER_TO_PEER        PROP_TAG (PT_BOOLEAN,   (BASE_PROVIDER_ID + 0x000C))
  159. #define PR_TEMP_UI_ALWAYS           PROP_TAG (PT_BOOLEAN,   (BASE_PROVIDER_ID + 0x000D))
  160. #define PR_TEMP_LOG_EVENTS          PROP_TAG (PT_BOOLEAN,   (BASE_PROVIDER_ID + 0x000E))
  161. #define PR_TEMP_SAVE_DATA           PROP_TAG (PT_BOOLEAN,   (BASE_PROVIDER_ID + 0x000F))
  162. #define PR_TEMP_LOGHIGHWATER        PROP_TAG (PT_TSTRING,   (BASE_PROVIDER_ID + 0x0010))
  163. #define PR_TEMP_LOGLOWWATER         PROP_TAG (PT_TSTRING,   (BASE_PROVIDER_ID + 0x0011))
  164. /* This property is a per-message option.  If TRUE, the message will be
  165.    deferred until the next message comes along that is not to be deferred.
  166.    At that point, the Transport will SpoolerNotify() to have all currently
  167.    deferred messages submitted to it for sending.                           */
  168. #define PR_SAMPLE_PER_MSG_DEFER     PROP_TAG (PT_BOOLEAN,   (BASE_MSG_OPT_ID + 0x0001))
  169. /* This property is a per-recipient option.  If TRUE, the message will be
  170.    deferred until the next message comes along that is not to be deferred.
  171.    At that point, the Transport will SpoolerNotify() to have all currently
  172.    deferred messages submitted to it for sending.  This property is ignored
  173.    if PR_SAMPLE_PER_MSG_DEFER is set.
  174.    This property is also used as a flag on the message that says - we've seen
  175.    this message before and have deferred it due to some recipients with their
  176.    property PR_SAMPLE_PER_RECIP_DEFER flag set.  When we run across this, we'll
  177.    delete it from the message and send to the remaining recipients that
  178.    have not been handled.                                                  */
  179. #define PR_SAMPLE_PER_RECIP_DEFER   PROP_TAG (PT_BOOLEAN,   (BASE_RECIP_OPT_ID + 0x0001))
  180. /* The following is used to access the properties in the logon array.      */
  181. #define MAX_LOGON_PROPERTIES        17
  182. #define TEMP_LOGON_PROPERTIES       6
  183. #define ArrayIndex(PROP, ARRAY) (ARRAY)[(PROP_ID(PROP) - BASE_PROVIDER_ID - 1)]
  184. #define NUM_SENDER_PROPS            3   /* How many sender ID properties?  */
  185. /* Display name for my transport. Used for the status row. */
  186. #ifdef DEBUG
  187. #define MYDISPLAYNAME "Sample Transport Provider (Debug)"
  188. #elif defined (TEST)
  189. #define MYDISPLAYNAME "Sample Transport Provider (Test)"
  190. #else
  191. #define MYDISPLAYNAME "Sample Transport Provider"
  192. #endif
  193. /* Common global data/code. */
  194. BOOL    FIsValidSession(LPXPL);
  195. SCODE   ScCheckLogonProps(LPXPDLG lpXPDialog, BOOL fUIAllowed);
  196. HRESULT MapScodeSz(SCODE sc, LPXPL lpxpl, LPTSTR * lppszMessage);
  197. HRESULT HrCheckSpoolerYield(LPMAPISUP lpMAPISup, BOOL fReset);
  198. SCODE   ScCopySessionProps(LPXPL lpxpl, LPSPropValue FAR *lppPropArray, LPSPropValue FAR *lppMyIDArray);
  199. #ifdef __cplusplus
  200. }
  201. #endif