telephonyserverplugins/common_tsy/commontsy/src/mmsms/cmmsmsgsmext.cpp
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
child 42 3adadc800673
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/common_tsy/commontsy/src/mmsms/cmmsmsgsmext.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,266 @@
+// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+
+
+// INCLUDE FILES
+#include <e32std.h>        // error values
+#include <mmlist.h>
+#include "cmmsmsgsmext.h"
+#include <ctsy/tflogger.h>
+#include <ctsy/pluginapi/cmmdatapackage.h>
+#include "cmmphonetsy.h"
+#include <ctsy/serviceapi/cmmsmsutility.h>
+
+// ======== MEMBER FUNCTIONS ========
+
+CMmSmsGsmExt::CMmSmsGsmExt()
+    {
+    }
+
+CMmSmsGsmExt* CMmSmsGsmExt::NewL()
+    {
+    CMmSmsGsmExt* aSmsGsmExt = new ( ELeave ) CMmSmsGsmExt();
+
+    return aSmsGsmExt;
+    }
+
+CMmSmsGsmExt::~CMmSmsGsmExt()
+    {
+    }
+
+// --------------------------------------------------------------------------- 
+// CMmSmsGsmExt::CompleteReceiveMessage 
+// This method takes reception of incoming unstored SMS
+// (other items were commented in a header).
+// --------------------------------------------------------------------------- 
+//
+TInt CMmSmsGsmExt::CompleteReceiveMessage(
+    TSmsMsg* aSmsMsg, 
+    TAny* aReceiveMessageParamsPtr, 
+    TDes8* aReceiveMessagePduPtr )
+    {   
+    RMobileSmsMessaging::TMobileSmsReceiveAttributesV1Pckg* msgAttPckg = 
+        reinterpret_cast< RMobileSmsMessaging::
+        TMobileSmsReceiveAttributesV1Pckg* > ( aReceiveMessageParamsPtr );
+    RMobileSmsMessaging::TMobileSmsReceiveAttributesV1& msgAttributes = 
+        ( *msgAttPckg )();
+
+    // This information is available
+    msgAttributes.iFlags = ( RMobileSmsMessaging::KSmsDataFormat | 
+        RMobileSmsMessaging::KGsmServiceCentre | 
+        RMobileSmsMessaging::KIncomingStatus );
+
+    // Message type
+    msgAttributes.iDataFormat = RMobileSmsMessaging::EFormatGsmTpdu;
+
+    // Lets handle Service Centre address
+    msgAttributes.iGsmServiceCentre.iTypeOfNumber = aSmsMsg->iMobileScTON;
+    msgAttributes.iGsmServiceCentre.iNumberPlan = aSmsMsg->iMobileScNPI;
+    msgAttributes.iGsmServiceCentre.iTelNumber.Copy( 
+        aSmsMsg->iServiceCentre );
+
+     // Copy SMS TPDU
+    aReceiveMessagePduPtr->Copy( aSmsMsg->iSmsMsg );
+
+    if ( KSimSmsNotPresent == aSmsMsg->iMessageStatus )
+        {
+TFLOGSTRING("TSY: CMmSmsGsmExt::CompleteReceiveMessage. Class 0, 1 or 3 message");
+        
+        // SMS message that is routed directly to the TSY. This message is not
+        // acknowledge to the network.
+        msgAttributes.iStatus = 
+            RMobileSmsMessaging::EMtMessageUnstoredClientAck;
+        // Reset store information
+        msgAttributes.iStore.SetLength( 0 );
+        msgAttributes.iStoreIndex = 0;
+        }
+   else if ( aSmsMsg->iSmsClass2 && ( 0 != aSmsMsg->iLocation ) ) 
+        {
+TFLOGSTRING("TSY: CMmSmsGsmExt::CompleteReceiveMessage. Class 2 message stored in SIM");
+        // Class 2 SMS message that is stored in SIM. This message is 
+        // acknowledged to the network by SMS server.
+		msgAttributes.iStatus = RMobileSmsMessaging::EMtMessageUnknownStatus;
+        // Add storage information
+        msgAttributes.iFlags |= RMobileSmsMessaging::KStorageLocation;
+        msgAttributes.iStore = KETelIccSmsStore;
+        msgAttributes.iStoreIndex = aSmsMsg->iLocation;
+        }
+    else
+        {
+TFLOGSTRING("TSY: CMmSmsGsmExt::CompleteReceiveMessage. Class 2 message not stored in SIM");
+        // Class 2 SMS message that is not stored in SIM. This message is 
+        // acknowledged to the network by SMS server.
+        msgAttributes.iStatus = 
+            RMobileSmsMessaging::EMtMessageUnstoredPhoneAck;
+
+        // Reset store information
+        msgAttributes.iStore.SetLength( 0 );
+        msgAttributes.iStoreIndex = 0;
+        }
+
+    return KErrNone;
+    }
+
+// --------------------------------------------------------------------------- 
+// CMmSmsGsmExt::MessageStoreInfo 
+// This method set attributes values to the store info
+// (other items were commented in a header).
+// --------------------------------------------------------------------------- 
+//
+TInt CMmSmsGsmExt::MessageStoreInfo(
+    TAny* aGetMessageStoreInfoPtr, 
+    TInt aTotalEntries, 
+    TInt aUsedEntries )
+    {   
+    RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg* storeInfoPckg = 
+        reinterpret_cast< RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg* >
+        ( aGetMessageStoreInfoPtr );
+    RMobileSmsStore::TMobilePhoneStoreInfoV1& storeInfo = 
+        ( *storeInfoPckg )();
+
+    storeInfo.iName = KETelIccSmsStore;
+    storeInfo.iType = RMobilePhoneStore::EShortMessageStore;
+    storeInfo.iTotalEntries = aTotalEntries;
+    storeInfo.iUsedEntries = aUsedEntries;
+    storeInfo.iCaps = KSmsMessageStoreInfoCaps;
+
+    return KErrNone;
+    }
+
+// --------------------------------------------------------------------------- 
+// CMmSmsGsmExt::StoreInfo 
+// This method set attributes values to the sms store info
+// (other items were commented in a header).
+// --------------------------------------------------------------------------- 
+//
+TInt CMmSmsGsmExt::StoreInfo( 
+    TAny* aGetInfoInfoPtr, 
+    TInt aTotalEntries, 
+    TInt aUsedEntries )
+    {
+    RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg* storeInfoPckg = 
+        reinterpret_cast< RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg* >
+            ( aGetInfoInfoPtr );
+    RMobileSmsStore::TMobilePhoneStoreInfoV1& storeInfo = 
+        ( *storeInfoPckg )();
+
+    storeInfo.iName = KETelIccSmsStore;
+    storeInfo.iType = RMobilePhoneStore::EShortMessageStore;
+    storeInfo.iTotalEntries = aTotalEntries;
+    storeInfo.iUsedEntries = aUsedEntries;
+    storeInfo.iCaps = KSmsStoreInfoCaps;
+        
+    return KErrNone;
+    }
+
+// --------------------------------------------------------------------------- 
+// CMmSmsGsmExt::CompleteReadAllSmsPhase1L 
+// This method read the list, store its content and then return 
+// size of this buffer to client. This methos runs until TSY's 
+// internal SMS storage is empty
+// (other items were commented in a header).
+// --------------------------------------------------------------------------- 
+//
+TInt CMmSmsGsmExt::CompleteReadAllSmsPhase1L(
+    CArrayPtrFlat<TSmsMsg>* aSmsListArray, 
+    RMobilePhone::TClientId aReadAllId, 
+    CArrayPtrFlat<CListReadAllAttempt>* aSmsReadAllArray, 
+    TInt* aReadAllBufSizePtr )
+    {
+TFLOGSTRING("TSY: CMmSmsGsmExt::CompleteReadAllSmsPhase1L");
+    // read the list, store its content and then return size of this 
+    // buffer to client
+    CMobilePhoneGsmSmsList* list = CMobilePhoneGsmSmsList::NewL();
+    CleanupStack::PushL( list );
+
+    RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
+
+    for ( TInt i = 0; i < aSmsListArray->Count(); i++ )
+        {
+        TSmsMsg* smsMsg = aSmsListArray->At( i );
+
+        // Lets handle Service Centre address
+        entry.iServiceCentre.iTypeOfNumber = smsMsg->iMobileScTON;
+        entry.iServiceCentre.iNumberPlan = smsMsg->iMobileScNPI;
+        entry.iServiceCentre.iTelNumber.Copy( smsMsg->iServiceCentre );
+
+        // Lets copy location index
+        entry.iIndex = smsMsg->iLocation;
+
+        // TMobileSmsFixedEntryV1 information
+        entry.iMsgData.Copy( smsMsg->iSmsMsg );
+
+        switch ( smsMsg->iMessageStatus )
+            {
+            case KSimSmsMoNotSent:       //0x07
+                entry.iMsgStatus = RMobileSmsStore::EStoredMessageUnsent;
+                break;
+            case KSimSmsStatusReportReqNotReceived:     //0x0D
+            case KSimSmsMoSent:          //0x05
+                entry.iMsgStatus = RMobileSmsStore::EStoredMessageSent;
+                break;
+            case KSimSmsMtRead:          //0x01
+                entry.iMsgStatus = RMobileSmsStore::EStoredMessageRead;
+                break;
+            case KSimSmsMtNotRead:       //0x03
+                entry.iMsgStatus = RMobileSmsStore::EStoredMessageUnread;
+                break;
+			case KSimSmsStatusReportReqReceivedNotStored: //0x15
+			case KSimSmsStatusReportReqReceivedStored:   //0x1D
+				entry.iMsgStatus = RMobileSmsStore::EStoredMessageDelivered;
+                break;
+            default:
+                entry.iMsgStatus = 
+                    RMobileSmsStore::EStoredMessageUnknownStatus;
+                break;
+            }
+
+        list->AddEntryL( entry );
+
+        // Delete handled SMS message from TSY's internal store
+        delete smsMsg; // delete object
+        }
+
+    // Store the streamed list and the client ID
+    CListReadAllAttempt* read = CListReadAllAttempt::NewL( &aReadAllId );
+    CleanupStack::PushL( read );
+    
+    read->iListBuf = list->StoreLC();
+    CleanupStack::Pop(); // pop the CBufFlat allocated by StoreLC
+    
+    aSmsReadAllArray->AppendL( read );
+    CleanupStack::Pop(); // pop the CListReadAllAttempt
+    
+    // return the CBufFlat’s size to client
+    *aReadAllBufSizePtr=( read->iListBuf )->Size();
+
+    CleanupStack::PopAndDestroy(list);
+    
+    return KErrNone;
+    }
+
+// --------------------------------------------------------------------------- 
+// CMmSmsGsmExt::GetSupportedEntry 
+// Return supported entry
+// (other items were commented in a header).
+// --------------------------------------------------------------------------- 
+//
+TInt CMmSmsGsmExt::GetSupportedEntry()
+    {
+    return RMobileSmsStore::KETelMobileGsmSmsEntryV1;
+    }
+
+//  End of File