phoneclientserver/phoneclient/Src/ExtCall/ExtCall_Aiw/CPhCltExtPhoneDialData.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:15:03 +0100
branchRCL_3
changeset 20 987c9837762f
parent 19 7d48bed6ce0c
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2002-2007 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:  Ext Phone Dial Data.
*
*/



// INCLUDE FILES
#include "CPhCltExtPhoneDialData.h"
#include <cphcltdialdata.h>


// ============================ MEMBER FUNCTIONS ===============================


// -----------------------------------------------------------------------------
// CPhCltExtPhoneDialData::CPhCltExtPhoneDialData
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CPhCltExtPhoneDialData::CPhCltExtPhoneDialData()
    : CPhCltDialData()
    { 
    iRedialMaximumDuration = 0;      
    }


// ---------------------------------------------------------------------------
// 
// Symbian OS constructor
// 
// ---------------------------------------------------------------------------
//
void CPhCltExtPhoneDialData::ConstructL()
    {
    CPhCltDialData::ConstructL();
    }

// ---------------------------------------------------------------------------
// 
// Symbian OS constructor  
// Initialises the member data from package.
//
// ---------------------------------------------------------------------------
//
void CPhCltExtPhoneDialData::ConstructL(
    const TDesC8& aPackage ) 
    {
    RDesReadStream stream( aPackage );
    CleanupClosePushL( stream );
    
    stream >> iTelNumber;
    iCallType = static_cast<TPhCltCallType>( stream.ReadInt32L() );
    stream >> iName;
    iWindowGroup = stream.ReadInt32L();
    iRedial = stream.ReadInt32L();
    iRedialMaximumDuration = stream.ReadInt32L();
    ReadDescriptorFromStreamL( stream, iContactLink );
    stream >> iSubAddress;
    iShowNumber = stream.ReadInt32L();
    iAllowMatch = stream.ReadInt32L();
    iSATCall = stream.ReadInt32L(); 
    iEndOtherCalls = stream.ReadInt32L();
    stream >> iBearer;
    iSendKey = stream.ReadInt32L();
    iReturnToNumberEntryOnFailure = stream.ReadInt32L();
    iInitCall = stream.ReadInt32L();
    iFlags = stream.ReadUint32L();
    iServiceId = stream.ReadUint32L();
    ReadDescriptorFromStreamL( stream, iUUI );
    CleanupStack::PopAndDestroy( 1 ); // stream;
    }
// -----------------------------------------------------------------------------
// CPhCltExtPhoneDialData::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
EXPORT_C CPhCltExtPhoneDialData* CPhCltExtPhoneDialData::NewL()
    {
    CPhCltExtPhoneDialData* self = CPhCltExtPhoneDialData::NewLC();
    CleanupStack::Pop( self );
    return self;
    }

// -----------------------------------------------------------------------------
// CPhCltExtPhoneDialData::NewLC
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
EXPORT_C CPhCltExtPhoneDialData* CPhCltExtPhoneDialData::NewLC(  )
    {
    CPhCltExtPhoneDialData* self = new( ELeave ) CPhCltExtPhoneDialData;
    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }
    
// ---------------------------------------------------------------------------
// 
// First phase constructor
// Initialises the member data from package.
// 
// --------------------------------------------------------------------------- 
//    
EXPORT_C CPhCltExtPhoneDialData* CPhCltExtPhoneDialData::NewL( 
    const TDesC8& aPackage )
    {
    CPhCltExtPhoneDialData* self = CPhCltExtPhoneDialData::NewLC( aPackage );
    CleanupStack::Pop( self );
    return self;
    }
    
// ---------------------------------------------------------------------------
// 
// First phase constructor
// Initialises the member data from package.
// 
// --------------------------------------------------------------------------- 
//
EXPORT_C CPhCltExtPhoneDialData* CPhCltExtPhoneDialData::NewLC(
    const TDesC8& aPackage )
    {
    CPhCltExtPhoneDialData* self = new( ELeave ) CPhCltExtPhoneDialData;
    CleanupStack::PushL( self );
    self->ConstructL( aPackage );
    return self;
    }

