diff -r 1934667b0e2b -r 4b59561a31c0 cbsatplugin/atmisccmdplugin/src/scpbwcommandhandler.cpp --- a/cbsatplugin/atmisccmdplugin/src/scpbwcommandhandler.cpp Wed Sep 15 12:23:51 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,616 +0,0 @@ -/* - * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * Description : - * - */ - -#include "scpbwcommandhandler.h" -#include -#include -#include - -#include "atmisccmdpluginconsts.h" -#include "debug.h" - -const TInt KMaxContactEntrySize = 512; -const TInt KMaxTextLength = 64; -const TInt KMaxNumberLength = 64; -const TInt KMaxEmailLength = 64; - -CSCPBWCommandHandler* CSCPBWCommandHandler::NewL(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone) - { - TRACE_FUNC_ENTRY - CSCPBWCommandHandler* self = new (ELeave) CSCPBWCommandHandler(aCallback, aATCmdParser, aPhone); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - TRACE_FUNC_EXIT - return self; - } - -CSCPBWCommandHandler::CSCPBWCommandHandler(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone) : - CATCmdAsyncBase(aCallback, aATCmdParser, aPhone) - { - TRACE_FUNC_ENTRY - TRACE_FUNC_EXIT - } - -void CSCPBWCommandHandler::ConstructL() - { - TRACE_FUNC_ENTRY - - TInt err = iPhoneBookStore.Open(iPhone, KETelIccAdnPhoneBook); - if (err != KErrNone) - { - iState = ESCPBWStateSimStoreNotSupported; - TRACE_FUNC_EXIT - return; - } - err = iMmCustomAPI.Open(iPhone); - if (err != KErrNone) - { - iPhoneBookStore.Close(); - iState = ESCPBWStateSimStoreNotSupported; - TRACE_FUNC_EXIT - return; - } - iPhoneBookBuffer = new (ELeave) CPhoneBookBuffer; - - iReply.CreateL(KDefaultCmdBufLength); - iNum1.CreateL(KMaxNumberLength); - iNum2.CreateL(KMaxNumberLength); - iNum3.CreateL(KMaxNumberLength); - iNum4.CreateL(KMaxNumberLength); - iText.CreateL(KMaxTextLength); - iEmail.CreateL(KMaxEmailLength); - iPbData.CreateL(KMaxContactEntrySize); - - TRACE_FUNC_EXIT - } - -CSCPBWCommandHandler::~CSCPBWCommandHandler() - { - TRACE_FUNC_ENTRY - Cancel(); - delete iPhoneBookBuffer; - iPhoneBookStore.Close(); - iMmCustomAPI.Close(); - iPbData.Close(); - iReply.Close(); - iNum1.Close(); - iNum2.Close(); - iNum3.Close(); - iNum4.Close(); - iText.Close(); - iEmail.Close(); - TRACE_FUNC_EXIT - } - -void CSCPBWCommandHandler::HandleCommand(const TDesC8& /*aCmd*/, RBuf8& /*aReply*/, TBool /*aReplyNeeded*/) - { - TRACE_FUNC_ENTRY - - if (iState != ESCPBWStateIdle) - { - // Reply "ERROR" if handler is not in idle - iCallback->CreateReplyAndComplete(EReplyTypeError); - TRACE_FUNC_EXIT - return; - } - TInt err = KErrNone; - - TAtCommandParser::TCommandHandlerType cmdHandlerType = iATCmdParser.CommandHandlerType(); - - switch (cmdHandlerType) - { - case (TAtCommandParser::ECmdHandlerTypeTest): - { - if (iMaxEntries == 0) - { - RMobilePhoneBookStore::TMobilePhoneBookInfoV1Pckg pckg(iPhoneBookStoreInfo); - iPhoneBookStore.GetInfo(iStatus, pckg); - iState = ESCPBWStateGetPhonebookInfo; - SetActive(); - } - else if (iEmailLength == 0) - { - iState = ESCPBWStateGet3GPBInfo; - iMmCustomAPI.Get3GPBInfo(iStatus, i3GPBInfo); - SetActive(); - } - else - { - // Phonebook info has been obtained - iReply.Zero(); - iReply.Format(KSCPBWSupportedCmdsList, iMaxEntries, iNumLength, iTextLength, iEmailLength); - iCallback->CreateReplyAndComplete( EReplyTypeOk, iReply ); - } - } - break; - case (TAtCommandParser::ECmdHandlerTypeSet): - { - ResetParameters(); - TBool isDeleteRequest = EFalse; - err = ParseParameters(isDeleteRequest); - Trace(_L("Parse completed, err = %d"), err); - if (isDeleteRequest) - { - // Delete entry at iIndex - iState = ESCPBWStateDelete; - iPhoneBookStore.Delete(iStatus, iIndex); - SetActive(); - } - else if (err == KErrNone) - { - // Create an entry - err = CreateContactEntry(); - if (err == KErrNone) - { - iPhoneBookStore.Write(iStatus, iPbData, iIndex); - iState = ESCPBWStateWrite; - SetActive(); - } - else - { - iCallback->CreateReplyAndComplete( EReplyTypeError ); - } - } - else - { - iCallback->CreateReplyAndComplete( EReplyTypeError ); - } - break; - } - default: - { - iCallback->CreateReplyAndComplete( EReplyTypeError ); - break; - } - } - - TRACE_FUNC_EXIT - } - -void CSCPBWCommandHandler::RunL() - { - TRACE_FUNC_ENTRY - - iReply.Zero(); - TInt err = iStatus.Int(); - Trace(_L("State = %d, err = %d"), iState, err); - - if (err == KErrNone) - { - switch (iState) - { - case ESCPBWStateGetPhonebookInfo: - { - Trace(_L("Get info successful.")); - iNumLength = iPhoneBookStoreInfo.iMaxNumLength; - iTextLength = iPhoneBookStoreInfo.iMaxTextLength; - iMaxEntries = iPhoneBookStoreInfo.iTotalEntries; - if (iEmailLength == 0) - { - iMmCustomAPI.Get3GPBInfo(iStatus, i3GPBInfo); - iState = ESCPBWStateGet3GPBInfo; - SetActive(); - } - else - { - iReply.Format(KSCPBWSupportedCmdsList, iMaxEntries, iNumLength, iTextLength, iEmailLength); - iCallback->CreateReplyAndComplete(EReplyTypeOk, iReply); - iState = ESCPBWStateIdle; - } - } - break; - case ESCPBWStateGet3GPBInfo: - { - Trace(_L("Get 3GPB info successful.")); - iEmailLength = i3GPBInfo.iMaxLenEmail; - iReply.Format(KSCPBWSupportedCmdsList, iMaxEntries, iNumLength, iTextLength, iEmailLength); - iCallback->CreateReplyAndComplete(EReplyTypeOk, iReply); - iState = ESCPBWStateIdle; - } - break; - case ESCPBWStateWrite: - { - Trace(_L("Write successful. Index = %d"), iIndex); - iCallback->CreateReplyAndComplete(EReplyTypeOk); - iState = ESCPBWStateIdle; - } - break; - case ESCPBWStateDelete: - { - Trace(_L("Delete successful.")); - iCallback->CreateReplyAndComplete(EReplyTypeOk); - iState = ESCPBWStateIdle; - } - break; - default: - { - iState = ESCPBWStateIdle; - iCallback->CreateReplyAndComplete(EReplyTypeError); - break; - } - } - } - else - { - iState = ESCPBWStateIdle; - iCallback->CreateCMEReplyAndComplete(err); - } - - TRACE_FUNC_EXIT - } - -void CSCPBWCommandHandler::DoCancel() - { - TRACE_FUNC_ENTRY - - switch (iState) - { - case ESCPBWStateGetPhonebookInfo: - { - iPhoneBookStore.CancelAsyncRequest(EMobilePhoneStoreGetInfo); - } - break; - case ESCPBWStateGet3GPBInfo: - { - iMmCustomAPI.CancelAsyncRequest(EGet3GPBInfoIPC); - } - break; - case ESCPBWStateDelete: - { - iPhoneBookStore.CancelAsyncRequest(EMobilePhoneStoreDelete); - } - break; - case ESCPBWStateWrite: - { - iPhoneBookStore.CancelAsyncRequest(EMobilePhoneStoreWrite); - } - break; - } - iState = ESCPBWStateIdle; - - TRACE_FUNC_EXIT - } - -TInt CSCPBWCommandHandler::ParseParameters( TBool& aIsDeleteRequest ) - { - TRACE_FUNC_ENTRY - - TInt ret = KErrNone; - // Paese index - ret = iATCmdParser.NextIntParam(iIndex); - Trace(_L("Parse index err: %d"), ret); - Trace(_L("index: %d"), iIndex); - if (ret != KErrNone && ret != KErrNotFound) - { - // Bad index - TRACE_FUNC_EXIT - return KErrArgument; - } - - TPtrC8 ptrc; - // Parse num1 - ptrc.Set(iATCmdParser.NextParam()); - if (ptrc.Length() != 0) - { - Trace(_L("Parse num1 OK: %S"), &ptrc); - SetBuffer(iNum1, ptrc); - } - else if (ret == KErrNone ) - { - // Only index given - Trace(_L("Only index given.")); - aIsDeleteRequest = ETrue; - TRACE_FUNC_EXIT - return KErrNone; - } - else - { - // no num1 found - TRACE_FUNC_EXIT - return KErrArgument; - } - ret = iATCmdParser.NextIntParam(iType1); - if (ret == KErrNotFound) - { - TRACE_FUNC_EXIT - return KErrNone; - } - else if (ret != KErrNone) - { - TRACE_FUNC_EXIT - return KErrArgument; - } - - // Parse num2 - ptrc.Set(iATCmdParser.NextParam()); - if (ptrc.Length() != 0) - { - Trace(_L("Parse num2 OK: %S"), &ptrc); - SetBuffer(iNum2, ptrc); - } - else - { - // no num2 found - TRACE_FUNC_EXIT - return KErrNone; - } - ret = iATCmdParser.NextIntParam(iType2); - if (ret == KErrNotFound) - { - TRACE_FUNC_EXIT - return KErrNone; - } - else if (ret != KErrNone) - { - TRACE_FUNC_EXIT - return KErrArgument; - } - - // Parse num3 - ptrc.Set(iATCmdParser.NextParam()); - if (ptrc.Length() != 0) - { - Trace(_L("Parse num3 OK: %S"), &ptrc); - SetBuffer(iNum3, ptrc); - } - else - { - // no num3 found - TRACE_FUNC_EXIT - return KErrNone; - } - ret = iATCmdParser.NextIntParam(iType3); - if (ret == KErrNotFound) - { - TRACE_FUNC_EXIT - return KErrNone; - } - else if (ret != KErrNone) - { - TRACE_FUNC_EXIT - return KErrArgument; - } - - // Parse num4 - ptrc.Set(iATCmdParser.NextParam()); - if (ptrc.Length() != 0) - { - Trace(_L("Parse num4 OK: %S"), &ptrc); - SetBuffer(iNum4, ptrc); - } - else - { - // no num4 found - TRACE_FUNC_EXIT - return KErrNone; - } - ret = iATCmdParser.NextIntParam(iType4); - if (ret == KErrNotFound) - { - TRACE_FUNC_EXIT - return KErrNone; - } - else if (ret != KErrNone) - { - TRACE_FUNC_EXIT - return KErrArgument; - } - - // Parse text - ptrc.Set(iATCmdParser.NextParam()); - if (ptrc.Length() != 0) - { - Trace(_L("Parse text OK: %S"), &ptrc); - SetBuffer(iText, ptrc); - } - else - { - // no text found - TRACE_FUNC_EXIT - return KErrNone; - } - ret = iATCmdParser.NextIntParam(iCoding); - if (ret == KErrNotFound) - { - TRACE_FUNC_EXIT - return KErrNone; - } - else if (ret != KErrNone) - { - TRACE_FUNC_EXIT - return KErrArgument; - } - - // Parse email - ptrc.Set(iATCmdParser.NextParam()); - if (ptrc.Length() != 0) - { - Trace(_L("Parse email OK: %S"), &ptrc); - SetBuffer(iEmail, ptrc); - } - else - { - // no email found - TRACE_FUNC_EXIT - return KErrNone; - } - - if (iATCmdParser.NextParam().Length() != 0) - { - // too many parameters - Trace(_L("Too many parameters.")); - TRACE_FUNC_EXIT - return KErrArgument; - } - - TRACE_FUNC_EXIT - return KErrNone; - } - -TInt CSCPBWCommandHandler::CreateContactEntry() - { - TRACE_FUNC_ENTRY - - TInt err = KErrNone; - iPhoneBookBuffer->Set(&iPbData); - // Add new entry tag - err = iPhoneBookBuffer->AddNewEntryTag(); - Trace(_L("New entry tag added, err = %d"), err); - if (err != KErrNone) - { - TRACE_FUNC_EXIT - return err; - } - // Put index into the entry - err = iPhoneBookBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBAdnIndex, (TUint16)iIndex); - Trace(_L("Index added, err = %d"), err); - if (err != KErrNone) - { - TRACE_FUNC_EXIT - return err; - } - // Put text into the entry - if (iText.Length() != 0) - { - err = iPhoneBookBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBText, iText); - Trace(_L("Text added, err = %d"), err); - if (err != KErrNone) - { - TRACE_FUNC_EXIT - return err; - } - } - // Put num1 into the entry - if (iNum1.Length() != 0) - { - err = iPhoneBookBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, iNum1); - Trace(_L("Number 1 added, err = %d"), err); - if (err != KErrNone) - { - TRACE_FUNC_EXIT - return err; - } - } - // Put num2 into the entry - if (iNum2.Length() != 0) - { - // Add anr tag - err = iPhoneBookBuffer->AddNewNumberTag(); - Trace(_L("New number tag added, err = %d"), err); - if (err != KErrNone) - { - TRACE_FUNC_EXIT - return err; - } - err = iPhoneBookBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, iNum2); - Trace(_L("Number 2 added, err = %d"), err); - if (err != KErrNone) - { - TRACE_FUNC_EXIT - return err; - } - } - // Put num3 into the entry - if (iNum3.Length() != 0) - { - // Add anr tag - err = iPhoneBookBuffer->AddNewNumberTag(); - Trace(_L("New number tag added, err = %d"), err); - if (err != KErrNone) - { - TRACE_FUNC_EXIT - return err; - } - err = iPhoneBookBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, iNum3); - Trace(_L("Number 3 added, err = %d"), err); - if (err != KErrNone) - { - TRACE_FUNC_EXIT - return err; - } - } - // Put num4 into the entry - if (iNum4.Length() != 0) - { - // Add anr tag - err = iPhoneBookBuffer->AddNewNumberTag(); - Trace(_L("New number tag added, err = %d"), err); - if (err != KErrNone) - { - TRACE_FUNC_EXIT - return err; - } - err = iPhoneBookBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBNumber, iNum4); - Trace(_L("Number 4 added, err = %d"), err); - if (err != KErrNone) - { - TRACE_FUNC_EXIT - return err; - } - } - // Put email address into the entry - if (iEmail.Length() != 0) - { - err = iPhoneBookBuffer->PutTagAndValue(RMobilePhoneBookStore::ETagPBEmailAddress, iEmail); - Trace(_L("Email added, err = %d"), err); - if (err != KErrNone) - { - TRACE_FUNC_EXIT - return err; - } - } - - TRACE_FUNC_EXIT - return KErrNone; - } - -void CSCPBWCommandHandler::ResetParameters() - { - TRACE_FUNC_ENTRY - - iPbData.Zero(); - iIndex = -1; - iNum1.Zero(); - iType1 = 0x91; // International & ISDN - iNum2.Zero(); - iType2 = 0x91; - iNum3.Zero(); - iType3 = 0x91; - iNum4.Zero(); - iType4 = 0x91; - iText.Zero(); - iCoding = 0; // GSM 7 bit - iEmail.Zero(); - - TRACE_FUNC_EXIT - } - -void CSCPBWCommandHandler::SetBuffer(TDes& aDest, const TDesC8& aSource) - { - TRACE_FUNC_ENTRY - TInt maxLength = aDest.MaxLength(); - if (aSource.Length() <= maxLength) - { - aDest.Copy(aSource); - } - else - { - aDest.Copy(aSource.Left(maxLength)); - } - TRACE_FUNC_EXIT - } - -