diff -r 73a1feb507fb -r bc78a40cd63c mmsharing/mmshavailability/src/musavacapabilityquerybase.cpp --- a/mmsharing/mmshavailability/src/musavacapabilityquerybase.cpp Tue Aug 31 15:12:07 2010 +0300 +++ b/mmsharing/mmshavailability/src/musavacapabilityquerybase.cpp Wed Sep 01 12:31:01 2010 +0100 @@ -32,13 +32,14 @@ #include #include #include +#include #include #include #include #include #include #include - +#include #include "mussettings.h" #include "muslogger.h" @@ -48,6 +49,14 @@ #include "musavaterminal.h" #include "musavacapabilitycontext.h" #include "musavasipheaderutil.h" +#include "mussesseioninformationapi.h" + +_LIT8( KMusSipPrefix, "sip:" ); +_LIT8( KMusTelPrefix, "tel:" ); +_LIT8( KMusPlusSign, "+" ); +_LIT8( KMusAtSign, "@" ); + +const TInt KMusMinDigitCountInTelNumber = 7; // -------------------------------------------------------------------------- // C++ constructor @@ -152,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 ) ; @@ -230,7 +240,24 @@ iOriginator->Uri().UriDes()); MUS_LOG( "mus: [MUSAVA] AddPreferredIdentityHeaderL -> Success ") AddContactHeaderL( headers ); - MUS_LOG( "mus: [MUSAVA] AddContactHeaderL -> Success ") + MUS_LOG( "mus: [MUSAVA] AddContactHeaderL -> Success ") + + TBool usePrivacy = MultimediaSharingSettings::PrivacySetting(); + if ( usePrivacy ) + { + NMusSessionInformationApi::TMusClirSetting clir = + NMusSessionInformationApi::ESendOwnNumber; + RProperty::Get( NMusSessionInformationApi::KCategoryUid, + NMusSessionInformationApi::KMusClirSetting, + reinterpret_cast( clir ) ); + usePrivacy = ( clir == NMusSessionInformationApi::EDoNotSendOwnNumber ); + } + + if (usePrivacy) + { + CMusAvaSipheaderUtil::AddPrivacyHeaderL( headers ); + MUS_LOG( "mus: [MUSAVA] AddPrivacyHeaderL -> Success ") + } //terminal ID if ( Capability().Exchange().TerminalId().Length() > 0 ) { @@ -251,6 +278,16 @@ CleanupStack::Pop( remoteUri ); CleanupStack::PushL( request ); + if (usePrivacy) + { + _LIT8( KAnonymous, + "\"Anonymous\" " ); + CSIPFromHeader* from = CSIPFromHeader::DecodeL( KAnonymous ); + CleanupStack::PushL( from ); + request->SetFromHeaderL( from ); + CleanupStack::Pop( from ); + } + request->SetMethodL( SIPStrings::StringF( SipStrConsts::EOptions ) ); @@ -470,7 +507,7 @@ //application CSdpAttributeField* application = CSdpAttributeField::NewLC( MusAvaCapabilityContext::SDPStringL( - SdpCodecStringConstants::EMediaApplication ), + SdpCodecStringConstants::EMediaApplication ), KCapabilitySwisApplication ); aResponseContent.AttributeFields().AppendL( application ); @@ -489,16 +526,13 @@ aResponseContent.AttributeFields().AppendL( type ); CleanupStack::Pop( type ); - // Fast startup mode - CMusAvaCapability::AddFastModeL( aResponseContent ); - MUS_LOG( "mus: [MUSAVA] Adding media line to SDP" ) //media line - CSdpMediaField* mediaLine = CSdpMediaField::NewLC( - MusAvaCapabilityContext::SDPStringL + CSdpMediaField* mediaLine=CSdpMediaField::NewLC( + MusAvaCapabilityContext::SDPStringL (SdpCodecStringConstants::EMediaVideo ), NULL, - MusAvaCapabilityContext::SDPStringL + MusAvaCapabilityContext::SDPStringL (SdpCodecStringConstants::EProtocolRtpAvp ), KCapabilitySwisFormatListH263Only ); @@ -538,7 +572,111 @@ aResponseContent.MediaFields().AppendL( mediaLine ); CleanupStack::Pop( mediaLine ); + 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; + } + +