// Destructor
EXPORT_C CPhCltExtPhoneDialData::~CPhCltExtPhoneDialData()
    {
    }


 // Access - Setters  
 
// ---------------------------------------------------------------------------
// Sets allow match.
// ---------------------------------------------------------------------------
//   
EXPORT_C void CPhCltExtPhoneDialData::SetAllowMatch( TBool aAllowMatch ) 
    {
    iAllowMatch = aAllowMatch;
    }

// ---------------------------------------------------------------------------
// Sets bearer.
// ---------------------------------------------------------------------------
EXPORT_C void CPhCltExtPhoneDialData::SetBearerL ( 
const TPhCltBearerCapability& aBearer )
    {
    iBearer = aBearer;
    }
    
// ---------------------------------------------------------------------------
// Sets call type.
// ---------------------------------------------------------------------------
//   
EXPORT_C void CPhCltExtPhoneDialData::SetCallType( TPhCltCallType aCallType ) 
    {
    iCallType = aCallType;
    }
 
// ---------------------------------------------------------------------------
// Sets used contact link.
// ---------------------------------------------------------------------------
//
EXPORT_C void CPhCltExtPhoneDialData::SetContactLinkL( const TDesC8& aContactLink ) 
    {
    CopyDescriptorToMemberDescriptorL( aContactLink, iContactLink );
    }

// ---------------------------------------------------------------------------
// Sets end other calls.
// ---------------------------------------------------------------------------
//
EXPORT_C void CPhCltExtPhoneDialData::SetEndOtherCalls( TBool aEndCalls ) 
    {
    iEndOtherCalls = aEndCalls ;
    }
 
 // ---------------------------------------------------------------------------
// Set initiate call.
// ---------------------------------------------------------------------------
//    
EXPORT_C void CPhCltExtPhoneDialData::SetInitiateCall( TBool aInitCall )
    {
    iInitCall = aInitCall;
    } 
// ---------------------------------------------------------------------------
// Set name.
// ---------------------------------------------------------------------------
//    
EXPORT_C void CPhCltExtPhoneDialData::SetNameL( const TPhCltNameBuffer& aName ) 
    {
    iName = aName;
    }
    
// ---------------------------------------------------------------------------
// Sets phone number.
// ---------------------------------------------------------------------------
//
EXPORT_C void CPhCltExtPhoneDialData::SetTelephoneNumber(
    const TPhCltTelephoneNumber& aNumber ) 
    {
    iTelNumber = aNumber;
    }
  
// ---------------------------------------------------------------------------
// Sets redial value.
// ---------------------------------------------------------------------------
//    
EXPORT_C void CPhCltExtPhoneDialData::SetRedial( TInt aRedial ) 
    {
    iRedial = aRedial;
    }
    
// ---------------------------------------------------------------------------
// Sets redial max duration time.
// ---------------------------------------------------------------------------
//
EXPORT_C void CPhCltExtPhoneDialData::SetRedialMaximumDuration( 
    TTimeIntervalSeconds aMaximumRedialDuration ) 
    {
    iRedialMaximumDuration = aMaximumRedialDuration;
    }
  
// ---------------------------------------------------------------------------
// Sets SAT call.
// ---------------------------------------------------------------------------
//
EXPORT_C void CPhCltExtPhoneDialData::SetSATCall( TBool aIsSATCall ) 
    {
    iSATCall = aIsSATCall;
    }

// -----------------------------------------------------------------------------
// SetSendKeyPressed
// 
// 
// -----------------------------------------------------------------------------
//
EXPORT_C void CPhCltExtPhoneDialData::SetSendKeyPressed( TBool aSendKey )
    {
    iSendKey = aSendKey;
    }

