--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/localconnectivityservice/dun/utils/inc/DunTransUtils.h Mon Jan 18 21:03:15 2010 +0200
@@ -0,0 +1,531 @@
+/*
+* 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: Utility class for other CDunTransporter classes
+*
+*/
+
+
+#ifndef C_CDUNTRANSUTILS_H
+#define C_CDUNTRANSUTILS_H
+
+#include "DunTransporter.h"
+
+/**
+ * Notification interface class for managing channel's activity
+ * This class is needed to update KPSUidDialupConnStatus pub&sub key
+ *
+ * @lib dunutils.lib
+ * @since S60 v3.2
+ */
+NONSHARABLE_CLASS( MDunActivityManager )
+ {
+
+public:
+
+ /**
+ * CDunTransporter callback: gets called when activity is detected on a
+ * channel
+ *
+ * @since S60 3.2
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ virtual TInt NotifyChannelActivity() = 0;
+
+ /**
+ * CDunTransporter callback: gets called when inactivity is detected on a
+ * channel
+ *
+ * @since S60 3.2
+ * @return KErrGeneral if mismatch in channel activity, KErrNone otherwise
+ */
+ virtual TInt NotifyChannelInactivity() = 0;
+
+ };
+
+/**
+ * Utility accessor class for CDunTransporter class itself
+ * Shares basic functionality of CDunTransporter by simplifying it
+ *
+ * @lib dunutils.lib
+ * @since S60 v3.2
+ */
+NONSHARABLE_CLASS( MDunTransporterUtility )
+ {
+
+public:
+
+ /**
+ * Initializes first free channel
+ *
+ * @since S60 3.2
+ * @param aLocalIdNew Identifier of the new local endpoint
+ * @return Symbian error code on error, found index otherwise
+ */
+ virtual TInt InitializeFirstFreeChannel( TConnId aLocalIdNew ) = 0;
+
+ /**
+ * Allocates a channel by creating and setting local media independent
+ * objects
+ * This is a common method used by exported local media dependent methods
+ *
+ * @since S60 3.2
+ * @param aBufferLength Buffer length selected for this channel
+ * @param aFirstFree Index to first free channel data
+ * @param aCorrection Pointer to object implementing buffer correction
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ virtual void DoAllocateChannelL(
+ RComm* aComm,
+ TInt& aBufferLength,
+ TInt aFirstFree,
+ MDunBufferCorrection* aCorrection ) = 0;
+
+ /**
+ * Adds connection monitor callback for either local media or network side
+ * by connection ID
+ * Error will be added to aIndex:th endpoint
+ *
+ * @since S60 3.2
+ * @param aIndex Index where to add new connection monitor callback
+ * @param aCallback Pointer to object whose callbacks will be called
+ * @param aDirection Direction of operation to monitor for read/write error
+ * @param aSignal Receive also signal change if ETrue
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ virtual TInt DoAddConnMonCallback( TInt aIndex,
+ MDunConnMon* aCallback,
+ TDunDirection aDirection,
+ TBool aSignal ) = 0;
+
+ /**
+ * Adds error to consider as no error condition when doing any of the four
+ * endpoint's read/writer operation
+ * Error will be added to aIndex:th endpoint
+ *
+ * @since S60 3.2
+ * @param aIndex Index where to add new "no error" code
+ * @param aError Error code to consider as "no error"
+ * @param aDirection One of four data transfer endpoints where to add a
+ * skipped error code
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ virtual TInt DoAddSkippedError( TInt aIndex,
+ TInt aError,
+ TDunDirection aDirection ) = 0;
+
+ /**
+ * Issues transfers requests for aIndex:th transfer objects
+ *
+ * @since S60 3.2
+ * @param aIndex Index to transfer objects that will be activated
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ virtual TInt DoIssueTransferRequests( TInt aIndex ) = 0;
+
+ /**
+ * Stops transfers for aIndex:th transfer objects
+ *
+ * @since S60 3.2
+ * @param aIndex Index to transfer objects that will be stopped
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ virtual TInt DoStopTransfers( TInt aIndex ) = 0;
+
+ /**
+ * Free aIndex:th channel's objects
+ *
+ * @since S60 3.2
+ * @param aIndex Index of channel to free
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ virtual TInt DoFreeChannel( TInt aIndex ) = 0;
+
+ };
+
+/**
+ * Utility accessor class for other than CDunTransporter classes
+ * Basically a collection of miscellaneous helper methods
+ *
+ * @lib dunutils.lib
+ * @since S60 v3.2
+ */
+NONSHARABLE_CLASS( MDunTransporterUtilityAux )
+ {
+
+public:
+
+ /**
+ * Gets local ID counterpart of a network ID
+ *
+ * @since S60 3.2
+ * @param aComm Network ID to search for
+ * @return Null if ID not found, otherwise found ID
+ */
+ virtual TConnId GetLocalId( RComm* aComm ) = 0;
+
+ /**
+ * Notifies when serious read/write error is detected on a connection
+ *
+ * @since S60 3.2
+ * @param aComm Non-null if error on RComm
+ * @param aSocket Non-null if error on RSocket
+ * @param aConnReason Reason of connection error
+ * @param aCallbacks Callbacks to notify on connections error
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ virtual TInt DoNotifyConnectionNotOk(
+ RComm* aComm,
+ RSocket* aSocket,
+ TDunConnectionReason& aConnReason,
+ RPointerArray<MDunConnMon>& aCallbacks) = 0;
+
+ };
+
+/**
+ * Utility class for other CDunTransporter classes
+ * This class implements basic functionality that is shared by different
+ * CDunTransporter classes, also for simplifying CDunTransporter itself
+ *
+ * @lib dunutils.lib
+ * @since S60 v3.2
+ */
+NONSHARABLE_CLASS( CDunTransUtils ) : public CBase,
+ public MDunActivityManager,
+ public MDunTransporterUtility,
+ public MDunTransporterUtilityAux
+ {
+
+public:
+
+ /**
+ * Two-phased constructor.
+ * @param aParent Parent class owning this friend class (CDunTransporter)
+ * @param aPluginManager Callback to call when notification via
+ * MDunPluginManager to be made
+ * @return Instance of self
+ */
+ static CDunTransUtils* NewL( CDunTransporter& aParent,
+ MDunPluginManager* aPluginManager );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CDunTransUtils();
+
+private:
+
+ CDunTransUtils( CDunTransporter& aParent,
+ MDunPluginManager* aPluginManager );
+
+ void ConstructL();
+
+ /**
+ * Manages service advertisement status changes
+ *
+ * @since S60 5.0
+ * @param aAdvertise New advertisement status
+ * @param aCreation ETrue if channel creation
+ * EFalse if channel free
+ * @return None
+ */
+ void ManageAdvertisementStatusChange( TBool aAdvertise,
+ TBool aCreation=EFalse );
+
+ /**
+ * Creates empty channel data
+ *
+ * @since S60 3.2
+ * @param aChannel Channel data to set empty
+ * @return None
+ */
+ void CreateEmptyChannelData( TDunChannelData& aChannel );
+
+ /**
+ * Creates new buffer if source buffer defined, otherwise already existing
+ * buffer will be used
+ *
+ * @since S60 3.2
+ * @param aSrcBuffer Source buffer
+ * @param aSrcPtr Pointer to source buffer
+ * @param aDstBuffer Destination buffer
+ * @param aDstPtr Pointer to destination buffer
+ * @param aItemsInCs Items in cleanup stack, will be incremented if
+ * necessary
+ * @return None
+ */
+ void DoCreateBufferLC( TUint8* aSrcBuffer,
+ TPtr8* aSrcPtr,
+ TUint8*& aDstBuffer,
+ TPtr8*& aDstPtr,
+ TInt aBufferLength,
+ TInt& aItemsInCs );
+
+ /**
+ * Creates new signal copy object if source defined, otherwise
+ * already existing will be used
+ *
+ * @since S60 3.2
+ * @param aSrcSignalCopy Source signal copy object
+ * @param aDstSignalCopy Destination signal copy object
+ * @param aItemsInCs Items in cleanup stack, will be incremented if
+ * necessary
+ * @return None
+ */
+ void DoCreateSignalCopyLC( CDunSignalCopy* aSrcSignalCopy,
+ CDunSignalCopy*& aDstSignalCopy,
+ TInt& aItemsInCs );
+
+ /**
+ * Creates new signal notify object if source defined, otherwise
+ * already existing will be used
+ *
+ * @since S60 3.2
+ * @param aSrcSignalNotify Source signal notify object
+ * @param aDstSignalNotify Destination signal notify object
+ * @param aItemsInCs Items in cleanup stack, will be incremented if
+ * necessary
+ * @return None
+ */
+ void DoCreateSignalNotifyLC( CDunSignalNotify* aSrcSignalNotify,
+ CDunSignalNotify*& aDstSignalNotify,
+ TInt& aItemsInCs );
+
+ /**
+ * Creates transfer objects for reader and writer if sources defined,
+ * otherwise already existing ones will be used
+ *
+ * @since S60 3.2
+ * @param aSrcReader Source reader object
+ * @param aDstReader Destination reader object
+ * @param aItemsInCs Items in cleanup stack, will be incremented if
+ * necessary
+ * @return None
+ */
+ void DoCreateUpTransferObjectL( CDunUpstream* aSrcReader,
+ CDunUpstream*& aDstReader,
+ TInt& aItemsInCs );
+
+ /**
+ * Creates transfer objects for reader and writer if sources defined,
+ * otherwise already existing ones will be used
+ *
+ * @since S60 3.2
+ * @param aSrcReader Source reader object
+ * @param aDstReader Destination reader object
+ * @param aItemsInCs Items in cleanup stack, will be incremented if
+ * necessary
+ * @return None
+ */
+ void DoCreateDownTransferObjectL( CDunDownstream* aSrcReader,
+ CDunDownstream*& aDstReader,
+ TInt& aItemsInCs );
+
+ /**
+ * Resets/frees network data of aIndex:th channel
+ *
+ * @since S60 3.2
+ * @param aIndex Index of channel to reset/free
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt DeleteOneNetworkData( TInt aIndex );
+
+ /**
+ * Deletes local data of aIndex:th channel
+ *
+ * @since S60 3.2
+ * @param aIndex Index of channel to delete
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt DeleteOneLocalData( TInt aIndex );
+
+ /**
+ * Deletes buffering objects of aIndex:th channel
+ *
+ * @since S60 3.2
+ * @param aIndex Index of channel to delete
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt DeleteBuffering( TInt aIndex );
+
+// from base class MDunTransporterUtility
+
+ /**
+ * From MDunTransporterUtility.
+ * Initializes first free channel
+ *
+ * @since S60 3.2
+ * @param aLocalIdNew Identifier of the new local endpoint
+ * @return Symbian error code on error, found index otherwise
+ */
+ TInt InitializeFirstFreeChannel( TConnId aLocalIdNew );
+
+ /**
+ * From MDunTransporterUtility.
+ * Allocates a channel by creating and setting local media independent
+ * objects
+ * This is a common method used by exported local media dependent methods
+ *
+ * @since S60 3.2
+ * @param aBufferLength Buffer length selected for this channel
+ * @param aFirstFree Index to first free channel data
+ * @param aCorrection Pointer to object implementing buffer correction
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ void DoAllocateChannelL( RComm* aComm,
+ TInt& aBufferLength,
+ TInt aFirstFree,
+ MDunBufferCorrection* aCorrection );
+
+ /**
+ * From MDunTransporterUtility.
+ * Adds connection monitor callback for either local media or network side
+ * by connection ID
+ * Connection monitor will be added to aIndex:th endpoint
+ *
+ * @since S60 3.2
+ * @param aIndex Index where to add new connection monitor callback
+ * @param aCallback Pointer to object whose callbacks will be called
+ * @param aDirection Direction of operation to monitor for read/write error
+ * @param aSignal Receive also signal change if ETrue
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt DoAddConnMonCallback( TInt aIndex,
+ MDunConnMon* aCallback,
+ TDunDirection aDirection,
+ TBool aSignal );
+
+ /**
+ * From MDunTransporterUtility.
+ * Adds error to consider as no error condition when doing any of the four
+ * endpoint's read/writer operation
+ * Error will be added to aIndex:th endpoint
+ *
+ * @since S60 3.2
+ * @param aIndex Index where to add new "no error" code
+ * @param aError Error code to consider as "no error"
+ * @param aDirection One of four data transfer endpoints where to add a
+ * skipped error code
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt DoAddSkippedError( TInt aIndex,
+ TInt aError,
+ TDunDirection aDirection );
+
+ /**
+ * From MDunTransporterUtility.
+ * Issues transfers requests for aIndex:th transfer objects
+ *
+ * @since S60 3.2
+ * @param aIndex Index to transfer objects that will be activated
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt DoIssueTransferRequests( TInt aIndex );
+
+ /**
+ * From MDunTransporterUtility.
+ * Stops transfers for aIndex:th transfer objects
+ *
+ * @since S60 3.2
+ * @param aIndex Index to transfer objects that will be stopped
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt DoStopTransfers( TInt aIndex );
+
+ /**
+ * From MDunTransporterUtility.
+ * Free aIndex:th channel's objects
+ *
+ * @since S60 3.2
+ * @param aIndex Index of channel to free
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt DoFreeChannel( TInt aIndex );
+
+// from base class MDunTransporterUtilityAux
+
+ /**
+ * From MDunTransporterUtilityAux.
+ * Gets local ID counterpart of a network ID
+ *
+ * @since S60 3.2
+ * @param aComm Network ID to search for
+ * @return Null if ID not found, otherwise found ID
+ */
+ TConnId GetLocalId( RComm* aComm );
+
+ /**
+ * From MDunTransporterUtilityAux.
+ * Notifies when serious read/write error is detected on a connection
+ *
+ * @since S60 3.2
+ * @param aComm Non-null if error on RComm
+ * @param aSocket Non-null if error on RSocket
+ * @param aConnReason Reason of connection error
+ * @param aCallbacks Callbacks to notify on connections error
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt DoNotifyConnectionNotOk(
+ RComm* aComm,
+ RSocket* aSocket,
+ TDunConnectionReason& aConnReason,
+ RPointerArray<MDunConnMon>& aCallbacks);
+
+// from base class MDunActivityManager
+
+ /**
+ * From MDunActivityManager.
+ * Notifies about activity on a channel
+ *
+ * @since S60 3.2
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt NotifyChannelActivity();
+
+ /**
+ * From MDunActivityManager.
+ * Notifies about inactivity on a channel
+ *
+ * @since S60 3.2
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt NotifyChannelInactivity();
+
+private: // data
+
+ /**
+ * Parent class owning this friend class (CDunTransporter)
+ */
+ CDunTransporter& iParent;
+
+ /**
+ * Array of abstractions of each "channel" (from parent iParent)
+ * One TDunChannelData entry contains objects needed for one channel
+ */
+ RArray<TDunChannelData>& iChannelData;
+
+ /**
+ * Array of service advertisement data for each plugin (from parent iParent)
+ * 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;
+
+ };
+
+#endif // C_CDUNTRANSUTILS_H