summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/mapi/mapihook/src/msgMapiMain.h
blob: fcca6ca5413636c7ef17e05b1ade022c6a03bdb3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef MSG_MAPI_MAIN_H_
#define MSG_MAPI_MAIN_H_

#define MAX_NAME_LEN 256
#define MAX_PW_LEN 256
#define MAX_SESSIONS 50
#define MAPI_SENDCOMPLETE_EVENT "SendCompletionEvent"

#define MAPI_PROPERTIES_CHROME "chrome://messenger-mapi/locale/mapi.properties"
#define PREF_MAPI_WARN_PRIOR_TO_BLIND_SEND "mapi.blind-send.warn"
#define PREF_MAPI_BLIND_SEND_ENABLED "mapi.blind-send.enabled"

#include "nspr.h"
#include "nsTHashMap.h"
#include "nsClassHashtable.h"
#include "nsString.h"

class nsMAPISession;

class nsMAPIConfiguration {
 private:
  static uint32_t session_generator;
  static uint32_t sessionCount;
  static nsMAPIConfiguration* m_pSelfRef;
  PRLock* m_Lock;
  uint32_t m_nMaxSessions;

  nsTHashMap<nsCStringHashKey, uint32_t> m_ProfileMap;
  nsClassHashtable<nsUint32HashKey, nsMAPISession> m_SessionMap;
  nsMAPIConfiguration();
  ~nsMAPIConfiguration();

 public:
  static nsMAPIConfiguration* GetMAPIConfiguration();
  void OpenConfiguration();
  int16_t RegisterSession(uint32_t aHwnd, const nsCString& aUserName,
                          const nsCString& aPassword, bool aForceDownLoad,
                          bool aNewSession, uint32_t* aSession,
                          const char* aIdKey);
  bool IsSessionValid(uint32_t aSessionID);
  bool UnRegisterSession(uint32_t aSessionID);
  char16_t* GetPassword(uint32_t aSessionID);
  void GetIdKey(uint32_t aSessionID, nsCString& aKey);
  void* GetMapiListContext(uint32_t aSessionID);
  void SetMapiListContext(uint32_t aSessionID, void* mapiListContext);

  // a util func
  static HRESULT GetMAPIErrorFromNSError(nsresult res);
};

class nsMAPISession {
  friend class nsMAPIConfiguration;

 private:
  uint32_t m_nShared;
  nsCString m_pIdKey;
  nsCString m_pProfileName;
  nsCString m_pPassword;
  void* m_listContext;  // used by findNext

 public:
  nsMAPISession(uint32_t aHwnd, const nsCString& aUserName,
                const nsCString& aPassword, bool aForceDownLoad,
                const char* aKey);
  uint32_t IncrementSession();
  uint32_t DecrementSession();
  uint32_t GetSessionCount();
  char16_t* GetPassword();
  void GetIdKey(nsCString& aKey);
  ~nsMAPISession();
  // For enumerating Messages...
  void SetMapiListContext(void* listContext) { m_listContext = listContext; }
  void* GetMapiListContext() { return m_listContext; }
};

#endif  // MSG_MAPI_MAIN_H_