// ---------------------------------------------------------------------------
// Set show number.
// ---------------------------------------------------------------------------
//    
EXPORT_C void CPhCltExtPhoneDialData::SetShowNumber( TBool aShowNumber ) 
    {
    iShowNumber = aShowNumber;
    } 
    
// ---------------------------------------------------------------------------
// Sets SubAddress for SAT call.
// ---------------------------------------------------------------------------
EXPORT_C void CPhCltExtPhoneDialData::SetSubAddressL( 
    const TPhCltSubAddress& aSubAddress )
    {
    iSubAddress = aSubAddress;
    }
    
// ---------------------------------------------------------------------------
// Sets window group.
// ---------------------------------------------------------------------------
//    
EXPORT_C void CPhCltExtPhoneDialData::SetWindowGroup( TInt aWindowGroup ) 
    {
    iWindowGroup = aWindowGroup;
    }
  
// ---------------------------------------------------------------------------
// Sets window group.
// ---------------------------------------------------------------------------
//
EXPORT_C void CPhCltExtPhoneDialData::SetUUIL( const TDesC& aUUI )
    {
    CopyDescriptorToMemberDescriptorL( aUUI, iUUI );
    }

// Access - Getters 

// ---------------------------------------------------------------------------
// Return allow match.
// ---------------------------------------------------------------------------
//   
EXPORT_C TBool CPhCltExtPhoneDialData::AllowMatch() const 
    {
    return iAllowMatch;
    }
    
// ---------------------------------------------------------------------------
// Returns bearer.
// ---------------------------------------------------------------------------
//
EXPORT_C const TPhCltBearerCapability& CPhCltExtPhoneDialData::Bearer() const
    {
    return iBearer;
    }
    
// ---------------------------------------------------------------------------
// Returns call type.
// ---------------------------------------------------------------------------
//    
EXPORT_C TPhCltCallType  CPhCltExtPhoneDialData::CallType() const 
    {
    return iCallType;
    }

// ---------------------------------------------------------------------------
// Return contact link.
// ---------------------------------------------------------------------------
//    
EXPORT_C const TDesC8& CPhCltExtPhoneDialData::ContactLink() const 
    {
    return *iContactLink;
    } 
     
// ---------------------------------------------------------------------------
// Returns end other calls value.
// ---------------------------------------------------------------------------
//
EXPORT_C TBool CPhCltExtPhoneDialData::EndOtherCalls() const
    {
    return iEndOtherCalls;
    }
    
// ---------------------------------------------------------------------------
// Returns initiate call.
// ---------------------------------------------------------------------------
//
EXPORT_C TBool CPhCltExtPhoneDialData::InitiateCall() const 
    {
    return iInitCall;
    } 
    
// ---------------------------------------------------------------------------
// Returns name.
// ---------------------------------------------------------------------------
//
EXPORT_C const TPhCltNameBuffer& CPhCltExtPhoneDialData::Name() const 
    {
    return iName;
    }

// ---------------------------------------------------------------------------
// Returns phone number.
// ---------------------------------------------------------------------------
//    
EXPORT_C const TPhCltTelephoneNumber& CPhCltExtPhoneDialData::TelephoneNumber() const 
    {
    return iTelNumber;    
    }

// ---------------------------------------------------------------------------
// Return redial value.
// ---------------------------------------------------------------------------
//    
EXPORT_C TInt CPhCltExtPhoneDialData::Redial() const 
    {
    return iRedial;
    }
// ---------------------------------------------------------------------------
// Returns redial max duration.
// ---------------------------------------------------------------------------
//
EXPORT_C const TTimeIntervalSeconds CPhCltExtPhoneDialData::RedialMaximumDuration() const
    {
    return iRedialMaximumDuration;
    }   

// ---------------------------------------------------------------------------
// Returns SAT call value.
// ---------------------------------------------------------------------------
//
EXPORT_C TBool CPhCltExtPhoneDialData::SATCall() const
    {
    return iSATCall;    
    }
    
 // -----------------------------------------------------------------------------
