|
1 /* |
|
2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: Message store session. |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 |
|
20 #ifndef __MESSAGE_STORE_SESSION_H__ |
|
21 #define __MESSAGE_STORE_SESSION_H__ |
|
22 |
|
23 // ======== |
|
24 // INCLUDES |
|
25 // ======== |
|
26 |
|
27 #include <e32base.h> |
|
28 //<cmail> |
|
29 #include "DebugLogMacros.h" |
|
30 //</cmail> |
|
31 |
|
32 #include "MessageStoreClientServer.h" |
|
33 #include "ContainerStore.h" |
|
34 #include "ContainerStoreSearchHandler.h" |
|
35 |
|
36 // ==================== |
|
37 // FORWARD DECLARATIONS |
|
38 // ==================== |
|
39 |
|
40 class CMessageStoreServer; |
|
41 class CMruAddress; |
|
42 class CBufferedMessageCreator; |
|
43 |
|
44 |
|
45 // ======= |
|
46 // CLASSES |
|
47 // ======= |
|
48 |
|
49 class CSearchResult : public CBase |
|
50 { |
|
51 public: |
|
52 |
|
53 static CSearchResult* NewL( TContainerId aMessageId, TContainerId aFolderId, const TDesC8& aPropertyBuf ); |
|
54 static CSearchResult* SearchCompleteResultL(); |
|
55 |
|
56 virtual ~CSearchResult(); |
|
57 |
|
58 TContainerId MessageId() { return iMessageId; } |
|
59 TContainerId FolderId() { return iFolderId; } |
|
60 const RBuf8& PropertyBuf() { return iPropertyBuf; } |
|
61 |
|
62 protected: |
|
63 |
|
64 CSearchResult( TContainerId aMsgId, TContainerId aFolderId ); |
|
65 void ConstructL( const TDesC8& aPropertyBuf ); |
|
66 |
|
67 private: |
|
68 TContainerId iMessageId; |
|
69 TContainerId iFolderId; |
|
70 RBuf8 iPropertyBuf; |
|
71 }; |
|
72 |
|
73 // ============================================================================================== |
|
74 // CLASS: CMessageStoreSession |
|
75 // |
|
76 // This class represents a session to the message store server. |
|
77 // ============================================================================================== |
|
78 class CMessageStoreSession : public CSession2, |
|
79 private MContainerStoreObserver, |
|
80 private MContainerStoreSearchClient |
|
81 { |
|
82 public: |
|
83 |
|
84 // ============== |
|
85 // PUBLIC METHODS |
|
86 // ============== |
|
87 |
|
88 CMessageStoreSession( CMessageStoreServer& aMessageStoreServer ) ; |
|
89 |
|
90 virtual ~CMessageStoreSession(); |
|
91 |
|
92 // Called by the server when the container store is temporarily unavailable, due to conditions |
|
93 // such as backup/restore in progress. |
|
94 void ContainerStoreUnavailable(); |
|
95 |
|
96 // Called by the server when the container store is available again. |
|
97 void ContainerStoreAvailable(); |
|
98 |
|
99 // Called by the server to propogate events to the session clients. |
|
100 void SendEventToObserver( TMsgStoreEvent aEvent ); |
|
101 |
|
102 // inherited from CSession2 |
|
103 void CreateL(); |
|
104 |
|
105 private: |
|
106 |
|
107 // =============== |
|
108 // PRIVATE METHODS |
|
109 // =============== |
|
110 |
|
111 // aAlwaysSend indicates whether or not matches should be sent, even if no matches have been |
|
112 // found. |
|
113 void SendMatchesToClient( TBool aAlwaysSend = EFalse ); |
|
114 void DoWriteMatchesToMessageL(); |
|
115 |
|
116 // IPC message handler functions |
|
117 void DoAuthenticatedL( const RMessage2& aMessage ); |
|
118 void DoAuthenticateL( const RMessage2& aMessage ); |
|
119 void DoClearAuthenticationL( const RMessage2& aMessage ); |
|
120 void DoHasPasswordL( const RMessage2& aMessage ); |
|
121 void DoSetPasswordL( const RMessage2& aMessage ); |
|
122 void DoChangePasswordL( const RMessage2& aMessage ); |
|
123 void DoEnableEncryptionL( const RMessage2& aMessage ); |
|
124 void DoDisableEncryptionL( const RMessage2& aMessage ); |
|
125 void DoWipeEverythingL( const RMessage2& aMessage ); |
|
126 void DoStartObserving( const RMessage2& aMessage ); |
|
127 void DoStopObserving( const RMessage2& aMessage ); |
|
128 void DoGetEventsL( const RMessage2& aMessage ); |
|
129 void DoCreateAccountL( const RMessage2& aMessage ); |
|
130 void DoOpenAccountL( const RMessage2& aMessage ); |
|
131 void DoRenameAccountL( const RMessage2& aMessage ); |
|
132 void DoDeleteAccountL( const RMessage2& aMessage ); |
|
133 void DoListAccountsL( const RMessage2& aMessage ); |
|
134 void DoDeleteContainerL( const RMessage2& aMessage ); |
|
135 void DoCreateContainerL( const RMessage2& aMessage ); |
|
136 void DoCommitContainerL( const RMessage2& aMessage ); |
|
137 void DoAbandonContainerL( const RMessage2& aMessage ); |
|
138 void DoMoveContainerL( const RMessage2& aMessage ); |
|
139 void DoCopyContainerL( const RMessage2& aMessage ); |
|
140 void DoChildrenCountsL( const RMessage2& aMessage ); |
|
141 void DoTotalCountsL( const RMessage2& aMessage ); |
|
142 void DoChildrenIdsL( const RMessage2& aMessage ); |
|
143 void DoPropertiesListL( const RMessage2& aMessage ); |
|
144 void DoFetchPropertiesL( const RMessage2& aMessage ); |
|
145 void DoUpdatePropertiesL( const RMessage2& aMessage ); |
|
146 void DoUpdatePropertyL( const RMessage2& aMessage ); |
|
147 void DoContentLengthL( const RMessage2& aMessage ); |
|
148 void DoFetchContentToBufferL( const RMessage2& aMessage ); |
|
149 void DoFetchContentToFileL( const RMessage2& aMessage ); |
|
150 void DoReplaceContentWithBufferL( const RMessage2& aMessage ); |
|
151 void DoReplaceContentWithFileL( const RMessage2& aMessage ); |
|
152 void DoAppendToContentL( const RMessage2& aMessage ); |
|
153 void DoPrependToContentL( const RMessage2& aMessage ); |
|
154 void DoRemoveContentL( const RMessage2& aMessage ); |
|
155 void DoOpenContentFileL( const RMessage2& aMessage ); |
|
156 void DoPrepareSearchL( const RMessage2& aMessage ); |
|
157 void DoGetMatches( const RMessage2& aMessage ); |
|
158 void DoCancelSearch( const RMessage2& aMessage ); |
|
159 void DoClearSearchResultCache( const RMessage2& aMessage ); |
|
160 void DoStartSortingL( const RMessage2& aMessage ); |
|
161 void DoGetSortedRowsL( const RMessage2& aMessage ); |
|
162 void DoGetIteratorGroupCountL( const RMessage2& aMessage ); |
|
163 void DoGetSortedIdsAndFlagsL( const RMessage2& aMessage ); |
|
164 void DoGetSortedIndexOfL( const RMessage2& aMessage ); |
|
165 void DoGetSortedIdsL( const RMessage2& aMessage ); |
|
166 void DoGetSortedIdsAndGroupCountL( const RMessage2& aMessage ); |
|
167 void DoEndSortingL( const RMessage2& aMessage ); |
|
168 |
|
169 void DoSetMaxMruAdressCountL( const RMessage2& aMessage ); |
|
170 void DoSetMruAddressListL( const RMessage2& aMessage ); |
|
171 void DoGetMruAddressListL( const RMessage2& aMessage ); |
|
172 |
|
173 void DoBeginBatchInsertL( const RMessage2& aMessage ); |
|
174 void DoFinishBatchInsertL( const RMessage2& aMessage ); |
|
175 |
|
176 // inherited from CSession2 |
|
177 void ServiceL(const RMessage2& aMessage); |
|
178 void ServiceError(const RMessage2& aMessage, TInt aError); |
|
179 |
|
180 // inherited from MContainerStoreObserver |
|
181 virtual void ContainerModified( TOperation aOperation, |
|
182 const RArray<TContainerId>& aHierarchy, |
|
183 TContainerId aNewParentId, |
|
184 const TDesC8& aQuickProperties ); |
|
185 |
|
186 virtual void AuthenticationChanged( TBool aAuthenticated ); |
|
187 virtual void AccountModified( TOperation aOperation, TInt32 aOwnerId, const TDesC8& aName, const TDesC8& aNewName, TContainerId aMailboxId ); |
|
188 |
|
189 // inherited from MSearchClient |
|
190 virtual void MatchFound( TContainerId aMsgId, TContainerId aFolderId, const TDesC8& aPropertyBuf ); |
|
191 virtual void SearchComplete( TInt aStatus ); |
|
192 |
|
193 void ReadString8ArrayL( const RMessage2& aMessage, TInt aIndex, RPointerArray<HBufC8>& aArray ); |
|
194 void ReadString16ArrayL( const RMessage2& aMessage, TInt aIndex, RPointerArray<HBufC>& aArray ); |
|
195 void ReadIdArrayL( const RMessage2& aMessage, TInt aIndex, RArray<TContainerId>& aArray ); |
|
196 |
|
197 // FUNCTIONS TO SUPPORT AUTOMATED UNIT TESTING |
|
198 #ifdef _DEBUG |
|
199 void DoInjectBackupRestoreEventL( const RMessage2& aMessage ); |
|
200 void DoInjectPointSecEvent( const RMessage2& aMessage ); |
|
201 void DoSimulateLowDiskSpaceL( const RMessage2& aMessage ); |
|
202 void DoGetEncryptionStateL( const RMessage2& aMessage ); |
|
203 void DoShutdownServer( const RMessage2& aMessage ); |
|
204 #endif |
|
205 |
|
206 void DoMatchFoundL( TContainerId aMsgId, TContainerId aFolderId, const TDesC8& aPropertyBuf ); |
|
207 |
|
208 CBufferedMessageCreator& GetBufferedMessageCreatorL(); |
|
209 |
|
210 // ================== |
|
211 // PRIVATE ATTRIBUTES |
|
212 // ================== |
|
213 |
|
214 CMessageStoreServer& iServer; |
|
215 |
|
216 // These variables are used in DoPropertiesListL, which has a client request that could span |
|
217 // several messages. |
|
218 RArray<TContainerId> iIds; |
|
219 RPointerArray<HBufC8> iPropertyNames; |
|
220 RPointerArray<HBufC> iSearchStrings; |
|
221 TBool iUsingQuery; |
|
222 TMsgStorePropertiesListQueryParams iQueryParams; |
|
223 |
|
224 // observer-related attributes |
|
225 RMessage2 iObserverMessage; |
|
226 RArray<TMsgStoreEvent> iEventQueue; |
|
227 TBool iIsObserving; |
|
228 |
|
229 // search-related attributes |
|
230 RMessage2 iGetMatchesMessage; |
|
231 CContainerStoreSearchHandler* iSearchHandler; |
|
232 RPointerArray<CSearchResult> iMatchMessages; |
|
233 RPointerArray<CMruAddress> iMruAddressArray; |
|
234 RArray<TMsgStoreId> iSortSessionIds; |
|
235 |
|
236 CBufferedMessageCreator* iBufferedMessageCreator; |
|
237 |
|
238 __LOG_DECLARATION |
|
239 |
|
240 }; // end class CMessageStoreSession |
|
241 |
|
242 #endif //__MESSAGE_STORE_SESSION_H__ |