--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/natfwconnectionmultiplexer/inc/cncmsession.h Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,323 @@
+/*
+* Copyright (c) 2006-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: Connection multiplexer session abstraction.
+*
+*/
+
+
+
+
+#ifndef C_CNCMSESSION_H
+#define C_CNCMSESSION_H
+
+#include <e32base.h>
+#include <in_sock.h>
+#include <commdbconnpref.h>
+
+#include "mncmicmpobserver.h"
+
+class CNcmStream;
+class MNcmConnectionMultiplexerObserver;
+class MNcmSessionObserver;
+class CNcmPortStore;
+class CNcmIcmpV4Receiver;
+class CNcmIcmpV6Receiver;
+
+/**
+ * Connection multiplexer session abstraction.
+ *
+ * @lib connectionmux.lib
+ * @since S60 v3.2
+ */
+NONSHARABLE_CLASS( CNcmSession ) : public CActive,
+ public MNcmIcmpObserver
+ {
+
+public:
+
+ /**
+ * Two-phased constructor
+ *
+ * @param aSessionId The ID identifying session
+ * @param aIapId IAP id
+ * @param aPortRangeStart Port range start for session
+ * @param aPortRangeStop Port range stop for session
+ * @param aObserver Observer
+ * @param aSessionObserver Session observer
+ */
+ static CNcmSession* NewL( TUint aSessionId, TUint32 aIapId,
+ TUint aPortRangeStart, TUint aPortRangeStop,
+ MNcmConnectionMultiplexerObserver& aObserver,
+ MNcmSessionObserver& aSessionObserver );
+
+ /**
+ * Two-phased constructor
+ *
+ * @param aSessionId The ID identifying session
+ * @param aIapId IAP id
+ * @param aPortRangeStart Port range start for session
+ * @param aPortRangeStop Port range stop for session
+ * @param aObserver Observer
+ * @param aSessionObserver Session observer
+ */
+ static CNcmSession* NewLC( TUint aSessionId, TUint32 aIapId,
+ TUint aPortRangeStart, TUint aPortRangeStop,
+ MNcmConnectionMultiplexerObserver& aObserver,
+ MNcmSessionObserver& aSessionObserver );
+
+ /**
+ * Destructor
+ */
+ virtual ~CNcmSession();
+
+ /**
+ * Creates a new stream. On return the client receives a
+ * stream ID.
+ *
+ * @since S60 3.2
+ * @param aQos The desired quality of service.
+ * @param aProtocol KProtocolInetUdp / KProtocolInetTcp
+ * @return The ID for the created stream
+ */
+ TUint CreateStreamL( TInt aQos, TUint aProtocol );
+
+ /**
+ * Removes stream and all its connections.
+ *
+ * @since S60 3.2
+ * @param aStreamId The ID identifying stream
+ * @return void
+ */
+ void RemoveStreamL( TUint aStreamId );
+
+ /**
+ * Get session Id
+ *
+ * @since S60 v3.2
+ * @return Session ID
+ */
+ TUint SessionId() const;
+
+ /**
+ * Get IAP Id
+ *
+ * @since S60 v3.2
+ * @return IAP ID
+ */
+ TUint32 IapId() const;
+
+ /**
+ * Gets RSocketServ used on this session
+ *
+ * @since S60 v3.2
+ * @return RSocketServ used by this session
+ */
+ RSocketServ& SocketServer();
+
+ /**
+ * Gets RConnection used on this session
+ *
+ * @since S60 v3.2
+ * @return RConnection used by this session
+ */
+ RConnection& Connection();
+
+ /**
+ * Gets the unique name of an RConnection used on this session
+ *
+ * @since S60 v3.2
+ * @param aConnectionName The unique name of an RConnection
+ * @return system-wide error code
+ */
+ TInt GetConnectionName( TName& aConnectionName );
+
+ /**
+ * Returns stream by identifier. Leaves with KErrNotFound if stream
+ * isn't found.
+ *
+ * @since S60 3.2
+ * @param aStreamId The ID identifying stream
+ * @return Stream
+ */
+ CNcmStream* StreamByIdL( TUint aStreamId );
+
+ /**
+ * Receives port store
+ *
+ * @since S60 v3.2
+ * @return port store used on this session
+ */
+ CNcmPortStore& PortStore() const;
+
+ /**
+ * Return session initialization status
+ *
+ * @since S60 v3.2
+ * @return Initialization state ETrue if initialized,
+ * EFalse if not initialized
+ */
+ TBool Initialized() const;
+
+ /**
+ * Resolve the destination IP address from FQDN.
+ * ( Address and port )
+ *
+ * @since S60 v3.2
+ * @param aAddress The Destination FQDN
+ * @param aPort The Destination port
+ * @param aResult On return contains the resolved IP address
+ * @return void
+ */
+ void ResolveDestinationAddressL( const TDesC8& aAddress, TUint aPort,
+ TInetAddr& aResult );
+
+ /**
+ * Gets the local IPv4 address.
+ *
+ * @since S60 v3.2
+ * @return Local IPv4 address
+ */
+ TInetAddr& LocalIPv4Address();
+
+ /**
+ * Gets the local IPv6 address.
+ *
+ * @since S60 v3.2
+ * @return Local IPv6 address
+ */
+ TInetAddr& LocalIPv6Address();
+
+ /**
+ * From MNcmIcmpObserver
+ *
+ * Notifies that an ICMP error is occurred using
+ * the specified remote address. Gets a local address and
+ * a remote address to be used in the creation of the ICMP message.
+ *
+ * @since S60 v3.2
+ * @param aAddress Remote address on which the error occurred
+ * @param aLocalAddress Reference to local address
+ * @param aRemoteAddress Reference to remote address
+ * @return void
+ */
+ void IcmpError( const TInetAddr& aAddress, TInetAddr& aLocalAddress,
+ TInetAddr& aRemoteAddress );
+
+protected:
+
+ // from base class CActive
+
+ void RunL();
+
+ void DoCancel();
+
+ TInt RunError( TInt aError );
+
+private:
+
+ CNcmSession( TUint aSessionId, TUint32 aIapId,
+ MNcmConnectionMultiplexerObserver& aObserver,
+ MNcmSessionObserver& aSessionObserver );
+
+ void ConstructL( TUint aPortRangeStart, TUint aPortRangeStop );
+
+ TUint StreamIndexL( TUint aStreamId );
+
+ TUint GenerateStreamId() const;
+
+ void HandleIcmpErrorL( const TInetAddr& aAddress,
+ TInetAddr& aLocalAddress, TInetAddr& aRemoteAddress );
+
+private: // data
+
+ /**
+ * Unique session identifier
+ */
+ TUint iSessionId;
+
+ /**
+ * Internet access point identifier
+ */
+ TUint32 iIapId;
+
+ /**
+ * Connection for socket
+ * Own.
+ */
+ RConnection iConnection;
+
+ /**
+ * Socket server for this connection
+ * Own.
+ */
+ RSocketServ iSocketServ;
+
+ /**
+ * Streams created into the session
+ * Own.
+ */
+ RPointerArray<CNcmStream> iStreams;
+
+ /**
+ * Handler for connection multiplexer observer
+ */
+ MNcmConnectionMultiplexerObserver& iObserver;
+
+ /**
+ * Handler for multiplexer session observer
+ */
+ MNcmSessionObserver& iSessionObserver;
+
+ /**
+ * Store where local ports are obtained
+ * Own.
+ */
+ CNcmPortStore* iPortStore;
+
+ /**
+ * Flag to indicate whether session is initilized
+ */
+ TBool iInitialized;
+
+ /**
+ * Local IPv4 address
+ */
+ TInetAddr iIpv4Addr;
+
+ /**
+ * Local IPv6 address
+ */
+ TInetAddr iIpv6Addr;
+
+ /**
+ * Connection preferences
+ */
+ TCommDbConnPref iConnPref;
+
+ /**
+ * Receives and handles ICMPv4 errors.
+ * Not own.
+ */
+ CNcmIcmpV4Receiver* iIcmpV4receiver;
+
+ /**
+ * Receives and handles ICMPv6 errors.
+ * Not own.
+ */
+ CNcmIcmpV6Receiver* iIcmpV6receiver;
+ };
+
+
+#endif // C_CNCMSESSION_H
+