diff -r 1972d8c2e329 -r 510c70acdbf6 adaptationlayer/tsy/nokiatsy_dll/internal/test/nokiatsy_test_tool/sms/src/smsblocks.cpp --- a/adaptationlayer/tsy/nokiatsy_dll/internal/test/nokiatsy_test_tool/sms/src/smsblocks.cpp Mon Nov 09 10:31:01 2009 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2787 +0,0 @@ -/* -* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "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: Specific class for NWE tests -* -*/ - - - - -// INCLUDE FILES -#include -#include -#include -#include -#include "sms.h" - - -// Converts semioct-code to character, semioctet can be 0x00 - 0x0F -#define gsmSmsSemiOctetToChar( bcd ) gsmSmsSemiOctetToCharTable[bcd] - -// This table is used when a 03.40 or 04.11 address is converted to Unicode. -const TUint gsmSmsSemiOctetToCharTable[16] = - { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00 - }; - - -// ============================ MEMBER FUNCTIONS =============================== -// ----------------------------------------------------------------------------- -// CSMS::Delete -// Delete here all resources allocated and opened from test methods. -// Called from destructor. -// ----------------------------------------------------------------------------- -// -void CSMS::Delete() - { - iSmspListArray->ResetAndDestroy(); - } - -// ----------------------------------------------------------------------------- -// CSMS::RunMethodL -// Run specified method. Contains also table of test mothods and their names. -// ----------------------------------------------------------------------------- -// -TInt CSMS::RunMethodL( - CStifItemParser& aItem ) - { - _LIT8 (KLog, "SMS: RunMethodL" ); - iSMSLog->Log((TDesC8)KLog); - //iSMSLog->Log(_L("SMS: RunMethodL")); - static TStifFunctionInfo const KFunctions[] = - { - // Copy this line for every implemented function. - // First string is the function name used in TestScripter script file. - // Second is the actual implementation member function. - ENTRY( "RunIscTestCase", CCore::RunIscTestCase), - ENTRY( "SyncIscTestCase", CCore::SyncIscTestCase), - ENTRY( "RunIscTestCaseIgnoreXMLsWhenRealCellmoInUseFlagIsDefined", - CCore::RunIscTestCaseIgnoreXMLsWhenRealCellmoInUseFlagIsDefined), - ENTRY( "SyncIscTestCaseDoNotSyncIfRealCellmoInUseFlagIsDefined", - CCore::SyncIscTestCaseDoNotSyncIfRealCellmoInUseFlagIsDefined), - ENTRY( "SendSMSMessage", CSMS::SendSMSMessageL ), - ENTRY( "SendTwoSMSMessages", CSMS::SendTwoSMSMessagesL ), - ENTRY( "ReadSMSMessage", CSMS::ReadSMSMessageL ), - ENTRY( "DeleteSMSMessage", CSMS::DeleteSMSMessageL ), - ENTRY( "DeleteAllSMSMessages", CSMS::DeleteAllSMSMessagesL ), - ENTRY( "SetMoSmsBearer", CSMS::SetMoSmsBearerL ), - ENTRY( "WriteSMSMessage", CSMS::WriteSMSMessageL ), - ENTRY( "ReceiveSMSMessage", CSMS::ReceiveSMSMessageL ), - ENTRY( "ActivateSMSRouting", CSMS::ActivateSMSRoutingL ), - ENTRY( "AckSMS", CSMS::AckSMSL ), - ENTRY( "DeactivateSMSRouting", CSMS::DeactivateSMSRoutingL ), - ENTRY( "ResumeSMS", CSMS::ResumeSMSL ), - ENTRY( "ReadAllSMSMessage", CSMS::ReadAllSMSMessageL ), - ENTRY( "NackSMS", CSMS::NackSMSL ), - ENTRY( "SIMMsgStorageInfo", CSMS::SIMMsgStorageInfoL ), - ENTRY( "ReadSmsParameters", CSMS::ReadSmsParametersL ), - ENTRY( "StoreSmsParameters", CSMS::StoreSmsParametersL ), - ENTRY( "SMSCacheInitialization", CSMS::SMSCacheInitializationL ), - ENTRY( "HandleSpecifiedRequests", CCore::HandleSpecifiedRequests), - ENTRY( "InitializeIPCRequestTable", CCore::InitializeIPCRequestTable), - ENTRY( "SetExpectedCompleteIPC", CCore::SetExpectedCompleteIPC), - ENTRY( "SetSmsParameterCheck", CSMS::SetSmsParameterCheck), - ENTRY( "SetSmsReferenceParameters", CSMS::SetSmsReferenceParameters), - ENTRY( "SmsSettingsUpdate", CSMS::SmsSettingsUpdate), - }; - - const TInt count = sizeof( KFunctions ) / - sizeof( TStifFunctionInfo ); - - return RunInternalL( KFunctions, count, aItem ); - - } - -// ----------------------------------------------------------------------------- -// CSMS::SetSmsParameterCheck -// Sets SMS parameter checking and test case number -// ----------------------------------------------------------------------------- -// -TInt CSMS::SetSmsParameterCheck( CStifItemParser& aItem ) - { - TInt ret( KErrNone ); - _LIT8(KSetSmsParameterCheck, "SMS::SetSmsParameterCheck"); - iSMSLog->Log((TDesC8)KSetSmsParameterCheck); - - // Is parameter checking required - TPtrC string; - aItem.GetNextString ( string ); - - if ( _L("ON") == string ) - { - iSmsParameterCheck = ETrue; - } - else - { - iSmsParameterCheck = EFalse; - } - - // Test case number, used in parameter checking - TInt testCaseNumber; - aItem.GetNextInt( testCaseNumber ); - iTestCaseNumber = (TTestCase) testCaseNumber; - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::SetSmsReferenceParameters -// Sets SMS parameter checking and test case number -// ----------------------------------------------------------------------------- -// -TInt CSMS::SetSmsReferenceParameters( CStifItemParser& aItem ) - { - TInt ret( KErrNone ); - _LIT8(KSetSmsReferenceParameters, "SMS::SetSmsReferenceParameters"); - iSMSLog->Log((TDesC8)KSetSmsReferenceParameters); - - // Set reference parameters depending on test case number - if ( ETestCaseSms019 == iTestCaseNumber || - ETestCaseSms001 == iTestCaseNumber ) - { - // Message reference - TInt msgRef( 0 ); - aItem.GetNextInt( msgRef ); - iMsgRef = msgRef; - // Length of the PDU string - TInt count( 0 ); - aItem.GetNextInt( count ); - - // PDU string - TInt value( 0 ); - for ( TUint8 i( 0 ); i < count; i++ ) - { - aItem.GetNextInt( value ); - iPdu.Append( value ); - } - } - else if ( ETestCaseSms008 == iTestCaseNumber ) - { - TInt parameterIndicator; - TInt protocolId; - TInt dataCodingScheme; - TInt validityPeriod; - TPtrC destAddress; - TPtrC serviceCenterAddress; - TPtrC alphaTag; - - // Number of SMS parameter sets - aItem.GetNextInt( iNumOfSmspSets ); - - for ( TUint8 i( 0 ); i < iNumOfSmspSets; i++ ) - { - TSmsParameters* smsParam = new ( ELeave ) TSmsParameters(); - aItem.GetNextInt( parameterIndicator ); - aItem.GetNextInt( protocolId ); - aItem.GetNextInt( dataCodingScheme ); - aItem.GetNextInt( validityPeriod ); - aItem.GetNextString( serviceCenterAddress ); - aItem.GetNextString( destAddress ); - aItem.GetNextString( alphaTag ); - - smsParam->iParameterIndicator = parameterIndicator; - smsParam->iProtocolId = protocolId; - smsParam->iDataCodingScheme = dataCodingScheme; - smsParam->iValidityPeriod = validityPeriod; - smsParam->iServiceCenterAddress = serviceCenterAddress; - smsParam->iDestinationAddress = destAddress; - smsParam->iAlphaTagData = alphaTag; - - iSmspListArray->AppendL( smsParam ); - } - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::SmsSettingsUpdate -// Update SMS route settings -// ----------------------------------------------------------------------------- -// -TInt CSMS::SmsSettingsUpdate( CStifItemParser& /*aItem*/ ) - { - enum TMobileSmsBearer - { - /** SMS messages will only be sent over a packet-switched (GPRS) network. */ - ESmsBearerPacketOnly, - /** SMS messages will only be sent over a circuit-switched (GSM) network. */ - ESmsBearerCircuitOnly, - /** SMS messages will be sent over the packet-switched (GPRS) network if possible, - otherwise over circuit-switched (GSM) network. */ - ESmsBearerPacketPreferred, - /** SMS messages will be sent over the circuit-switched (GSM) network if possible, - otherwise over packet-switched (GPRS) network. */ - ESmsBearerCircuitPreferred - }; - - TInt ret( KErrNone ); - _LIT8( KSmsSettingsUpdate, "SMS::SmsSettingsUpdate"); - iSMSLog->Log((TDesC8)KSmsSettingsUpdate); - - //Create package - CMmDataPackage package; - TMobileSmsBearer bearer( ESmsBearerPacketOnly ); - //Pack parameters - package.PackData( &bearer ); - - ret = HandleRequestL( EMobileSmsMessagingSetMoSmsBearer, &package ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::SendSMSMessage -// SendSMSMessage method function. -// ----------------------------------------------------------------------------- -// -TInt CSMS::SendSMSMessageL(CStifItemParser& aItem) - { - _LIT8(KSendSMSMessage, "SMS::SendSMSMessage"); - iSMSLog->Log((TDesC8)KSendSMSMessage); - - TInt ret = KErrNotFound; - TPtrC16 string; // Name of the test case - TPtrC number; // Number of destination - TPtrC messagecenternumber; // Number of MessageCenter - TPtrC satoriginated; // SAT ORIGINATED SMS - aItem.GetNextString(string); - aItem.GetNextString(number); - aItem.GetNextString(messagecenternumber); - aItem.GetNextString(satoriginated); - - TBuf8 <260> msgdata; - if (string == (_L("SendSMSMessage4"))) - { - TUint MsgParameters( 0 ); - const TUint SmsMsgTypeSubmitOrSubmitR = 0x01; - const TUint SmsMsgVPabsolute = 0x34; // absolute format - - // TSY doesn't handle this information. Destination address goes in PDU. - iMsgAttrib.iDestination.iTelNumber = number; //_L("0405431828"); - iMsgAttrib.iDestination.iTypeOfNumber = RMobilePhone::ENationalNumber; - iMsgAttrib.iDestination.iNumberPlan = RMobilePhone::EIsdnNumberPlan; - TBuf8<160> source; - TUint8 UD[145]={'t','e','s','t',' ','m','e','s','s','a','g','e',' ', - 'f','o','u','r',' ','4',' ','*','*','*','*','*','*','*','*','*', - '*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*', - '*','*','*','*','*','*','*','*','*','*','*','*','*','*', - '*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*', - '*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*', - '*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*', - '*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*', - '*','*','*','*','*','*','*','*','*','*','*',' ','l','e','n','g', - 't','h','=','1','4','9'}; - - source.Append(&UD[0],sizeof(UD)); - - // If you want to convert user data to 7bit format: - TBuf8<140> UserData; - TUint16 byte_count = (TUint16)source.Length(); - GsmLibCharConversion( TKGsmLibConvertToGsmFormat, source, byte_count ); - GsmLibSmsPackMessage( UserData, source, byte_count ); - TUint16 charCnt = (TUint16)( (UserData.Length()*8) / 7 ); - if ( ( ( ( iGsmMes.Length()*8 ) % 7 ) == 0) && - charCnt && charCnt <= iGsmMes.Length() ) - { - if ( UserData[charCnt-1] == 0 ) - // if the last char is NULL, Actual charCnt is charCnt-1 - { - charCnt--; - } - } - - //CASE: SEND SMS MESSAGE - iMsgAttrib.iFlags = (RMobileSmsMessaging::KSmsDataFormat + - RMobileSmsMessaging::KGsmServiceCentre + - RMobileSmsMessaging::KRemotePartyInfo + - RMobileSmsMessaging::KMoreToSend); - // TSY takes now SC address from front of the TPDU - iMsgAttrib.iDataFormat = RMobileSmsMessaging::EFormatGsmTpdu; - iMsgAttrib.iGsmServiceCentre.iNumberPlan = - RMobilePhone::EIsdnNumberPlan; - iMsgAttrib.iGsmServiceCentre.iTypeOfNumber = - RMobilePhone::EInternationalNumber; - - iMsgAttrib.iGsmServiceCentre.iTelNumber = messagecenternumber; - iMsgAttrib.iMore = (TBool)(EFalse); - - MsgParameters = 0; - MsgParameters |= SmsMsgTypeSubmitOrSubmitR; - MsgParameters |= SmsMsgVPabsolute; - TBuf8<7> ValidityPeriod; - TUint8 validity[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00}; - ValidityPeriod.Append(&validity[0],sizeof(validity)); - TBuf<22> DEtemp = number; - TPtrC16 DEnumber = DEtemp; - TBuf8<12> DestinationAddress; - GsmConvUnicodeTo0340Addr( - 2, //TON national number - 1, //NPI isdn numbering plan - DestinationAddress, - DEnumber ); - msgdata.SetLength(0); //reset buffer - msgdata.Append(MsgParameters); //Message params - msgdata.Append(0x10); //TP-Message-Reference - msgdata.Append(DestinationAddress); //TP-Destination-Address - msgdata.Append(0x00); //TP-Protocol-Identifier - msgdata.Append(0x02); //TP-Data-Coding-Scheme (8bit) - msgdata.Append(0xA7); //TP-Validity-Period - msgdata.Append(charCnt); //TP-User-Data-Length - msgdata.Append(UserData); //TP-User-Data - - //Create package - CMmDataPackage package; - - //structure for all sms parameters and data - TSendSmsDataAndAttributes sendData; - - sendData.iAttributes = &iMsgAttrib; - sendData.iMsgData = &msgdata; - if (satoriginated == (_L("SAT_ORIGINATED"))) - { - sendData.iIpc = EMmTsySmsSendSatMessage; - } - else if (satoriginated == (_L("NO_FDN_CHECK"))) - { - sendData.iIpc = EMobileSmsMessagingSendMessageNoFdnCheck; - } - else - { - sendData.iIpc = EMobileSmsMessagingSendMessage; - } - //Pack parameters - package.PackData( &sendData ); - - if (satoriginated == (_L("SAT_ORIGINATED"))) - { - ret = HandleRequestL( EMmTsySmsSendSatMessage, &package ); - } - else if (satoriginated == (_L("NO_FDN_CHECK"))) - { - ret = HandleRequestL( EMobileSmsMessagingSendMessageNoFdnCheck, &package ); - } - else - { - ret = HandleRequestL( EMobileSmsMessagingSendMessage, &package ); - } - - // Signal with return status if it is not KErrNone - if ( KErrNone != ret ) - { - Signal ( ret ); - ret = KErrNone; - } - - if ( KErrNone == ret ) - - { - _LIT8( KSendOk, "Send SMS Message ok" ); - iSMSLog->Log((TDesC8)KSendOk ); - iSMSLog->Log( _L("Send SMS Message ok")); - } - else - { - _LIT8( KSendFailed, "Send SMS Message failed: %d" ); - iSMSLog->Log((TDesC8)KSendFailed, ret ); - } - } - - else - { - ret = KErrNotFound; - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteSendSMSMessage -// Complete SendSMSMessage method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteSendSMSMessage( TInt aResult ) //return Completion result value - { - _LIT8( KResult, "CompleteSendSMSMessage result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - Signal( aResult ); - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteSendSMSMessage -// Complete SendSMSMessage method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteSendSMSMessage( TInt aResult, CMmDataPackage* aDataPackage ) - { - _LIT8( KResult, "CompleteSendSMSMessage result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - // Check parameters depending on the test case - if ( iSmsParameterCheck && - ( ETestCaseSms019 == iTestCaseNumber || - ETestCaseSms001 == iTestCaseNumber ) ) - { - TUint16 msgRef( 0 ); - TBuf8 pdu; - aDataPackage->UnPackData( msgRef, pdu ); - - if ( msgRef != iMsgRef || pdu != iPdu ) - { - aResult = KErrGeneral; - } - } - - iTestCaseNumber = ETestCaseNotDefined; - Signal( aResult ); - } - -// ----------------------------------------------------------------------------- -// CSMS::SendTwoSMSMessages -// SendTwoSMSMessages method function. -// ----------------------------------------------------------------------------- -// -TInt CSMS::SendTwoSMSMessagesL( CStifItemParser& aItem ) - { - _LIT8(KSendSMSMessage, "SMS::SendTwoSMSMessages"); - iSMSLog->Log((TDesC8)KSendSMSMessage); - - TInt ret = KErrNotFound; - TPtrC16 string; // Name of the test case - TPtrC number; // Number of destination - TPtrC messagecenternumber; // Number of MessageCenter - aItem.GetNextString(string); - aItem.GetNextString(number); - aItem.GetNextString(messagecenternumber); - TBuf8 <260> msgdata; - if (string == (_L("SendTwoSMSMessage1"))) - { - TUint MsgParameters( 0 ); - const TUint SmsMsgTypeSubmitOrSubmitR = 0x01; - const TUint SmsMsgVPabsolute = 0x34; // absolute format - - - // TSY doesn't handle this information. Destination address goes in PDU. - iMsgAttrib.iDestination.iTelNumber = number; - - - iMsgAttrib.iDestination.iTypeOfNumber = RMobilePhone::ENationalNumber; - iMsgAttrib.iDestination.iNumberPlan = RMobilePhone::EIsdnNumberPlan; - - - TBuf8<160> source; - - - if (iSecondMessage == EFalse) - { - TUint8 UD[35]= - { - 'F','i','r','s','t',' ','m','e','s','s','a','g','e', - ' ','T','e','s','t',' ','S','e','n','d',' ','t','w','o', - ' ','m','e','s','s','a','g','e' - }; - source.Append(&UD[0],sizeof(UD)); - iSecondMessage = ETrue; // First message has been send - - - //CASE: SEND SMS MESSAGE - iMsgAttrib.iFlags = (RMobileSmsMessaging::KSmsDataFormat + - RMobileSmsMessaging::KGsmServiceCentre + - RMobileSmsMessaging::KRemotePartyInfo + - RMobileSmsMessaging::KMoreToSend); - - // TSY takes now SC address from front of the TPDU - iMsgAttrib.iDataFormat = RMobileSmsMessaging::EFormatGsmTpdu; - iMsgAttrib.iGsmServiceCentre.iNumberPlan = - RMobilePhone::EIsdnNumberPlan; - - iMsgAttrib.iGsmServiceCentre.iTypeOfNumber = - RMobilePhone::EInternationalNumber; - - iMsgAttrib.iGsmServiceCentre.iTelNumber = messagecenternumber; - iMsgAttrib.iMore = (TBool)(EFalse); - - MsgParameters = 0; - MsgParameters |= SmsMsgTypeSubmitOrSubmitR; - MsgParameters |= SmsMsgVPabsolute; - - TBuf8<7> ValidityPeriod; - TUint8 validity[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00}; - ValidityPeriod.Append(&validity[0],sizeof(validity)); - } - - else - { - TUint8 UD[36]= - { - 'S','e','c','o','n','d',' ','m','e','s','s','a','g','e', - ' ','T','e','s','t',' ','S','e','n','d',' ','t','w','o', - ' ','m','e','s','s','a','g','e' - }; - source.Append(&UD[0],sizeof(UD)); - - - //CASE: SEND SMS MESSAGE - iMsgAttrib.iFlags = (RMobileSmsMessaging::KSmsDataFormat + - RMobileSmsMessaging::KGsmServiceCentre + - RMobileSmsMessaging::KRemotePartyInfo + - RMobileSmsMessaging::KMoreToSend); - - // TSY takes now SC address from front of the TPDU - iMsgAttrib.iDataFormat = RMobileSmsMessaging::EFormatGsmTpdu; - iMsgAttrib.iGsmServiceCentre.iNumberPlan = - RMobilePhone::EIsdnNumberPlan; - - iMsgAttrib.iGsmServiceCentre.iTypeOfNumber = - RMobilePhone::EInternationalNumber; - - iMsgAttrib.iGsmServiceCentre.iTelNumber = messagecenternumber; - iMsgAttrib.iMore = (TBool)(EFalse); - MsgParameters = 0; - MsgParameters |= SmsMsgTypeSubmitOrSubmitR; - MsgParameters |= SmsMsgVPabsolute; - - //TP-Status-Report-Request - const TUint StatusReportRequested = 0x20; // binary 00100000 - MsgParameters |= StatusReportRequested; - } - - TBuf8<140> UserData; - - TUint16 byte_count = (TUint16)source.Length(); - GsmLibCharConversion( TKGsmLibConvertToGsmFormat, source, byte_count ); - GsmLibSmsPackMessage( UserData, source, byte_count ); - TUint16 charCnt = (TUint16)( (UserData.Length()*8) / 7 ); - - if ( ( ( ( iGsmMes.Length()*8 ) % 7 ) == 0) && - charCnt && charCnt <= iGsmMes.Length() ) - { - if ( UserData[charCnt-1] == 0 ) - // if the last char is NULL, Actual charCnt is charCnt-1 - { - charCnt--; - } - } - - TBuf<22> DEtemp = number;//_L("0405431828"); - TPtrC16 DEnumber = DEtemp; - TBuf8<12> DestinationAddress; - GsmConvUnicodeTo0340Addr( - 2, //TON national number - 1, //NPI isdn numbering plan - DestinationAddress, - DEnumber ); - - msgdata.SetLength(0); //reset buffer - msgdata.Append(MsgParameters); //Message params - msgdata.Append(0x10); //TP-Message-Reference - msgdata.Append(DestinationAddress); //TP-Destination-Address - msgdata.Append(0x00); //TP-Protocol-Identifier - msgdata.Append(0x02); //TP-Data-Coding-Scheme (8bit) - msgdata.Append(0xA7); //TP-Validity-Period - msgdata.Append(charCnt); //TP-User-Data-Length - msgdata.Append(UserData); //TP-User-Data - // MO SMS bearer setting - //Create package - CMmDataPackage package; - - //structure for all sms parameters and data - TSendSmsDataAndAttributes sendData; - - sendData.iAttributes = &iMsgAttrib; - sendData.iMsgData = &msgdata; - sendData.iIpc = EMobileSmsMessagingSendMessage; - - //Pack parameters - package.PackData( &sendData ); - - ret = HandleRequestL( EMobileSmsMessagingSendMessage, &package ); - - if ( KErrNone == ret ) - - { - _LIT8( KSendOk, "Send SMS Message ok" ); - iSMSLog->Log((TDesC8)KSendOk ); - iSMSLog->Log( _L("Send SMS Message ok")); - } - else - { - _LIT8( KSendFailed, "Send SMS Message failed: %d" ); - iSMSLog->Log((TDesC8)KSendFailed, ret ); - } - } - else - { - ret = KErrNotFound; - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::ReadSMSMessage -// Reading SMS message for slot -// ----------------------------------------------------------------------------- -// -TInt CSMS::ReadSMSMessageL( CStifItemParser& aItem ) - { - _LIT8(KReadSMSMessage, "SMS::ReadSMSMessage"); - iSMSLog->Log((TDesC8)KReadSMSMessage); - TInt ret (KErrNotFound); - TInt slot; - TPtrC16 msgStatus; - TPtrC16 numberingPlan; - TPtrC16 typeOfNumber; - TPtrC serviceCentreAddress; - TPtrC16 isClass2; - TInt tpdu; - - aItem.GetNextInt( slot ); - iSmsMsg.iLocation = slot; - - aItem.GetNextString( msgStatus ); - if ( msgStatus == ( _L("KSimSmsMtNotRead" ) ) ) - { - iSmsMsg.iMessageStatus = KSimSmsMtNotRead; - } - else if ( msgStatus == ( _L("KSimSmsMtRead" ) ) ) - { - iSmsMsg.iMessageStatus = KSimSmsMtRead; - } - else - { - iSmsMsg.iMessageStatus = KSimSmsNotPresent; - } - - aItem.GetNextString( numberingPlan ); - if ( numberingPlan == ( _L("EIsdnNumberPlan" ) ) ) - { - iSmsMsg.iMobileScNPI = RMobilePhone::EIsdnNumberPlan; - } - else - { - iSmsMsg.iMobileScNPI = RMobilePhone::EUnknownNumberingPlan; - } - - aItem.GetNextString( typeOfNumber ); - if ( typeOfNumber == ( _L( "EInternationalNumber" ) ) ) - { - iSmsMsg.iMobileScTON = RMobilePhone::EInternationalNumber; - } - else - { - iSmsMsg.iMobileScTON = RMobilePhone::EUnknownNumber; - } - - aItem.GetNextString( serviceCentreAddress ); - iSmsMsg.iServiceCentre = serviceCentreAddress; - - - iSmsMsg.iSmsClass2 = EFalse; - aItem.GetNextString( isClass2 ); - if ( isClass2 == ( _L( "CLASS2" ) ) ) - { - iSmsMsg.iSmsClass2 = ETrue; - } - - while ( !aItem.GetNextInt( tpdu ) ) - { - iSmsMsg.iSmsMsg.Append( tpdu ); - } - - CMmDataPackage package; - package.PackData( &slot ); - ret= HandleRequestL( EMobilePhoneStoreRead, &package ); - - if ( KErrNone == ret ) - { - _LIT8( KOk, "Read SMS Message ok: %d" ); - iSMSLog->Log((TDesC8)KOk ); - } - else - { - _LIT8( KFail, "Read SMS Message fails: %d" ); - iSMSLog->Log((TDesC8)KFail, ret ); - } - - return ret; - } - - -// ----------------------------------------------------------------------------- -// CSMS::CompleteReadSMSMessage -// Complete ReadSMSMessage method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteReadSMSMessage( - TInt aResult, //Completion result value - CMmDataPackage* aDataPackage // pointer to DataPackage - ) - { - // checking results and unpacking message - if ( KErrNone == aResult ) - { - TSmsMsg smsMsg; - aDataPackage->UnPackData( smsMsg ); - if ( ( smsMsg.iLocation != iSmsMsg.iLocation ) || - ( smsMsg.iMessageStatus != iSmsMsg.iMessageStatus ) || - ( smsMsg.iMobileScNPI != iSmsMsg.iMobileScNPI ) || - ( smsMsg.iMobileScTON != iSmsMsg.iMobileScTON ) || - ( smsMsg.iServiceCentre != iSmsMsg.iServiceCentre ) || - ( smsMsg.iSmsMsg != iSmsMsg.iSmsMsg ) || - ( smsMsg.iSmsClass2 != iSmsMsg.iSmsClass2 ) ) - { - aResult = KErrGeneral; - } - } - - if ( KErrNone == aResult ) - { - _LIT8( KOk, "Complete Read SMS Message ok: %d" ); - iSMSLog->Log((TDesC8)KOk ); - } - else - { - _LIT8( KFail, "Compelte Read SMS Message Failed: %d" ); - iSMSLog->Log((TDesC8)KFail, aResult ); - } - - Signal( aResult ); - - } - -// ----------------------------------------------------------------------------- -// CSMS::DeleteSMSMessage -// Deletes SMS messages -// ----------------------------------------------------------------------------- -// -TInt CSMS::DeleteSMSMessageL( CStifItemParser& aItem ) - { - _LIT8(KDeleteSMSMessage, "SMS::DeleteSMSMessage"); - iSMSLog->Log((TDesC8)KDeleteSMSMessage); - TInt ret (KErrGeneral); - TInt slot; - aItem.GetNextInt(slot); - - CMmDataPackage package; - package.PackData( &slot ); - - ret= HandleRequestL( EMobilePhoneStoreDelete, &package ); - - if ( KErrNone == ret ) - { - _LIT8(KResultOk, "Delete SMS Message ok" ); - iSMSLog->Log((TDesC8)KResultOk); - } - else - { - _LIT8(KResultFail, "Delete SMS Message fails: %d" ); - iSMSLog->Log((TDesC8)KResultFail, ret ); - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteDeleteSMSMessage -// Complete DeleteSMSMessage method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteDeleteSMSMessage( TInt aResult ) //Completion result value - { - _LIT8(KResult, "Complete Delete SMS Message result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - Signal( aResult ); - } - - -// ----------------------------------------------------------------------------- -// CSMS::DeleteAllSMSMessages -// Deletes all SMS messages -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CSMS::DeleteAllSMSMessagesL( CStifItemParser& ) - { - _LIT8(KDeleteAllSMSMessages, "SMS::DeleteAllSMSMessages"); - iSMSLog->Log((TDesC8)KDeleteAllSMSMessages); - TInt ret (KErrGeneral); - - ret = HandleRequestL( EMobilePhoneStoreDeleteAll ); - - if ( KErrNone == ret ) - { - _LIT8(KResultOk, "Delete All SMS Messages ok" ); - iSMSLog->Log((TDesC8)KResultOk); - } - else - { - _LIT8(KResultFail, "Delete All SMS Messages fails: %d" ); - iSMSLog->Log((TDesC8)KResultFail, ret ); - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteDeleteAllSMSMessages -// Complete DeleteSMSMessage method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteDeleteAllSMSMessages( TInt aResult ) //Completion result value - { - _LIT8(KResult, "Complete Delete All SMS Messages result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - Signal( aResult ); - } - -// ----------------------------------------------------------------------------- -// CSMS::SetMoSmsBearer -// Sets MO SMS Bearer (packet data or GSM) -// ----------------------------------------------------------------------------- -// -TInt CSMS::SetMoSmsBearerL( CStifItemParser& aItem ) - { - TInt ret (KErrGeneral); - - TInt bearerInt; - aItem.GetNextInt(bearerInt); - - _LIT8(KSetMoSmsBearer, "SMS::SetMoSmsBearer, bearer=%d"); - iSMSLog->Log((TDesC8)KSetMoSmsBearer, bearerInt); - - RMobileSmsMessaging::TMobileSmsBearer bearer = - static_cast< RMobileSmsMessaging::TMobileSmsBearer >( bearerInt ); - - CMmDataPackage package; - package.PackData( &bearer ); - - ret = HandleRequestL( EMobileSmsMessagingSetMoSmsBearer, &package ); - - if ( KErrNone == ret ) - { - _LIT8(KResultOk, "Set MO SMS Bearer ok" ); - iSMSLog->Log((TDesC8)KResultOk); - } - else - { - _LIT8(KResultFail, "Set MO SMS Bearer fails: %d" ); - iSMSLog->Log((TDesC8)KResultFail, ret ); - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteSetMoSmsBearer -// Completes SetMoSmsBearer -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteSetMoSmsBearer( TInt aResult ) //Completion result value - { - _LIT8(KResult, "Complete Set MO SMS Bearer result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - Signal( aResult ); - } - -// ----------------------------------------------------------------------------- -// CSMS::WriteSMSMessage -// Write message to qnted slot -// ----------------------------------------------------------------------------- -// -TInt CSMS::WriteSMSMessageL( CStifItemParser& aItem ) - { - _LIT8(KWriteSMSMessage, "SMS::WriteSMSMessage"); - iSMSLog->Log((TDesC8)KWriteSMSMessage); - - TInt ret (KErrNotFound); - TInt slot; - TPtrC number; - TPtrC servicecenternumber; - aItem.GetNextString(number); - aItem.GetNextString(servicecenternumber); - aItem.GetNextInt(slot); - - // TName namee = _L( "SMS_SIM" ); - // TBuf8<12> serviceCenterAddress; - TBuf8<12> destinationAddress; - TBuf8<200> omaPDU; - - //TUint msgParameters( 0 ); - RMobileSmsStore::TMobileGsmSmsEntryV1 smsentry; - RMobileSmsStore::TMobileGsmSmsEntryV1Pckg smsentryPckg( smsentry ); - - TBuf8<7> validityperiod; - TUint8 validity[7]={ 0x01,0x02,0x03,0x04,0x05,0x06,0x07 }; - validityperiod.Append(&validity[0],sizeof(validity)); - - TUint MsgParameters( 0 ); - const TUint SmsMsgTypeSubmitOrSubmitR = 0x01; - const TUint SmsMsgVPabsolute = 0x34; // absolute format - - // TSY doesn't handle this information. Destination address goes in PDU. - iMsgAttrib.iDestination.iTelNumber = number; - - iMsgAttrib.iDestination.iTypeOfNumber = RMobilePhone::ENationalNumber; - iMsgAttrib.iDestination.iNumberPlan = RMobilePhone::EIsdnNumberPlan; - - TBuf8<160> source; - - if (-1 == slot) - { - TUint8 UD[145]={'t','e','s','t',' ','m','e','s','s','a','g','e',' ', - 'f','o','r',' ','S','M','S',' ','T','e','s','t',' ','C','a','s', - 'e',' ','T','C','-','S','M','S','-','0','1','6','b',' ','t','h', - 'i','s',' ','m','e','s','s','a','g','e',' ','i','s',' ', - 's','t','o','r','e','d',' ','i','n',' ','f','i','r','s','t',' ', - 'a','v','a','i','l','e','b','l','e',' ','s','l','o','t',' ','b', - 'y',' ','g','i','v','i','n','g',' ','s','l','o','t',' ','n','u', - 'm','b','e','r',' ','a','s',' ','-','1','*','*','*','*','*','*', - '*','*','*','*','*','*','*','*','*','*','*',' ','l','e','n','g', - 't','h','=','1','4','9'}; - source.Append(&UD[0],sizeof(UD)); - } - else - { - TUint8 UD[73]={'t','e','s','t',' ','m','e','s','s','a','g','e',' ', - ' ','f','o','r',' ','t','e','s','t',' ','1','6','a',' ','i','n', - 'S','M','S',' ','T','e','s','t',' ','C','a','s','e','s',' ','*', - 'h','u','o','m','a','t','t','a','v','a','s','t','i',' ', - '*','*','*','*',' ','L','e','n','g','t','h','=','7','5'}; - source.Append(&UD[0],sizeof(UD)); - } - - // If you want to convert user data to 7bit format: - TBuf8<140> userdata; - TUint16 byte_count = ( TUint16 )source.Length(); - GsmLibCharConversion( - TKGsmLibConvertToGsmFormat, source, byte_count ); - GsmLibSmsPackMessage( - userdata, source, byte_count ); - - TBuf<23> detemp = number; - TPtrC16 denumber = detemp; - GsmConvUnicodeTo0340Addr( - 1, //TON international number - 1, //NPI isdn numbering plan - destinationAddress, - denumber ); - - omaPDU.Append(0x24); //Message params - omaPDU.Append(destinationAddress); //TP-Orginating Address - omaPDU.Append(0x00); //TP-Protocol-Identifier - omaPDU.Append(0x00); //TP-Data-Coding-Scheme - omaPDU.Append(0x10); //TP-Service Centre Time Stamp - omaPDU.Append(0x80); //TP-Service Centre Time Stamp - omaPDU.Append(0x71); //TP-Service Centre Time Stamp - omaPDU.Append(0x41); //TP-Service Centre Time Stamp - omaPDU.Append(0x73); //TP-Service Centre Time Stamp - omaPDU.Append(0x14); //TP-Service Centre Time Stamp - omaPDU.Append(0x80); //TP-Service Centre Time Stamp - omaPDU.Append(byte_count); //TP-User-Data-Length - omaPDU.Append(userdata); //TP-User-Data - - smsentry.iMsgData.Copy(omaPDU); - - smsentry.iMsgStatus = RMobileSmsStore::EStoredMessageRead; - smsentry.iIndex = slot; - smsentry.iServiceCentre.iNumberPlan = RMobilePhone::EIsdnNumberPlan; - smsentry.iServiceCentre.iTypeOfNumber = RMobilePhone::EInternationalNumber; - smsentry.iServiceCentre.iTelNumber = servicecenternumber; - - //Create package - CMmDataPackage package; - - RMobileSmsStore::TMobileGsmSmsEntryV1Pckg* smsentryPckgPtr = &smsentryPckg; - - //Pack parameters - package.PackData(&smsentryPckgPtr, &slot); - - ret = HandleRequestL( EMobilePhoneStoreWrite, &package ); - - if ( KErrNone == ret ) - { - _LIT8( KResultOk, "Write SMS Message ok" ); - iSMSLog->Log((TDesC8)KResultOk ); - iSMSLog->Log( _L("Write SMS Message ok")); - } - else - { - _LIT8( KResultFailed, "Write SMS Message failed: %d" ); - iSMSLog->Log((TDesC8)KResultFailed, ret ); - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteWriteSMSMessage -// Complete WriteSMSMessage method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteWriteSMSMessage( - TInt aResult, //Completion result value - CMmDataPackage* aDataPackage // pointer to DataPackage - ) - { - // unpacking message - TSmsMsg* smsMsg; - aDataPackage->UnPackData( smsMsg ); - - _LIT8(KResult, "Complete Write SMS Message: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - Signal( aResult ); - } - - -// ----------------------------------------------------------------------------- -// CSMS::ReceiveMessage -// Cancels Receive Mode -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CSMS::ReceiveSMSMessageL( CStifItemParser& aItem ) - { - _LIT8(KReceiveSMSMessages, "SMS::ReceiveSMSMessages"); - TInt ret (KErrNone); - - // Save SMS class type for comparison when receivin is completed. - TPtrC string; - aItem.GetNextString ( string ); - - // Set NetworkSelection - if ( _L("Class2") == string ) - { - iSMSLog->Log( _L("Expect class 2 SMS") ); - iReceivedSmsClass2 = ETrue; - } - else - { - iSMSLog->Log( _L("Expect class 1 SMS") ); - iReceivedSmsClass2 = EFalse; - } - - if ( KErrNone == ret ) - { - _LIT8( KResultOk, "Receive SMS Message ok" ); - iSMSLog->Log((TDesC8)KResultOk ); - iSMSLog->Log( _L("Receive SMS Message ok")); - } - else - { - _LIT8( KResultFailed, "Receive SMS Message failed: %d" ); - iSMSLog->Log((TDesC8)KResultFailed, ret ); - } - - return ret; - } - - -// ----------------------------------------------------------------------------- -// CSMS::CompleteReceiveSMSMessage -// Complete Receive SMS Message method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteReceiveSMSMessage( - TInt aResult, //Completion result value - CMmDataPackage* aDataPackage // pointer to DataPackage - ) - { - _LIT8(KResult, "Complete Receive SMS Message result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - TBool smsInd; - TSmsMsg* smsMsg; - aDataPackage->UnPackData( smsInd, smsMsg ); - // Is the SMS Class received the same as stored in ReceiveSMSMessageL - if ( smsMsg->iSmsClass2 != iReceivedSmsClass2 ) - { - aResult = KErrGeneral; - } - Signal( aResult ); - } - - -// ----------------------------------------------------------------------------- -// CSMS::ActivateSMSRouting -// Activate SMS routing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CSMS::ActivateSMSRoutingL( CStifItemParser& ) - { - _LIT8(KActivateSMSRouting, "SMS::ActivateSMsRouting"); - iSMSLog->Log((TDesC8)KActivateSMSRouting); - TInt ret (KErrNone); - - ret= HandleRequestL( EMmTsyActivateSmsRouting ); - - if ( KErrNone == ret ) - { - _LIT8(KResultOk, "Activate SMS routing ok" ); - iSMSLog->Log((TDesC8)KResultOk); - } - else - { - _LIT8(KResultFail, "Activate SMS routing fails: %d" ); - iSMSLog->Log((TDesC8)KResultFail, ret ); - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteActivateSMSRouting -// Complete Activate SMS Routing method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteActivateSMSRouting( TInt aResult ) //Completion result value - { - _LIT8(KResult, "Complete Activate SMS Routing result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - Signal( aResult ); - } - - -// ----------------------------------------------------------------------------- -// CSMS::CompleteActivateSMSRouting -// Complete Activate SMS Routing method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteActivateSMSRouting( - TInt aResult, - CMmDataPackage* aDataPackage ) - { - _LIT8(KResult, "Complete Activate SMS Routing result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - TUint8 receptionStatus; - aDataPackage->UnPackData( receptionStatus ); - if ( SMS_RECEPTION_INACTIVE == receptionStatus ) - { - aResult = KErrGeneral; - } - Signal( aResult ); - } - - -// ----------------------------------------------------------------------------- -// CSMS::AckSMS -// Acknowledge SMS message -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CSMS::AckSMSL( CStifItemParser& ) - { - _LIT8(KAckSMS, "SMS::Acknowledge SMS"); - iSMSLog->Log((TDesC8)KAckSMS); - TInt ret (KErrNone); - - CMmDataPackage package; - TDesC8 empty = KNullDesC8; - package.PackData( &empty ); - ret= HandleRequestL( EMobileSmsMessagingAckSmsStored, &package ); - - if ( KErrNone == ret ) - { - _LIT8(KResultOk, "Acknowledge SMS ok" ); - iSMSLog->Log((TDesC8)KResultOk); - } - else - { - _LIT8(KResultFail, "Acknowledge SMS fails: %d" ); - iSMSLog->Log((TDesC8)KResultFail, ret ); - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteAckSMS -// Complete AckSMS method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteAckSMS( TInt aResult ) //Completion result value - { - _LIT8(KResult, "Complete Ack SMS result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - Signal( aResult ); - } - -// ----------------------------------------------------------------------------- -// CSMS::DeactivateSMSRouting -// Deactivate SMS routing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CSMS::DeactivateSMSRoutingL( CStifItemParser& ) - { - _LIT8(KDeactivateSMSRouting, "SMS::DeactivateSMSRouting"); - iSMSLog->Log((TDesC8)KDeactivateSMSRouting); - TInt ret (KErrNone); - - ret= HandleRequestL( EMmTsyDeactivateSmsRouting ); - - if ( KErrNone == ret ) - { - _LIT8(KResultOk, "Deactivate SMS routing ok" ); - iSMSLog->Log((TDesC8)KResultOk); - } - else - { - _LIT8(KResultFail, "Deactivate SMS routing fails: %d" ); - iSMSLog->Log((TDesC8)KResultFail, ret ); - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteDeactivateSMSRouting -// Complete Deactivate SMS Routing method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteDeactivateSMSRouting( TInt aResult ) //Completion result value - { - _LIT8(KResult, "Complete Deactivate SMS Routing result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - Signal( aResult ); - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteDeactivateSMSRouting -// Complete Deactivate SMS Routing method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteDeactivateSMSRouting( - TInt aResult, - CMmDataPackage* aDataPackage ) - { - _LIT8(KResult, "Complete Deactivate SMS Routing result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - TUint8 receptionStatus; - aDataPackage->UnPackData( receptionStatus ); - if ( SMS_RECEPTION_ACTIVE == receptionStatus ) - { - aResult = KErrGeneral; - } - - Signal( aResult ); - } - -// ----------------------------------------------------------------------------- -// CSMS::ResumeSMS -// Resume SMS -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CSMS::ResumeSMSL( CStifItemParser& ) - { - _LIT8(KResumeSMS, "SMS::ResumeSMS"); - iSMSLog->Log((TDesC8)KResumeSMS); - TInt ret (KErrNone); - - ret= HandleRequestL( EMobileSmsMessagingResumeSmsReception ); - - if ( KErrNone == ret ) - { - _LIT8(KResultOk, "Resume SMS ok" ); - iSMSLog->Log((TDesC8)KResultOk); - } - else - { - _LIT8(KResultFail, "Resume SMS fails: %d" ); - iSMSLog->Log((TDesC8)KResultFail, ret ); - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteResumeSMS -// Complete Resume SMS method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteResumeSMS( TInt aResult ) //Completion result value - { - _LIT8(KResult, "Complete Resume SMS result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - Signal( aResult ); - } - - -// ----------------------------------------------------------------------------- -// CSMS::ReadAllSMSMessages -// Reading All SMS message for slot -// ----------------------------------------------------------------------------- -// -TInt CSMS::ReadAllSMSMessageL ( CStifItemParser& aItem ) - { - _LIT8(KReadAllSMSMessage, "SMS::ReadAllSMSMessage"); - iSMSLog->Log((TDesC8)KReadAllSMSMessage); - TInt ret (KErrNotFound); - TPtrC16 msgStatus; - TPtrC16 numberingPlan; - TPtrC16 typeOfNumber; - TPtrC serviceCentreAddress; - TPtrC16 isClass2; - TInt tpdu; - - aItem.GetNextString( msgStatus ); - - if ( msgStatus == ( _L("KSimSmsMtNotRead" ) ) ) - { - iSmsMsg.iMessageStatus = KSimSmsMtNotRead; - } - else if ( msgStatus == ( _L("KSimSmsMtRead" ) ) ) - { - iSmsMsg.iMessageStatus = KSimSmsMtRead; - } - else - { - iSmsMsg.iMessageStatus = KSimSmsNotPresent; - } - - aItem.GetNextString( numberingPlan ); - if ( numberingPlan == ( _L("EIsdnNumberPlan" ) ) ) - { - iSmsMsg.iMobileScNPI = RMobilePhone::EIsdnNumberPlan; - } - else - { - iSmsMsg.iMobileScNPI = RMobilePhone::EUnknownNumberingPlan; - } - - aItem.GetNextString( typeOfNumber ); - if ( typeOfNumber == ( _L( "EInternationalNumber" ) ) ) - { - iSmsMsg.iMobileScTON = RMobilePhone::EInternationalNumber; - } - else - { - iSmsMsg.iMobileScTON = RMobilePhone::EUnknownNumber; - } - - aItem.GetNextString( serviceCentreAddress ); - iSmsMsg.iServiceCentre = serviceCentreAddress; - - - iSmsMsg.iSmsClass2 = EFalse; - aItem.GetNextString( isClass2 ); - if ( isClass2 == ( _L( "CLASS2" ) ) ) - { - iSmsMsg.iSmsClass2 = ETrue; - } - - while ( !aItem.GetNextInt( tpdu ) ) - { - iSmsMsg.iSmsMsg.Append( tpdu ); - } - - ret= HandleRequestL( EMobilePhoneStoreReadAllPhase1 ); - - if ( KErrNotFound == ret ) - { - _LIT8( KOk, "Read All SMS Message ok: %d" ); - iSMSLog->Log((TDesC8)KOk ); - } - else - { - _LIT8( KFail, "Read All SMS Message fails: %d" ); - iSMSLog->Log((TDesC8)KFail, ret ); - } - - return ret; - } - - -// ----------------------------------------------------------------------------- -// CSMS::CompleteReadAllSMSMessage -// Complete ReadAllSMSMessage method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteReadAllSMSMessage( - TInt aResult, //Completion result value - CMmDataPackage* aDataPackage ) // pointer to DataPackage - { - // checking results and unpacking message - if ( KErrNone == aResult ) - { - TSmsMsg* smsMsg; - aDataPackage->UnPackData( iSmspListArray ); - TInt count ( iSmspListArray->Count() ); - - for ( TInt location( 0 ); location < count; location++ ) - { - smsMsg = (TSmsMsg *)iSmspListArray->At( location ); - - if ( ( smsMsg->iLocation != location + 1 ) || - ( smsMsg->iMessageStatus != iSmsMsg.iMessageStatus ) || - ( smsMsg->iMobileScNPI != iSmsMsg.iMobileScNPI ) || - ( smsMsg->iMobileScTON != iSmsMsg.iMobileScTON ) || - ( smsMsg->iServiceCentre != iSmsMsg.iServiceCentre ) || - ( smsMsg->iSmsMsg != iSmsMsg.iSmsMsg ) || - ( smsMsg->iSmsClass2 != iSmsMsg.iSmsClass2 ) ) - { - aResult = KErrGeneral; - break; - } - } - } - - if ( KErrNone == aResult ) - { - _LIT8( KOk, "Complete Read All SMS Message ok: %d" ); - iSMSLog->Log((TDesC8)KOk ); - } - else - { - _LIT8( KFail, "Compelte Read All SMS Message Failed: %d" ); - iSMSLog->Log((TDesC8)KFail, aResult ); - } - - Signal( aResult ); - } - - -// ----------------------------------------------------------------------------- -// CSMS::NackSMS -// Reject Receive SMS message -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CSMS::NackSMSL( CStifItemParser& aItem ) - { - _LIT8(KNackSMS, "SMS::NackSMS"); - iSMSLog->Log((TDesC8)KNackSMS); - TInt ret (KErrNone); - TInt errorvalue; - - aItem.GetNextInt( errorvalue ); - - CMmDataPackage package; - - TDesC8 empty = KNullDesC8; - package.PackData( &empty, &errorvalue); - ret= HandleRequestL( EMobileSmsMessagingNackSmsStored, &package ); - - if ( KErrNone == ret ) - { - _LIT8(KResultOk, "Reject receive SMS ok" ); - iSMSLog->Log((TDesC8)KResultOk); - } - else - { - _LIT8(KResultFail, "Reject receive SMS fails: %d" ); - iSMSLog->Log((TDesC8)KResultFail, ret ); - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteNackSMS -// Complete NackSMS method function. -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteNackSMS( TInt aResult ) //Completion result value - { - _LIT8(KResult, "Complete Reject receive SMS result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - Signal( aResult ); - } - -// ----------------------------------------------------------------------------- -// CSMS::SIMMsgStorageInfo -// Get SIM SMS Storage info -// ----------------------------------------------------------------------------- -// -TInt CSMS::SIMMsgStorageInfoL( CStifItemParser& /*aItem*/ ) - { - TInt ret (KErrGeneral); - - _LIT8(KSIMMsgStorageInfo, "SMS::SIMMsgStorageInfo request"); - iSMSLog->Log((TDesC8)KSIMMsgStorageInfo); - iSMSMsgStorageRequestOngoing = ETrue; - - ret = HandleRequestL( EMobileSmsMessagingGetMessageStoreInfo ); - - if ( KErrNone == ret ) - { - _LIT8( KSendOk, "request send ok" ); - iSMSLog->Log((TDesC8)KSendOk ); - } - else - { - _LIT8( KSendFailed, "request failed(Cache not ready): %d" ); //SMS cache not ready - iSMSLog->Log((TDesC8)KSendFailed, ret ); - } - - return ret; - } - - -// ----------------------------------------------------------------------------- -// CSIM::CompleteSIMMsgStorageInfo -// Complete SIMS SMS Storage Info -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteSIMMsgStorageInfo( - TInt aResult, - CMmDataPackage* aDataPackage - ) - { - // If specified requests are handled the signal is always sent. - if ( !iHandleSpecifiedRequests ) - { - if( iSMSMsgStorageRequestOngoing ) - { - _LIT8( KResult, "CompleteSIMMsgStorageInfo result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - TUint8 numOfLoc; - TInt usedEntries; - - if( KErrNone == aResult ) - { - aDataPackage->UnPackData ( numOfLoc, usedEntries ); - _LIT8( KResult, "CompleteSIMMsgStorageInfo: Available locations: %d, Used entries: %d" ); - iSMSLog->Log((TDesC8)KResult, (TInt)numOfLoc, (TInt)usedEntries ); - } - else - { - _LIT8( KFail, "CompleteSIMMsgStorageInfo, error: %d" ); - iSMSLog->Log((TDesC8)KFail, aResult ); - } - iSMSMsgStorageRequestOngoing = EFalse; - Signal( aResult ); - } - else - { - _LIT8( KResult, "CompleteSIMMsgStorageInfo - not requested from script (in boot)" ); - iSMSLog->Log((TDesC8)KResult ); - } - } - else - { - _LIT8( KResult, "CompleteSIMMsgStorageInfo / iHandleSpecifiedRequests is set / result: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - Signal( aResult ); - } - } - -// ----------------------------------------------------------------------------- -// CSMS::ReadSmsParameters -// Reads SMS Parameters from SIM. -// ----------------------------------------------------------------------------- -// -TInt CSMS::ReadSmsParametersL( CStifItemParser& /*aItem*/ ) - { - TInt ret ( KErrGeneral ); - - _LIT8(KReadSmsParameters, "SMS::ReadSmsParameters"); - iSMSLog->Log(KReadSmsParameters ); - - // no parameters - ret = HandleRequestL( EMobileSmsMessagingGetSmspListPhase1 ); - - if ( KErrNone == ret ) - { - _LIT8(KResultOk, "ReadSmsParameters ok" ); - iSMSLog->Log((TDesC8)KResultOk); - } - else - { - _LIT8(KResultFail, "ReadSmsParameters fails: %d" ); - iSMSLog->Log((TDesC8)KResultFail, ret ); - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteReadSmsParameters -// Completes ReadSmsParameters -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteReadSmsParameters( - TInt aResult, //Completion result value - CMmDataPackage* aDataPackage )// SMS Parameters - { - if ( KErrNone == aResult ) - { - CArrayPtrFlat* params; - aDataPackage->UnPackData( ¶ms ); - - TInt numOfSets = params->Count(); - _LIT8( KResultOk, "CSMS::CompleteReadSmsParameters: There are %d SMS parameter sets." ); - iSMSLog->Log((TDesC8)KResultOk, numOfSets ); - - /* SMS parameters, from cmmsmsutility.h - struct TSmsParameters - { - TUint8 iLocationNumber; - TUint8 iParameterIndicator; - TUint8 iProtocolId; - TUint8 iDataCodingScheme; - TUint8 iValidityPeriod; - TBuf iServiceCenterAddress; - RMobilePhone::TMobileTON iMobileScTON; - RMobilePhone::TMobileNPI iMobileScNPI; - TBuf iDestinationAddress; - RMobilePhone::TMobileTON iMobileDeTON; - RMobilePhone::TMobileNPI iMobileDeNPI; - TBuf iAlphaTagData; - TBool iAlphaTagPresent; - }; - */ - for ( TInt i = 0; i < numOfSets; i++ ) - { - TSmsParameters* p = params->At( i ); - iSMSLog->Log( _L("SMS Parameter set %d:"), i); - iSMSLog->Log( _L(" parameter indicator = 0x%x"), p->iParameterIndicator ); - iSMSLog->Log( _L(" protocol id = 0x%x"), p->iProtocolId ); - iSMSLog->Log( _L(" data coding scheme = 0x%x"), p->iDataCodingScheme ); - iSMSLog->Log( _L(" validity period = 0x%x"), p->iValidityPeriod ); - iSMSLog->Log( _L(" service center address = %S"), &p->iServiceCenterAddress ); - iSMSLog->Log( _L(" destination address = %S"), &p->iDestinationAddress ); - iSMSLog->Log( _L(" alpha tag = %S"), &p->iAlphaTagData ); - - if ( iSmsParameterCheck && ETestCaseSms008 == iTestCaseNumber ) - { - TSmsParameters* refParams = iSmspListArray->At( i ); - - if ( ( p->iParameterIndicator != refParams->iParameterIndicator ) && - ( 0xff != refParams->iParameterIndicator ) ) - { - aResult = KErrGeneral; - } - if ( ( p->iProtocolId != refParams->iProtocolId ) && - ( 0xff != refParams->iProtocolId ) ) - { - aResult = KErrGeneral; - } - if ( ( p->iDataCodingScheme != refParams->iDataCodingScheme ) && - ( 0xff != refParams->iDataCodingScheme ) ) - { - aResult = KErrGeneral; - } - if ( ( p->iValidityPeriod != refParams->iValidityPeriod ) && - ( 0xff != refParams->iValidityPeriod ) ) - { - aResult = KErrGeneral; - } - if ( ( p->iServiceCenterAddress != refParams->iServiceCenterAddress ) && - ( 0 != refParams->iServiceCenterAddress.Compare( _L( "NA" ) ) ) ) - { - aResult = KErrGeneral; - } - if ( ( p->iDestinationAddress != refParams->iDestinationAddress ) && - ( 0 != refParams->iDestinationAddress.Compare( _L( "NA" ) ) ) ) - { - aResult = KErrGeneral; - } - if ( ( p->iAlphaTagData != refParams->iAlphaTagData ) && - ( 0 != refParams->iAlphaTagData.Compare( _L( "NA" ) ) ) ) - { - aResult = KErrGeneral; - } - } - } - iSMSLog->Log(_L8("CSMS::CompleteReadSmsParameters OK.")); - } - else - { - _LIT8( KResultFailed, "Complete ReadSmsParameters Failed: %d" ); - iSMSLog->Log((TDesC8)KResultFailed, aResult ); - } - - iTestCaseNumber = ETestCaseNotDefined; - Signal( aResult ); - } - - -// ----------------------------------------------------------------------------- -// CSMS::StoreSmsParameters -// Stores SMS parameters to SIM. Parameters from script: SIM slot, -// SC number, alpha tag. -// ----------------------------------------------------------------------------- -// -TInt CSMS::StoreSmsParametersL( CStifItemParser& aItem ) - { - TInt ret ( KErrGeneral ); - - _LIT8(KStoreSmsParameters, "SMS::StoreSmsParameters"); - iSMSLog->Log( KStoreSmsParameters ); - - /* SMS parameters, from etelmm.h - class TMobileSmspEntryV1 : public RMobilePhone::TMultimodeType - The slot index where this SMSP entry is stored in the SIM's SMSP file. - TInt iIndex; - A bit-wise sum of the constants defined in TMobileSmspStoreValidParams, that - specifies which parameters are valid within this entry. - TUint32 iValidParams; - Default protocol ID. Coded according to GSM 03.40. - TUint8 iProtocolId; - Default data coding scheme. Coded according to GSM 03.40. - TUint8 iDcs; - Default validity period, in relative format and coded on 8 bits as defined - by GSM 03.40. - TUint8 iValidityPeriod; - Reserved for future use. - TUint8 iReservedFiller; - Default destination for outgoing SMS. - RMobilePhone::TMobileAddress iDestination; - Default service centre for outgoing SMS. - RMobilePhone::TMobileAddress iServiceCentre; - The alpha-tag associated with this SMSP entry, expressed as Unicode characters. - TBuf iText; - */ - RMobileSmsMessaging::TMobileSmspEntryV1 smspEntry; - aItem.GetNextInt(smspEntry.iIndex); // SIM location - - TPtrC smsc; // Number of SM Service Center - aItem.GetNextString(smsc); - smspEntry.iServiceCentre.iTelNumber = smsc; - smspEntry.iServiceCentre.iTypeOfNumber = RMobilePhone::EInternationalNumber; - smspEntry.iServiceCentre.iNumberPlan = RMobilePhone::EIsdnNumberPlan; - - TPtrC alphaTag; // Alpha tag - aItem.GetNextString( alphaTag ); - smspEntry.iText = alphaTag; - - smspEntry.iValidParams = RMobileSmsMessaging::KSCAIncluded; - - CMmDataPackage package; - package.PackData( &smspEntry ); - ret = HandleRequestL( EMobileSmsMessagingStoreSmspList, &package ); - - if ( KErrNone == ret ) - { - _LIT8(KResultOk, "StoreSmsParameters ok" ); - iSMSLog->Log((TDesC8)KResultOk); - } - else - { - _LIT8(KResultFail, "StoreSmsParameters fails: %d" ); - iSMSLog->Log((TDesC8)KResultFail, ret ); - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteStoreSmsParameters -// Completes StoreSmsParameters -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteStoreSmsParameters( TInt aResult ) //Completion result value - { - if ( KErrNone == aResult ) - { - iSMSLog->Log(_L8("CSMS::Complete StoreSmsParameters OK.")); - } - else - { - _LIT8( KResultFailed, "Complete StoreSmsParameters Failed: %d" ); - iSMSLog->Log((TDesC8)KResultFailed, aResult ); - } - - Signal( aResult ); - } - -// ----------------------------------------------------------------------------- -// CSMS::SMSCacheInitialization -// SMS cache initialization -// ----------------------------------------------------------------------------- -// -TInt CSMS::SMSCacheInitializationL( CStifItemParser& /* aItem */ ) - { - TInt ret ( KErrGeneral ); - - _LIT8(KSMSCacheInitialization, "SMS::SMSCacheInitialization"); - iSMSLog->Log( KSMSCacheInitialization ); - ret = HandleRequestL( EMmTsyBootNotifySimStatusReadyIPC ); - - if ( KErrNone == ret ) - { - _LIT8(KResultOk, "SMSCacheInitialization OK" ); - iSMSLog->Log((TDesC8)KResultOk); - } - else - { - _LIT8(KResultFail, "SMSCacheInitialization fails: %d" ); - iSMSLog->Log((TDesC8)KResultFail, ret ); - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteSMSCacheInitialization -// Completes SMSCacheInitialization -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteSMSCacheInitialization( TInt aResult ) //Completion result value - { - if ( KErrNone == aResult ) - { - iSMSLog->Log(_L8("CSMS::Complete SMSCacheInitializationL OK.")); - } - else - { - _LIT8( KResultFailed, "Complete SMSCacheInitializationL Failed: %d" ); - iSMSLog->Log((TDesC8)KResultFailed, aResult ); - } - - Signal( aResult ); - } - -// ----------------------------------------------------------------------------- -// CSMS::CompleteMobilePhoneStoreGetInfo -// Completes MobilePhoneStoreGetInfo -// ----------------------------------------------------------------------------- -// -void CSMS::CompleteMobilePhoneStoreGetInfo( TInt aResult ) //Completion result value - { - _LIT8( KResult, "Complete CompleteMobilePhoneStoreGetInfo: %d" ); - iSMSLog->Log((TDesC8)KResult, aResult ); - - Signal( aResult ); - } - -// ----------------------------------------------------------------------------- -// CSMS::GsmConvUnicodeTo0340Addr -// ----------------------------------------------------------------------------- -// -void CSMS::GsmConvUnicodeTo0340Addr( - TUint8 aTon, //Type of number - TUint8 aNpi, //Numbering plan identification - TDes8 &aDest, //Service center address - TDesC16 &aSource //Telephone number - ) - { - if ( aSource.Length() != 0 ) - { - GsmConvUnicodeToAddr( aTon, aNpi, aDest, aSource, ETrue ); - } - else - { - // Address length of 0 is a special case - aDest.Append( 0 ); - - // Type-of-Address: TON = Unknown, NPI = ISDN/telephone num plan - aDest.Append( 0x81 ); - } - } - -// ----------------------------------------------------------------------------- -// ::GsmConvUnicodeToAddr -// Converts type of number, numbering plan identification and -// phone number given in unicode string to the GSM 03.40 or -// 04.11 standard -// ----------------------------------------------------------------------------- -// -void CSMS::GsmConvUnicodeToAddr( - TUint8 aTon, //Type of number - TUint8 aNpi, //Numbering plan identification - TDes8 &aDest, //Service center address - TDesC16 &aSource, //Telephone number - TBool a0340Address //GSM 03.40 address - ) - { - //get address length - TUint numberLength = aSource.Length(); - TUint destLength = numberLength; - TUint i( 0 ); - - /* Solve type of address - Type of Address field format is as follows: - - 7 6 5 4 3 2 1 0 bit - | | | | | | | | | - | 1 | Type of number | Numbering-plan-identification| - | | | | | | | | | - */ - - //type of number is three bits from left and fourth bit must be '1' - TUint8 typeOfNumber = TUint8( aTon | 0x08 ); - //move four bit to the left - typeOfNumber = TUint8( typeOfNumber << 4 ); - //numbering plan is four bits from left - TUint8 numberingPlan = TUint8( aNpi & 0x0F ); - //set type of number and numbering plan to the typeOfNumber variable - typeOfNumber = TUint8( typeOfNumber | numberingPlan ); - - if ( 5 == aTon ) //Alphanumeric - { - TBuf8 addressData; - TUint8 amountOfsemiOctets( 0 ); - - GsmUnicodeAddrToAlphanumericAddr( aSource, addressData, - amountOfsemiOctets ); - - //fill address length field - if ( a0340Address ) - { - //amount of used semi-octets in address data - aDest.Append( amountOfsemiOctets ); - } - else //0411 address - { - //Actually alphanumeric address data for 0411 address is not - //supported (see GSM 24.011 and 24.008)... - //Length of address data + length of address type field - aDest.Append( addressData.Length() + 1 ); - } - - //add typeOfNumber to the buffer - aDest.Append( typeOfNumber ); - - //add address data to the buffer - aDest.Insert( 2, addressData ); - } - else - { - //number can contain character '+' - if ( '+' == aSource[i] ) - { - i++; - destLength--; - - // Maximum amount of digits is 20 (3GPP TS 23.040) - if ( destLength > KMaxAmountOfDigits ) - { - destLength = KMaxAmountOfDigits; - numberLength = 21; - } - } - else - { - // Maximum amount of digits is 20 (3GPP TS 23.040) - if ( destLength > KMaxAmountOfDigits ) - { - destLength = KMaxAmountOfDigits; - numberLength = 20; - } - } - - // calculate address length in bytes - TUint bufferLength = ( destLength + 1 )/2 + 2; - - //set buffer length - aDest.SetLength( bufferLength ); - - //add length to the buffer - if ( a0340Address ) - { - //amount of used semi-octets in address data - aDest[0] = ( TUint8 )destLength; - } - else - { - //length of whole address data - length of address length field - aDest[0] = ( TUint8 )( bufferLength - 1 ); - } - - //add typeOfNumber to the buffer - aDest[1] = typeOfNumber; - - //needed variables - TUint8 numLsb( 0 ); - TUint8 numMsb( 0 ); - TUint index( 2 ); - - //add numbers to the buffer - for ( ; ( i+1 ) < numberLength ; i+=2 ) - { - numLsb = TUint8( aSource[i] - '0' ); - numMsb = TUint8( ( aSource[i+1] - '0' ) << 4 ); - - aDest[index++] = TUint8( numLsb | numMsb ); - } - - //if numberLength is odd, last number is fixed with 0xF0 - if ( i < numberLength ) - { - aDest[index] = TUint8( 0xF0 | ( aSource[i] - '0' ) ); - } - } - } - -// ----------------------------------------------------------------------------- -// CSMS::GsmConvAddrToUnicode -// Converts GSM 03.40 or 04.11 address to type of number, -// numbering plan identification and phone number given in -// unicode string -// ----------------------------------------------------------------------------- -// -void CSMS::GsmConvAddrToUnicode( - TDes &aDest, //Service center address - TDesC8 &aSource, //Telephone number - RMobilePhone::TMobileTON& aTon, //Type of number - RMobilePhone::TMobileNPI& aNpi, //Telephone number - TBool a0340Address //GSM 03.40 address - ) - { - TUint addrDataLength( 0 ); - TBool halfs = ETrue; - TUint index( 0 ); - TUint num2( 0 ); - - //Get amount of digits in address data - if ( a0340Address ) - { - addrDataLength = aSource[index]; - } - else //04.11 address - { - addrDataLength = 2 * ( aSource[index] - 1 ); - } - - // Check if there are too many digits - // Maximum amount of digits is 20 (3GPP TS 23.040) - if ( addrDataLength > KMaxAmountOfDigits ) - { - addrDataLength = KMaxAmountOfDigits; - } - - index++; - - // Lets take type of number field - TUint8 typeOfNum = aSource[index]; - GsmFindOutTonAndNpi( typeOfNum, &aTon, &aNpi ); - - if ( ( aTon == RMobilePhone::EAlphanumericNumber ) - && ( addrDataLength != 0x00 ) ) - { - //Calculate address length in bytes. If statement above check's that - //addrDataLength is not zero. - TUint addrDataLengthInBytes = ( addrDataLength + 1 ) / 2; - - //Get address data - TPtrC8 addressData = aSource.Mid( 2, addrDataLengthInBytes); - - //amountOfCharsInAddrData = amount of used bits / length of char - TUint amountOfCharsInAddrData = ( addrDataLength * 4 ) / 7; - - GsmAlphanumericAddrToUnicodeAddr( addressData, amountOfCharsInAddrData, - aDest ); - } - else - { - // Check if number is international number and addrDataLength is - // bigger than zero - if ( ( aTon == RMobilePhone::EInternationalNumber ) - && ( addrDataLength != 0x00 ) ) - { - aDest.Append( '+' ); - } - - index++; - - while ( addrDataLength-- ) - { - if ( halfs ) - { // Lets take only four bits from right - num2 = gsmSmsSemiOctetToChar( aSource[index] & 0x0F ); - aDest.Append( num2 ); - halfs = EFalse; - } - else - { - if ( ( ( aSource[index] >> 4 ) == 0x0F ) && !a0340Address ) - { - //If 04.11 address contains odd number of digits, - //bits 5 to 8 of the last octet shall be filled with an - //end mark coded as "1111". - break; - } - - halfs = ETrue; // Lets take only four bits from left - num2 = gsmSmsSemiOctetToChar( aSource[index] >> 4 ); - aDest.Append( num2 ); - index++; - } - } - } - } - -//----------------------------------------------------------------------------- -// CSMS::GsmLibCharConversion -// -// The character codes supported by the MS (the NMP character set) are -// not the same as 'defined in GSM 03.40. The former is 8-bit set and -// the latter is a 7-bit set. Therefore, the characters must be converted -// by using this function. However, characters having the same code in -// both sets are not converted. -// -// Note that all handset characters are not supported by the GSM 03.40. -// Such characters are converted to spaces or to the nearest substitute -// (generally the acute/grave marks are removed). -// Control characters and Japanese characters are converted to spaces. -// -// For the NMP character set, see "Nokia Character Set (Final version)", -// v1.0, in /user/cui2/. - -//----------------------------------------------------------------------------- -// -void CSMS::GsmLibCharConversion( - TUint aDirection, //directions - TDes8& aString, //string - TUint16 aLength ) //length - { - TUint16 j = 0; - TUint16 i = 0; - - TBuf8<180> aDestination; - - if ( aDirection == TKGsmLibConvertToNmpFormat ) - { - for ( i = 0; i < aLength; i++) - { - if ( aString[i] == 0xFF ) // This ends the string in SIM card - { - aDestination.Append( '\0' ); // This ends the string in - // NMP format - break; - } - - aString[i] &= 0x7F; // only 7 bits used in GSM character set - - //Conversion made using GSM 7 bit default alphabet extension - //table. - if ( ( aString[i] > 0x5A) && ( aString[i] < 0x5F ) || - ( aString[i] > 0x7A ) && ( aString[i] < 0x7F ) ) - { - for ( j = 0 ; j < TKGsmLibConvTableSize; j++ ) - { - if ( aString[i] == TKGsmExtensionConvTable[j]. - iHandsetChar ) - { - aDestination.Append( 0x1B );//extension table flag - aDestination.Append( - TKGsmExtensionConvTable[j].iSmsChar ); - break; - } - else if ( aString[i] == 0x20A0 ) //Euro - { - aDestination.Append( 0x65 ); - } - } // end of for loop - - } - - // Conversion could be done only taking out the most significant - // bit from Unicode characters between 0x25 - 0x5A or 0x61 - 0x7A. - // We should be used KGsmLibConvTable if it is outside that are - // or it is 0x40 ( @ ). - else if ( ( aString[i] < 0x20 ) - || ( ( aString[i] > 0x5A ) && ( aString[i] < 0x61 ) ) - || ( aString[i] > 0x7A ) - || ( aString[i] == 0x40 ) ) - { - - for ( j = 0 ; j < TKGsmLibBidirTableSize; j++ ) - { - if ( aString[i] == TKGsmLibConvTable[j].iSmsChar ) - { - aDestination.Append( - TKGsmLibConvTable[j].iHandsetChar ); - break; - } - } // end of for loop - } - else - { - aDestination.Append( aString[i] ); - } - } // end of for loop - - } - else // aDirection = KGsmLibConvertToGsmFormat - { - for ( i = 0; i < aLength; i++ ) - { - if ( aString[i] == '\0' ) // End of string in NMP format - { - aDestination.Append( 0xFF ); // End of string in SIM - } - - else if ( ( ( aString[i] < 0x10 ) && ( aString[i] != 0x0A ) - && ( aString[i] != 0x0D ) ) || - ( ( aString[i] > 0x7F ) && ( aString[i] < 0xC0 ) ) ) - { - // Convert to SPACE if control character or Japanese character - // NOTE (CR (0x0D) and LF (0x0A) are not converted. - aDestination.Append( 0x20 ); - } - else - { - //Conversion made using GSM 7 bit default alphabet extension - //table. - if ( ( aString[i] > 0x5A) && ( aString[i] < 0x5F ) || - ( aString[i] > 0x7A ) && ( aString[i] < 0x7F ) ) - - { - for ( j = 0 ; j < TKGsmLibConvTableSize; j++ ) - { - if ( aString[i] == TKGsmExtensionConvTable[j]. - iHandsetChar ) - { - aDestination.Append( 0x1B );// extension table flag - aDestination.Append( - TKGsmExtensionConvTable[j].iSmsChar ); - break; - } - else if ( aString[i] == 0x20A0 ) //Euro - { - aDestination.Append( 0x65 ); - } - } // end of for loop - } - - // Conversion could be done only taking out the most significant - // bit from Unicode characters between 0x25 - 0x5A or 0x61 - 0x7A. - // We should be used KGsmLibConvTable if it is outside that are - // or it is 0x40 ( @ ). - - else if ( ( aString[i] < 0x25 ) - || ( ( aString[i] > 0x5A ) && ( aString[i] < 0x61 ) ) - || ( aString[i] > 0x7A ) - || ( aString[i] == 0x40 ) ) - { - for ( j = 0; j < TKGsmLibConvTableSize; j++ ) - { - if ( aString[i] == TKGsmLibConvTable[j].iHandsetChar ) - { - aDestination.Append( - TKGsmLibConvTable[j].iSmsChar ); - break; - } - } // end of for loop - } - else - { - aDestination.Append( aString[i] ); - } - } // end of else - } // end of for loop - } // end of else - aString.Copy( aDestination ); - } - - -//----------------------------------------------------------------------------- -// CSMS::GsmLibSmsPackMessage -// This function packs a given text string consisting of 7-bit -// characters into 8 bit bytes in such a way that a 160-character -// message takes only 140 bytes of memory after the compression. -//----------------------------------------------------------------------------- -// -TUint16 CSMS::GsmLibSmsPackMessage( - TDes8 &aDest,//destination - TDes8 &aSrc, //source - TUint16 aByte_count ) //Byte counting - { - TUint16 si, di; // Indexes - TInt tmp_modulo; // Temporary; to improve efficiency - - // Reset the indexes. - si = 0; - di = 0; - tmp_modulo = di % 7; - - while ( si < aByte_count ) - { - // Is this the last character of the message - // If it is, just shift it to the right. Otherwise, - // fill the rest of the byte with the bits of the next source character. - - if ( si == (aByte_count - 1) ) - { - TUint num2 = (aSrc[si] >> tmp_modulo); - aDest.Append(num2); - } - else - { - TUint num2 = (aSrc[si] >> tmp_modulo) | - (aSrc[si + 1] << (7 - tmp_modulo)); - aDest.Append(num2); - } - - di++; - tmp_modulo = di % 7; - - // Check if the destination byte could take the entire source character. - // In that case, the source character does not have to be divided and - // the next source character can be taken. - - if ( tmp_modulo == 0) - { - si += 2; - } - else - { - si++; - } - } - - // Return the length of the coded message. - return( di ); - } - -// ----------------------------------------------------------------------------- -// CSMS::GsmUnicodeAddrToAlphanumericAddr -// Converts Unicode characters to GSM 7-bit bit Default Alphabet -// characters (Defined in GSM 23.038). Note that all Unicode characters -// are not supported by the GSM 7-bit bit Default Alphabet set. Such -// characters are converted to spaces or to the nearest substitute -// (generally the acute/grave marks are removed). Control characters and -// special characters are converted to spaces. This method supports GSM -// 7-bit bit Default Alphabet extension table -// mechanism. - -// After character conversion this method packs address data by calling -// GsmLibSmsPackMessage method*/ -// ----------------------------------------------------------------------------- -// -void CSMS::GsmUnicodeAddrToAlphanumericAddr( - TDesC16& aSource, // Source address data - TDes8& aDestination, // Destination data - TUint8& aAmountOfSemiOctets // Amount of semi-octets - ) - { - TUint16 j = 0; - TUint16 i = 0; - - TBuf8 alphaChars; - for ( i = 0; i < aSource.Length(); i++ ) - { - if ( ( aSource[i] > 0x24 ) && ( aSource[i] < 0x5B ) && - ( aSource[i] != 0x40 ) || - ( aSource[i] > 0x60 ) && ( aSource[i] < 0x7B ) ) - { - // Conversion could be done only taking out the most significant - // bit from Unicode characters between 0x25 - 0x5A or 0x61 - 0x7A - // excluding '@' (0x40). - alphaChars.Append(aSource[i]); - } - else if ( ( aSource[i] > 0x5A) && ( aSource[i] < 0x5F ) || - ( aSource[i] > 0x7A ) && ( aSource[i] < 0x7F ) || - ( aSource[i] == 0x20AC ) ) - { - //Conversion made using GSM 7 bit default alphabet extension - //table. Characters: [,\,],^,{,|,},~,&euro - for ( j = 0 ; j < KGsmLibConvTableSize; j++ ) - { - if ( aSource[i] == KGsmExtensionConvTable[j].iUnicodeChar ) - { - alphaChars.Append( 0x1B );// extension table flag - alphaChars.Append( - KGsmExtensionConvTable[j].iGsmChar ); - break; - } - } // end of for loop - } - else - { - //Try to find character from conversion table. - TBool notFound( ETrue ); - for ( j = 0; j < KGsmLibConvTableSize; j++ ) - { - if ( aSource[i] == KGsmLibConvTable[j].iUnicodeChar ) - { - alphaChars.Append( - KGsmLibConvTable[j].iGsmChar ); - notFound = EFalse; - break; - } - } // end of for loop - - if( notFound ) - { - //Couldn't found similar character. Convert to SPACE. - alphaChars.Append( 0x20 ); - } - } - } - - TUint8 packedChars = GsmLibPackAlphanumericAddress - ( aDestination, alphaChars ); - - //How many unused bits packed address contains - TUint8 unusedBits = (TUint8)( ( aDestination.Length() * 8 ) - - ( packedChars * 7 ) ); - - //How many semi-octets is used in packed address. - if ( unusedBits >= 4 ) - { - //Last semi-octet doesn't contain address data - aAmountOfSemiOctets = (TUint8)( ( aDestination.Length() * 2 ) - 1 ); - } - else - { - //All semi-octets are used - aAmountOfSemiOctets = (TUint8)( aDestination.Length() * 2 ); - } - } - -// ----------------------------------------------------------------------------- -// CSMS::GsmFindOutTonAndNpi -// Converts type of number and numbering plan identification -// information from the type of address parameter to the -// RMobilePhone::TMobileTON and RMobilePhone::TMobileNPI format -// ----------------------------------------------------------------------------- -// -void CSMS::GsmFindOutTonAndNpi( - TUint8 typeOfAddress, //Type of address - RMobilePhone::TMobileTON* ton, //Type of number - RMobilePhone::TMobileNPI* npi //Numbering plan identification - ) - { - TUint8 numberingPlanIdentification = ( TUint8 )( typeOfAddress & 0x0F ); - TUint8 temp = ( TUint8 )( typeOfAddress >> 4 ); - TUint8 typeOfNumber = ( TUint8 )( temp & 0x07 ); - - switch ( typeOfNumber ) - { - case KInternationalNumber: - { - *ton = ( RMobilePhone::EInternationalNumber ); - break; - } - case KNationalNumber: - { - *ton = ( RMobilePhone::ENationalNumber ); - break; - } - case KNetworkSpecificNumber: - { - *ton = ( RMobilePhone::ENetworkSpecificNumber ); - break; - } - case KSubscriberNumber: - { - *ton = ( RMobilePhone::ESubscriberNumber ); - break; - } - case KAlphanumeric: - { - *ton = ( RMobilePhone::EAlphanumericNumber ); - break; - } - case KAbbreviatedNumber: - { - *ton = ( RMobilePhone::EAbbreviatedNumber ); - break; - } - default: - { - *ton = ( RMobilePhone::EUnknownNumber ); - break; - } - } - - switch ( numberingPlanIdentification ) - { - case KIsdnTelephoneNumPlan: - { - *npi = ( RMobilePhone::EIsdnNumberPlan ); - break; - } - case KDataNumPlan: - { - *npi = ( RMobilePhone::EDataNumberPlan ); - break; - } - case KTelexNumPlan: - { - *npi = ( RMobilePhone::ETelexNumberPlan ); - break; - } - case KServiceCentreSpecificPlan1: - { - *npi = ( RMobilePhone::EServiceCentreSpecificPlan1 ); - break; - } - case KServiceCentreSpecificPlan2: - { - *npi = ( RMobilePhone::EServiceCentreSpecificPlan2 ); - break; - } - case KNationalNumPlan: - { - *npi = ( RMobilePhone::ENationalNumberPlan ); - break; - } - case KPrivateNumPlan: - { - *npi = ( RMobilePhone::EPrivateNumberPlan ); - break; - } - case KErmesNumPlan: - { - *npi = ( RMobilePhone::EERMESNumberPlan ); - break; - } - default: - { - *npi = ( RMobilePhone::EUnknownNumberingPlan ); - break; - } - } - } - -// ----------------------------------------------------------------------------- -// CSMS::GsmAlphanumericAddrToUnicodeAddr -// This method first decodes a address data that has been -// coded using the algorithm described in GSM 03.40 annex 2 by calling -// GsmLibUnpackAlphanumericAddress method. After that this method -// converts GSM 7-bit default alphabet characters to Unicode format. -// This method supports GSM 7-bit bit Default Alphabet extension table -// mechanism -// ----------------------------------------------------------------------------- -// -void CSMS::GsmAlphanumericAddrToUnicodeAddr( - TDesC8& aSource, // Source address data - TUint& aAmountOfChars, // Amount of characters in address data - TDes16& aDestination // Destination data - ) - { - //Maximum length of address data is 10 bytes. These bytes can contain - //11 packed 7-bit characters. - TBuf8<(KMaxLengthOfAddressData + 1)> unpackedSrc; - GsmLibUnpackAlphanumericAddress(aSource, aAmountOfChars, unpackedSrc); - - TUint8 unpackedLength = (TUint8)unpackedSrc.Length(); - TUint8 j( 0 ); - TUint8 i( 0 ); - - for ( i = 0; i < unpackedLength; i++) - { - unpackedSrc[i] &= 0x7F; // only 7 bits used in GSM character set - - if ( ( unpackedSrc[i] > 0x24 ) && ( unpackedSrc[i] < 0x5B ) && - ( unpackedSrc[i] != 0x40 ) || - ( unpackedSrc[i] > 0x60 ) && ( unpackedSrc[i] < 0x7B ) ) - { - // Character codes in Unicode and GSM 7-bit default alphabet - // are same between 0x25 - 0x5A and 0x61 - 0x7A - // excluding 0x40. - aDestination.Append(unpackedSrc[i]); - } - else if ( unpackedSrc[i] == 0x1B ) - { - //0x1B is an escape code to the extension table. Code after escape - //code should been found from extension table. - - i++; - - //It is possible that extension table contains escape code to - //another extension table. Increase index i until we find something - //else than another escape code. - for (; i < unpackedLength; i++) - { - if ( unpackedSrc[i] != 0x1B ) - { - //Found something else than escape code. Let's convert - //character from extension table to Unicode character. - TBool notFound( ETrue ); - - for ( j = 0 ; j < KGsmExtensionConvTableSize; j++ ) - { - if ( unpackedSrc[i] == - KGsmExtensionConvTable[j].iGsmChar ) - { - aDestination.Append( - KGsmExtensionConvTable[j].iUnicodeChar ); - notFound = EFalse; - break; - } - } - - if ( notFound ) - { - //Couldn't find character from extension table. - //Convert to SPACE. - aDestination.Append( 0x20 ); - } - - break; - } - else - { - //Found escape code to another to another extension table. - //On receipt of this code, a receiving entity shall display - //a space until another extension table is defined. - aDestination.Append( 0x20 ); - } - } // end of for loop - } // end of else if - else - { - //Find character from conversion table. - for ( j = 0; j < KGsmLibConvTableSize; j++ ) - { - if ( unpackedSrc[i] == KGsmLibConvTable[j].iGsmChar ) - { - aDestination.Append( - KGsmLibConvTable[j].iUnicodeChar ); - break; - } - } // end of for loop - } // end of else - } // end of for loop - } - -// ----------------------------------------------------------------------------- -// CSMS::GsmLibPackAlphanumericAddress -// This function packs a given text string consisting of 7-bit -// characters into 8 bit bytes in such a way that a 11-character -// address takes only 10 bytes of memory after the compression -// ----------------------------------------------------------------------------- -// -TUint8 CSMS::GsmLibPackAlphanumericAddress( - TDes8 &aDest, // Packed address - TDes8 &aSource // Unpacked address - ) - { - TUint8 si( 0 ); - TUint8 di( 0 ); - TUint tempModulo; - - // Set tempModulo and byteCount - tempModulo = di % 7; - TUint8 byteCount = (TUint8)aSource.Length(); - - // Maximum length of address data field is 10 bytes. 10 bytes can contain - // 11 compressed 7-bit characters. Because of this maximum - // amount of characters in alphanumeric address is 11. - if ( byteCount > ( KMaxLengthOfAddressData + 1 ) ) - { - byteCount = KMaxLengthOfAddressData + 1; - } - - while ( si < byteCount ) - { - // Is this the last character of the message - // If it is, just shift it to the right. Otherwise, - // fill the rest of the byte with the bits of the next - // source character. - - if ( si == (byteCount - 1) ) - { - TUint num2 = ( aSource[si] >> tempModulo ); - aDest.Append( num2 ); - } - else - { - TUint num2 = ( aSource[si] >> tempModulo ) | - ( aSource[si + 1] << ( 7 - tempModulo ) ); - aDest.Append( num2 ); - } - - di++; - tempModulo = di % 7; - - // Check if the destination byte could take the entire source character. - // In that case, the source character does not have to be divided and - // the next source character can be taken. - - if ( tempModulo == 0) - { - si += 2; - } - else - { - si++; - } - } - - // Return the length of the coded message. - return byteCount; - } - -// ----------------------------------------------------------------------------- -// CSMS::GsmLibUnpackAlphanumericAddress -// This function decodes a address that has been coded using -// the algorithm described in GSM 03.40 annex 2. The result string will -// consist of bytes that contain a 7-bit character each -// ----------------------------------------------------------------------------- -// -void CSMS::GsmLibUnpackAlphanumericAddress( - TDesC8 &aSource, // Packed address data - TUint aAmountOfChars, // Amount of characters in address data - TDes8 &aDest // Unpacked address data - ) - { - TUint8 di( 0 ); - TUint8 si( 0 ); - TUint tempModulo; - - // Maximum length of address data field is 10 bytes. 10 bytes can contain - // 11 compressed 7-bit characters. Because of this maximum - // amount of characters in alphanumeric address is 11. - if ( aAmountOfChars > ( KMaxLengthOfAddressData + 1 ) ) - { - aAmountOfChars = KMaxLengthOfAddressData + 1; - } - - // The location of the current 7-bit character determines the - // action to be taken. Only every 7th character is not divided into - // two bytes. All other characters will have to be contructed by - // combining bits of two consequent bytes. - - for ( di = 0; di < aAmountOfChars; di++ ) - { - TUint num2 = 0; - tempModulo = di % 8; - switch ( tempModulo ) - { - case 0: - num2 = aSource[si] & 0x7F; - break; - case 7: - num2 = ( aSource[si] >> 1 ) & 0x7F; - si++; - break; - default: - num2 = aSource[si] >> ( 8 - tempModulo ); - num2 &= KGsmLibSmsUnpackMaskTable[ tempModulo ]; - num2 |= aSource[si+1] << ( tempModulo ); - num2 &= 0x7F; - si++; - break; - } - aDest.Append( num2 ); - } - } - -// ========================== OTHER EXPORTED FUNCTIONS ========================= -// None - -// End of File