// SendKeyPressed
// 
// 
// -----------------------------------------------------------------------------
//
EXPORT_C TBool CPhCltExtPhoneDialData::SendKeyPressed() const
    {
    return iSendKey;
    }
        
// ---------------------------------------------------------------------------
// Returns show number.
// ---------------------------------------------------------------------------
//   
EXPORT_C TBool CPhCltExtPhoneDialData::ShowNumber() const 
    {
    return iShowNumber;
    }
    
// ---------------------------------------------------------------------------
// Returns subaddress.
// ---------------------------------------------------------------------------
//   
EXPORT_C const TPhCltSubAddress& CPhCltExtPhoneDialData::SubAddress() const
    {
    return iSubAddress;
    }
    
// ---------------------------------------------------------------------------
// Return window group.
// ---------------------------------------------------------------------------
//    
EXPORT_C TInt CPhCltExtPhoneDialData::WindowGroup() const
    {
    return iWindowGroup;
    }
    
// ---------------------------------------------------------------------------
// Return user to user information
// ---------------------------------------------------------------------------
//      
EXPORT_C const TDesC& CPhCltExtPhoneDialData::UUI() const 
    {
    return *iUUI;
    }
 
 // Other member functions   

// ---------------------------------------------------------------------------
// Calculates the size of descriptor in package. Note that to retreave 
// a descriptor from stream in ConstructL we need to know the size of a
// descriptor in order to allocate right size descriptor. This is the reason
// for adding sizeof( int ) to descriptor length.
// ---------------------------------------------------------------------------
// 
TInt CPhCltExtPhoneDialData::CalculateDescriptorSize( const TDesC& aDescriptor ) const 
    {
    // sizeof( TInt ) is for the length of a descriptor.
    return sizeof( TInt ) + aDescriptor.Length() * 2; // unicode takes 2 bytes.
    }
    
// ---------------------------------------------------------------------------
// Calculates the size of descriptor in package. Note that to retreave 
// a descriptor from stream in ConstructL we need to know the size of a
// descriptor in order to allocate right size descriptor. This is the reason
// for adding sizeof( int ) to descriptor length.
// ---------------------------------------------------------------------------
// 
TInt CPhCltExtPhoneDialData::CalculateDescriptorSize( const TDesC8& aDescriptor ) const 
    {
    // sizeof( TInt ) is for the length of a descriptor in stream
    return sizeof( TInt ) + aDescriptor.Length();
    }   
    
// ---------------------------------------------------------------------------
// Calculates the size of all member data.
// ---------------------------------------------------------------------------
//
EXPORT_C TInt CPhCltExtPhoneDialData::CalculatePackageSize() const
    {
    TInt packageSize = 0;
    packageSize += CalculateDescriptorSize( iTelNumber );
    packageSize += sizeof( iCallType );
    packageSize += CalculateDescriptorSize( iName );
    packageSize += sizeof( iWindowGroup );
    packageSize += sizeof( iRedial );
    packageSize+=sizeof( iRedialMaximumDuration.Int() );
    packageSize += CalculateDescriptorSize( *iContactLink );
    packageSize += CalculateDescriptorSize( iSubAddress );
    packageSize += sizeof( iShowNumber);
    packageSize += sizeof( iAllowMatch );
    packageSize += sizeof( iSATCall );
    packageSize += sizeof( iEndOtherCalls );
    packageSize += CalculateDescriptorSize( iBearer );
    packageSize += sizeof (iSendKey );
    packageSize += sizeof( iReturnToNumberEntryOnFailure);
    packageSize += sizeof (iInitCall );
    packageSize += sizeof( iFlags );
    packageSize += sizeof( iServiceId );
    packageSize += CalculateDescriptorSize( *iUUI );
    return packageSize;
    }
    
// ---------------------------------------------------------------------------
// Checks that descriptorLength is not longer than maximum allowed descriptor
// length.
// ---------------------------------------------------------------------------
//   
void CPhCltExtPhoneDialData::CheckDescriptorMaxLengthL( 
    TInt aDescriptorLength, TInt aMaxAllowedDescriptorLength ) const
    {
    if( aDescriptorLength > aMaxAllowedDescriptorLength )
        {
        User::Leave( KErrArgument );
        }
    }

