--- a/telephonyserverplugins/multimodetsy/Multimode/Mownnum.cpp Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/multimodetsy/Multimode/Mownnum.cpp Thu May 06 15:10:38 2010 +0100
@@ -1,400 +1,400 @@
-// Copyright (c) 2000-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:
-// Deal with Network & Operator information
-//
-//
-
-#include <et_phone.h>
-#include "Mownnum.h"
-#include "mSLOGGER.H"
-#include "ATIO.H"
-#include "Matstd.h"
-#include <etelmm.h>
-#include <mmlist.h>
-#include "et_phone_util.h"
-
-// Get the own numbers from the phone
-// NB - not supported by all phones.
-
-_LIT8(KGetOwnNumbersCommand,"AT+CNUM");
-_LIT8(KGetOwnNumbersResponse,"+CNUM");
-
-CATOwnNumbers::CATOwnNumbers(CATIO* aIo, CTelObject* aTelObject, CATInit* aInit,CPhoneGlobals* aPhoneGlobals)
- : CATCommands(aIo,aTelObject,aInit,aPhoneGlobals)
- {}
-
-CATOwnNumbers* CATOwnNumbers::NewL(CATIO* aIo,CTelObject* aTelObject,CATInit* aInit,CPhoneGlobals* aPhoneGlobals)
- {
- CATOwnNumbers* self = new(ELeave) CATOwnNumbers(aIo, aTelObject, aInit, aPhoneGlobals);
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop();
- return self;
- }
-
-CATOwnNumbers::~CATOwnNumbers()
- {
- if (iIo != NULL)
- {
- iIo->RemoveExpectStrings(this);
- }
- delete iOwnNumbers;
- }
-
-void CATOwnNumbers::Start(TTsyReqHandle aTsyReqHandle, TAny* /*aParam*/)
- {
- LOGTEXT(_L8("MMTsy:\tCATOwnNumbers:\tStarting Get Own Number"));
- iReqHandle = aTsyReqHandle;
- WriteExpectingResults(KGetOwnNumbersCommand, 3);
- __ASSERT_ALWAYS(iIo->AddExpectString(this,KNotifyMeIfErrorString) != NULL,Panic(EGeneral));
- iState=EATImsiWaitForWriteComplete;
- }
-
-void CATOwnNumbers::EventSignal(TEventSource aSource)
- {
- if (aSource==ETimeOutCompletion)
- {
- LOGTEXT(_L8("MMTsy:\tCATOwnNumbers:\tTimeout Error during Get Own Number read"));
- RemoveStdExpectStrings();
- Complete(KErrTimedOut,aSource);
- return;
- }
-
- switch(iState)
- {
- case EATImsiWaitForWriteComplete:
- __ASSERT_ALWAYS(aSource==EWriteCompletion,Panic(EATCommand_IllegalCompletionWriteExpected));
- {
- iIo->WriteAndTimerCancel(this);
- StandardWriteCompletionHandler(aSource, 5);
- iState=EATImsiReadComplete;
- }
- break;
-
- case EATImsiReadComplete:
- __ASSERT_ALWAYS(aSource==EReadCompletion,Panic(EATCommand_IllegalCompletionReadExpected));
- {
- iIo->WriteAndTimerCancel(this);
- TInt ret(ValidateExpectString());
- RemoveStdExpectStrings();
- if (ret==KErrNone)
- TRAP(ret,ParseResponseL());
- Complete(ret,aSource);
- }
- break;
-
- case EATWaitForStopState:
- __ASSERT_ALWAYS(aSource==EReadCompletion, Panic(EATCommand_IllegalCompletionReadExpected));
- {
- iIo->WriteAndTimerCancel(this);
- Complete(KErrCancel, aSource);
- }
- break;
-
-
- default:
- break;
- }//switch
- }//EventSignal
-
-void CATOwnNumbers::Stop(TTsyReqHandle aTsyReqHandle)
- {
- if(iReqHandle == TSY_HANDLE_INIT_VALUE) // default value
- {
- // it seems the Own numbers service has not been started
- // just return
- LOGTEXT(_L8("MMTsy:\tCATOwnNumbers:\tCancel called, Error - invalid request handle."));
- return;
- }
-
- __ASSERT_ALWAYS(aTsyReqHandle == iReqHandle, Panic(EIllegalTsyReqHandle));
- LOGTEXT(_L8("MMTsy:\tCATOwnNumbers:\tCancel called."));
- switch(iState)
- {
- case EATNotInProgress:
- case EATImsiWaitForWriteComplete:
- {
- LOGTEXT2(_L8("Current state TSY is cancelling from %d"), iState);
- Complete(KErrCancel, EReadCompletion);
- }
- break;
-
- default:
- {
- LOGTEXT(_L8("MMTsy:\tCATOwnNumbers:\tStop, now waiting for expected modem response"));
- AddStdExpectStrings();
- iIo->SetTimeOut(this);
- iState = EATWaitForStopState;
- }
- break;
-
- }
- }
-
-
-void CATOwnNumbers::Complete(TInt aError,TEventSource aSource)
- {
- if (aError==KErrNone || aError==KErrNotFound)
- iState = EATCompleted;
- else if (aError==KErrGeneral)
- {
- iState = EATNotSupported;
- aError = KErrNotSupported;
- }
- else
- iState = EATNotInProgress;
- iIo->WriteAndTimerCancel(this);
- iIo->RemoveExpectStrings(this);
- iOKExpectString = NULL;
- iErrorExpectString = NULL;
- CATCommands::Complete(aError,aSource);
- LOGTEXT2(_L8("GsmTsy:CATOwnNumbers:\tCATOwnNumbers completed with error code : %d"), aError);
- iTelObject->ReqCompleted(iReqHandle, aError);
- if (aSource==EWriteCompletion)
- iIo->Read();
- }
-
-void CATOwnNumbers::CompleteWithIOError(TEventSource /*aSource*/,TInt aStatus)
- {
- if (iState!=EATNotInProgress)
- {
- iIo->WriteAndTimerCancel(this);
- iState = EATNotInProgress;
- iTelObject->ReqCompleted(iReqHandle, aStatus);
- }
- }
-
-void CATOwnNumbers::ParseResponseL()
- {
-// +CNUM: [text],number,type[,speed,service[,itc]]
-// etc.
-
-
- CMobilePhoneONList* oNList=CMobilePhoneONList::NewL();
- CleanupStack::PushL(oNList);
-
-//
- ParseBufferLC(EFalse, ':');
-//
-
- TDblQueIter<CATParamListEntry> iter(iRxResults);
- CATParamListEntry* entry=iter++;
- while (entry)
- {
- if (entry->iResultPtr!=KGetOwnNumbersResponse)
- User::Leave(KErrGeneral);
- //
- // provide some default values
- RMobileONStore::TMobileONEntryV1 info;
- info.iMode = RMobilePhone::ENetworkModeGsm; // Hard coded since this tsy just handles GSM.
-
- entry=iter++;
- if (!entry)
- User::Leave(KErrGeneral);
- info.iText.Copy(entry->iResultPtr);
-
- entry=iter++;
- if (!entry)
- User::Leave(KErrGeneral);
- info.iNumber.iTelNumber.Copy(entry->iResultPtr);
-
- entry=iter++;
- info.iNumber.iTypeOfNumber = NumberTypefromGSMToMM(CATParamListEntry::EntryValL(entry)); // How is this to be used
-
- // now the optional values
- entry=iter++;
- if (entry && entry->iResultPtr!=KGetOwnNumbersResponse)
- {
- //The baerer speed that should have been set here is not supported in the TMobileONEntryV1 class
- entry=iter++;
- TInt service=CATParamListEntry::EntryValL(entry);
- switch (service)
-
- {
- case KServiceVoice:
- info.iService = RMobilePhone::EVoiceService;
- break;
- case KServiceFax:
- info.iService = RMobilePhone::EFaxService;
- break;
- case KAsynchModem:
- case KSynchModem:
- case KPADAccess:
- case KPacketAccess:
- info.iService = RMobilePhone::ECircuitDataService;
- break;
-
- default:
- info.iService = RMobilePhone::EServiceUnspecified;
- break;
- }
- //
- // further optionality
- entry=iter++;
- if (entry && entry->iResultPtr!=KGetOwnNumbersResponse)
- {
- // Information about the transfer capabilities are not used in
- // TMobileONEntryV1(the "itc" field is optionaly reurned by AT+CNUM).
- // If it had been available it hade been set here.
- entry=iter++;
- }
- }
- oNList->AddEntryL(info);
- }
-
- CleanupStack::PopAndDestroy(); // results
- CleanupStack::Pop(); // numbers
- iOwnNumbers = oNList;
-
- switch (iCommand)
- {
- case EInfo:
- Info();
- break;
- case EEntry:
- (void)User::LeaveIfError(Entry(iResultIndex));
- break;
- }
- }
-
-void CATOwnNumbers::Info() const
-/**
- * This method sets the information about the own number store to be passed
- * back to the client with cached inforamtion.
- */
- {
- RMobilePhoneStore::TMobilePhoneStoreInfoV1& storeInfo = (*iInfoPckg)();
-
- storeInfo.iType=RMobilePhoneStore::EOwnNumberStore;
- storeInfo.iUsedEntries = iOwnNumbers->Enumerate();
- storeInfo.iTotalEntries = iOwnNumbers->Enumerate();
- storeInfo.iName.Copy(KETelOwnNumberStore);
- storeInfo.iCaps=RMobilePhoneStore::KCapsIndividualEntry | RMobilePhoneStore::KCapsReadAccess;
-
- if (storeInfo.ExtensionId()==RMobilePhoneStore::KETelMobileONStoreV1)
- {
- RMobileONStore::TMobileONStoreInfoV1Pckg* onPckg
- = reinterpret_cast<RMobileONStore::TMobileONStoreInfoV1Pckg*>(iInfoPckg);
- RMobileONStore::TMobileONStoreInfoV1& onInfo = (*onPckg)();
- onInfo.iNumberLen=RMobilePhone::KMaxMobileTelNumberSize;
- onInfo.iTextLen=RMobileONStore::KOwnNumberTextSize;
- }
- }
-
-TInt CATOwnNumbers::Entry(TInt aIndex) const
-/**
- * This method returnes the own number specified by aIndex.
- * If aIndex should be out of range KErrNotFound is returned.
- */
- {
- __ASSERT_DEBUG(iOwnNumbers!= NULL, PanicClient(KErrGeneral));
-
- RMobileONStore::TMobileONEntryV1& oNEntry = (*iEntryPckg)();
- if (TUint(aIndex)>=TUint(iOwnNumbers->Enumerate()))
- {
- // If the index is out of range
- return KErrNotFound;
- }
-
- // Get the entry specified by the aIndex.
- TRAPD(ret,(oNEntry = iOwnNumbers->GetEntryL(aIndex)));
-
- return ret;
- }
-
-
-void CATOwnNumbers::GetInfo(TTsyReqHandle aTsyReqHandle, TDes8* aInfo)
-/**
- * Execute the command if we have not yet been run
- * Report the own number info if we have already evaluated them
- */
- {
- iInfoPckg=static_cast<RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg*>(aInfo);
- switch (iState)
- {
- case EATCompleted:
- Info();
- iTelObject->ReqCompleted(aTsyReqHandle, KErrNone);
- break;
- case EATNotSupported:
- iTelObject->ReqCompleted(aTsyReqHandle, KErrNotSupported);
- break;
- default:
- iCommand=EInfo;
- ExecuteCommand(aTsyReqHandle,aInfo);
- break;
- }
- }
-
-
-void CATOwnNumbers::GetEntry(TTsyReqHandle aTsyReqHandle, TDes8* aEntry)
-/**
- * Execute the command if we have not yet been run.
- * @param aTsyReqHandle The request ID
- * @param aEntry This argument is of type TMobileONEntryV1Pckg.
- */
- {
- // Unpack the the TMobileONEntryV1 (aEntry)
- iEntryPckg = static_cast<RMobileONStore::TMobileONEntryV1Pckg*>(aEntry);
- RMobileONStore::TMobileONEntryV1& oNEntry = (*iEntryPckg)();
-
- // Extract the index of the own number to get.
- // Subtract 1 because SIM slots start at 1 but our list will start at 0
- // Client has asked for SIM slot number
- iResultIndex = oNEntry.iIndex - 1 ;
-
- switch (iState)
- {
- case EATCompleted:
- {
- TInt r=Entry(iResultIndex);
- if (r!=KErrNone)
- {
- iTelObject->ReqCompleted(aTsyReqHandle, r);
- return;
- }
- iTelObject->ReqCompleted(aTsyReqHandle, KErrNone);
- }
- break;
- case EATNotSupported:
- iTelObject->ReqCompleted(aTsyReqHandle, KErrNotSupported);
- break;
- default:
- iCommand=EEntry;
- ExecuteCommand(aTsyReqHandle, &oNEntry);
- break;
- }
- }//End of GetEntry
-
-
-RMobilePhone::TMobileTON CATOwnNumbers::NumberTypefromGSMToMM(TUint aTypeOfNumberGSM)
-/** Maping from MM Number Type To GSM Number Type
- *
- * This method maps the GSM way of representing a type of telefon number
- * to the MM standard.
- *
- */
- {
- switch (aTypeOfNumberGSM)
- {
- case 129: // Nationality unknown (GSM)
- return RMobilePhone::EUnknownNumber; // (MM)
- case 145: // International Number (GSM)
- return RMobilePhone::EInternationalNumber; // (MM)
- case 161: // National Number (GSM)
- return RMobilePhone::ENationalNumber; // (MM)
- default:
- return RMobilePhone::EUnknownNumber; // (MM)
- }
- }
+// Copyright (c) 2000-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:
+// Deal with Network & Operator information
+//
+//
+
+#include <et_phone.h>
+#include "Mownnum.h"
+#include "mSLOGGER.H"
+#include "ATIO.H"
+#include "Matstd.h"
+#include <etelmm.h>
+#include <mmlist.h>
+#include "et_phone_util.h"
+
+// Get the own numbers from the phone
+// NB - not supported by all phones.
+
+_LIT8(KGetOwnNumbersCommand,"AT+CNUM");
+_LIT8(KGetOwnNumbersResponse,"+CNUM");
+
+CATOwnNumbers::CATOwnNumbers(CATIO* aIo, CTelObject* aTelObject, CATInit* aInit,CPhoneGlobals* aPhoneGlobals)
+ : CATCommands(aIo,aTelObject,aInit,aPhoneGlobals)
+ {}
+
+CATOwnNumbers* CATOwnNumbers::NewL(CATIO* aIo,CTelObject* aTelObject,CATInit* aInit,CPhoneGlobals* aPhoneGlobals)
+ {
+ CATOwnNumbers* self = new(ELeave) CATOwnNumbers(aIo, aTelObject, aInit, aPhoneGlobals);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+CATOwnNumbers::~CATOwnNumbers()
+ {
+ if (iIo != NULL)
+ {
+ iIo->RemoveExpectStrings(this);
+ }
+ delete iOwnNumbers;
+ }
+
+void CATOwnNumbers::Start(TTsyReqHandle aTsyReqHandle, TAny* /*aParam*/)
+ {
+ LOGTEXT(_L8("MMTsy:\tCATOwnNumbers:\tStarting Get Own Number"));
+ iReqHandle = aTsyReqHandle;
+ WriteExpectingResults(KGetOwnNumbersCommand, 3);
+ __ASSERT_ALWAYS(iIo->AddExpectString(this,KNotifyMeIfErrorString) != NULL,Panic(EGeneral));
+ iState=EATImsiWaitForWriteComplete;
+ }
+
+void CATOwnNumbers::EventSignal(TEventSource aSource)
+ {
+ if (aSource==ETimeOutCompletion)
+ {
+ LOGTEXT(_L8("MMTsy:\tCATOwnNumbers:\tTimeout Error during Get Own Number read"));
+ RemoveStdExpectStrings();
+ Complete(KErrTimedOut,aSource);
+ return;
+ }
+
+ switch(iState)
+ {
+ case EATImsiWaitForWriteComplete:
+ __ASSERT_ALWAYS(aSource==EWriteCompletion,Panic(EATCommand_IllegalCompletionWriteExpected));
+ {
+ iIo->WriteAndTimerCancel(this);
+ StandardWriteCompletionHandler(aSource, 5);
+ iState=EATImsiReadComplete;
+ }
+ break;
+
+ case EATImsiReadComplete:
+ __ASSERT_ALWAYS(aSource==EReadCompletion,Panic(EATCommand_IllegalCompletionReadExpected));
+ {
+ iIo->WriteAndTimerCancel(this);
+ TInt ret(ValidateExpectString());
+ RemoveStdExpectStrings();
+ if (ret==KErrNone)
+ TRAP(ret,ParseResponseL());
+ Complete(ret,aSource);
+ }
+ break;
+
+ case EATWaitForStopState:
+ __ASSERT_ALWAYS(aSource==EReadCompletion, Panic(EATCommand_IllegalCompletionReadExpected));
+ {
+ iIo->WriteAndTimerCancel(this);
+ Complete(KErrCancel, aSource);
+ }
+ break;
+
+
+ default:
+ break;
+ }//switch
+ }//EventSignal
+
+void CATOwnNumbers::Stop(TTsyReqHandle aTsyReqHandle)
+ {
+ if(iReqHandle == TSY_HANDLE_INIT_VALUE) // default value
+ {
+ // it seems the Own numbers service has not been started
+ // just return
+ LOGTEXT(_L8("MMTsy:\tCATOwnNumbers:\tCancel called, Error - invalid request handle."));
+ return;
+ }
+
+ __ASSERT_ALWAYS(aTsyReqHandle == iReqHandle, Panic(EIllegalTsyReqHandle));
+ LOGTEXT(_L8("MMTsy:\tCATOwnNumbers:\tCancel called."));
+ switch(iState)
+ {
+ case EATNotInProgress:
+ case EATImsiWaitForWriteComplete:
+ {
+ LOGTEXT2(_L8("Current state TSY is cancelling from %d"), iState);
+ Complete(KErrCancel, EReadCompletion);
+ }
+ break;
+
+ default:
+ {
+ LOGTEXT(_L8("MMTsy:\tCATOwnNumbers:\tStop, now waiting for expected modem response"));
+ AddStdExpectStrings();
+ iIo->SetTimeOut(this);
+ iState = EATWaitForStopState;
+ }
+ break;
+
+ }
+ }
+
+
+void CATOwnNumbers::Complete(TInt aError,TEventSource aSource)
+ {
+ if (aError==KErrNone || aError==KErrNotFound)
+ iState = EATCompleted;
+ else if (aError==KErrGeneral)
+ {
+ iState = EATNotSupported;
+ aError = KErrNotSupported;
+ }
+ else
+ iState = EATNotInProgress;
+ iIo->WriteAndTimerCancel(this);
+ iIo->RemoveExpectStrings(this);
+ iOKExpectString = NULL;
+ iErrorExpectString = NULL;
+ CATCommands::Complete(aError,aSource);
+ LOGTEXT2(_L8("GsmTsy:CATOwnNumbers:\tCATOwnNumbers completed with error code : %d"), aError);
+ iTelObject->ReqCompleted(iReqHandle, aError);
+ if (aSource==EWriteCompletion)
+ iIo->Read();
+ }
+
+void CATOwnNumbers::CompleteWithIOError(TEventSource /*aSource*/,TInt aStatus)
+ {
+ if (iState!=EATNotInProgress)
+ {
+ iIo->WriteAndTimerCancel(this);
+ iState = EATNotInProgress;
+ iTelObject->ReqCompleted(iReqHandle, aStatus);
+ }
+ }
+
+void CATOwnNumbers::ParseResponseL()
+ {
+// +CNUM: [text],number,type[,speed,service[,itc]]
+// etc.
+
+
+ CMobilePhoneONList* oNList=CMobilePhoneONList::NewL();
+ CleanupStack::PushL(oNList);
+
+//
+ ParseBufferLC(EFalse, ':');
+//
+
+ TDblQueIter<CATParamListEntry> iter(iRxResults);
+ CATParamListEntry* entry=iter++;
+ while (entry)
+ {
+ if (entry->iResultPtr!=KGetOwnNumbersResponse)
+ User::Leave(KErrGeneral);
+ //
+ // provide some default values
+ RMobileONStore::TMobileONEntryV1 info;
+ info.iMode = RMobilePhone::ENetworkModeGsm; // Hard coded since this tsy just handles GSM.
+
+ entry=iter++;
+ if (!entry)
+ User::Leave(KErrGeneral);
+ info.iText.Copy(entry->iResultPtr);
+
+ entry=iter++;
+ if (!entry)
+ User::Leave(KErrGeneral);
+ info.iNumber.iTelNumber.Copy(entry->iResultPtr);
+
+ entry=iter++;
+ info.iNumber.iTypeOfNumber = NumberTypefromGSMToMM(CATParamListEntry::EntryValL(entry)); // How is this to be used
+
+ // now the optional values
+ entry=iter++;
+ if (entry && entry->iResultPtr!=KGetOwnNumbersResponse)
+ {
+ //The baerer speed that should have been set here is not supported in the TMobileONEntryV1 class
+ entry=iter++;
+ TInt service=CATParamListEntry::EntryValL(entry);
+ switch (service)
+
+ {
+ case KServiceVoice:
+ info.iService = RMobilePhone::EVoiceService;
+ break;
+ case KServiceFax:
+ info.iService = RMobilePhone::EFaxService;
+ break;
+ case KAsynchModem:
+ case KSynchModem:
+ case KPADAccess:
+ case KPacketAccess:
+ info.iService = RMobilePhone::ECircuitDataService;
+ break;
+
+ default:
+ info.iService = RMobilePhone::EServiceUnspecified;
+ break;
+ }
+ //
+ // further optionality
+ entry=iter++;
+ if (entry && entry->iResultPtr!=KGetOwnNumbersResponse)
+ {
+ // Information about the transfer capabilities are not used in
+ // TMobileONEntryV1(the "itc" field is optionaly reurned by AT+CNUM).
+ // If it had been available it hade been set here.
+ entry=iter++;
+ }
+ }
+ oNList->AddEntryL(info);
+ }
+
+ CleanupStack::PopAndDestroy(); // results
+ CleanupStack::Pop(); // numbers
+ iOwnNumbers = oNList;
+
+ switch (iCommand)
+ {
+ case EInfo:
+ Info();
+ break;
+ case EEntry:
+ (void)User::LeaveIfError(Entry(iResultIndex));
+ break;
+ }
+ }
+
+void CATOwnNumbers::Info() const
+/**
+ * This method sets the information about the own number store to be passed
+ * back to the client with cached inforamtion.
+ */
+ {
+ RMobilePhoneStore::TMobilePhoneStoreInfoV1& storeInfo = (*iInfoPckg)();
+
+ storeInfo.iType=RMobilePhoneStore::EOwnNumberStore;
+ storeInfo.iUsedEntries = iOwnNumbers->Enumerate();
+ storeInfo.iTotalEntries = iOwnNumbers->Enumerate();
+ storeInfo.iName.Copy(KETelOwnNumberStore);
+ storeInfo.iCaps=RMobilePhoneStore::KCapsIndividualEntry | RMobilePhoneStore::KCapsReadAccess;
+
+ if (storeInfo.ExtensionId()==RMobilePhoneStore::KETelMobileONStoreV1)
+ {
+ RMobileONStore::TMobileONStoreInfoV1Pckg* onPckg
+ = reinterpret_cast<RMobileONStore::TMobileONStoreInfoV1Pckg*>(iInfoPckg);
+ RMobileONStore::TMobileONStoreInfoV1& onInfo = (*onPckg)();
+ onInfo.iNumberLen=RMobilePhone::KMaxMobileTelNumberSize;
+ onInfo.iTextLen=RMobileONStore::KOwnNumberTextSize;
+ }
+ }
+
+TInt CATOwnNumbers::Entry(TInt aIndex) const
+/**
+ * This method returnes the own number specified by aIndex.
+ * If aIndex should be out of range KErrNotFound is returned.
+ */
+ {
+ __ASSERT_DEBUG(iOwnNumbers!= NULL, PanicClient(KErrGeneral));
+
+ RMobileONStore::TMobileONEntryV1& oNEntry = (*iEntryPckg)();
+ if (TUint(aIndex)>=TUint(iOwnNumbers->Enumerate()))
+ {
+ // If the index is out of range
+ return KErrNotFound;
+ }
+
+ // Get the entry specified by the aIndex.
+ TRAPD(ret,(oNEntry = iOwnNumbers->GetEntryL(aIndex)));
+
+ return ret;
+ }
+
+
+void CATOwnNumbers::GetInfo(TTsyReqHandle aTsyReqHandle, TDes8* aInfo)
+/**
+ * Execute the command if we have not yet been run
+ * Report the own number info if we have already evaluated them
+ */
+ {
+ iInfoPckg=static_cast<RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg*>(aInfo);
+ switch (iState)
+ {
+ case EATCompleted:
+ Info();
+ iTelObject->ReqCompleted(aTsyReqHandle, KErrNone);
+ break;
+ case EATNotSupported:
+ iTelObject->ReqCompleted(aTsyReqHandle, KErrNotSupported);
+ break;
+ default:
+ iCommand=EInfo;
+ ExecuteCommand(aTsyReqHandle,aInfo);
+ break;
+ }
+ }
+
+
+void CATOwnNumbers::GetEntry(TTsyReqHandle aTsyReqHandle, TDes8* aEntry)
+/**
+ * Execute the command if we have not yet been run.
+ * @param aTsyReqHandle The request ID
+ * @param aEntry This argument is of type TMobileONEntryV1Pckg.
+ */
+ {
+ // Unpack the the TMobileONEntryV1 (aEntry)
+ iEntryPckg = static_cast<RMobileONStore::TMobileONEntryV1Pckg*>(aEntry);
+ RMobileONStore::TMobileONEntryV1& oNEntry = (*iEntryPckg)();
+
+ // Extract the index of the own number to get.
+ // Subtract 1 because SIM slots start at 1 but our list will start at 0
+ // Client has asked for SIM slot number
+ iResultIndex = oNEntry.iIndex - 1 ;
+
+ switch (iState)
+ {
+ case EATCompleted:
+ {
+ TInt r=Entry(iResultIndex);
+ if (r!=KErrNone)
+ {
+ iTelObject->ReqCompleted(aTsyReqHandle, r);
+ return;
+ }
+ iTelObject->ReqCompleted(aTsyReqHandle, KErrNone);
+ }
+ break;
+ case EATNotSupported:
+ iTelObject->ReqCompleted(aTsyReqHandle, KErrNotSupported);
+ break;
+ default:
+ iCommand=EEntry;
+ ExecuteCommand(aTsyReqHandle, &oNEntry);
+ break;
+ }
+ }//End of GetEntry
+
+
+RMobilePhone::TMobileTON CATOwnNumbers::NumberTypefromGSMToMM(TUint aTypeOfNumberGSM)
+/** Maping from MM Number Type To GSM Number Type
+ *
+ * This method maps the GSM way of representing a type of telefon number
+ * to the MM standard.
+ *
+ */
+ {
+ switch (aTypeOfNumberGSM)
+ {
+ case 129: // Nationality unknown (GSM)
+ return RMobilePhone::EUnknownNumber; // (MM)
+ case 145: // International Number (GSM)
+ return RMobilePhone::EInternationalNumber; // (MM)
+ case 161: // National Number (GSM)
+ return RMobilePhone::ENationalNumber; // (MM)
+ default:
+ return RMobilePhone::EUnknownNumber; // (MM)
+ }
+ }