natfw/natfwconnectionmultiplexer/inc/cncmstream.h
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/natfwconnectionmultiplexer/inc/cncmstream.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,278 @@
+/*
+* Copyright (c) 2006-2007 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:    Connection multiplexer stream abstraction.
+*
+*/
+
+
+
+
+#ifndef C_CNCMSTREAM_H
+#define C_CNCMSTREAM_H
+
+#include <e32base.h>
+#include <in_sock.h>
+
+
+class MNATFWMediaWrapper;
+class CNcmConnection;
+class MNcmMultiplexerConnectionObserver;
+class CNcmConnectionObserverHandler;
+class CNcmMediaSource;
+
+/**
+ *  Connection multiplexer stream abstraction.
+ *
+ *  @lib connectionmux.lib
+ *  @since S60 v3.2
+ */
+NONSHARABLE_CLASS( CNcmStream ) : public CBase
+    {
+
+public:
+
+    /**
+     * Two-phased constructor
+     *
+     * @param   aSessionId          The ID identifying session
+     * @param   aStreamId           The ID identifying stream
+     * @param   aQos                The quality of service
+     * @param   aProtocol           KProtocolInetUdp / KProtocolInetTcp
+     */
+    static CNcmStream* NewL( TUint aSessionId, TUint aStreamId,
+        TInt aQos, TUint aProtocol );
+
+    /**
+     * Two-phased constructor
+     *
+     * @param   aSessionId          The ID identifying session
+     * @param   aStreamId           The ID identifying stream
+     * @param   aQos                The quality of service
+     * @param   aProtocol           KProtocolInetUdp / KProtocolInetTcp
+     */
+    static CNcmStream* NewLC( TUint aSessionId, TUint aStreamId,
+        TInt aQos, TUint aProtocol );
+
+    /**
+     * Destructor
+     */
+    virtual ~CNcmStream();
+
+    /**
+     * Creates a new connection for stream. Will use same protocol as
+     * used in stream.
+     *
+     * This is done synchronously.
+     * 
+     * @since   S60 v3.2
+     * @param   aObserver                   Observer
+     * @param   aConnectionObserverHandler  Connection observer handler
+     * @param   aSocketServ                 Socket server
+     * @param   aConnection                 RConnection
+     * @param   aLocalAddress               Local address    
+     * @param   aReuseAddress               If ETrue reuse the local address             
+     * @return  The ID for the created connection
+     */
+    TUint CreateConnectionL( MNcmMultiplexerConnectionObserver& aObserver,
+        CNcmConnectionObserverHandler& aConnectionObserverHandler,
+        RSocketServ& aSocketServ, RConnection& aConnection,
+        const TInetAddr& aLocalAddress, TBool aReuseAddress );
+    
+    /**
+     * Removes connection
+     *
+     * @since   S60 v3.2
+     * @param   aConnectionId       The ID identifying stream.
+     * @return  void
+     */ 
+    void RemoveConnectionL( TUint aConnectionId );
+    
+    /**
+     * Gets the stream ID
+     *
+     * @since   S60 v3.2
+     * @return  The ID identifying stream.
+     */ 
+    TUint StreamId() const;
+    
+    /**
+     * Gets the quality of service
+     *
+     * @since   S60 v3.2
+     * @return  Quality of service.
+     */ 
+    TInt Qos() const;
+    
+    /**
+     * Sets the qualiy of service
+     *
+     * @since   S60 v3.2
+     * @param   aQos Qualiy of service
+     * @return  void
+     */ 
+    void SetQos( TInt aQos );
+    
+    /**
+     * Gets the protocol used in stream.
+     *
+     * @since   S60 v3.2
+     * @return  The protocol, KProtocolInetUdp / KProtocolInetTcp
+     */ 
+    TUint StreamProtocol() const;
+    
+    /**
+     * Sets the protocol used in stream.
+     *
+     * @since   S60 v3.2
+     * @param   aProtocol       KProtocolInetUdp / KProtocolInetTcp  
+     * @return  void
+     */ 
+    void SetStreamProtocol( TUint aProtocol );
+   
+    /**
+     * Returns pointer to connection. Leaves with KErrNotFound if connection
+     * isn't found.
+     *
+     * @since   S60 v3.2
+     * @param   aConnectionId       The ID identifying sub stream.    
+     * @return  Connection
+     */   
+    CNcmConnection* ConnectionL( TUint aConnectionId ); 
+       
+    /**
+     * Registers a media wrapper into stream. Ownership of wrapper is
+     * also tranferred. Leaves with KErrArgument if pointer to
+     * media wrapper is NULL.
+     *
+     * @since   S60 v3.2
+     * @param   aWrapper         Pointer to Media Wrapper
+     * @return  void
+     */
+    void RegisterWrapperL( MNATFWMediaWrapper* aWrapper );
+    
+    /** 
+     * Returns Media wrapper. Leaves with KErrNotFound if media wrapper 
+     * isn't found.
+     *
+     * @since   S60 v3.2
+     * @return  Media wrapper
+     */
+    MNATFWMediaWrapper* WrapperL();   
+    
+    /** 
+     * Return the MediaConnectionId connection id.
+     *
+     * @since   S60 v3.2
+     * @return  Media connection ID( 0 if not set )
+     */
+    TUint MediaConnectionId() const;
+
+    /** 
+     * Sets the media connection ID
+     *
+     * @since   S60 v3.2
+     * @param   aMediaConnectionId      Media connection ID
+     * @return  void
+     */
+    void SetMediaConnectionId( TUint aMediaConnectionId );
+      
+    /**
+     * Returns pointer to connection observer handler.
+     *
+     * @since   S60 v3.2   
+     * @return  Connection observer handler.
+     */
+    CNcmConnectionObserverHandler& ConnectionObserverHandler();
+    
+    /**
+     * Find and return the connection ID by destination address.
+     * Connection sender must be active.
+     *
+     * @since   S60 v3.2
+     * @param   aDestinationAddress Destination address   
+     * @return  Connection.
+     */
+    CNcmConnection* ConnectionByDestinationAddressL(
+        const TInetAddr& aDestinationAddress );
+        
+    /**
+     * Register a media source for stream. Ownership of media source is transferred.
+     *
+     * @since   S60 v3.2
+     * @param   aMediaSource             The media source
+     * @return  void
+     */
+    void RegisterMediaSourceL( CNcmMediaSource* aMediaSource );
+    
+private: //Private constructors
+
+    CNcmStream( TUint aSessionId, TUint aStreamId,
+        TInt aQos, TUint aProtocol );
+    
+    void ConstructL();
+
+private: // data
+
+    /**
+     * Session ID
+     */
+    TUint iSessionId;
+    
+    /**
+     * Stream ID 
+     */
+    TUint iStreamId;
+
+    /**
+     * QoS for connections
+     */
+    TInt iQos;
+    
+    /**
+     * Stream protocol, KProtocolInetUdp / KProtocolInetTcp
+     */
+    TUint iStreamProtocol;
+    
+    /**
+     * Registered wrapper
+     * Own.
+     */
+    MNATFWMediaWrapper* iWrapper;
+            
+    /**
+     * Connections within stream, implemented by multiplexers
+     * Own.
+     */
+    RPointerArray<CNcmConnection> iConnections;
+    
+    /**
+     * Next connection ID
+     */
+    TUint iNextConnectionId;
+    
+    /**
+     * Media connection ID
+     * This is zero if media connection is unspecified.
+     * otherwise connection ID will be returned.
+     */
+    TUint iMediaConnectionId;
+    
+    /**
+     * Handler for connection observers
+     * Own.
+     */
+    CNcmConnectionObserverHandler* iConnectionObserverHandler;
+    };
+    
+#endif // C_CNCMSTREAM_H