// ---------------------------------------------------------------------------
// Copies aSource descriptor to aMemberDescriptor. This quarantees that member
// descriptor will be valid even if the allocation fails.
// ---------------------------------------------------------------------------
//   
void CPhCltExtPhoneDialData::CopyDescriptorToMemberDescriptorL( 
    const TDesC& aSource, 
    HBufC*& aMemberDescriptor )
    {
    HBufC* temp = aSource.AllocL();
    delete aMemberDescriptor;
    aMemberDescriptor = temp;
    }

// ---------------------------------------------------------------------------
// Copies aSource descriptor to aMemberDescriptor. This quarantees that member
// descriptor will be valid even if the allocation fails.
// ---------------------------------------------------------------------------
//       
void CPhCltExtPhoneDialData::CopyDescriptorToMemberDescriptorL( 
    const TDesC8& aSource, 
    HBufC8*& aMemberDescriptor )
    {
    HBufC8* temp = aSource.AllocL();
    delete aMemberDescriptor;
    aMemberDescriptor = temp;
    }
              
  
// ---------------------------------------------------------------------------
// Reads descriptor from stream.
// ---------------------------------------------------------------------------
//  
void CPhCltExtPhoneDialData::ReadDescriptorFromStreamL( 
    RDesReadStream& aStream,
    HBufC8*& aDescriptor 
    )
    {
    const TInt descLength( aStream.ReadInt32L() );
    if ( aDescriptor )
        {
        delete aDescriptor;
        }
    // Not to cleanupstack, aDescriptor is member variable
    aDescriptor = HBufC8::NewL( descLength ); 
    TPtr8 ptr = aDescriptor->Des();
    aStream.ReadL( ptr, descLength );
    }    
    
// ---------------------------------------------------------------------------
// Reads descriptor from stream.
// ---------------------------------------------------------------------------
//  
void CPhCltExtPhoneDialData::ReadDescriptorFromStreamL( 
    RDesReadStream& aStream, 
    HBufC*& aDescriptor )
    {
   const TInt descLength( aStream.ReadInt32L() );
    if ( aDescriptor )
        {
        delete aDescriptor;
        }
    // Not to cleanupstack, aDescriptor will be member variable
    aDescriptor = HBufC::NewL( descLength ); 
    TPtr16 ptr = aDescriptor->Des();
    aStream.ReadL( ptr, descLength );
    }

// ---------------------------------------------------------------------------
// Writes descriptor to stream.
// ---------------------------------------------------------------------------
//  
void CPhCltExtPhoneDialData::WriteDescriptorToStreamL( 
    RDesWriteStream& aStream, 
    const TDesC8& aDescriptor ) 
    {
    aStream.WriteInt32L( aDescriptor.Length() );
    aStream.WriteL( aDescriptor );
    }
    
// ---------------------------------------------------------------------------
// Writes descriptor to stream.
// ---------------------------------------------------------------------------
//  
void CPhCltExtPhoneDialData::WriteDescriptorToStreamL( 
    RDesWriteStream& aStream, 
    const TDesC& aDescriptor ) 
    {
    aStream.WriteInt32L( aDescriptor.Length() );
    aStream.WriteL( aDescriptor );
    }    

