--- 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 <mpbutil.h>
-#include <exterror.h>
-#include <etelmmerr.h>
-
-#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
- }
-
-