mmsharing/mmshavailability/src/musavacapabilityquerybase.cpp
branchRCL_3
changeset 21 33a5d2bbf6fc
parent 0 f0cf47e981f9
child 22 73a1feb507fb
--- a/mmsharing/mmshavailability/src/musavacapabilityquerybase.cpp	Thu Jul 15 18:35:08 2010 +0300
+++ b/mmsharing/mmshavailability/src/musavacapabilityquerybase.cpp	Thu Aug 19 09:51:39 2010 +0300
@@ -51,6 +51,13 @@
 #include "musavasipheaderutil.h"
 #include "mussesseioninformationapi.h"
 
+_LIT8( KMusSipPrefix, "sip:" );
+_LIT8( KMusTelPrefix, "tel:" );
+_LIT8( KMusPlusSign, "+" );
+_LIT8( KMusAtSign, "@" );
+
+const TInt KMusMinDigitCountInTelNumber = 7;
+
 // --------------------------------------------------------------------------
 // C++ constructor
 // --------------------------------------------------------------------------
@@ -154,6 +161,7 @@
     CleanupStack::PopAndDestroy(sipAddress);        
     
     HBufC8* sipAddress8 = EscapeUtils::ConvertFromUnicodeToUtf8L( aSipAddress );
+    iRemoteUri.Copy( sipAddress8->Des() ) ;
     CleanupStack::PushL( sipAddress8 );
     iTerminal = &Capability().Exchange().TerminalL( sipAddress8->Des() );
     CleanupStack::PopAndDestroy( sipAddress8 ) ;
@@ -568,4 +576,107 @@
     MUS_LOG( "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::OtherSDPHeadersL" )
     }
 
+// --------------------------------------------------------------------------
+// CMusAvaCapabilityQueryBase::ValidateUri
+// --------------------------------------------------------------------------
+//
+TBool CMusAvaCapabilityQueryBase::ValidateUri()
+	{
+    MUS_LOG( "mus: [MUSAVA] -> CMusAvaCapabilityQueryBase::ValidateUri" )
+    		
+	TBool valid = ETrue;
+     
+    const TDesC8& originator = iOriginator->Uri().UriDes();
+    MUS_LOG_TDESC8( "mus: [MUSAVA]  originator uri: ", originator )
 
+    TBuf8<KMaxRemoteUriLength> sipUri;
+    TBuf8<KMaxRemoteUriLength> telUri;
+    
+    if ( iRemoteUri.FindF( KMusSipPrefix ) != KErrNotFound )
+        {
+        sipUri.Copy( iRemoteUri );
+        MUS_LOG_TDESC8( "mus: [MUSAVA]  sip uri: ", sipUri )
+        }
+    else if ( iRemoteUri.FindF( KMusTelPrefix ) != KErrNotFound )
+        {
+        telUri.Copy( iRemoteUri );
+        MUS_LOG_TDESC8( "mus: [MUSAVA]  tel uri: ", telUri )
+        }
+   
+    // Tel Uri case
+    if ( telUri.Length() > 0 )
+        {
+        telUri.Trim();
+        
+        // Remove prefix and plus sign from remote uri if there is
+        TPtrC8 telUriWithoutPrefix = 
+                telUri.Right( telUri.Length() - KMusTelPrefix().Length() );
+        MUS_LOG_TDESC8( "mus: [MUSAVA]  telUriWithoutPrefix: ", telUriWithoutPrefix )
+        
+        TPtrC8 numberPartOfTelUri = 
+                telUriWithoutPrefix.Find( KMusPlusSign ) == 0 ?
+                telUriWithoutPrefix.Right( telUriWithoutPrefix.Length() - 1 ) :
+                telUriWithoutPrefix;
+        MUS_LOG_TDESC8( "mus: [MUSAVA]  numberPartOfTelUri: ", numberPartOfTelUri )
+        
+        // Remove prefix and domain part from uri in profile
+        TPtrC8 originatorWithoutPrefix = 
+        		originator.Right( originator.Length() - KMusSipPrefix().Length() );
+        MUS_LOG_TDESC8( "mus: [MUSAVA]  originatorWithoutPrefix: ", originatorWithoutPrefix )
+        
+        TPtrC8 usernameOfOriginator = 
+        		originatorWithoutPrefix.Find( KMusPlusSign ) == 0 ?
+        		originatorWithoutPrefix.Right( originatorWithoutPrefix.Length() - 1 ) :
+                originatorWithoutPrefix;
+        
+        TInt posOfAtSign = originatorWithoutPrefix.Find( KMusAtSign );
+        
+        if ( posOfAtSign >= KMusMinDigitCountInTelNumber )
+        	{
+            usernameOfOriginator.Set( 
+            		originatorWithoutPrefix.Mid( (originatorWithoutPrefix.Find( KMusAtSign ) 
+        				- KMusMinDigitCountInTelNumber), KMusMinDigitCountInTelNumber ) );
+            MUS_LOG_TDESC8( "mus: [MUSAVA]  usernameOfOriginator: ", usernameOfOriginator )
+        	}
+        
+        else
+        	{
+            usernameOfOriginator.Set( originatorWithoutPrefix.Left( posOfAtSign ) );
+            MUS_LOG_TDESC8( "mus: [MUSAVA]  usernameOfOriginator: ", usernameOfOriginator )
+        	}
+        
+        if ( numberPartOfTelUri.Length() >= KMusMinDigitCountInTelNumber )
+        	{
+            numberPartOfTelUri.Set( numberPartOfTelUri.Right( KMusMinDigitCountInTelNumber ) );
+            MUS_LOG_TDESC8( "mus: [MUSAVA]  numberPartOfTelUri: ", numberPartOfTelUri )
+        	}
+        
+                
+        if  ( numberPartOfTelUri == usernameOfOriginator )
+            {
+            MUS_LOG( "mus: Recipient address is evaluated to be same as in profile.\
+            		We do not send OPTIONS")
+			valid = EFalse;
+            MUS_LOG( "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::ValidateUri" )
+            return valid;              
+            }
+        }
+    
+    // SIP Uri case
+    if ( sipUri.Length() > 0 )
+		{
+		if ( !originator.Compare( sipUri ) )
+			{
+		    MUS_LOG( "mus: Recipient address is evaluated to be same as in profile.\
+		            		We do not send OPTIONS")
+		    valid = EFalse;
+		    MUS_LOG( "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::ValidateUri" )
+		    return valid; 
+			}
+		}
+
+    MUS_LOG( "mus: [MUSAVA] <- CMusAvaCapabilityQueryBase::ValidateUri" )
+    return valid;
+	}
+
+