--- 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;
+ }
+
+