// ---------------------------------------------------------------------------
// Packs the member data to descriptor. Ownershipd of returned descriptor
// is given for caller.
// ---------------------------------------------------------------------------
//  
EXPORT_C HBufC8* CPhCltExtPhoneDialData::PackLC() 
    {
    HBufC8* package = HBufC8::NewLC( CalculatePackageSize() );
    
    TPtr8 des = package->Des();
    RDesWriteStream stream( des );
    
    CleanupClosePushL( stream );

    stream << iTelNumber;     
    stream.WriteInt32L( iCallType );       
    stream << iName;
    stream.WriteInt32L( iWindowGroup );
    stream.WriteInt32L( iRedial );
    stream.WriteInt32L( iRedialMaximumDuration.Int() );
    WriteDescriptorToStreamL( stream, *iContactLink );
    stream << iSubAddress;
    stream.WriteInt32L( iShowNumber );
    stream.WriteInt32L( iAllowMatch );
    stream.WriteInt32L( iSATCall);
    stream.WriteInt32L( iEndOtherCalls );
    stream << iBearer;
    stream.WriteInt32L( iSendKey );
    stream.WriteInt32L( iReturnToNumberEntryOnFailure );
    stream.WriteInt32L( iInitCall );
    
    
    iFlags = EPhCltCallFlagsDefault;

    if ( iShowNumber )
        {
        iFlags |= EPhCltCallFlagsAllowNumberShowing;
        }

    if ( iAllowMatch )
        {
        iFlags |= 
            EPhCltCallFlagsAllowPersonalDirectoryMatching;
        }
    if ( iEndOtherCalls )
        {
           iFlags |= EPhCltCallFlagsEndBeforeDial;
        }

    if ( iSATCall )
        {
        iFlags |= EPhCltCallFlagsSAT;
        }

    if ( ( iCallType == EPhCltVideo ) || ( iCallType == EPhCltForcedVideo  ) )
        {
        iFlags |= EPhCltCallFlagsVideoCall;
        }

    if ( iCallType == EPhCltCallVoIP   )
        {
        iFlags |= EPhCltCallFlagsVoIPCall;
        }

      
      if ( iSendKey )
        {
        iFlags |= EPhCltCallFlagsSendKey;
        }

    stream.WriteUint32L( iFlags );   
    stream.WriteUint32L( iServiceId );
    WriteDescriptorToStreamL( stream, *iUUI );
    stream.CommitL();
    
    CleanupStack::PopAndDestroy( 1 ); // stream
    
    return package;   
    
      }    

// -----------------------------------------------------------------------------
// CPhCltExtPhoneDialData::SetServiceId
// 
// 
// -----------------------------------------------------------------------------
//
EXPORT_C void CPhCltExtPhoneDialData::SetServiceId( TUint32 aServiceId )
    {
    iServiceId = aServiceId;
    } 
// -----------------------------------------------------------------------------
// CPhCltExtPhoneDialData::ServiceId
// 
// 
// -----------------------------------------------------------------------------
//
EXPORT_C TUint32 CPhCltExtPhoneDialData::ServiceId() const
    {
    return iServiceId;
    }
    
// ---------------------------------------------------------------------------
// Sets dial data values using given package
//
// ---------------------------------------------------------------------------
//
void CPhCltExtPhoneDialData::SetParamsL(
    const TDesC8& aPackage ) 
    {
    RDesReadStream stream( aPackage );
    CleanupClosePushL( stream );
    
    stream >> iTelNumber;
    iCallType = static_cast<TPhCltCallType>( stream.ReadInt32L() );
    stream >> iName;
    iWindowGroup = stream.ReadInt32L();
    iRedial = stream.ReadInt32L();
    iRedialMaximumDuration = stream.ReadInt32L();
    ReadDescriptorFromStreamL( stream, iContactLink );
    stream >> iSubAddress;
    iShowNumber = stream.ReadInt32L();
    iAllowMatch = stream.ReadInt32L();
    iSATCall = stream.ReadInt32L(); 
    iEndOtherCalls = stream.ReadInt32L();
    stream >> iBearer;
    iSendKey = stream.ReadInt32L();
    iReturnToNumberEntryOnFailure = stream.ReadInt32L();
    iInitCall = stream.ReadInt32L();
    iFlags = stream.ReadUint32L();
    iServiceId = stream.ReadUint32L();
    ReadDescriptorFromStreamL( stream, iUUI );

    CleanupStack::PopAndDestroy( 1 ); // stream;
    }
//  End of File