--- a/localconnectivityservice/dun/utils/inc/DunTransporter.h Tue Aug 31 16:03:15 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