--- a/voipplugins/svtlogging/src/csvtsipuriparser.cpp Thu Aug 19 09:45:22 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,370 +0,0 @@
-/*
-* Copyright (c) 2008 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 "csvtsipuriparser.h"
-#include "svtphonenumbervalidator.h"
-
-_LIT( KColon, ":");
-_LIT( KAtSign, "@");
-_LIT( KLeftElbow, "<" );
-_LIT( KRightElbow, ">" );
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::CSvtSipUriParser
-// ---------------------------------------------------------------------------
-//
-CSvtSipUriParser::CSvtSipUriParser( TDomainPartClippingSetting aOptions )
- :
- iOptions( aOptions )
- {
-
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CSvtSipUriParser::ConstructL( const TDesC& aSipUri )
- {
- ParseSipUriL( aSipUri );
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::NewL
-// ---------------------------------------------------------------------------
-//
-CSvtSipUriParser* CSvtSipUriParser::NewL( const TDesC& aSipUri,
- TDomainPartClippingSetting aOptions )
- {
- CSvtSipUriParser* self = CSvtSipUriParser::NewLC( aSipUri, aOptions );
- CleanupStack::Pop( self );
- return self;
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::NewLC
-// ---------------------------------------------------------------------------
-//
-CSvtSipUriParser* CSvtSipUriParser::NewLC( const TDesC& aSipUri,
- TDomainPartClippingSetting aOptions )
- {
- CSvtSipUriParser* self = new( ELeave ) CSvtSipUriParser( aOptions );
- CleanupStack::PushL( self );
- self->ConstructL( aSipUri );
- return self;
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::~CSvtSipUriParser
-// ---------------------------------------------------------------------------
-//
-CSvtSipUriParser::~CSvtSipUriParser()
- {
- iUserName.Close();
- iDomain.Close();
- iDisplayName.Close();
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::GetVoipAddress
-// ---------------------------------------------------------------------------
-//
-TInt CSvtSipUriParser::GetVoipAddress( RBuf& aVoipAddress ) const
- {
- aVoipAddress = KNullDesC();
-
- if ( IsAnonymousUri( iUserName ) )
- {
- return KErrNone;
- }
-
- TInt result( KErrNone );
- TInt addressLength = AddressLength( iUserName, iDomain, iOptions );
- if ( aVoipAddress.MaxLength() < addressLength )
- {
- result = aVoipAddress.ReAlloc( addressLength );
- }
-
- if ( KErrNone == result )
- {
- aVoipAddress.Append( iUserName );
-
- if ( iUserName.Length() < addressLength )
- {
- // domain part clipping isn't used
- aVoipAddress.Append( KAtSign() );
- aVoipAddress.Append( iDomain );
- }
- }
-
- return result;
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::GetPhoneNumber
-// ---------------------------------------------------------------------------
-//
-TInt CSvtSipUriParser::GetPhoneNumber( RBuf& aPhoneNumber ) const
- {
- aPhoneNumber = KNullDesC();
-
- TInt result( KErrNone );
- if ( SvtPhoneNumberValidator::IsValidNumber( iUserName )
- && ( ENoClipping != iOptions ) )
- {
- if ( aPhoneNumber.MaxLength() < iUserName.Length() )
- {
- result = aPhoneNumber.ReAlloc( iUserName.Length() );
- }
-
- if ( KErrNone == result )
- {
- aPhoneNumber.Append( iUserName );
- }
- }
-
- return result;
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::GetDisplayName
-// ---------------------------------------------------------------------------
-//
-TInt CSvtSipUriParser::GetDisplayName( RBuf& aDisplayName ) const
- {
- aDisplayName = KNullDesC();
-
- TInt result( KErrNone );
- if ( aDisplayName.MaxLength() < iDisplayName.Length() )
- {
- result = aDisplayName.ReAlloc( iDisplayName.Length() );
- }
-
- if ( KErrNone == result )
- {
- aDisplayName = iDisplayName;
- }
-
- return result;
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::ParseSipUriL
-// Accepted URI forms are: [schema:]user@host[:port] and
-// displayname <[schema:]user@host[:port]>. URI parameters and headers are
-// ripped off in MCE & SVP.
-// ---------------------------------------------------------------------------
-//
-void CSvtSipUriParser::ParseSipUriL( const TDesC& aSipUri )
- {
- if ( IsAnonymousUri( aSipUri ) )
- {
- ParsePrivateAddress();
- }
- else
- {
- RBuf sipUri( aSipUri.AllocL() );
- CleanupClosePushL( sipUri );
-
- // remove trailing and leading white spaces from input uri
- sipUri.TrimAll();
- ParseDisplayNameL( sipUri );
- RemoveElbows( sipUri );
- ParseUserNameL( sipUri );
- ParseDomainL( sipUri );
-
- CleanupStack::PopAndDestroy( &sipUri );
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::ParseDisplayNameL
-// ---------------------------------------------------------------------------
-//
-void CSvtSipUriParser::ParseDisplayNameL( const TDesC& aSipUri )
- {
- iDisplayName.Close();
-
- TInt leftElbowIndex = aSipUri.Find( KLeftElbow );
- TInt rightElbowIndex = aSipUri.Find( KRightElbow );
- if ( ( 0 < leftElbowIndex ) && ( KErrNotFound != rightElbowIndex ) )
- {
- // display name is available
- iDisplayName.Assign( aSipUri.Left( leftElbowIndex ).AllocL() );
-
- // remove whitespace around display name
- iDisplayName.TrimAll();
-
- // remove quatation marks around display name
- _LIT( KQuatationMark, "\"");
- if ( iDisplayName.Length() && iDisplayName[0] == '"' )
- {
- iDisplayName.Delete( 0, KQuatationMark().Length() );
- }
-
- if ( iDisplayName.Length()
- && iDisplayName[iDisplayName.Length() - 1] == '"')
- {
- iDisplayName.Delete(
- iDisplayName.Length() - 1, KQuatationMark().Length() );
- }
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::RemoveElbows
-// ---------------------------------------------------------------------------
-//
-void CSvtSipUriParser::RemoveElbows( TDes& sipUri ) const
- {
- TInt leftElbowIndex = sipUri.Find( KLeftElbow );
- if ( KErrNotFound != leftElbowIndex )
- {
- sipUri.Delete( leftElbowIndex, KLeftElbow().Length() );
- }
-
- TInt rightElbowIndex = sipUri.Find( KRightElbow );
- if ( KErrNotFound != rightElbowIndex )
- {
- sipUri.Delete( rightElbowIndex, KRightElbow().Length() );
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::ParseUserNameL
-// ---------------------------------------------------------------------------
-//
-void CSvtSipUriParser::ParseUserNameL( const TDesC& aSipUri )
- {
- // If uri does not specify schema, user name starts from the beginning of
- // the uri. Otherwise additional calculations are done.
- TInt userNameStartInd = 0;
- TInt indexOfColon = aSipUri.Find( KColon() );
- if ( KErrNotFound != indexOfColon )
- {
- userNameStartInd = aSipUri.Find( KColon() ) + KColon().Length();
- __ASSERT_ALWAYS( KColon().Length() <= userNameStartInd,
- User::Leave( KErrArgument ) );
- }
-
- TInt userNameEndInd = aSipUri.Find( KAtSign() ) - KAtSign().Length();
- __ASSERT_ALWAYS( 0 <= userNameEndInd, User::Leave( KErrArgument ) );
-
- TInt userNameLength = ( userNameEndInd - userNameStartInd ) + 1;
- __ASSERT_ALWAYS( 0 < userNameLength, User::Leave( KErrArgument ) );
-
- iUserName.Close();
- iUserName.Assign( aSipUri.Mid( userNameStartInd, userNameLength ).AllocL() );
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::ParseDomainL
-// ---------------------------------------------------------------------------
-//
-void CSvtSipUriParser::ParseDomainL( const TDesC& aSipUri )
- {
- TInt hostNameStartInd = aSipUri.Find( KAtSign() ) + KAtSign().Length();
- __ASSERT_ALWAYS( KAtSign().Length() <= hostNameStartInd,
- User::Leave( KErrArgument ) );
-
- TInt hostNameEndInd = aSipUri.Length() - 1;
- TInt hostNameLength = ( hostNameEndInd - hostNameStartInd ) + 1;
- __ASSERT_ALWAYS( 0 < hostNameLength, User::Leave( KErrArgument ) );
-
- iDomain.Close();
- iDomain.Assign( aSipUri.Mid( hostNameStartInd, hostNameLength ).AllocL() );
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::ParsePrivateAddress
-// ---------------------------------------------------------------------------
-//
-void CSvtSipUriParser::ParsePrivateAddress()
- {
- iUserName.Close();
- iUserName = KNullDesC();
-
- iDomain.Close();
- iDomain = KNullDesC();
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::AddressLength
-// ---------------------------------------------------------------------------
-//
-TInt CSvtSipUriParser::AddressLength( const TDesC& aUserName,
- const TDesC& aDomain, TDomainPartClippingSetting aClipSetting ) const
- {
- TInt addressLength( 0 );
- TBool isPhoneNumber( SvtPhoneNumberValidator::IsValidNumber( aUserName ) );
- switch ( aClipSetting )
- {
- case ENoClipping:
- addressLength =
- aUserName.Length() + KAtSign().Length() + aDomain.Length();
- break;
-
- case EClipDomainIfNumber:
- addressLength = isPhoneNumber
- ? aUserName.Length()
- : aUserName.Length() + KAtSign().Length() + aDomain.Length();
- break;
-
- case EClipDomain:
- addressLength = aUserName.Length();
- break;
-
- default:
- ASSERT( EFalse );
- }
-
- return addressLength;
- }
-
-
-// ---------------------------------------------------------------------------
-// CSvtSipUriParser::IsAnonymousUri
-// ---------------------------------------------------------------------------
-//
-TBool CSvtSipUriParser::IsAnonymousUri( const TDesC& aCandidate ) const
- {
- if ( aCandidate.Length() == 0 )
- {
- return ETrue;
- }
- else
- {
- return EFalse;
- }
- }