diff -r 000000000000 -r ca70ae20a155 src/ext/amaretto/messaging/inc/messaging.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ext/amaretto/messaging/inc/messaging.h Tue Feb 16 10:07:05 2010 +0530 @@ -0,0 +1,205 @@ +/** + * ==================================================================== + * messaging.h + * + * Copyright (c) 2007-2009 Nokia Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ==================================================================== + */ +#ifndef __MESSAGING_H__ +#define __MESSAGING_H__ + +#include "Python.h" +#include "symbian_python_ext_util.h" + +#include +#include +#include + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#define MaxMessageLength 39015 +#define MaxTelephoneNumberLength 30 +#define MaxNameLength 60 + +/* The thread exit function which deletes the messaging object */ +extern "C" void delete_mes_object(void); + +/* + * + * Implementation of messaging.sms_send + * (based on S60 SDK 2.0 example) + * + */ +class MMsvObserver +{ + public: + enum TStatus {ECreated, EMovedToOutBox, EScheduledForSend, ESent, EDeleted}; + enum TError {EScheduleFailed=5, ESendFailed, ENoServiceCentre, EFatalServerError}; + + virtual void HandleStatusChange(TStatus aStatus) = 0; + virtual void HandleError(TError aError) = 0; +}; + +/* + * Python callback class + * + */ +#ifndef EKA2 +class TPyMesCallBack +#else +NONSHARABLE_CLASS(TPyMesCallBack) +#endif + { + public: + TInt MessagingEvent(TInt aArg); + public: + PyObject* iCb; // Not owned. + private: + }; + +/* + * + * The actual messaging handler + * + */ +#ifndef EKA2 +class CMsvHandler : public CActive, public MMsvSessionObserver +#else +NONSHARABLE_CLASS(CMsvHandler) : public CActive, public MMsvSessionObserver +#endif +{ + public: + ~CMsvHandler(); + virtual TBool IsIdle() { + return (iMtmRegistry ? ETrue : EFalse); + } + + protected: // from CActive + CMsvHandler(MMsvObserver&); + + void DoCancel() { if (iOperation) iOperation->Cancel(); } + void ConstructL() { iSession = CMsvSession::OpenAsyncL(*this); } + virtual void CompleteConstructL() { + iMtmRegistry = CClientMtmRegistry::NewL(*iSession); + } + + virtual void SetMtmEntryL(TMsvId); + virtual void DeleteEntryL(TMsvEntry& aMsvEntry); + + protected: + CMsvOperation* iOperation; + CMsvSession* iSession; + CBaseMtm* iMtm; + CClientMtmRegistry* iMtmRegistry; + MMsvObserver& iObserver; +}; + +/* + * + * SMS handler + * + */ +#ifndef EKA2 +class CSmsSendHandler : public CMsvHandler +#else +NONSHARABLE_CLASS(CSmsSendHandler) : public CMsvHandler +#endif +{ + public: + static CSmsSendHandler* NewL(MMsvObserver&, const TDesC&, const TDesC&, const TDesC&, const TInt); + static CSmsSendHandler* NewLC(MMsvObserver&, const TDesC&, const TDesC&, const TDesC&, const TInt); + + ~CSmsSendHandler(); + public: // from CMsvHandler + TBool IsIdle(); + + public: // from MMsvSessionObserver + void HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3); + + protected: + void RunL(); + CSmsSendHandler(MMsvObserver& aObserver, const TDesC& aTelNum, const TDesC& aMsgBody, const TDesC& aRecipientName, const TInt encoding ) : + CMsvHandler(aObserver), iPhase(EIdle), iTelNum(aTelNum), iMessageText(aMsgBody), iRecipientName(aRecipientName), iEncoding(encoding) {;} + + private: + void ConstructL() {CMsvHandler::ConstructL();} + void CreateNewMessageL(); + TBool SetupSmsHeaderL(); + void PopulateMessageL(TMsvEntry& aMsvEntry); + TBool InitializeMessageL(); + TBool MoveMessageEntryL(TMsvId); + void SetScheduledSendingStateL(CMsvEntrySelection&); + void HandleChangedEntryL(TMsvId); + void SendToL() { CreateNewMessageL(); }; + private: + enum TPhase {EIdle, EWaitingForCreate, EWaitingForMove, + EWaitingForScheduled, EWaitingForSent, EWaitingForDeleted}; + + TPhase iPhase; + TBuf iTelNum; + TBuf iMessageText; + TBuf iRecipientName; + TInt iEncoding; +}; + +/* + * + * Observer for the status and errors. + * + */ +#ifndef EKA2 +class SmsObserver: public MMsvObserver +#else +NONSHARABLE_CLASS(SmsObserver) : public MMsvObserver +#endif +{ +public: + SmsObserver():iStatus(KErrNone) {;} + virtual ~SmsObserver() {} + void SetCallBack(TPyMesCallBack &aCb); + + void HandleStatusChange(MMsvObserver::TStatus aStatus); + void HandleError(MMsvObserver::TError aError); + +private: + TInt iStatus; // XXX Remove me + TPyMesCallBack iCallMe; +}; + +//////////////TYPE DEFINITION///////////////// + +#define MES_type ((PyTypeObject*)SPyGetGlobalString("MESType")) + +struct MES_object { + PyObject_VAR_HEAD + CMsvHandler* messaging; + TPyMesCallBack myCallBack; + TBool callBackSet; + MMsvObserver* smsObserver; +}; + +#endif /*__MESSAGING_H__*/