--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneengine/PhoneCntFinder/ContactService/src/tphcntsipuri.cpp Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2006 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: SIP URI descriptor
+*
+*/
+
+
+#include "tphcntsipuri.h"
+
+const TInt KSipPrefixLength = 4;
+_LIT( KPhCntSipUriAt, "@" );
+_LIT( KPhCntSipPrefix, "sip:" );
+_LIT( KPhCntSipUriSeparatorBegin, "<" );
+_LIT( KPhCntSipUriSeparatorEnd, ">" );
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+TPhCntSipURI::TPhCntSipURI(
+ const TDesC& aSipURI,
+ TInt aDigitsForMatching ) :
+ iSipURI( aSipURI ),
+ iDigitsForMatching( aDigitsForMatching )
+ {
+ RemoveUnusedChars();
+ const TInt sipUriAtPos( iSipURIStripped.Find( KPhCntSipUriAt ) );
+ if( sipUriAtPos > 0 )
+ {
+ iUserNamePart.Set( iSipURIStripped.Left( sipUriAtPos ) );
+ }
+ else
+ {
+ iUserNamePart.Set( iSipURIStripped );
+ }
+
+ if ( iDigitsForMatching )
+ {
+ // Match is done with username part if iDigitsForMatching is given.
+ // E.g. If username part contains valid cs number (sip:0401234567@domain.com)
+ // and iDigitsForMatching is 7 match is done with string 1234567.
+ TInt length( 0 );
+
+ if( sipUriAtPos > 0 )
+ {
+ length = iUserNamePart.Length() > aDigitsForMatching ?
+ aDigitsForMatching :
+ iUserNamePart.Length();
+
+ iFixedUserNamePart.Set( iUserNamePart.Right( length ) );
+ }
+ else
+ {
+ length = iSipURIStripped.Length() > aDigitsForMatching ?
+ aDigitsForMatching :
+ iSipURIStripped.Length();
+
+ iFixedUserNamePart.Set( iSipURIStripped.Right( length ) );
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// Gives the username part of sip uri.
+// ---------------------------------------------------------------------------
+//
+const TDesC& TPhCntSipURI::UserNamePart() const
+ {
+ return iUserNamePart;
+ }
+
+// ---------------------------------------------------------------------------
+// Gives the whole sip uri.
+// ---------------------------------------------------------------------------
+//
+const TDesC& TPhCntSipURI::SipURI() const
+ {
+ return iSipURIStripped;
+ }
+
+// ---------------------------------------------------------------------------
+// Gives the fixed username part of sip uri.
+// ---------------------------------------------------------------------------
+//
+const TDesC& TPhCntSipURI::FixedUserNamePart() const
+ {
+ return iFixedUserNamePart;
+ }
+
+// ---------------------------------------------------------------------------
+// Removes possible < and > marks and sip: prefix from sip uri.
+// ---------------------------------------------------------------------------
+//
+void TPhCntSipURI::RemoveUnusedChars()
+ {
+ TPtrC sipuri( iSipURI );
+
+ // Remove begin mark
+ const TInt startMarkPos( sipuri.Find( KPhCntSipUriSeparatorBegin ) );
+ if( startMarkPos >= 0 )
+ {
+ // Extract the part after "<" mark ie take the part from end of
+ // the sip uri to "<" mark.
+ sipuri.Set( sipuri.Right( iSipURI.Length() - ( startMarkPos + 1 ) ) );
+ }
+
+ // Remove end mark
+ const TInt endMarkPos( sipuri.Find( KPhCntSipUriSeparatorEnd ) );
+ if( endMarkPos >= 0 )
+ {
+ sipuri.Set( sipuri.Left( endMarkPos ) );
+ }
+
+ // "sip:" is not used when comparing addresses.
+ if ( sipuri.Length() > KSipPrefixLength )
+ {
+ TBuf<KSipPrefixLength> possibleSipPrefix;
+ possibleSipPrefix.Copy( sipuri.Left( KSipPrefixLength ) );
+ possibleSipPrefix.LowerCase();
+
+ if ( possibleSipPrefix.Compare( KPhCntSipPrefix ) == KErrNone )
+ {
+ sipuri.Set( sipuri.Right( sipuri.Length() - KSipPrefixLength ) );
+ }
+ }
+
+ iSipURIStripped.Set( sipuri );
+ }
+
+// End of File