localconnectivityservice/dun/utils/inc/DunTransporter.h
branchRCL_3
changeset 39 4096754ee773
parent 38 3dcb815346df
child 40 52a167391590
--- a/localconnectivityservice/dun/utils/inc/DunTransporter.h	Thu Aug 19 10:46:39 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,800 +0,0 @@
-/*
-* 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:  Managing abstracted "channels" of network side communication
-*
-*/
-
-
-#ifndef C_CDUNTRANSPORTER_H
-#define C_CDUNTRANSPORTER_H
-
-#include <e32base.h>
-#ifdef PRJ_USE_NETWORK_STUBS
-#include <c32comm_stub.h>
-#else
-#include <c32comm.h>
-#endif
-#include <es_sock.h>
-#include "DunNetDataport.h"
-
-typedef TAny* TConnId;  // supported now: RSocket*, RComm*
-
-const TInt KDunStreamTypeMask    = 0x02;  // 10
-const TInt KDunOperationTypeMask = 0x01;  // 01
-
-enum TDunOperationType
-    {
-    EDunOperationTypeUndefined = KErrNotFound,
-    EDunOperationTypeRead      = 0x00,  // 00
-    EDunOperationTypeWrite     = 0x01   // 01
-    };
-
-enum TDunMediaContext
-    {
-    EDunMediaContextUndefined = KErrNotFound,
-    EDunMediaContextNetwork   = 0,
-    EDunMediaContextLocal
-    };
-
-enum TDunMedia
-    {
-    EDunMediaUndefined = KErrNotFound,
-    EDunMediaNetwork   = 0,
-    EDunMediaRComm,
-    EDunMediaRSocket
-    };
-
-enum TDunDirection
-    {
-    EDunDirectionUndefined = KErrNotFound,
-    EDunReaderUpstream     = 0x00,  // 00
-    EDunWriterUpstream     = 0x01,  // 01
-    EDunReaderDownstream   = 0x02,  // 10
-    EDunWriterDownstream   = 0x03   // 11
-    };
-
-enum TDunStreamType
-    {
-    EDunStreamTypeUndefined  = KErrNotFound,
-    EDunStreamTypeUpstream   = 0x00,  // 00
-    EDunStreamTypeDownstream = 0x02   // 10
-    };
-
-enum TDunState
-    {
-    EDunStateIdle,
-    EDunStateTransferring,     // Transporter state for data tranfer (up/downstream)
-    EDunStateSignalCopy,       // Transporter state for signal copying (RComm)
-    EDunStateSignalNotify,     // Transporter state for signal notifying (RSocket)
-    EDunStateDataWaiting,      // Transporter state for data waiting
-    EDunStateSignalWaiting,    // Transporter state for signal waiting
-    EDunStateDataPushing,      // Transporter state for data pushing (multiplexer)
-    EDunStateCallListen,       // Transporter state for call state listening
-    EDunStateAtCmdHandling,    // ATEXT state for AT command handling
-    EDunStateAtCmdPushing,     // ATEXT state for AT command reply pushing
-    EDunStateAtCmdEchoing,     // ATEXT state for AT command character echoing (text mode)
-    EDunStateAtUrcHandling,    // ATEXT state for URC handling
-    EDunStateModeListening,    // ATEXT state for mode change listening
-    EDunStateEcomListening,    // ATEXT state for ECOM change listening
-    EDunStateNvramListening,   // ATEXT state for NVRAM change listening
-    EDunStateUiNoting          // Transporter state for UI note showing
-    };
-
-enum TDunReasonType
-    {
-    EDunReasonTypeSignal,
-    EDunReasonTypeRW,
-    EDunReasonTypeRunL
-    };
-
-class CDunChanMan;
-class MDunPluginManager;
-class MDunTransporterUtility;
-class CDunTransUtils;
-class CDunConnWaiter;
-class TDunWaiterData;
-class CDunUpstream;
-class CDunDownstream;
-class CDunSignalCopy;
-class CDunSignalNotify;
-class CDunNoteHandler;
-
-/**
- *  Class used for reporting connection error's reason and signal changes
- *  of network side
- *  Connection error can happen in read/write and RunL error cases
- *
- *  @lib dunutils.lib
- *  @since S60 v3.2
- */
-NONSHARABLE_CLASS( TDunConnectionReason )
-    {
-
-public:
-
-    /**
-     * Reason type of error; either R/W or RunL
-     * or signal (network side)
-     * Set in all cases (signal, R/W, RunL)
-     */
-    TDunReasonType iReasonType;
-
-    /**
-     * Context of media where error occurred: network or local
-     * Set in all error cases (signal, R/W, RunL)
-     */
-    TDunMediaContext iContext;
-
-    /**
-     * Signal type of network side
-     * Set if signal case, 0 otherwise
-     */
-    TUint iSignalType;
-
-    /**
-     * Is signal high or low of network side
-     * Set if signal case, 0 otherwise
-     */
-    TBool iSignalHigh;
-
-    /**
-     * Direction of data transfer
-     * Set if R/W case, EDunDirectionUndefined otherwise
-     */
-    TDunDirection iDirection;
-
-    /**
-     * Error code of failure
-     * Set if R/W or RunL case, KErrNone otherwise
-     */
-    TInt iErrorCode;
-
-    };
-
-/**
- *  Notification interface class to report line status
- *
- *  @lib dunutils.lib
- *  @since S60 v3.2
- */
-NONSHARABLE_CLASS( MDunConnMon )
-	{
-
-public:
-
-    /**
-     * Gets called when line status changes or when any type of error is
-     * detected
-     *
-     * @since S60 3.2
-     * @param aConnId Connection ID for callback
-     * @param aConnReason Reason for progress change
-     * @return None
-     */
-    virtual void NotifyProgressChangeL(
-        TConnId aConnId,
-        TDunConnectionReason aConnReason ) = 0;
-
-	};
-
-/**
- *  Notification interface class to report service advertisement status changes
- *
- *  @lib dunutils.lib
- *  @since S60 v3.2
- */
-NONSHARABLE_CLASS( MDunServAdvMon )
-    {
-
-public:
-
-    /**
-     * Gets called when advertisement status changes to start
-     *
-     * @since S60 5.0
-     * @param aCreation ETrue if channel creation
-     *                  EFalse if channel free
-     * @return None
-     */
-    virtual void NotifyAdvertisementStart( TBool aCreation ) = 0;
-
-    /**
-     * Gets called when advertisement status changes to end
-     *
-     * @since S60 5.0
-     * @return None
-     */
-    virtual void NotifyAdvertisementEnd() = 0;
-
-    };
-
-/**
- *  Notification interface class for buffer correction
- *  This interface makes possible to change suggested local media buffer size
- *
- *  @lib dunutils.lib
- *  @since S60 v3.2
- */
-NONSHARABLE_CLASS( MDunBufferCorrection )
-    {
-
-public:
-
-    /**
-     * Notifies about request to change local media's buffer size
-     *
-     * @since S60 3.2
-     * @param aLength Suggested buffer length that will be used if no
-     *                correction done
-     * @return New (corrected) buffer length
-     */
-    virtual TInt NotifyBufferCorrection( TInt aLength ) = 0;
-
-    };
-
-/**
- *  Class to store data needed for each separate "channel"
- *  One TDunChannelData data contains objects needed for one channel
- *
- *  @lib dunutils.lib
- *  @since S60 v3.2
- */
-NONSHARABLE_CLASS( TDunChannelData )
-    {
-
-public:
-
-    /**
-     * RComm object of network side
-     * Not own.
-     */
-    RComm* iNetwork;
-
-    /**
-     * RComm object of local media side
-     * If this is set then iSocket is not used
-     * Not own.
-     */
-    RComm* iComm;
-
-    /**
-     * RSocket object of local media side
-     * If this is set then iComm is not used
-     * Not own.
-     */
-    RSocket* iSocket;
-
-    /**
-     * Name for the channel
-     */
-    HBufC8* iChannelName;
-
-    /**
-     * Upstream read/write object
-     * Reads data from local media and writes to network
-     * Not own.
-     */
-    CDunUpstream* iUpstreamRW;
-
-    /**
-     * Downstream read/write object
-     * Reads data from network and writes to local media
-     * Not own.
-     */
-    CDunDownstream* iDownstreamRW;
-
-    /**
-     * Upstream buffer (Local -> Network)
-     * Not own.
-     */
-    TUint8* iBufferUpstream;
-
-    /**
-     * Downstream buffer (Local <- Network)
-     * Not own.
-     */
-    TUint8* iBufferDownstream;
-
-    /**
-     * Pointer to upstream's buffer (Local -> Network)
-     * Not own.
-     */
-    TPtr8* iBufferUpPtr;
-
-    /**
-     * Pointer to downstream's buffer (Local <- Network)
-     * Not own.
-     */
-    TPtr8* iBufferDownPtr;
-
-    /**
-     * Upstream signal copy
-     * If this is set then iSignalNotify is not used
-     * Not own.
-     */
-    CDunSignalCopy* iUpstreamSignalCopy;
-
-    /**
-     * Downstream signal copy
-     * If this is set then iSignalNotify is not used
-     * Not own.
-     */
-    CDunSignalCopy* iDownstreamSignalCopy;
-
-    /**
-     * Signal notifier
-     * If this is set then the following are not used:
-     * iUpstreamSignalCopy, iDownstreamSignalCopy
-     * Not own.
-     */
-    CDunSignalNotify* iSignalNotify;
-
-    /**
-     * Owner's UID
-     */
-    TUid iOwnerUid;
-
-    /**
-     * Flag that indicates whether this channel is allocated or not
-     */
-    TBool iChannelInUse;
-
-    };
-
-/**
- *  Class to store data needed for each plugin service advertisement
- *  One TDunChannelData data contains objects needed for one plugin
- *
- *  @lib dunutils.lib
- *  @since S60 v3.2
- */
-NONSHARABLE_CLASS( TDunServAdvData )
-    {
-
-public:
-
-    /**
-     * Owner's UID for which to have the monitor
-     */
-    TUid iOwnerUid;
-
-    /**
-     * Service advertisement monitor
-     * Not own.
-     */
-    MDunServAdvMon* iServAdvMon;
-
-    };
-
-/**
- *  Class for managing abstracted "channels" of network side communication
- *  This is main class to be used by other components
- *
- *  @lib dunutils.lib
- *  @since S60 v3.2
- */
-NONSHARABLE_CLASS( CDunTransporter ) : public CBase
-    {
-
-    friend class CDunTransUtils;
-    friend class CDunChanMan;
-
-public:
-
-    /**
-     * Two-phased constructor.
-     * @param aPluginManager Callback to call when notification via
-     *                       MDunPluginManager to be made
-     * @param aNumOfMaxChannels Number of wanted maximum channels
-     *                          (can be omitted with 0)
-     * @return Instance of self
-     */
-	IMPORT_C static CDunTransporter* NewL( MDunPluginManager* aPluginManager,
-	                                       TInt aNumOfMaxChannels=0 );
-
-    /**
-    * Destructor.
-    */
-    virtual ~CDunTransporter();
-
-    /**
-     * Number of allocated channels, is the same number as allocated and active
-     * (non-waiting) channels
-     *
-     * @since S60 3.2
-     * @return Number of allocated channels
-     */
-    IMPORT_C TInt NumberOfAllocatedChannels();
-
-    /**
-     * Number of waiting channels, is the same number as allocated and inactive
-     * (waiting) channels
-     *
-     * @since S60 3.2
-     * @return Number of waiting channels
-     */
-    IMPORT_C TInt NumberOfWaitingChannels();
-
-    /**
-     * Gets the number of allocated channels by owner UID, is the same number
-     * as allocated and active (non-waiting) channels
-     *
-     * @since S60 5.0
-     * @param aOwnerUid UID of the channel owner
-     * @return Number of allocated channels by UID
-     */
-    IMPORT_C TInt GetNumberOfAllocatedChannelsByUid( TUid aOwnerUid );
-
-    /**
-     * Gets the number of waiting channels by owner UID, is the same number
-     * as allocated and inactive (waiting) channels
-     *
-     * @since S60 5.0
-     * @param aOwnerUid UID of the channel owner
-     * @return Number of waiting channels by UID
-     */
-    IMPORT_C TInt GetNumberOfWaitingChannelsByUid( TUid aOwnerUid );
-
-    /**
-     * Service advertisement status
-     *
-     * @since S60 5.0
-     * @return ETrue if OK to advertise, EFalse otherwise
-     */
-    IMPORT_C TBool AdvertisementStatus();
-
-    /**
-     * Creates a channel of communication between local media (aComm) and
-     * network
-     * Local media object pointer also works as a connection ID for the
-     * allocated channel
-     *
-     * @since S60 3.2
-     * @param aComm Pointer to opened local media RComm ID object
-     * @param aOwnerUid UID of the channel owner
-     * @param aName Name for the channel
-     * @param aEnqueuedFail ETrue if enqueued failure, EFalse otherwise
-     * @param aCorrection Pointer to object implementing buffer correction
-     * @return None
-     */
-    IMPORT_C void AllocateChannelL(
-        RComm* aComm,
-        TUid aOwnerUid,
-        const TDesC8& aName,
-        TBool aEnqueuedFail,
-        MDunBufferCorrection* aCorrection=NULL );
-
-    /**
-     * Creates a channel of communication between local media (aSocket) and
-     * network
-     * Local media object pointer also works as a connection ID for the
-     * allocated channel
-     *
-     * @since S60 3.2
-     * @param aSocket Pointer to opened local media RSocket ID object
-     * @param aOwnerUid UID of the channel owner
-     * @param aName Name for the channel
-     * @param aEnqueuedFail ETrue if enqueued failure, EFalse otherwise
-     * @param aNoFreeChans ETrue if no free channels, EFalse otherwise
-     * @return None
-     */
-    IMPORT_C void AllocateChannelL(
-        RSocket* aSocket,
-        TUid aOwnerUid,
-        const TDesC8& aName,
-        TBool aEnqueuedFail,
-        TBool& aNoFreeChans );
-
-    /**
-     * Frees an allocated channel by local media (aComm) connection ID
-     *
-     * @since S60 3.2
-     * @param aComm Pointer to opened local media RComm ID object
-     * @return Symbian error code on error, KErrNone otherwise
-     */
-    IMPORT_C TInt FreeChannel( RComm* aComm );
-
-    /**
-     * Frees an allocated channel by local media (aSocket) connection ID
-     *
-     * @since S60 3.2
-     * @param aSocket Pointer to opened local media RSocket ID object
-     * @return Symbian error code on error, KErrNone otherwise
-     */
-    IMPORT_C TInt FreeChannel( RSocket* aSocket );
-
-    /**
-     * Issues transfer requests for all transfer objects by local media
-     * (aComm) connection ID
-     * This will cause the Transporter by be ready for transferring data
-     *
-     * @since S60 3.2
-     * @param aComm Pointer to opened local media RComm ID object
-     * @return None
-     */
-    IMPORT_C void IssueTransferRequestsL( RComm* aComm );
-
-    /**
-     * Issues transfer requests for all transfer objects by local media
-     * (aSocket) connection ID
-     * This will cause the Transporter by be ready for transferring data
-     *
-     * @since S60 3.2
-     * @param aSocket Pointer to opened local media RSocket ID object
-     * @return None
-     */
-    IMPORT_C void IssueTransferRequestsL( RSocket* aSocket );
-
-    /**
-     * Stops transfers for all transfer objects by local media (aComm)
-     * connection ID
-     *
-     * @since S60 3.2
-     * @param aComm Pointer to opened local media RComm ID object
-     * @return Symbian error code on error, KErrNone otherwise
-     */
-    IMPORT_C TInt StopTransfers( RComm* aComm );
-
-    /**
-     * Stops transfers for all transfer objects by local media (aSocket)
-     * connection ID
-     *
-     * @since S60 3.2
-     * @param aSocket Pointer to opened local media RSocket ID object
-     * @return Symbian error code on error, KErrNone otherwise
-     */
-    IMPORT_C TInt StopTransfers( RSocket* aSocket );
-
-    /**
-     * Adds connection monitor callback for either local media or network side
-     * by connection ID
-     * Callbacks will be called read/write error is detected during endpoint
-     * operation
-     *
-     * @since S60 3.2
-     * @param aComm Pointer to opened local media RComm ID object
-     * @param aCallback Pointer to object whose callbacks will be called
-     * @param aDirection Direction of operation to monitor for read/write error
-     * @param aSignal ETrue if also signal notification wanted from network side
-     * @return None
-     */
-    IMPORT_C void AddConnMonCallbackL( RComm* aComm,
-                                       MDunConnMon* aCallback,
-                                       TDunDirection aDirection,
-                                       TBool aSignal );
-
-    /**
-     * Adds connection monitor callback for either local media or network side
-     * by connection ID
-     * Callbacks will be called when line status switches to high or low
-     *
-     * @since S60 3.2
-     * @param aSocket Pointer to opened local media RSocket ID object
-     * @param aCallback Pointer to object whose callbacks will be called
-     * @param aDirection Direction of operation to monitor for read/write error
-     * @param aSignal ETrue if also signal notification wanted from network side
-     * @return None
-     */
-    IMPORT_C void AddConnMonCallbackL( RSocket* aSocket,
-                                       MDunConnMon* aCallback,
-                                       TDunDirection aDirection,
-                                       TBool aSignal );
-
-    /**
-     * Adds error to consider as no error condition when doing any of the four
-     * endpoint's read/writer operation
-     *
-     * @since S60 3.2
-     * @param aError Error code to consider as "no error"
-     * @param aComm Pointer to opened local media RComm ID object
-     * @param aDirection One of four data transfer endpoints where to add a
-     *                   skipped error code
-     * @return None
-     */
-    IMPORT_C void AddSkippedErrorL( TInt aError,
-                                    RComm* aComm,
-                                    TDunDirection aDirection );
-
-    /**
-     * Adds error to consider as no error condition when doing any of the four
-     * endpoint's read/writer operation
-     *
-     * @since S60 3.2
-     * @param aError Error code to consider as "no error"
-     * @param aSocket Pointer to opened local media RSocket ID object
-     * @param aDirection One of four data transfer endpoints where to add a
-     *                   skipped error code
-     * @return None
-     */
-    IMPORT_C void AddSkippedErrorL( TInt aError,
-                                    RSocket* aSocket,
-                                    TDunDirection aDirection );
-
-    /**
-     * Sets service advertisement monitor callback by owner UID
-     * Callbacks will be called when advertisement status changes.
-     * The callbacks are updated with every successfully completed
-     * channel allocation/free (and allocation failure) so it is recommended
-     * to call this method after AllocateChannelL().
-     *
-     * @since S60 5.0
-     * @param aOwnerUid Owner's UID for which to have the monitor
-     * @param aCallback Pointer to object whose callbacks will be called
-     * @return None
-     */
-    IMPORT_C void SetAdvertisementMonitorL( TUid aOwnerUid,
-                                            MDunServAdvMon* aCallback );
-
-    /**
-     * Frees service advertisement monitor callback by owner UID
-     *
-     * @since S60 5.0
-     * @param aOwnerUid Owner's UID for which to have the monitor
-     * @param aCallback Pointer to object whose callbacks will be called
-     * @return Symbian error code on error, KErrNone otherwise
-     */
-    IMPORT_C TInt FreeAdvertisementMonitor( TUid aOwnerUid,
-                                            MDunServAdvMon* aCallback );
-
-private:
-
-    CDunTransporter( MDunPluginManager* aPluginManager,
-                     TInt aNumOfMaxChannels );
-
-    void ConstructL();
-
-    /**
-     * Initializes the transporter, must be called as the first operation
-     *
-     * @since S60 3.2
-     * @return KErrAlreadyExists = already initialized,
-     *         KErrGeneral = network initialization failed,
-     *         KErrNone otherwise
-     */
-    TInt InitializeL();
-
-    /**
-     * UnInitializes the transporter, can be called as the last operation
-     *
-     * @since S60 3.2
-     * @return None
-     */
-    void UnInitialize();
-
-    /**
-     * Initialize the transporter
-     *
-     * @since S60 3.2
-     * @return Symbian error code on error, KErrNone otherwise
-     */
-    TInt InitializeOnDemand();
-
-    /**
-     * UnInitialize the transporter
-     *
-     * @since S60 3.2
-     * @return Symbian error code on error, KErrNone otherwise
-     */
-    TInt UnInitializeOnDemand();
-
-    /**
-     * Returns index of media for connection ID
-     *
-     * @since S60 3.2
-     * @param aConnId Connection ID for media
-     * @param aMediaContext Context of media to search for; either local or
-     *                      network
-     * @return Symbian error code on error, found index otherwise
-     */
-    TInt GetMediaIndex( TConnId aConnId,
-                        TDunMediaContext aMediaContext=EDunMediaContextLocal );
-
-    /**
-     * Returns index of media for connection ID
-     *
-     * @since S60 3.2
-     * @param aConnId Connection ID for media
-     * @param aMediaContext Context of media to search for; either local or
-     *                      network
-     * @return Found index
-     */
-    TInt GetMediaIndexL( TConnId aConnId,
-                         TDunMediaContext aMediaContext=EDunMediaContextLocal );
-
-    /**
-     * Checks initialization and RSubSessionBase() handle
-     *
-     * @since S60 3.2
-     * @param aConnId Connection ID for media
-     * @return KErrNotReady if not initialized, KErrBadHandle if no handle
-     */
-    TInt CheckInitAndHandle( TConnId aConnId );
-
-    /**
-     * Deletes own internal data
-     *
-     * @since S60 3.2
-     * @return None
-     */
-    void DeleteTransporter();
-
-private:  // data
-
-    /**
-     * Pointer to common utility class
-     * Own.
-     */
-    MDunTransporterUtility* iUtility;
-
-    /**
-     * Pointer to RComm channel manager class
-     * Own.
-     */
-    CDunChanMan* iChanMan;
-
-    /**
-     * Pointer to note handler class
-     * Own.
-     */
-    CDunNoteHandler* iNoteHandler;
-
-    /**
-     * Array of abstractions of each "channel"
-     * One TDunChannelData entry contains objects needed for one channel
-     */
-    RArray<TDunChannelData> iChannelData;
-
-    /**
-     * Array of service advertisement data for each plugin
-     * One TDunServAdvData entry contains objects needed for one plugin
-     */
-    RArray<TDunServAdvData> iServAdvData;
-
-    /**
-     * Callback to call when notification via MDunPluginManager to be made
-     * Not own.
-     */
-    MDunPluginManager* iPluginManager;
-
-    /**
-     * Number of channels that are active
-     * Used for updating KPSUidDialupConnStatus Pub&Sub key
-     */
-    TInt iActiveChannels;
-
-    /**
-     * Number of wanted maximum channels (can be omitted with 0)
-     * Used for initialization of this class
-     */
-    TInt iNumOfMaxChannels;
-
-    /**
-     * Indicates whether this class is initialized or not
-     */
-    TBool iInitialized;
-
-    /**
-     * Indicates whether or not it is OK to advertise services
-     */
-    TBool iAdvertise;
-
-    /**
-     * Instance of network side abstraction
-     * Own.
-     */
-    CDunNetDataport* iNetwork;
-
-    };
-
-#endif  // C_CDUNTRANSPORTER_H