00001
00014 #ifndef __EMAIIMAP_HPP__
00015 #define __EMAIIMAP_HPP__
00016
00017 #include <EmaiIMAP.h>
00018 #include <EmaiMessage.hpp>
00019 #include <EmaiExceptions.hpp>
00020
00026 namespace Emai
00027 {
00028
00038 class ImapSequenceSet : public Object<EmaiImapSequenceSet>
00039 {
00040 public:
00041 ImapSequenceSet(
00042 EmaiOptions inOptions = EmaiNullOptions);
00043
00044 ImapSequenceSet(
00045 const ImapSequenceSet& inCopy);
00046 ImapSequenceSet(
00047 EmaiImapSequenceSet inSequenceSet,
00048 bool inAddRef);
00049
00050 ~ImapSequenceSet();
00051
00052 void AddNumber(
00053 EmaiUint32 inNumber,
00054 EmaiOptions inOptions = EmaiNullOptions);
00055 void AddRange(
00056 EmaiUint32 inMinNumber,
00057 EmaiUint32 inMaxNumber,
00058 EmaiOptions inOptions = EmaiNullOptions);
00059 void AddSequenceSet(
00060 const ImapSequenceSet& inSequenceSetToAdd,
00061 EmaiOptions inOptions = EmaiNullOptions);
00062
00063 void RemoveNumber(
00064 EmaiUint32 inNumber,
00065 EmaiOptions inOptions = EmaiNullOptions);
00066 void RemoveRange(
00067 EmaiUint32 inMinNumber,
00068 EmaiUint32 inMaxNumber,
00069 EmaiOptions inOptions = EmaiNullOptions);
00070 void RemoveSequenceSet(
00071 const ImapSequenceSet& inSequenceSetToRemove,
00072 EmaiOptions inOptions = EmaiNullOptions);
00073
00074 EmaiUint32 GetCount(
00075 EmaiOptions inOptions = EmaiNullOptions) const;
00076 void GetBounds(
00077 EmaiUint32& outFirstNumber,
00078 EmaiUint32& outLastNumber,
00079 EmaiOptions inOptions = EmaiNullOptions);
00080 EmaiUint32 GetFirstNumber(
00081 EmaiOptions inOptions = EmaiNullOptions);
00082 EmaiUint32 GetLastNumber(
00083 EmaiOptions inOptions = EmaiNullOptions);
00084
00085 bool GetNextNumberForward(
00086 EmaiUint32 inNumber,
00087 EmaiUint32& outNextNumber,
00088 EmaiOptions inOptions = EmaiNullOptions);
00089 bool GetNextNumberBackward(
00090 EmaiUint32 inNumber,
00091 EmaiUint32& outNextNumber,
00092 EmaiOptions inOptions = EmaiNullOptions);
00093 bool ContainsNumber(
00094 EmaiUint32 inNumber,
00095 EmaiOptions inOptions = EmaiNullOptions);
00096 };
00097
00098
00107 class ImapStatusCallback
00108 {
00109 friend class ImapSession;
00110
00118 virtual EmaiError OnOperation(
00119 Emai::ImapSession& inSession,
00120 EmaiUint32 inOperationCode) = 0;
00121
00130 virtual EmaiError OnDataSent(
00131 Emai::ImapSession& inSession,
00132 EmaiUint32 inSentSize,
00133 EmaiUint32 inTotalSize) = 0;
00134
00143 virtual EmaiError OnDataReceived(
00144 Emai::ImapSession& inSession,
00145 EmaiUint32 inReceivedSize,
00146 EmaiUint32 inTotalSize) = 0;
00147
00156 virtual EmaiError OnServerError(
00157 Emai::ImapSession& inSession,
00158 EmaiConstCharPtr inServerReply,
00159 EmaiUint32 inReplyCode) = 0;
00160 public:
00161 virtual ~ImapStatusCallback();
00162
00163 protected:
00164 static EmaiError StatusCallback(
00165 EmaiImapSession inSession,
00166 const EmaiImapCallbackData* inData,
00167 void* inUserData);
00168 };
00169
00182 class ImapResponseHandler
00183 {
00184 friend class ImapSession;
00185 protected:
00186
00187 virtual void ProcessResponse(
00188 const EmaiImapCommandData* inCommandData,
00189 const EmaiResponse& inResponse);
00190
00197 virtual void ProcessStatus(
00198 const EmaiImapCommandData* inCommandData,
00199 const EmaiStatusResponse& inResponse) = 0;
00200
00207 virtual void ProcessCapability(
00208 const EmaiCapabilityResponse& inResponse) = 0;
00209
00216 virtual void ProcessList(
00217 const EmaiListResponse& inResponse) = 0;
00218
00225 virtual void ProcessLsub(
00226 const EmaiLsubResponse& inResponse) = 0;
00227
00234 virtual void ProcessMailboxStatus(
00235 const EmaiMailboxStatusResponse& inResponse) = 0;
00236
00243 virtual void ProcessSearch(
00244 EmaiConstUniCharPtr inMailboxName,
00245 const EmaiSearchResponse& inResponse) = 0;
00246
00253 virtual void ProcessFlags(
00254 EmaiConstUniCharPtr inMailboxName,
00255 const EmaiFlagsResponse& inResponse) = 0;
00256
00263 virtual void ProcessExists(
00264 EmaiConstUniCharPtr inMailboxName,
00265 const EmaiExistsResponse& inResponse) = 0;
00266
00273 virtual void ProcessRecent(
00274 EmaiConstUniCharPtr inMailboxName,
00275 const EmaiRecentResponse& inResponse) = 0;
00276
00283 virtual void ProcessExpunge(
00284 EmaiConstUniCharPtr inMailboxName,
00285 const EmaiExpungeResponse& inResponse) = 0;
00286
00293 virtual void ProcessFetch(
00294 EmaiConstUniCharPtr inMailboxName,
00295 const EmaiFetchResponse& inResponse) = 0;
00296
00297 static void ProcessResponses(
00298 EmaiImapSession inSession,
00299 const EmaiImapCommandData* inCommandData,
00300 const EmaiResponse* inResponse,
00301 void* inUserData);
00302 public:
00303 virtual ~ImapResponseHandler();
00304
00305 };
00306
00313 class ImapSession : public Object<EmaiImapSession>
00314 {
00315 protected:
00316
00317 ImapSession();
00318
00319 public:
00320
00321 ImapSession(
00322 ImapResponseHandler* inResponseHandler,
00323 ImapStatusCallback& inStatusCallback,
00324 EmaiUint32 inTimeout,
00325 EmaiOptions inOptions = EmaiNullOptions);
00326 ImapSession(
00327 EmaiImapResponseCallback inResponseCallback,
00328 void* inResponseUserData,
00329 EmaiImapStatusCallback inStatusCallback,
00330 void* inStatusUserData,
00331 EmaiUint32 inTimeout,
00332 EmaiOptions inOptions = EmaiNullOptions);
00333
00334 ImapSession(
00335 const ImapSession& inCopy);
00336 ImapSession(
00337 EmaiImapSession inSession,
00338 bool inAddRef);
00339
00340 ~ImapSession();
00341
00355 void Connect(
00356 EmaiConstUniCharPtr inMailServer,
00357 short inPort = EmaiDefaultImapPort,
00358 EmaiOptions inOptions = EmaiNullOptions);
00359
00375 void ConnectEx(
00376 EmaiConstUniCharPtr inMailServer,
00377 short inPort = EmaiDefaultImapPort,
00378 const EmaiProxyInfo* inProxyInfo = NULL,
00379 void* inUserData = NULL,
00380 EmaiOptions inOptions = EmaiNullOptions);
00381
00391 void Disconnect(
00392 EmaiOptions inOptions = EmaiNullOptions);
00393
00408 void Authenticate(
00409 EmaiConstUniCharPtr inAccount,
00410 EmaiConstUniCharPtr inPassword,
00411 EmaiOptions inOptions = EmaiIMAPAuthAutomatic);
00412
00430 void SelectMailbox(
00431 EmaiConstUniCharPtr inMailbox,
00432 EmaiOptions inOptions = EmaiNullOptions);
00433
00448 void ExamineMailbox(
00449 EmaiConstUniCharPtr inMailbox,
00450 EmaiOptions inOptions = EmaiNullOptions);
00451
00466 void CreateMailbox(
00467 EmaiConstUniCharPtr inMailbox,
00468 EmaiOptions inOptions = EmaiNullOptions);
00469
00483 void DeleteMailbox(
00484 EmaiConstUniCharPtr inMailbox,
00485 EmaiOptions inOptions = EmaiNullOptions);
00486
00509 void RenameMailbox(
00510 EmaiConstUniCharPtr inMailbox,
00511 EmaiConstUniCharPtr inNewMailboxName,
00512 EmaiOptions inOptions = EmaiNullOptions);
00513
00528 void SubscribeMailbox(
00529 EmaiConstUniCharPtr inMailbox,
00530 EmaiOptions inOptions = EmaiNullOptions);
00531
00546 void UnsubscribeMailbox(
00547 EmaiConstUniCharPtr inMailbox,
00548 EmaiOptions inOptions = EmaiNullOptions);
00549
00571 void ListMailboxes(
00572 EmaiConstUniCharPtr inReferenceName,
00573 EmaiConstUniCharPtr inWildcardedMailboxName,
00574 EmaiOptions inOptions = EmaiNullOptions);
00575
00592 void ListSubscribedMailboxes(
00593 EmaiConstUniCharPtr inReferenceName,
00594 EmaiConstUniCharPtr inWildcardedMailboxName,
00595 EmaiOptions inOptions = EmaiNullOptions);
00596
00617 void MailboxStatus(
00618 EmaiConstUniCharPtr inMailbox,
00619 EmaiOptions inOptions = EmaiAllStatusData);
00620
00645 void AppendMessage(
00646 EmaiConstUniCharPtr inMailbox,
00647 const EmaiFlags* inMessageFlags,
00648 EmaiConstUniCharPtr inDateTime,
00649 const Message& inMessage,
00650 EmaiOptions inOptions = EmaiNullOptions);
00651
00668 void Check(
00669 EmaiOptions inOptions = EmaiNullOptions);
00670
00682 void CloseMailbox(
00683 EmaiOptions inOptions = EmaiNullOptions);
00684
00698 void Expunge(
00699 const ImapSequenceSet& inMessageUIDSequence,
00700 EmaiOptions inOptions = EmaiNullOptions);
00701
00730 void Search(
00731 const EmaiSearchingCriteria* inSearchingCriteria,
00732 EmaiOptions inOptions = EmaiNullOptions);
00733
00753 void Fetch(
00754 const ImapSequenceSet& inMessageSequence,
00755 const EmaiFetchMessageData* inMessageData,
00756 EmaiOptions inOptions = EmaiNullOptions);
00757
00774 void Store(
00775 const ImapSequenceSet& inMessageSequence,
00776 const EmaiStoreMessageData* inMessageData,
00777 EmaiOptions inOptions = EmaiNullOptions);
00778
00802 void Copy(
00803 const ImapSequenceSet& inMessageSequence,
00804 EmaiConstUniCharPtr inMailbox,
00805 EmaiOptions inOptions = EmaiNullOptions);
00806
00814 void Cancel(
00815 EmaiOptions inOptions = EmaiNullOptions);
00816 void Noop(
00827 EmaiOptions inOptions = EmaiNullOptions);
00828 };
00829
00830
00831
00832
00833
00834 inline
00835 ImapSequenceSet::ImapSequenceSet(
00836 EmaiOptions inOptions
00837 )
00838 {
00839 CheckErrorCode(EmaiImapSequenceSetCreate(&mObject, inOptions));
00840 }
00841
00842 inline
00843 ImapSequenceSet::ImapSequenceSet(
00844 const ImapSequenceSet& inCopy
00845 ):
00846 Parent(inCopy)
00847 {
00848 }
00849
00850 inline
00851 ImapSequenceSet::ImapSequenceSet(
00852 EmaiImapSequenceSet inSequenceSet,
00853 bool inAddRef
00854 ):
00855 Parent(inSequenceSet, inAddRef)
00856 {
00857 }
00858
00859 inline
00860 ImapSequenceSet::~ImapSequenceSet()
00861 {
00862 }
00863
00864 inline void
00865 ImapSequenceSet::AddNumber(
00866 EmaiUint32 inNumber,
00867 EmaiOptions inOptions
00868 )
00869 {
00870 CheckErrorCode(EmaiImapSequenceSetAddNumber(mObject, inNumber, inOptions));
00871 }
00872
00873 inline void
00874 ImapSequenceSet::AddRange(
00875 EmaiUint32 inMinNumber,
00876 EmaiUint32 inMaxNumber,
00877 EmaiOptions inOptions
00878 )
00879 {
00880 CheckErrorCode(EmaiImapSequenceSetAddRange(mObject, inMinNumber,
00881 inMaxNumber, inOptions));
00882 }
00883
00884 inline void
00885 ImapSequenceSet::AddSequenceSet(
00886 const ImapSequenceSet& inSequenceSetToAdd,
00887 EmaiOptions inOptions
00888 )
00889 {
00890 CheckErrorCode(EmaiImapSequenceSetAddSequenceSet(mObject,
00891 inSequenceSetToAdd, inOptions));
00892 }
00893
00894 inline void
00895 ImapSequenceSet::RemoveNumber(
00896 EmaiUint32 inNumber,
00897 EmaiOptions inOptions
00898 )
00899 {
00900 CheckErrorCode(EmaiImapSequenceSetRemoveNumber(mObject, inNumber, inOptions));
00901 }
00902
00903 inline void
00904 ImapSequenceSet::RemoveRange(
00905 EmaiUint32 inMinNumber,
00906 EmaiUint32 inMaxNumber,
00907 EmaiOptions inOptions
00908 )
00909 {
00910 CheckErrorCode(EmaiImapSequenceSetRemoveRange(mObject, inMinNumber,
00911 inMaxNumber, inOptions));
00912 }
00913
00914 inline void
00915 ImapSequenceSet::RemoveSequenceSet(
00916 const ImapSequenceSet& inSequenceSetToRemove,
00917 EmaiOptions inOptions
00918 )
00919 {
00920 CheckErrorCode(EmaiImapSequenceSetRemoveSequenceSet(mObject,
00921 inSequenceSetToRemove, inOptions));
00922 }
00923
00924 inline EmaiUint32
00925 ImapSequenceSet::GetCount(
00926 EmaiOptions inOptions
00927 ) const
00928 {
00929 EmaiUint32 count = 0;
00930 CheckErrorCode(EmaiImapSequenceSetGetCount(mObject, &count, inOptions));
00931 return count;
00932 }
00933
00934 inline void
00935 ImapSequenceSet::GetBounds(
00936 EmaiUint32& outFirstNumber,
00937 EmaiUint32& outLastNumber,
00938 EmaiOptions inOptions
00939 )
00940 {
00941 CheckErrorCode(EmaiImapSequenceSetGetBounds(mObject, &outFirstNumber,
00942 &outLastNumber, inOptions));
00943 }
00944
00945 inline EmaiUint32
00946 ImapSequenceSet::GetFirstNumber(
00947 EmaiOptions inOptions
00948 )
00949 {
00950 EmaiUint32 firstNumber = 0;
00951 CheckErrorCode(EmaiImapSequenceSetGetBounds(mObject, &firstNumber,
00952 NULL, inOptions));
00953 return firstNumber;
00954 }
00955
00956 inline EmaiUint32
00957 ImapSequenceSet::GetLastNumber(
00958 EmaiOptions inOptions
00959 )
00960 {
00961 EmaiUint32 lastNumber = 0;
00962 CheckErrorCode(EmaiImapSequenceSetGetBounds(mObject, NULL,
00963 &lastNumber, inOptions));
00964 return lastNumber;
00965 }
00966
00967 inline bool
00968 ImapSequenceSet::GetNextNumberForward(
00969 EmaiUint32 inNumber,
00970 EmaiUint32& outNextNumber,
00971 EmaiOptions inOptions
00972 )
00973 {
00974 if (inOptions != EmaiNullOptions)
00975 CheckErrorCode(EmaiErrIncorrectParameter);
00976
00977 return (EmaiImapSequenceSetGetNextNumber(mObject, inNumber,
00978 &outNextNumber, EmaiImapForward) == EmaiErrNoErr);
00979 }
00980
00981 inline bool
00982 ImapSequenceSet::GetNextNumberBackward(
00983 EmaiUint32 inNumber,
00984 EmaiUint32& outNextNumber,
00985 EmaiOptions inOptions
00986 )
00987 {
00988 if (inOptions != EmaiNullOptions)
00989 CheckErrorCode(EmaiErrIncorrectParameter);
00990
00991 return (EmaiImapSequenceSetGetNextNumber(mObject, inNumber,
00992 &outNextNumber, EmaiImapBackward) == EmaiErrNoErr);
00993 }
00994
00995 inline bool
00996 ImapSequenceSet::ContainsNumber(
00997 EmaiUint32 inNumber,
00998 EmaiOptions inOptions
00999 )
01000 {
01001 return (EmaiImapSequenceContainsNumber(mObject, inNumber, inOptions) == EmaiErrNoErr);
01002 }
01003
01004
01005
01006
01007
01008 inline EmaiError
01009 ImapStatusCallback::StatusCallback(
01010 EmaiImapSession inSession,
01011 const EmaiImapCallbackData* inData,
01012 void* inUserData
01013 )
01014 {
01015 ImapStatusCallback* callback = reinterpret_cast<ImapStatusCallback*>(inUserData);
01016 EmaiError error = EmaiErrNoErr;
01017 try
01018 {
01019 if (callback != NULL)
01020 {
01021 Emai::ImapSession session(inSession, true);
01022 switch (inData->selector)
01023 {
01024 case EmaiImapSelectorNormal:
01025 error = callback->OnOperation(session, inData->data.normal.operationCode);
01026 break;
01027 case EmaiImapSelectorSending:
01028 error = callback->OnDataSent(session, inData->data.sending.sentSize,
01029 inData->data.sending.totalSize);
01030 break;
01031 case EmaiImapSelectorReceiving:
01032 error = callback->OnDataReceived(session, inData->data.receiving.receivedSize,
01033 inData->data.receiving.totalSize);
01034 break;
01035 case EmaiImapSelectorServerError:
01036 error = callback->OnServerError(session, inData->data.serverError.serverReply,
01037 inData->data.serverError.replyCode);
01038 break;
01039 default:
01040 error = EmaiErrUnknown;
01041 break;
01042 }
01043 }
01044 }
01045 catch (...)
01046 {
01047
01048 error = EmaiErrUnknown;
01049 }
01050
01051 return error;
01052 }
01053
01054 inline
01055 ImapStatusCallback::~ImapStatusCallback()
01056 {
01057 }
01058
01059
01060
01061
01062 inline
01063 ImapSession::ImapSession(
01064 ImapResponseHandler* inResponseHandler,
01065 ImapStatusCallback& inStatusCallback,
01066 EmaiUint32 inTimeout,
01067 EmaiOptions inOptions
01068 )
01069 {
01070 CheckErrorCode(EmaiImapSessionCreate(&mObject,
01071 &ImapResponseHandler::ProcessResponses, inResponseHandler,
01072 &ImapStatusCallback::StatusCallback, &inStatusCallback,
01073 inTimeout, inOptions));
01074 }
01075
01076 inline
01077 ImapSession::ImapSession(
01078 EmaiImapResponseCallback inResponseCallback,
01079 void* inResponseUserData,
01080 EmaiImapStatusCallback inStatusCallback,
01081 void* inStatusUserData,
01082 EmaiUint32 inTimeout,
01083 EmaiOptions inOptions
01084 )
01085 {
01086 CheckErrorCode(EmaiImapSessionCreate(&mObject,
01087 inResponseCallback, inResponseUserData,
01088 inStatusCallback, inStatusUserData,
01089 inTimeout, inOptions));
01090 }
01091
01092 inline
01093 ImapSession::ImapSession(
01094 const ImapSession& inCopy
01095 ):
01096 Parent(inCopy)
01097 {
01098 }
01099
01100 inline
01101 ImapSession::ImapSession(
01102 EmaiImapSession inSession,
01103 bool inAddRef
01104 ):
01105 Parent(inSession, inAddRef)
01106 {
01107 }
01108
01109 inline
01110 ImapSession::~ImapSession()
01111 {
01112 }
01113
01114 inline void
01115 ImapSession::Connect(
01116 EmaiConstUniCharPtr inMailServer,
01117 short inPort ,
01118 EmaiOptions inOptions
01119 )
01120 {
01121 CheckErrorCode(EmaiImapConnect(mObject, inMailServer, inPort, inOptions));
01122 }
01123
01124 inline void
01125 ImapSession::ConnectEx(
01126 EmaiConstUniCharPtr inMailServer,
01127 short inPort ,
01128 const EmaiProxyInfo* inProxyInfo ,
01129 void* inUserData,
01130 EmaiOptions inOptions
01131 )
01132 {
01133 CheckErrorCode(EmaiImapConnectEx(mObject, inMailServer, inPort, inProxyInfo, inUserData,inOptions));
01134 }
01135
01136 inline void
01137 ImapSession::Disconnect(
01138 EmaiOptions inOptions
01139 )
01140 {
01141 CheckErrorCode(EmaiImapDisconnect(mObject, inOptions));
01142 }
01143
01144 inline void
01145 ImapSession::Authenticate(
01146 EmaiConstUniCharPtr inAccount,
01147 EmaiConstUniCharPtr inPassword,
01148 EmaiOptions inOptions
01149 )
01150 {
01151 CheckErrorCode(EmaiImapAuthenticate(mObject, inAccount,
01152 inPassword, inOptions));
01153 }
01154
01155 inline void
01156 ImapSession::SelectMailbox(
01157 EmaiConstUniCharPtr inMailbox,
01158 EmaiOptions inOptions
01159 )
01160 {
01161 CheckErrorCode(EmaiImapSelectMailbox(mObject, inMailbox, inOptions));
01162 }
01163
01164 inline void
01165 ImapSession::ExamineMailbox(
01166 EmaiConstUniCharPtr inMailbox,
01167 EmaiOptions inOptions
01168 )
01169 {
01170 CheckErrorCode(EmaiImapExamineMailbox(mObject, inMailbox, inOptions));
01171 }
01172
01173 inline void
01174 ImapSession::CreateMailbox(
01175 EmaiConstUniCharPtr inMailbox,
01176 EmaiOptions inOptions
01177 )
01178 {
01179 CheckErrorCode(EmaiImapCreateMailbox(mObject, inMailbox, inOptions));
01180 }
01181
01182 inline void
01183 ImapSession::DeleteMailbox(
01184 EmaiConstUniCharPtr inMailbox,
01185 EmaiOptions inOptions
01186 )
01187 {
01188 CheckErrorCode(EmaiImapDeleteMailbox(mObject, inMailbox, inOptions));
01189 }
01190
01191 inline void
01192 ImapSession::RenameMailbox(
01193 EmaiConstUniCharPtr inMailbox,
01194 EmaiConstUniCharPtr inNewMailboxName,
01195 EmaiOptions inOptions
01196 )
01197 {
01198 CheckErrorCode(EmaiImapRenameMailbox(mObject, inMailbox,
01199 inNewMailboxName, inOptions));
01200 }
01201
01202 inline void
01203 ImapSession::SubscribeMailbox(
01204 EmaiConstUniCharPtr inMailbox,
01205 EmaiOptions inOptions
01206 )
01207 {
01208 CheckErrorCode(EmaiImapSubscribeMailbox(mObject, inMailbox, inOptions));
01209 }
01210
01211 inline void
01212 ImapSession::UnsubscribeMailbox(
01213 EmaiConstUniCharPtr inMailbox,
01214 EmaiOptions inOptions
01215 )
01216 {
01217 CheckErrorCode(EmaiImapUnsubscribeMailbox(mObject, inMailbox, inOptions));
01218 }
01219
01220 inline void
01221 ImapSession::ListMailboxes(
01222 EmaiConstUniCharPtr inReferenceName,
01223 EmaiConstUniCharPtr inWildcardedMailboxName,
01224 EmaiOptions inOptions
01225 )
01226 {
01227 CheckErrorCode(EmaiImapListMailboxes(mObject, inReferenceName,
01228 inWildcardedMailboxName, inOptions));
01229 }
01230
01231 inline void
01232 ImapSession::ListSubscribedMailboxes(
01233 EmaiConstUniCharPtr inReferenceName,
01234 EmaiConstUniCharPtr inWildcardedMailboxName,
01235 EmaiOptions inOptions
01236 )
01237 {
01238 CheckErrorCode(EmaiImapListSubscribedMailboxes(mObject, inReferenceName,
01239 inWildcardedMailboxName, inOptions));
01240 }
01241
01242 inline void
01243 ImapSession::MailboxStatus(
01244 EmaiConstUniCharPtr inMailbox,
01245 EmaiOptions inOptions
01246 )
01247 {
01248 CheckErrorCode(EmaiImapMailboxStatus(mObject, inMailbox, inOptions));
01249 }
01250
01251 inline void
01252 ImapSession::AppendMessage(
01253 EmaiConstUniCharPtr inMailbox,
01254 const EmaiFlags* inMessageFlags,
01255 EmaiConstUniCharPtr inDateTime,
01256 const Message& inMessage,
01257 EmaiOptions inOptions
01258 )
01259 {
01260 CheckErrorCode(EmaiImapAppendMessage(mObject, inMailbox,
01261 inMessageFlags, inDateTime, inMessage, inOptions));
01262 }
01263
01264 inline void
01265 ImapSession::Check(
01266 EmaiOptions inOptions
01267 )
01268 {
01269 CheckErrorCode(EmaiImapCheck(mObject, inOptions));
01270 }
01271
01272 inline void
01273 ImapSession::CloseMailbox(
01274 EmaiOptions inOptions
01275 )
01276 {
01277 CheckErrorCode(EmaiImapCloseMailbox(mObject, inOptions));
01278 }
01279
01280 inline void
01281 ImapSession::Expunge(
01282 const ImapSequenceSet& inMessageUIDSequence,
01283 EmaiOptions inOptions
01284 )
01285 {
01286 CheckErrorCode(EmaiImapExpunge(mObject, inMessageUIDSequence, inOptions));
01287 }
01288
01289 inline void
01290 ImapSession::Search(
01291 const EmaiSearchingCriteria* inSearchingCriteria,
01292 EmaiOptions inOptions
01293 )
01294 {
01295 CheckErrorCode(EmaiImapSearch(mObject, inSearchingCriteria, inOptions));
01296 }
01297
01298 inline void
01299 ImapSession::Fetch(
01300 const ImapSequenceSet& inMessageSequence,
01301 const EmaiFetchMessageData* inMessageData,
01302 EmaiOptions inOptions
01303 )
01304 {
01305 CheckErrorCode(EmaiImapFetch(mObject, inMessageSequence,
01306 inMessageData, inOptions));
01307 }
01308
01309 inline void
01310 ImapSession::Store(
01311 const ImapSequenceSet& inMessageSequence,
01312 const EmaiStoreMessageData* inMessageData,
01313 EmaiOptions inOptions
01314 )
01315 {
01316 CheckErrorCode(EmaiImapStore(mObject, inMessageSequence,
01317 inMessageData, inOptions));
01318 }
01319
01320 inline void
01321 ImapSession::Copy(
01322 const ImapSequenceSet& inMessageSequence,
01323 EmaiConstUniCharPtr inMailbox,
01324 EmaiOptions inOptions
01325 )
01326 {
01327 CheckErrorCode(EmaiImapCopy(mObject, inMessageSequence, inMailbox, inOptions));
01328 }
01329
01330 inline void
01331 ImapSession::Cancel(
01332 EmaiOptions inOptions
01333 )
01334 {
01335 CheckErrorCode(EmaiImapCancel(mObject, inOptions));
01336 }
01337
01338 inline void
01339 ImapSession::Noop(
01340 EmaiOptions inOptions
01341 )
01342 {
01343 CheckErrorCode(EmaiImapNoop(mObject, inOptions));
01344 }
01345
01346
01347
01348
01349 inline
01350 ImapResponseHandler::~ImapResponseHandler()
01351 {
01352 }
01353
01354 inline void
01355 ImapResponseHandler::ProcessResponses(
01356 EmaiImapSession ,
01357 const EmaiImapCommandData* inCommandData,
01358 const EmaiResponse* inResponse,
01359 void* inUserData
01360 )
01361 {
01362 ImapResponseHandler* handler = reinterpret_cast<ImapResponseHandler*>(inUserData);
01363 try
01364 {
01365 if (handler != NULL)
01366 handler->ProcessResponse(inCommandData, *inResponse);
01367 }
01368 catch (...)
01369 {
01370
01371 }
01372 }
01373
01374 inline void
01375 ImapResponseHandler::ProcessResponse(
01376 const EmaiImapCommandData* inCommandData,
01377 const EmaiResponse& inResponse
01378 )
01379 {
01380 switch (inResponse.responseType)
01381 {
01382 case EmaiStatusResponseType:
01383 ProcessStatus(inCommandData, inResponse.data.status);
01384 break;
01385 case EmaiCapabilityResponseType:
01386 ProcessCapability(inResponse.data.capability);
01387 break;
01388 case EmaiListResponseType:
01389 ProcessList(inResponse.data.list);
01390 break;
01391 case EmaiLsubResponseType:
01392 ProcessLsub(inResponse.data.lsub);
01393 break;
01394 case EmaiMailboxStatusResponseType:
01395 ProcessMailboxStatus(inResponse.data.mailboxStatus);
01396 break;
01397 case EmaiSearchResponseType:
01398 assert(inCommandData->sourceMailboxName != NULL);
01399 ProcessSearch(inCommandData->sourceMailboxName, inResponse.data.search);
01400 break;
01401 case EmaiFlagsResponseType:
01402 assert(inCommandData->sourceMailboxName != NULL);
01403 ProcessFlags(inCommandData->sourceMailboxName, inResponse.data.flags);
01404 break;
01405 case EmaiExistsResponseType:
01406 assert(inCommandData->sourceMailboxName != NULL);
01407 ProcessExists(inCommandData->sourceMailboxName, inResponse.data.exists);
01408 break;
01409 case EmaiRecentResponseType:
01410 assert(inCommandData->sourceMailboxName != NULL);
01411 ProcessRecent(inCommandData->sourceMailboxName, inResponse.data.recent);
01412 break;
01413 case EmaiExpungeResponseType:
01414 assert(inCommandData->sourceMailboxName != NULL);
01415 ProcessExpunge(inCommandData->sourceMailboxName, inResponse.data.expunge);
01416 break;
01417 case EmaiFetchResponseType:
01418 assert(inCommandData->sourceMailboxName != NULL);
01419 ProcessFetch(inCommandData->sourceMailboxName, inResponse.data.fetch);
01420 break;
01421
01422 case EmaiContinueRequestResponseType:
01423 break;
01424 case EmaiUnrecognizedResponseType:
01425 default:
01426 CheckErrorCode(EmaiErrUnknown);
01427 }
01428 }
01429
01430 }
01431
01432
01433 #endif