mmsharing/mmshengine/inc/musengmceoutsession.h
changeset 22 496ad160a278
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/mmshengine/inc/musengmceoutsession.h	Fri Jun 11 13:36:18 2010 +0300
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2005 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: 
+*
+*/
+
+
+#ifndef MUSHENGMCEOUTSESSION_H
+#define MUSHENGMCEOUTSESSION_H
+
+// USER
+#include "musengmcesession.h"
+#include "musunittesting.h"
+
+// FORWARD DECLARATIONS
+class MLcUiProvider;
+class CMceStreamBundle;
+
+// CLASS DECLARATION
+/**
+* Class for handling MCE out sessions. Direct inherit classes are
+* CMusEngLiveSession and CMusEngClipSession.
+*
+* @lib musengine.lib
+*/
+class CMusEngMceOutSession : public CMusEngMceSession
+    {
+    MUS_UNITTEST( UT_CMusEngOutSession )
+
+    public:
+
+        /**
+        * Destructor
+        */
+        ~CMusEngMceOutSession();
+
+    public: // From MLcSession
+        
+        const TDesC& RemoteDisplayName();
+        
+        void EstablishLcSessionL();
+        
+        void TerminateLcSessionL();        
+        
+    protected: // Must be implemented in derived class
+
+        /**
+        * @param aLocalBundle All local streams are supposed to be added to
+        *        this bundle
+        */
+        virtual void CompleteSessionStructureL( 
+                                        CMceStreamBundle& aLocalBundle ) = 0;
+    
+        virtual void AddDisplayL( CMceMediaStream& aStream );
+    
+    protected: // May be overridden in derived classes
+         
+        /**
+        * Calls EstablishL-function of class CMceOutSession with feature tag 
+        * in Accept-Contact header. Functions also adjusts stream and codec
+        * settings by calling CMusEngMceSession::AdjustStreamsAndCodecsL.
+        * Intention of the function is to provide subclasses means to set 
+        * preconditions to establishment, e.g. succesfull transcoding.
+        */
+        virtual void EstablishSessionL();
+        
+        TBool IsH264Supported() const;
+
+        /**
+         *
+         */        
+        virtual void CreateMceSessionStructureL( TBool aForceSdpBandwidth =  
+                                                  EFalse );
+
+         
+    protected: // helper function inherited from CMusEngMceSession
+
+        /**
+        * Function handling MCE session termination.
+        */
+        void HandleTermination( TInt aStatusCode, const TDesC8& aReasonPhrase );
+
+        /**
+        * Sets Multimediasharing specific video codec settings like video 
+        * payload types. This functions gets called for every video codec in 
+        * session. This function overrides function in base class and may 
+        * be further overridden. Function calls also overridden version.
+        */ 
+        void AdjustVideoCodecL( CMceVideoCodec& aVideoCodec, 
+                                TMceSourceType aSourceType );
+        
+        /**
+        * Sets Multimediasharing specific audio codec settings like audio and
+        * video payload types. This functions gets called for every audio 
+        * codec in session.  This function overrides function in base class and
+        * may be further overridden. Function calls also overridden version.
+        */ 
+        void AdjustAudioCodecL( CMceAudioCodec& aAudioCodec );
+        
+
+    protected:
+
+        /**
+        * Constructor
+        */
+        CMusEngMceOutSession();
+
+        /**
+        * Second-phase constructor
+        */
+        void ConstructL();
+
+        
+    private: // from MMusSipProfileUser, overrides base class definition
+            
+        virtual void ProfileRegistered();
+ 
+        
+     private:
+        
+        void DoInviteL( const TDesC& aRecipient = KNullDesC );
+       
+        HBufC* ResolveRecipientLC();  
+        
+        static TInt AsyncBrakeCompleted( TAny* aPtr );
+        
+        static TInt RegistrationTimerExpired( TAny* aPtr );
+
+        static TInt InvitationResponseTimerExpired( TAny* aPtr );
+        
+        void InitRecipientNotFoundHandling();
+
+        void HandleRecipientNotFound();
+        
+        TBool DoSyncRetryL();
+
+        void SplitL( const TDesC& aDes, const TDesC& aChar, CDesCArray* aArray );
+        
+        HBufC* ReadDescPropertyL( TUint aKey );
+
+        TBool IgnoreErrorNote();
+        
+        HBufC* RemoteAddressL() const;
+        
+        void InputRecipientL( TDes& aRecipientAddress );
+    
+    protected: // DATA
+    
+        HBufC* iRemoteDisplayName;
+        HBufC8* iRecipient;      
+        HBufC8* iVideoCodecList;
+        TInt iTriedInvitations;
+        HBufC* iRemoteSipAddressProposal;
+        CDeltaTimer* iDeltaTimer;
+        TCallBack iAsyncBrakeCallBack;
+        TDeltaTimerEntry iAsyncBrakeEntry;
+        TCallBack iRegistrationCallBack;
+        TCallBack iInvitationResponseCallBack;
+        TDeltaTimerEntry iRegistrationEntry;
+        TDeltaTimerEntry iInvitationResponseEntry;
+        TBool iRegistrationPending;
+        TBool iAddressQueried;
+        
+    private:
+    
+        MUS_UNITTEST ( UT_CMusEngOutSession )
+    };
+#endif //MUSHENGMCESESSION_H