diff -r f742655b05bf -r d38647835c2e sipvoipprovider/src/svprtpobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sipvoipprovider/src/svprtpobserver.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,255 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Provides RTP observation class +* +*/ + + +#include "svprtpobserver.h" +#include "svprtpobserverrequest.h" +#include "svpsessionbase.h" +#include "svplogger.h" + +// --------------------------------------------------------------------------- +// CSVPRtpObserver::CSVPRtpObserver +// --------------------------------------------------------------------------- +// +CSVPRtpObserver::CSVPRtpObserver() + { + // No implementation required + } + +// --------------------------------------------------------------------------- +// CSVPRtpObserver::~CSVPRtpObserver +// --------------------------------------------------------------------------- +// +CSVPRtpObserver::~CSVPRtpObserver() + { + iRequestArray.ResetAndDestroy(); + iRequestArray.Close(); + } + +// --------------------------------------------------------------------------- +// CSVPRtpObserver::NewLC +// --------------------------------------------------------------------------- +// +CSVPRtpObserver* CSVPRtpObserver::NewLC() + { + CSVPRtpObserver* self = new ( ELeave ) CSVPRtpObserver(); + CleanupStack::PushL( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CSVPRtpObserver::NewL +// --------------------------------------------------------------------------- +// +CSVPRtpObserver* CSVPRtpObserver::NewL() + { + CSVPRtpObserver* self = CSVPRtpObserver::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CSVPRtpObserver::SRReceived +// --------------------------------------------------------------------------- +// +void CSVPRtpObserver::SRReceived( CMceSession& aSession, + CMceMediaStream& aStream ) + { + SVPDEBUG1( "CSVPRtpObserver::SRReceived" ) + + CSVPRtpObserverRequest* assocReq = FindByMceSession( &aSession ); + if ( assocReq ) + { + assocReq->RtcpPacketReceived( + CSVPRtpObserverRequest::ERtcpSrPacket, aSession, aStream ); + } + } + +// --------------------------------------------------------------------------- +// CSVPRtpObserver::RRReceived +// --------------------------------------------------------------------------- +// +void CSVPRtpObserver::RRReceived( CMceSession& aSession, + CMceMediaStream& aStream ) + { + SVPDEBUG1( "CSVPRtpObserver::RRReceived" ) + + CSVPRtpObserverRequest* assocReq = FindByMceSession( &aSession ); + if ( assocReq ) + { + assocReq->RtcpPacketReceived( + CSVPRtpObserverRequest::ERtcpRrPacket, aSession, aStream ); + } + } + +// --------------------------------------------------------------------------- +// CSVPRtpObserver::InactivityTimeout +// --------------------------------------------------------------------------- +// +void CSVPRtpObserver::InactivityTimeout( CMceMediaStream& /*aStream*/, + CMceRtpSource& /*aSource*/ ) + { + SVPDEBUG1( "CSVPRtpObserver::InactivityTimeout" ) + } + +// --------------------------------------------------------------------------- +// CSVPRtpObserver::SsrcAdded +// --------------------------------------------------------------------------- +// +void CSVPRtpObserver::SsrcAdded( CMceMediaStream& /*aStream*/, + CMceRtpSource& /*aSource*/, TUint /*aSsrc*/ ) + { + SVPDEBUG1( "CSVPRtpObserver::SsrcAdded" ) + } + +// --------------------------------------------------------------------------- +// CSVPRtpObserver::SsrcRemoved +// --------------------------------------------------------------------------- +// +void CSVPRtpObserver::SsrcRemoved( CMceMediaStream& /*aStream*/, + CMceRtpSource& /*aSource*/, TUint /*aSsrc*/ ) + { + SVPDEBUG1( "CSVPRtpObserver::SsrcRemoved" ) + } + +// --------------------------------------------------------------------------- +// CSVPRtpObserver::AddSessionForObservingL +// --------------------------------------------------------------------------- +// +void CSVPRtpObserver::AddSessionForObservingL( CSVPSessionBase* aSession ) + { + SVPDEBUG2( "CSVPRtpObserver::AddSessionForObservingL aSession: 0x%x", + aSession ) + + __ASSERT_ALWAYS( aSession, User::Leave( KErrArgument ) ); + __ASSERT_ALWAYS( !FindBySvpSession( aSession ), + User::Leave( KErrAlreadyExists ) ); + + CSVPRtpObserverRequest* req = CSVPRtpObserverRequest::NewLC( *aSession ); + iRequestArray.AppendL( req ); + CleanupStack::Pop( req ); + } + +// --------------------------------------------------------------------------- +// CSVPRtpObserver::RemoveSessionFromObserving +// --------------------------------------------------------------------------- +// +TInt CSVPRtpObserver::RemoveSessionFromObserving( CSVPSessionBase* aSession ) + { + SVPDEBUG2( "CSVPRtpObserver::RemoveSessionFromObserving aSession: 0x%x", + aSession ) + + TInt ret = KErrNone; + if ( !aSession ) + { + ret = KErrArgument; + } + else + { + CSVPRtpObserverRequest* todel = FindBySvpSession( aSession ); + if ( todel ) + { + TInt index = iRequestArray.Find( todel ); + iRequestArray.Remove( index ); + delete todel; + } + else + { + ret = KErrNotFound; + } + } + + SVPDEBUG2( "CSVPRtpObserver::RemoveSessionFromObserving ret: %d", ret ) + + return ret; + } + +// --------------------------------------------------------------------------- +// CSVPRtpObserver::ResetSessionInObserving +// --------------------------------------------------------------------------- +// +TInt CSVPRtpObserver::ResetSessionInObserving( CSVPSessionBase* aSession ) + { + SVPDEBUG2( "CSVPRtpObserver::ResetSessionInObserving aSession: 0x%x", + aSession ) + + TInt ret = KErrNone; + if ( !aSession ) + { + ret = KErrArgument; + } + else + { + CSVPRtpObserverRequest* toreset = FindBySvpSession( aSession ); + if ( toreset ) + { + toreset->Reset(); + } + else + { + ret = KErrNotFound; + } + } + + SVPDEBUG2( "CSVPRtpObserver::ResetSessionInObserving ret: %d", ret ) + + return ret; + } + +// --------------------------------------------------------------------------- +// CSVPRtpObserver::FindBySvpSession +// --------------------------------------------------------------------------- +// +CSVPRtpObserverRequest* CSVPRtpObserver::FindBySvpSession( + const CSVPSessionBase* aSession ) + { + TInt count = iRequestArray.Count(); + CSVPRtpObserverRequest* ret( NULL ); + while( count-- && !ret && aSession ) + { + if ( aSession == iRequestArray[count]->SvpSession() ) + { + ret = iRequestArray[count]; + } + } + + SVPDEBUG2( "CSVPRtpObserver::FindBySvpSession ret: 0x%x", ret ) + + return ret; + } + +// --------------------------------------------------------------------------- +// CSVPRtpObserver::FindByMceSession +// --------------------------------------------------------------------------- +// +CSVPRtpObserverRequest* CSVPRtpObserver::FindByMceSession( + const CMceSession* aSession ) + { + TInt count = iRequestArray.Count(); + CSVPRtpObserverRequest* ret( NULL ); + while( count-- && !ret && aSession ) + { + if ( aSession == iRequestArray[count]->MceSession() ) + { + ret = iRequestArray[count]; + } + } + + SVPDEBUG2( "CSVPRtpObserver::FindByMceSession ret: 0x%x", ret ) + + return ret; + }