# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1272376975 -10800 # Node ID 5bf83dc720b3d1cb7ec107de6dff9f1ce5c3cd01 # Parent 2a28ef775f1563d7e712d6409589decb86655358 Revision: 201015 Kit: 201017 diff -r 2a28ef775f15 -r 5bf83dc720b3 multimediacommscontroller/mmccinterface/src/mmcccodecdtmf.cpp --- a/multimediacommscontroller/mmccinterface/src/mmcccodecdtmf.cpp Wed Apr 14 16:21:36 2010 +0300 +++ b/multimediacommscontroller/mmccinterface/src/mmcccodecdtmf.cpp Tue Apr 27 17:02:55 2010 +0300 @@ -36,6 +36,7 @@ const TText8 KCharComma = ','; const TText8 KCharHyphen = '-'; const TText8 KCharSpace = ' '; +const TText8 KCharSemicolon = ';'; @@ -384,13 +385,20 @@ if ( aFmtp.Length() > 0 ) { + //the firt, process semicolon and get its left data + TBufC8<256> value(aFmtp); + TInt match = value.Locate( KCharSemicolon ); + if( KErrNotFound != match ) + { + value = value.Left( match ); + } // white space is not allowed - if ( aFmtp.Locate( KCharSpace ) >= 0 ) + if ( value.Locate( KCharSpace ) >= 0 ) { User::Leave( KErrArgument ); } - CPtrC8Array* tokens = TokenizeL( aFmtp, KCharComma ); + CPtrC8Array* tokens = TokenizeL( value, KCharComma ); CleanupStack::PushL( tokens ); // Mask will be updated while parsing diff -r 2a28ef775f15 -r 5bf83dc720b3 multimediacommscontroller/mmccinterface/tsrc/ut_interface/src/UT_CMccCodecDTMF.cpp --- a/multimediacommscontroller/mmccinterface/tsrc/ut_interface/src/UT_CMccCodecDTMF.cpp Wed Apr 14 16:21:36 2010 +0300 +++ b/multimediacommscontroller/mmccinterface/tsrc/ut_interface/src/UT_CMccCodecDTMF.cpp Tue Apr 27 17:02:55 2010 +0300 @@ -610,6 +610,12 @@ EUNIT_ASSERT( iCodec->iBitrateMask == 0 ); iCodec->iBitrateMask = 0; + // multiple fmtp + retValue = EFalse; + MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( retValue = iCodec->ParseFmtpAttrL(_L8("0-15;0-15")), KErrArgument); + EUNIT_ASSERT( !retValue ); + EUNIT_ASSERT( iCodec->iBitrateMask == 0 ); + iCodec->iBitrateMask = 0; } void UT_CMccCodecDTMF::UT_CMccCodecDTMF_GetFmtpL() diff -r 2a28ef775f15 -r 5bf83dc720b3 multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediasdpcodec.cpp --- a/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediasdpcodec.cpp Wed Apr 14 16:21:36 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcemediasdpcodec.cpp Tue Apr 27 17:02:55 2010 +0300 @@ -1121,17 +1121,31 @@ // did we try old school hold? if ( oldSchool ) { - if ( !isNullAddress ) - { - // ignore that other party didn't understand us - // and full cancel of old school process - sSession.iOOldSchool = 0; - sSession.iOOldSchoolProceeding = 0; - sSession.iOOldSchoolCompleted = 0; - } + if ( loc_direction == SdpCodecStringConstants::EAttributeSendrecv ) + { + if ( !isNullAddress ) + { + rmt_direction = SdpCodecStringConstants::EAttributeSendrecv; + } + else + { + rmt_direction = SdpCodecStringConstants::EAttributeRecvonly; + } + } + else + { + if ( !isNullAddress ) + { + // ignore that other party didn't understand us + // and full cancel of old school process + sSession.iOOldSchool = 0; + sSession.iOOldSchoolProceeding = 0; + sSession.iOOldSchoolCompleted = 0; + } - rmt_direction = SdpCodecStringConstants::EAttributeRecvonly; - oldSchool = 0; + rmt_direction = SdpCodecStringConstants::EAttributeRecvonly; + } + oldSchool = 0; } else // didn't try old school yet { diff -r 2a28ef775f15 -r 5bf83dc720b3 multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_cmcemediasdpcodec.cpp --- a/multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_cmcemediasdpcodec.cpp Wed Apr 14 16:21:36 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/tsrc/ut_mediamanager/src/UT_cmcemediasdpcodec.cpp Tue Apr 27 17:02:55 2010 +0300 @@ -1433,9 +1433,26 @@ // Ensure old school to be used next EUNIT_ASSERT( iSession->SdpSession().iOOldSchool == 1 ); - - CleanupStack::PopAndDestroy( sdp ); - + + CleanupStack::PopAndDestroy( sdp ); + + sdp = CSdpDocument::DecodeL( KMceTestSdpAMRWithOutDirection ); + CleanupStack::PushL( sdp ); + iSession->SdpSession().iOOldSchool = 1; // OldSchool Tried Already + audioLine = sdp->MediaFields()[ 0 ]; + mediaStream = iSession->Streams()[ 0 ]; + mediaStream->SetDirection( SdpCodecStringConstants::EAttributeSendrecv ); + + aRole = EMceRoleOfferer; + + // Check if we offer Sendrecv to unhold the call and the other party + // is just only accept oldschool hold. + iSdpCodec->DecodeDirectionL(*audioLine, *mediaStream, *sdp, aRole ); + + EUNIT_ASSERT( iSession->SdpSession().iOOldSchool == 1 ); + EUNIT_ASSERT( mediaStream->Direction() == SdpCodecStringConstants::EAttributeSendrecv ); + CleanupStack::PopAndDestroy( sdp ); + } diff -r 2a28ef775f15 -r 5bf83dc720b3 multimediacommsengine/mmcesrv/mmceserver/src/mcenatstatewait.cpp --- a/multimediacommsengine/mmcesrv/mmceserver/src/mcenatstatewait.cpp Wed Apr 14 16:21:36 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcenatstatewait.cpp Tue Apr 27 17:02:55 2010 +0300 @@ -52,6 +52,7 @@ EMceProvisionalResponse == aEvent.Code() ) && MceSip::HasContent( aEvent.Session().Response() ) ) || EMceNatError == aEvent.NatCode() || + EMceNatUpdated == aEvent.NatCode() || ( EMceAck == aEvent.Code() && MceSip::HasContent( aEvent.Session().Request())) || EMceNatICMPError == aEvent.NatCode()) @@ -135,6 +136,7 @@ void CMceNatStateWait::ExitDefaultL( TMceNatStateTransitionEvent& aEvent ) { CMceSipSession& session = aEvent.Session(); + TMceStateIndex sipState = aEvent.Session().CurrentState().Id(); if ( EMceAck == aEvent.Code() && MceSip::HasContent( aEvent.Session().Request())) @@ -143,6 +145,11 @@ aEvent.NatActions().UpdateL(); aEvent.NatActions().StateChangedL( aEvent, KMceNatStateDecodeAnswer ); } + else if( EMceNatUpdated == aEvent.NatCode() && + KMceStateOffering == sipState ) //for prack + { + aEvent.NatActions().StateChangedL( aEvent, KMceNatStateCreateOffer ); + } else { User::LeaveIfError( session.Actions().CreateSDP( session.Response() ) ); diff -r 2a28ef775f15 -r 5bf83dc720b3 multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMceNatStateWait.cpp --- a/multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMceNatStateWait.cpp Wed Apr 14 16:21:36 2010 +0300 +++ b/multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMceNatStateWait.cpp Tue Apr 27 17:02:55 2010 +0300 @@ -142,13 +142,13 @@ EUNIT_ASSERT( DoesAccept( EMceNatError ) ); EUNIT_ASSERT( DoesAccept( EMceNatICMPError ) ); + EUNIT_ASSERT( DoesAccept( EMceNatUpdated ) ); EUNIT_ASSERT( !DoesAccept( EMceNatHandleSIP ) ); EUNIT_ASSERT( !DoesAccept( EMceNatInitialized ) ); EUNIT_ASSERT( !DoesAccept( EMceNatOffer ) ); EUNIT_ASSERT( !DoesAccept( EMceNatAnswer ) ); EUNIT_ASSERT( !DoesAccept( EMceNatUpdateSdp ) ); - EUNIT_ASSERT( !DoesAccept( EMceNatUpdated ) ); EUNIT_ASSERT( !DoesAccept( EMceNatSync ) ); } @@ -193,6 +193,12 @@ *iNatSession, EMceInvite ); EUNIT_ASSERT_LEAVE( iState->TransitionHandler().ExitL( event2 )); + iNatSession->iNatDisabled = EFalse; + eventcode = EMceNatUpdated; + iNatSession->NextState( KMceStateOffering ); + TMceNatStateTransitionEvent event3( NULL, *iNatSession,eventcode, + *iNatSession, EMcePrack ); + EUNIT_ASSERT_NO_LEAVE( iState->TransitionHandler().ExitL( event3 )); } TBool