Dacons LLP Mailit for C/C++ Version 1.0.8

EmaiIMAP.hpp

Go to the documentation of this file.
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(); //no implementation
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 // ImapSequenceSet class implemetation
00833 */
00834 inline
00835 ImapSequenceSet::ImapSequenceSet(
00836         EmaiOptions inOptions /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
00888     )
00889 {
00890     CheckErrorCode(EmaiImapSequenceSetAddSequenceSet(mObject,
00891                             inSequenceSetToAdd, inOptions));
00892 }
00893 
00894 inline void
00895 ImapSequenceSet::RemoveNumber(
00896         EmaiUint32 inNumber,
00897         EmaiOptions inOptions /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
00918     )
00919 {
00920     CheckErrorCode(EmaiImapSequenceSetRemoveSequenceSet(mObject,
00921                             inSequenceSetToRemove, inOptions));
00922 }
00923 
00924 inline EmaiUint32
00925 ImapSequenceSet::GetCount(
00926         EmaiOptions inOptions /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
00939     )
00940 {
00941     CheckErrorCode(EmaiImapSequenceSetGetBounds(mObject, &outFirstNumber,
00942                             &outLastNumber, inOptions));
00943 }
00944 
00945 inline EmaiUint32
00946 ImapSequenceSet::GetFirstNumber(
00947         EmaiOptions inOptions /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
00999     )
01000 {
01001     return (EmaiImapSequenceContainsNumber(mObject, inNumber, inOptions) == EmaiErrNoErr);
01002 }
01003 
01004 
01005 /*
01006 // ImapStatusCallback class implemetation
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         //do not pass exceptions in library
01048         error = EmaiErrUnknown;
01049     }
01050 
01051     return error;
01052 }
01053 
01054 inline
01055 ImapStatusCallback::~ImapStatusCallback()
01056 {
01057 }
01058 
01059 /*
01060 // EmaiImapSession class implemetation
01061 */
01062 inline
01063 ImapSession::ImapSession(
01064         ImapResponseHandler* inResponseHandler,
01065         ImapStatusCallback& inStatusCallback,
01066         EmaiUint32 inTimeout,
01067         EmaiOptions inOptions /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
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 /*= EmaiDefaultImapPort*/,
01118         EmaiOptions inOptions /*= EmaiNullOptions*/
01119     )
01120 {
01121     CheckErrorCode(EmaiImapConnect(mObject, inMailServer, inPort, inOptions));
01122 }
01123 
01124 inline void
01125 ImapSession::ConnectEx(
01126         EmaiConstUniCharPtr inMailServer,
01127         short inPort /*= EmaiDefaultImapPort*/,
01128         const EmaiProxyInfo* inProxyInfo /*= NULL*/,
01129         void* inUserData,
01130         EmaiOptions inOptions /*= EmaiNullOptions*/
01131     )
01132 {
01133     CheckErrorCode(EmaiImapConnectEx(mObject, inMailServer, inPort, inProxyInfo, inUserData,inOptions));
01134 }
01135 
01136 inline void
01137 ImapSession::Disconnect(
01138         EmaiOptions inOptions /*= EmaiNullOptions*/
01139     )
01140 {
01141     CheckErrorCode(EmaiImapDisconnect(mObject, inOptions));
01142 }
01143 
01144 inline void
01145 ImapSession::Authenticate(
01146         EmaiConstUniCharPtr inAccount,
01147         EmaiConstUniCharPtr inPassword,
01148         EmaiOptions inOptions /*= EmaiIMAPAuthAutomatic*/
01149     )
01150 {
01151     CheckErrorCode(EmaiImapAuthenticate(mObject, inAccount,
01152                             inPassword, inOptions));
01153 }
01154 
01155 inline void
01156 ImapSession::SelectMailbox(
01157         EmaiConstUniCharPtr inMailbox,
01158         EmaiOptions inOptions /*= EmaiNullOptions*/
01159     )
01160 {
01161     CheckErrorCode(EmaiImapSelectMailbox(mObject, inMailbox, inOptions));
01162 }
01163 
01164 inline void
01165 ImapSession::ExamineMailbox(
01166         EmaiConstUniCharPtr inMailbox,
01167         EmaiOptions inOptions /*= EmaiNullOptions*/
01168     )
01169 {
01170     CheckErrorCode(EmaiImapExamineMailbox(mObject, inMailbox, inOptions));
01171 }
01172 
01173 inline void
01174 ImapSession::CreateMailbox(
01175         EmaiConstUniCharPtr inMailbox,
01176         EmaiOptions inOptions /*= EmaiNullOptions*/
01177     )
01178 {
01179     CheckErrorCode(EmaiImapCreateMailbox(mObject, inMailbox, inOptions));
01180 }
01181 
01182 inline void
01183 ImapSession::DeleteMailbox(
01184         EmaiConstUniCharPtr inMailbox,
01185         EmaiOptions inOptions /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
01196     )
01197 {
01198     CheckErrorCode(EmaiImapRenameMailbox(mObject, inMailbox,
01199                         inNewMailboxName, inOptions));
01200 }
01201 
01202 inline void
01203 ImapSession::SubscribeMailbox(
01204         EmaiConstUniCharPtr inMailbox,
01205         EmaiOptions inOptions /*= EmaiNullOptions*/
01206     )
01207 {
01208     CheckErrorCode(EmaiImapSubscribeMailbox(mObject, inMailbox, inOptions));
01209 }
01210 
01211 inline void
01212 ImapSession::UnsubscribeMailbox(
01213         EmaiConstUniCharPtr inMailbox,
01214         EmaiOptions inOptions /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
01236     )
01237 {
01238     CheckErrorCode(EmaiImapListSubscribedMailboxes(mObject, inReferenceName,
01239                         inWildcardedMailboxName, inOptions));
01240 }
01241 
01242 inline void
01243 ImapSession::MailboxStatus(
01244         EmaiConstUniCharPtr inMailbox,
01245         EmaiOptions inOptions /*= EmaiAllStatusData*/
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 /*= EmaiNullOptions*/
01258     )
01259 {
01260     CheckErrorCode(EmaiImapAppendMessage(mObject, inMailbox,
01261                         inMessageFlags, inDateTime, inMessage, inOptions));
01262 }
01263 
01264 inline void
01265 ImapSession::Check(
01266         EmaiOptions inOptions /*= EmaiNullOptions*/
01267     )
01268 {
01269     CheckErrorCode(EmaiImapCheck(mObject, inOptions));
01270 }
01271 
01272 inline void
01273 ImapSession::CloseMailbox(
01274         EmaiOptions inOptions /*= EmaiNullOptions*/
01275     )
01276 {
01277     CheckErrorCode(EmaiImapCloseMailbox(mObject, inOptions));
01278 }
01279 
01280 inline void
01281 ImapSession::Expunge(
01282         const ImapSequenceSet& inMessageUIDSequence,
01283         EmaiOptions inOptions /*= EmaiNullOptions*/
01284     )
01285 {
01286     CheckErrorCode(EmaiImapExpunge(mObject, inMessageUIDSequence, inOptions));
01287 }
01288 
01289 inline void
01290 ImapSession::Search(
01291         const EmaiSearchingCriteria* inSearchingCriteria,
01292         EmaiOptions inOptions /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
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 /*= EmaiNullOptions*/
01325     )
01326 {
01327     CheckErrorCode(EmaiImapCopy(mObject, inMessageSequence, inMailbox, inOptions));
01328 }
01329 
01330 inline void
01331 ImapSession::Cancel(
01332         EmaiOptions inOptions /*= EmaiNullOptions*/
01333     )
01334 {
01335     CheckErrorCode(EmaiImapCancel(mObject, inOptions));
01336 }
01337 
01338 inline void
01339 ImapSession::Noop(
01340         EmaiOptions inOptions /*= EmaiNullOptions*/
01341     )
01342 {
01343     CheckErrorCode(EmaiImapNoop(mObject, inOptions));
01344 }
01345 
01346 /*
01347 // ImapResponseHandler class implementation
01348 */
01349 inline
01350 ImapResponseHandler::~ImapResponseHandler()
01351 {
01352 }
01353 
01354 inline void
01355 ImapResponseHandler::ProcessResponses(
01356         EmaiImapSession /*inSession*/,
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         //do not pass exceptions in library
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 /*__EMAIIMAP_HPP__*/