phoneengine/PhoneCntFinder/ContactService/src/tphcntsipuri.cpp
changeset 0 5f000ab63145
--- /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