diff -r ccd8e69b5392 -r 496ad160a278 mmsharing/mmshavailability/src/musavasipconnectionobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshavailability/src/musavasipconnectionobserver.cpp Fri Jun 11 13:36:18 2010 +0300 @@ -0,0 +1,402 @@ +/* +* Copyright (c) 2005-2006 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: mussipobserver is SIP API observer class for the MUS availability plug-in. +* +*/ + + + +#include "musunittesting.h" +#include "musavasipconnectionobserver.h" +#include "musavasipconnectionadapter.h" +#include "musavasipdefaulthandler.h" +#include "musavasip.h" +#include "muslogger.h" + +#include +#include +#include +#include + + + + +// ----------------------------------------------------------------------------- +// Two-phased constructor. +// ----------------------------------------------------------------------------- +CMusAvaSipConnectionObserver* CMusAvaSipConnectionObserver::NewL() + { + CMusAvaSipConnectionObserver* self = + new( ELeave ) CMusAvaSipConnectionObserver(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// Destructor +CMusAvaSipConnectionObserver::~CMusAvaSipConnectionObserver() + { + delete iDefaultHandler; + iObservers.Reset(); + iObservers.Close(); + } + + +// ----------------------------------------------------------------------------- +// A SIP request outside a dialog has been received from the network. +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::IncomingRequest( + CSIPServerTransaction* aTransaction ) + { + for( TInt i=0; iIncomingRequest( aTransaction ); + if( retval == KErrNone) + { + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// A SIP request within a dialog has been received from the network. +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::IncomingRequest( + CSIPServerTransaction* aTransaction, + CSIPDialog& aSIPDialog ) + + { + for( TInt i=0; iIncomingRequest( aTransaction, aSIPDialog ); + if( retval == KErrNone) + { + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// A SIP response that is within a dialog association or creates a +// dialog association. +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::IncomingResponse( + CSIPClientTransaction& aTransaction ) + { + for( TInt i=0; iIncomingResponse( aTransaction ); + if( retval == KErrNone) + { + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// A SIP response that is within a dialog association or creates a +// dialog association. +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::IncomingResponse( + CSIPClientTransaction& aTransaction, + CSIPDialogAssocBase& aDialogAssoc) + { + for( TInt i=0; iIncomingResponse( aTransaction, aDialogAssoc ); + if( retval == KErrNone) + { + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// Multiple SIP responses have been received to the single INVITE. +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::IncomingResponse( + CSIPClientTransaction& aTransaction, + CSIPInviteDialogAssoc* aDialogAssoc ) + { + for( TInt i=0; iIncomingResponse( aTransaction, aDialogAssoc ); + if( retval == KErrNone) + { + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// SIP stack has completed UAC core INVITE transaction. +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::InviteCompleted( + CSIPClientTransaction& aTransaction ) + { + for( TInt i=0; iInviteCompleted( aTransaction ); + if( retval == KErrNone) + { + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// A SIP response creating a registration binding or an error response +// that is related to an existing refreshed registration binding has +// been received from the network. +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::IncomingResponse( + CSIPClientTransaction& aTransaction, + CSIPRegistrationBinding& aRegistration ) + { + for( TInt i=0; iIncomingResponse( aTransaction, aRegistration ); + if( retval == KErrNone) + { + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// An asynchronous error has occurred in the stack related to the +// request indicated by the given transaction. +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::ErrorOccured( + TInt aError, + CSIPTransactionBase& aTransaction ) + { + for( TInt i=0; iErrorOccured( aError, aTransaction ); + if( retval == KErrNone) + { + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// An asynchronous error has occurred in the stack related to the +// request indicated by the given transaction. +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::ErrorOccured( + TInt aError, + CSIPClientTransaction& aTransaction, + CSIPRegistrationBinding& aRegistration ) + { + for( TInt i=0; iErrorOccured( aError, aTransaction, aRegistration ); + if( retval == KErrNone) + { + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// An asynchronous error has occured related to a request within an +// existing dialog. +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::ErrorOccured( + TInt aError, + CSIPTransactionBase& aSIPTransactionBase, + CSIPDialogAssocBase& aSIPDialogAssociation ) + { + for( TInt i=0; iErrorOccured( aError, + aSIPTransactionBase, + aSIPDialogAssociation ); + if( retval == KErrNone) + { + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// An asynchronous error has occured related to a refresh. +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::ErrorOccured( TInt aError, + CSIPRefresh& aSIPRefresh ) + { + for( TInt i=0; iErrorOccured( aError, aSIPRefresh ); + if( retval == KErrNone) + { + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// An asynchronous error has occured related to a periodical refresh +// that relates to a registration. +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::ErrorOccured( + TInt aError, + CSIPRegistrationBinding& aRegistration ) + { + for( TInt i=0; iErrorOccured( aError, aRegistration ); + if( retval == KErrNone) + { + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// An asynchronous error has occured related to a periodical refresh +// that belongs to SIP dialog association. +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::ErrorOccured( + TInt aError, + CSIPDialogAssocBase& aSIPDialogAssociation ) + { + for( TInt i=0; iErrorOccured( aError, aSIPDialogAssociation ); + if( retval == KErrNone) + { + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// Invite was canceled with the CANCEL +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::InviteCanceled( + CSIPServerTransaction& aTransaction ) + { + for( TInt i=0; iInviteCanceled( aTransaction ); + if( retval == KErrNone) + { + return; + } + } + } + + +// ----------------------------------------------------------------------------- +// Is called when the connection state changes +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::ConnectionStateChanged ( + CSIPConnection::TState aState ) + { + for( TInt i=0; iConnectionStateChanged( aState ); + if( retval == KErrNone) + { + return; + } + } + } + +// ----------------------------------------------------------------------------- +// C++ default constructor. +// ----------------------------------------------------------------------------- +CMusAvaSipConnectionObserver::CMusAvaSipConnectionObserver() + { + } + + +// ----------------------------------------------------------------------------- +// Symbian 2nd phase constructor. +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::ConstructL() + { + iDefaultHandler = new( ELeave ) CMusAvaSipDefaultHandler(); + iObservers.AppendL( iDefaultHandler ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::AddObserverL( + MMusAvaSipConnectionAdapter& aAdapter, + TInt aIndex ) + { + TInt index = iObservers.Find( &aAdapter ); + + if( index == KErrNotFound ) + { + TInt count = iObservers.Count(); + if ( aIndex > KErrNotFound && aIndex < iObservers.Count() ) + { + iObservers.InsertL( &aAdapter, aIndex ); + } + else + { + iObservers.InsertL( &aAdapter, count-1 ); + } + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +void CMusAvaSipConnectionObserver::RemoveObserver( MMusAvaSipConnectionAdapter& aAdapter ) + { + TInt index = iObservers.Find( &aAdapter ); + + if( index != KErrNotFound ) + { + iObservers.Remove( index ); + } + } +