diff -r 6aeb7a756187 -r 3c88a81ff781 browsercore/core/network/WrtTelServiceBr.cpp --- a/browsercore/core/network/WrtTelServiceBr.cpp Thu Sep 23 15:32:11 2010 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,368 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU Lesser General Public License as published by -* the Free Software Foundation, version 2.1 of the License. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License -* along with this program. If not, -* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/". -* -* Description: -* -*/ - - -// INCLUDE FILES -#include -#include -#include -#include -#include // CCoeEnv::Static() - - -#include -#include -_LIT( KResourceFileName, "wrttelservice.rsc" ); - -#include "WrtTelServiceBr.h" -#include "WrtTelServiceBr_p.h" - -static const QString VALIDDTMFCHARS = "wW/pP*#0123456789ABCDabcd," ; -static const QString DTMFWAITCHARS = "/wWpP,*#" ; -static const QString DTMFINVALIDWAITCHARS = "/," ; -static const QString POSTD = ";postd="; - - -// ================= MEMBER FUNCTIONS ======================= - - -WrtTelService::WrtTelService( ): QObject() - ,d(new WrtTelServicePrivate()) -{ -} - -void WrtTelService::MakeVOIPCall( QString number, bool sendDTMFAlwaysConfirm ) -{ - d->MakeCall( number, sendDTMFAlwaysConfirm, true ); -} - -void WrtTelService::MakeCall( QString orgNumber, bool sendDTMFAlwaysConfirm ) -{ - d->MakeCall( orgNumber, sendDTMFAlwaysConfirm, false); -} - -WrtTelService::~WrtTelService() -{ - delete d; -} - -// ================= WrtTelServicePrivate FUNCTIONS ======================= - -WrtTelServicePrivate::WrtTelServicePrivate( ) : QObject(0) - ,m_CallInProgress( false ) - ,m_ResourceLoader( *CCoeEnv::Static() ) - ,m_ResourceOpened( false ) - ,m_ServiceHandler( NULL ) -#if !defined (SYMBIAN_PUB_SDK) - ,m_DialData( NULL ) -#endif -{ -} - -WrtTelServicePrivate::~WrtTelServicePrivate() -{ - delete m_ServiceHandler; -#if !defined (SYMBIAN_PUB_SDK) - delete m_DialData; -#endif - if ( m_ResourceOpened ) { - m_ResourceLoader.Close(); - m_ResourceOpened = false; - } -} - - -//--------------------------------------------------------------------------------------- -// WrtTelService::MakeCall() -//--------------------------------------------------------------------------------------- -// -void WrtTelServicePrivate::MakeCall( QString orgNumber, bool sendDTMFAlwaysConfirm, bool voipCall ) -{ -#if !defined (SYMBIAN_PUB_SDK) - if( m_CallInProgress || orgNumber.length() == 0 || - orgNumber.length() > AIWDialDataExt::KMaximumPhoneNumberLength ) - return; - - // Handle postd format - QString postdParm = FindPostdParm( orgNumber ); - - if(voipCall) - FindAndRipVoipParameters( orgNumber ); - - // Rip URI parameters from Tel URI, in order to that - // number validation and DTMF works as earlier - // Parameters will be added back in later phase - QString params = FindAndRipURIParameters( orgNumber ); - - QString number = ValidateNumber( orgNumber ); - - QString dtmfNumber = FindAndRipDTMFSequence( number ); - - if ( dtmfNumber.isEmpty() ) - dtmfNumber = postdParm; - - bool isPostd = (!dtmfNumber.isEmpty()); - - m_CallInProgress = true; - if( QMessageBox::question( 0, QString(), QObject::tr("Call %1").arg(number), (QMessageBox::Yes | QMessageBox::No) ) == QMessageBox::Yes ) { - if(! dtmfNumber.isEmpty() ) { - // Confirm the user (s)he wants to send the DTMF - if( !sendDTMFAlwaysConfirm || QMessageBox::question( 0, QString(), QObject::tr("Send DTMF %1").arg(dtmfNumber), (QMessageBox::Yes | QMessageBox::No) ) == QMessageBox::Yes ) { - if ( isPostd ) - number.append("p"); - number.append(dtmfNumber); - } - } - - // ... and make the call - TRAP_IGNORE(DoMakeCallL( number, voipCall )); - } - m_CallInProgress = false; -#endif -} - -//--------------------------------------------------------------------------------------- -// WrtTelServicePrivate::DoMakeCallL() -//--------------------------------------------------------------------------------------- -// -void WrtTelServicePrivate::DoMakeCallL( QString number, bool voipCall ) -{ - -#if !defined (SYMBIAN_PUB_SDK) - if (!m_ServiceHandler) - m_ServiceHandler = CAiwServiceHandler::NewL(); - if (!m_DialData) - m_DialData = CAiwDialData::NewL(); - - if (!m_ResourceOpened) { - // Resouce file loading - TParse* fileParser = new (ELeave) TParse; - CleanupStack::PushL( fileParser ); - fileParser->Set( KResourceFileName, &KDC_APP_RESOURCE_DIR, NULL ); - m_ResourceFileName = fileParser->FullName(); - m_ResourceLoader.OpenL( m_ResourceFileName ); - m_ResourceOpened = ETrue; - CleanupStack::PopAndDestroy( fileParser ); // fileParser - - m_ServiceHandler->AttachL( R_WRTTELSERVICES_MENU_AIW_INTERESTS ); - - } - - CAiwGenericParamList& paramList = m_ServiceHandler->InParamListL(); - CAiwGenericParamList& output = m_ServiceHandler->OutParamListL(); - - HBufC* numberPtr = qt_QString2HBufCNewL( number ); - CleanupStack::PushL( numberPtr ); - m_DialData->SetPhoneNumberL( *numberPtr ); - CleanupStack::PopAndDestroy( ); // numberPtr - - if( !voipCall ) - m_DialData->SetCallType( CAiwDialData::EAIWVideo ); - else - m_DialData->SetCallType( CAiwDialData::EAIWVoiP ); - - m_DialData->FillInParamListL( paramList ); - - - m_ServiceHandler->ExecuteServiceCmdL( - KAiwCmdCall, - paramList, - output, - 0, // No options used. - 0 ); // - -#endif - -} - -//--------------------------------------------------------------------------------------- -// WrtTelServicePrivate::ValidateNumber() -//--------------------------------------------------------------------------------------- -// -QString WrtTelServicePrivate::ValidateNumber( const QString number ) -{ - QString newNumber; - bool first = true; - foreach(QChar currentChar, number ) - { - if( currentChar.isDigit() ) - newNumber.append(currentChar); - else { - char ch = currentChar.toUpper().toLatin1(); - switch( ch ) { - - case '+': - if( !first ) - return QString(); - else - newNumber.append(ch); - break; - case '*': - case '#': - case 'A': - case 'B': - case 'C': - case 'D': - case 'P': - case 'W': - case ',': - case '/': - if( first ) - return QString(); - else - newNumber.append(ch); - break; - case '.': - case '-': - case '(': - case ')': - case ' ': - break; - default: - return QString(); - } - } - first = false; - } - return newNumber; -} - -//--------------------------------------------------------------------------------------- -// WrtTelServicePrivate::FindPostdParm() -//--------------------------------------------------------------------------------------- -// -QString WrtTelServicePrivate::FindPostdParm( QString& number ) -{ - QString tmpStr; - int offset = number.indexOf( POSTD ); - if ( offset > 0 ) { - tmpStr = number.mid( offset + POSTD.length() ); - number = number.left( offset ); - } - return tmpStr; -} - - -//--------------------------------------------------------------------------------------- -// WrtTelServicePrivate::FindAndRipDTMFSequence() -//--------------------------------------------------------------------------------------- -// -QString WrtTelServicePrivate::FindAndRipDTMFSequence( QString& number ) -{ - QString tmpStr; - int i = -1; - // Look for the first DTMF-wait char and extract the - // dtmf string from the phonenumber - foreach( QChar ch, number ) { - i++; - if (DTMFWAITCHARS.indexOf(ch) > 0) { - if (ch == '#' || ch == '*') // these are included - tmpStr = number.mid(i); - else - tmpStr = number.mid(i+1); - number = number.left(i); - - // Remove all the invalid wait chars from - // the sequence which is not accepted by CallUi - foreach(QChar c, DTMFINVALIDWAITCHARS) - tmpStr.remove(c); - - break; - } - } - return tmpStr; -} - -//--------------------------------------------------------------------------------------- -// WrtTelServicePrivate::FindAndRipURIParameters() -//--------------------------------------------------------------------------------------- -// -QString WrtTelServicePrivate::FindAndRipURIParameters( QString& number ) -{ - QString tmpStr; - int offset = number.indexOf(';'); - if( offset > 0 ) { // Separator is not allowed to be a first char - tmpStr = number.mid( offset ); - number = number.left( offset ); - } - return tmpStr; -} - -//--------------------------------------------------------------------------------------- -// WrtTelServicePrivate::FindAndRipVoipParameters() -//--------------------------------------------------------------------------------------- -// -QString WrtTelServicePrivate::FindAndRipVoipParameters( QString& number ) -{ - QString tmpStr; - int offset = number.indexOf('@'); - if( offset > 0 ) { // Separator is not allowed to be a first char - tmpStr = number.mid( offset ); - number = number.left( offset ); - } - return tmpStr; -} - -//--------------------------------------------------------------------------------------- -// WrtTelServicePrivate::ValidateDTMFNumber() -//--------------------------------------------------------------------------------------- -// -void WrtTelServicePrivate::ValidateDTMFNumber( QString& number ) -{ - QString orgNumber = number; - foreach(QChar c, orgNumber) - if (VALIDDTMFCHARS.indexOf(c) < 0) - number.remove(c); - -} - -//--------------------------------------------------------------------------------------- -// WrtTelServicePrivate::HandleNotifyL() -//--------------------------------------------------------------------------------------- -// -TInt WrtTelServicePrivate::HandleNotifyL( TInt /*aCmdId*/, TInt /*aEventId*/, - CAiwGenericParamList& /*aEventParamList*/, - const CAiwGenericParamList& /*aInParamList*/ ) -{ - return KErrNone; -} - -//--------------------------------------------------------------------------------------- -// WrtTelServicePrivate::qt_QString2HBufCNewL() -// copied from qcore_symbian_p.cpp -//--------------------------------------------------------------------------------------- -// -HBufC* WrtTelServicePrivate::qt_QString2HBufCNewL(const QString& aString) -{ - HBufC *buffer; -#ifdef QT_NO_UNICODE - TPtrC8 ptr(reinterpret_cast(aString.toLocal8Bit().constData())); - buffer = HBufC8::NewL(ptr.Length()); - buffer->Des().Copy(ptr); -#else - TPtrC16 ptr(reinterpret_cast(aString.utf16())); - buffer = HBufC16::NewL(ptr.Length()); - buffer->Des().Copy(ptr); -#endif - return buffer; -} - -