multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesrvstream.h
changeset 0 1bce908db942
child 49 64c62431ac08
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcesrv/mmcemediamanager/inc/mcesrvstream.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,462 @@
+/*
+* 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 CMCESRVSTREAM_H
+#define CMCESRVSTREAM_H
+
+#include <e32base.h>
+#include <mmccinterfacedef.h>
+#include <in_sock.h>
+#include "mcemediadefs.h"
+#include "mcecommediastream.h"
+#include "mcesrv.h"
+
+class CMceComAudioStream;
+class CMceComVideoStream;
+class CMceSrvSource;
+class CMceSrvSink;
+class CMceSrvCodec;
+class CMceComEndpoint;
+class CMceComMediaSource;
+class CMceComMediaSink;
+class CMceComCodec;
+class CMceMediaManager;
+class TMceMccComEvent;
+class CMccCodecInformation;
+class CMccInterface;
+class CMceDtmfHandler;
+class CMceSrvEndpoint;
+
+
+const TBool KMceSrvStreamCallback = ETrue;
+const TBool KMceSrvStreamNoCallback = EFalse;
+const TBool KMceSrvStreamDefaultSequence = EFalse;
+const TBool KMceSrvStreamAlternativeSequence = ETrue;
+const TBool KMceSrvStreamForce = ETrue;
+const TBool KMceSrvStreamNoForce = EFalse;
+const TBool KMceSrvStreamSync = ETrue;
+const TBool KMceSrvStreamNoSync = EFalse;
+
+
+
+/**
+ * 
+ *
+ * @lib 
+ */
+class CMceSrvStream: public CBase
+    {
+
+public: // enums
+
+    /**
+    * Current state in MCC 
+    */
+    enum TState
+        {
+        EAdopted = 1,
+        ECreated,
+        ECreatingLink,
+        ELinkCreated,
+        EPreparing,
+        EPrepared,
+        EStarting,
+        EPending,
+        EStopped,
+        EInactive,
+        EStarted,
+        EPausing,
+        EPaused
+        };
+
+        
+public: // Constructors & Destructor
+
+
+    /**
+    * Decodes stream to array of server streams.
+    * This is factory method
+    * @return array of server streams
+    */
+    static void DecodeL( RPointerArray<CMceSrvStream>& aStreams,
+                         CMceComMediaStream& aStream,
+                         CMceMediaManager& aManager );
+    
+    
+    /**
+    * Creates srv stream.
+    */
+    static CMceSrvStream* NewL( CMceMediaManager& aManager,
+                                CMceComMediaStream& aData,
+                                CMceComMediaSource& aSource,
+                                CMceComMediaSink& aSink,
+                                CMceComCodec& aCodec );
+                                
+    /**
+    * Destructor.
+    */
+     ~CMceSrvStream();
+
+    
+public: // static API
+
+    static CMceSrvStream* EventReceived( 
+                        RPointerArray<CMceSrvStream>& aStreams,
+                        TMceMccComEvent& aEvent,
+                        TBool aConsumeOnlyOnce = EFalse );
+                                        
+
+public: // virtual functions
+
+
+    /**
+    * Gets session id
+    * @return session id
+    */
+    virtual TUint32 SessionId() const;
+    
+    /**
+    * Gets link id
+    * @return link id
+    */
+    virtual TUint32 LinkId() const;
+
+    /**
+    * Sets link id
+    * @param aLinkId link id
+    */
+    virtual void SetLinkId( TUint32 aLinkId );
+    
+    /**
+    * Gets IAP id
+    * @return IAP id
+    */
+    virtual TUint32 IapId() const;
+    
+    /**
+    * Gets local media port of stream
+    * @return local media port of stream
+    */
+    virtual TUint LocalMediaPort() const;
+
+    
+    /**
+    * Handles event from MCC
+    * @return status of operation
+    */
+    virtual TInt EventReceived( TMceMccComEvent& aEvent, TBool aCallback = KMceSrvStreamCallback );
+
+    /**
+    * Cleans up unused sinks/sources from mcc
+    */
+    virtual void Cleanup();
+
+    /**
+    * Checks, if this is equal to another stream
+    * @param aStream an another stream
+    * @return ETrue, if this is equal
+    */
+    virtual TBool IsEqual( const CMceSrvStream& aStream ) const;
+
+    /**
+    * Merges with stream from cloned session
+    */
+    virtual void Merge( CMceSrvStream& aMergeWith, TBool aDeepMerge = EFalse );
+
+    /**
+    * UnMerges with stream from cloned session
+    */
+    void UnMergeL( CMceSrvStream& aUnMergeFrom );
+
+    /**
+    * Is Prepared by MCC
+    * @return ETrue, if so
+    */
+    virtual TBool IsMccPrepared() const;
+
+    /**
+    * Returns state of stream, which depends on states of
+    * sink and source
+    * @return the state
+    */
+    virtual TState State() const;
+
+    /**
+    * Invalidates the stream
+    */
+    virtual void Invalidate();
+    
+    /**
+    * Is adopted
+    */
+    virtual TBool IsAdopted() const;
+    
+public: // Data access etc
+
+    /**
+    * Sets local media port of stream
+    * @param aPort local media
+    */
+    void SetLocalMediaPort( TUint aPort );
+
+    /**
+    * Gets id
+    * @return id
+    */
+    TUint32& Id();
+
+    /**
+    * Gets stream type
+    * @return stream type
+    */
+    CMceComMediaStream::TStreamType StreamType() const;
+    
+    /**
+    * Gets direction
+    * @return direction
+    */
+    CMceComMediaStream::TStreamType Direction() const;
+    
+    /**
+    * Is Merged
+    * @return ETrue, if merged
+    */
+    TBool IsMerged() const;
+    
+    /**
+    * Gets the original com stream
+    * @return the original com stream
+    */
+    CMceComMediaStream& Data() const;
+
+    /**
+    * Gets remote ip address
+    * @return  remote ip address
+    */
+    TInetAddr RemoteIpAddress() const;
+
+    /**
+    * Gets codec of the mcc stream. 
+    * @return codec of the mcc stream. 
+    */
+    CMceComCodec& Codec() const;
+
+    /**
+    * Gets source of the mcc stream.
+    * @return source of the mcc stream.
+    */
+    CMceSrvSource& Source() const;
+
+    /**
+    * Gets sink of the mcc stream. 
+    * @return sink of the mcc stream. 
+    */
+    CMceSrvSink& Sink() const;
+    
+
+    /**
+    * Gets mcc stream type
+    * @return mcc stream type
+    */
+    TInt MccStreamType() const;
+
+    /**
+    * Gets mcc link type
+    * @return mcc link
+    */
+    TInt LinkType() const;
+
+    /**
+    * Checks, if received event matches
+    * @param aEvent an event
+    * @return ETrue, if there is a match
+    */
+    TBool Consumes( const TMceMccComEvent& aEvent ) const;
+    
+    /**
+    * Returns dtmf handler for the stream.
+    * @return dtmf handler
+    */
+    CMceDtmfHandler& DtmfHandlerL( CMccInterface& aMccInterface );
+    
+    /**
+    * Updates sink/source's "is enabled" status.
+    * @param aSinkAffected if sink status is changed
+    * @param aSourceAffected if source status is changed
+    * @param aIsEnabled
+    */
+    void UpdateEndpointStates( TBool aSinkAffected, 
+                               TBool aSourceAffected, 
+                               TBool aIsEnabled );
+    
+    /**
+    * Checks whether stream is associated with certain endpoint.
+    * @param aEndpoint search term
+    * @param aUseProxyMatch
+    */
+    TBool EndpointMatch( const CMceComEndpoint& aEndpoint, 
+                         TBool aUseProxyMatch );
+    
+public: // new 
+
+
+    /**
+    * Hook to allow stream to have alternative create link sequence
+    * @return EFalse to indicate that normal link creation can 
+    * take place. ETrue indicates that link creation is not needed
+    */
+    TBool CreateLinkL();
+    
+    /**
+    * Hook to allow stream to have alternative preparation
+    * @return EFalse to indicate that normal preparation can 
+    * take place. ETrue indicates that stream has been prepared 
+    * by itself
+    */
+    TBool PrepareL();
+
+    /**
+    * Hook to allow stream to have alternative starting
+    * @return EFalse to indicate that normal starting can 
+    * take place. ETrue indicates that stream has been started 
+    * by itself
+    */
+    TBool StartL();
+
+    /**
+    * Hook to allow stream to have alternative updating
+    * @return EFalse to indicate that normal updating can 
+    * take place. ETrue indicates that stream has been updated 
+    * by itself
+    */
+    TBool SynchronizeL();
+
+    /**
+    * Hook to allow stream to have alternative stopping
+    * @return EFalse to indicate that normal stopping can 
+    * take place. ETrue indicates that stream has been stopped 
+    * by itself
+    */
+    TBool Stop();
+
+    /**
+    * Hook to allow stream to have alternative validation
+    * @return EFalse to indicate that normal validation can 
+    * take place. ETrue indicates that stream has been validated 
+    * by itself
+    */
+    TBool Validate();
+    
+    /**
+    * Called as a part of session unmerge
+    */
+    void UnMerge();
+    
+    /**
+    * Checks if update requires signalling
+    * @param aCurrent current stream, if NULL this is a new stream
+    * @param aMccCurentCodec current codec, if NULL this is a new stream
+    * @param aMccUpdateCodec codec based on update (this)
+    * @return indication of signaling required
+    */
+    TInt RequireSignalling( CMceSrvStream& aCurrent,
+                             CMccCodecInformation& aMccCurentCodec, 
+                             CMccCodecInformation& aMccUpdateCodec ) const;
+                             
+    /**
+    * Called when new stream has beed detected in update
+    * @param aUpdateStreams new streams from update
+    * @return indication of signaling required
+    */
+    TInt RequireSignalling( RPointerArray<CMceSrvStream>& aUpdateStreams ) const;
+    
+    
+    /**
+    * Called after prepare is called for this
+    * stream
+    */
+    void MccPrepareCalledL();
+    
+    
+protected://CMcc
+
+    /**
+     * C++ default constructor.
+     */
+    CMceSrvStream();
+    
+
+    /**
+     * C++ default constructor.
+     */
+    CMceSrvStream( CMceMediaManager* aManager,
+                   CMceComMediaStream* aData,
+                   CMceComCodec* aCodec );
+                   
+    void ConstructL( CMceComMediaSource& aSource,
+                     CMceComMediaSink& aSink );
+
+
+private: // 
+
+
+    static void DecodeAudioL( RPointerArray<CMceSrvStream>& aStreams,
+                              CMceComAudioStream& aAudio,
+                              CMceMediaManager& aManager );
+                              
+    static void DecodeVideoL( RPointerArray<CMceSrvStream>& aStreams,
+                              CMceComVideoStream& aVideo,
+                              CMceMediaManager& aManager );
+                              
+    TBool UseDefaultStartupSequence();
+    
+    TBool StreamStateChangeEventReceived( TMceMccComEvent& aEvent );
+    
+    void DoEndpointDisable( CMceSrvEndpoint& aEndpoint );
+                                      
+protected://not owned data
+
+    CMceMediaManager* iManager;
+
+protected: // owned data
+    
+    CMceSrvSource* iSource;
+    CMceSrvSink* iSink;
+    CMceComMediaStream* iData;
+    CMceComCodec* iCodec;
+
+    TBool iMerged;
+    
+    CMceDtmfHandler* iDtmfHandler;
+    
+protected: // NOT owned data
+
+    TUint32 iID;
+
+    friend class CMceAdoptedSrvStream;
+    
+	//definitions for unit testing
+	MCEMM_UT_DEFINITIONS
+    
+    };
+
+
+
+#endif //CMCESRVSTREAM_H