diff -r 2d2c7d1515f7 -r 33a5d2bbf6fc mmsharing/mmshavailability/src/musavacapabilityquerybase.cpp --- 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 sipUri; + TBuf8 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; + } + +