connectionmonitoring/connmon/connectionmonitor/inc/CPsdFax.h
changeset 0 5a93021fdf25
child 71 9f263f780e41
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connmon/connectionmonitor/inc/CPsdFax.h	Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,486 @@
+/*
+* Copyright (c) 2002-2009 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:  PSD fax connection information.
+*
+*/
+
+#ifndef __CPSDFAX_H
+#define __CPSDFAX_H
+
+#include <etel.h>
+#include <etelmm.h>
+#include <etelpckt.h>
+#include <pcktcs.h>
+#include <rconnmon.h>
+
+#include "ConnMonDef.h"
+
+class CConnMonServer;
+class CPsdFaxUpNotifier;
+class CPsdFaxStatusNotifier;
+class CPsdFaxConnectionData;
+
+_LIT( KExternalName, "external" );
+
+// max PSD connection number
+const TInt KMaxPsdConnectionCount = 2;
+
+
+/**
+ * CPsdFax
+ * @lib CONMONN.LIB
+ */
+NONSHARABLE_CLASS( CPsdFax ) : public CBase
+    {
+    public:
+        // constructors and destructor
+        CPsdFax(
+                CConnMonServer* aServer,
+                RTelServer* aTelServer,
+                RMobilePhone* aMobilePhone,
+                RPacketService* aPacketService );
+
+        void ConstructL();
+        ~CPsdFax();
+
+        /**
+        * Opens the PDP context.
+        * @since
+        * @param aIndex The index of the PSD connection data table.
+        * @param aName The name of the context.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt OpenContext( const TUint aIndex, const TDes& aName );
+
+        /**
+        * Checks if external PDP context is still valid.
+        * @since
+        * @param aConnectionId The connection ID of the PSD connection.
+        * @return ETrue if context is valid, EFalse otherwise.
+        */
+        TBool IsValid( const TUint aConnectionId );
+
+        /**
+        * Checks PSD connection data table index
+        * @since
+        * @param aConnectionId The connection ID of the PSD connection.
+        * @return index if found, ohterwise otherwise a system wide error code.
+        */
+        TInt ConnectionIndex( const TUint aConnectionId );
+
+        /**
+        * Sets connection ID
+        * @since
+        * @param aIndex The connection index of the PSD connection.
+        * @param aConnectionId The connection ID of the PSD connection.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt SetConnectionId( const TUint aIndex, const TUint aConnectionId );
+
+        /**
+        * Gets the fax bearer.
+        * @since
+        * @param aBearer On return, contains the bearer.
+        * @param aBearerInfo On return, contains the detailed(new concept) bearer.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt GetBearer( TInt& aBearer, TBearerInfo& aBearerInfo );
+
+        /**
+        * Gets the access point name of the fax connection.
+        * @since
+        * @param aConnectionId The connection ID of the PSD connection.
+        * @param aName On return, contains the access point name.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt GetApn( const TUint aConnectionId, TDes& aName );
+
+        /**
+        * Gets the protocol type of the fax connection.
+        * @since
+        * @param aConnectionId The connection ID of the PSD connection.
+        * @param aProtocolType On return, contains the protocol type.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt GetProtocolType( const TUint aConnectionId, TInt& aProtocolType );
+
+        /**
+        * Gets the status of the fax connection.
+        * @since
+        * @param aConnectionId The connection ID of the PSD connection.
+        * @param aStatus On return, contains the connection status.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt GetStatus( const TUint aConnectionId, TInt& aStatus );
+
+        /**
+        * Gets the amount of data sent and received (in bytes).
+        * @since
+        * @param aConnectionId The connection ID of the PSD connection.
+        * @param aDLVolume On return, contains the amount received data.
+        * @param aULVolume On return, contains the amount sent data.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt GetDataVolumes( const TUint aConnectionId, TUint& aDLVolume, TUint& aULVolume );
+
+        /**
+        * Gets the amount of data sent and received (in bytes).
+        * @since
+        * @param aConnectionId The connection ID of the PSD connection.
+        * @param aTime On return, contains start time of the connection.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt GetStartTime( const TUint aConnectionId, TTime& aTime );
+
+        /**
+        * Stops the external connection.
+        * @since
+        * @param aConnectionId The connection ID of the PSD connection.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt Stop( const TUint aConnectionId );
+
+         /**
+        * Delete connections allocated recources.
+        * @since
+        * @return void
+        */
+        void DeleteConnections();
+
+    private:
+
+    private: // Data
+        // Pointer to ConnMon server
+        CConnMonServer* iServer;
+
+        // Pointer to ETel server
+        RTelServer* iTelServer;
+
+        // Pointer to mobile phone
+        RMobilePhone* iMobilePhone;
+
+        // Pointer to the packet service
+        RPacketService* iPacketService;
+
+        // Connection up event watcher
+        CPsdFaxUpNotifier* iConnUpNotifier;
+
+        // Data table for each connection
+        CPsdFaxConnectionData* iConnectionData[KMaxPsdConnectionCount];
+    };
+
+
+/**
+ * CPsdFaxUpNotifier
+ * @lib CONNMON.LIB
+ */
+NONSHARABLE_CLASS( CPsdFaxUpNotifier ) : public CActive
+    {
+    public: // Constructors and destructor
+        CPsdFaxUpNotifier(
+                CPsdFax* aFaxModule,
+                CConnMonServer* aServer,
+                RPacketService* aPacketService );
+
+        void Construct();
+        ~CPsdFaxUpNotifier();
+
+    public:  // New methods
+        /**
+        * Requests a new event (connection up) from ETEL.
+        * @since
+        * @param
+        * @return void
+        */
+        void Receive();
+
+    private: // Methods from base classes
+         /**
+        * From CActive Cancels the asyncronous request
+        * @since
+        * @param
+        * @return void
+        */
+        void DoCancel();
+
+         /**
+        * From CActive Handles the the event that has arrived from ETEL.
+        * @since
+        * @param
+        * @return void
+        */
+        void RunL();
+
+    private: // Data
+        CPsdFax*        iFaxModule;
+        CConnMonServer* iServer;
+        RPacketService* iPacketService;
+        TBuf<KMaxName>  iName;
+        TEventInfo      iEventInfo;
+    };
+
+
+/**
+ * CPsdFaxConnectionData
+ * @lib CONNMON.LIB
+ */
+NONSHARABLE_CLASS( CPsdFaxConnectionData ) : public CBase
+    {
+    public: // Constructors and destructor
+        CPsdFaxConnectionData(
+                CPsdFax* aFaxModule,
+                CConnMonServer* aServer,
+                RPacketService* aPacketService );
+
+        void ConstructL();
+        TInt Construct();
+        ~CPsdFaxConnectionData();
+
+        /**
+        * Opens the PDP context.
+        * @since
+        * @param aName The name of the context.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt OpenContext( const TDes& aName );
+
+        /**
+        * Closes the PDP context.
+        * @since
+        * @return void
+        */
+        void CloseContext();
+
+        /**
+        * Checks if the PDP context is open.
+        * @since
+        * @return ETrue if context is open, EFalse otherwise.
+        */
+        TBool IsOpen();
+
+        /**
+        * Gets the amount of data sent and received (in bytes).
+        * @since
+        * @param aDLVolume On return, contains the amount received data.
+        * @param aULVolume On return, contains the amount sent data.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt GetDataVolumes( TUint& aDLVolume, TUint& aULVolume ) const;
+
+        /**
+        * Stops the external connection.
+        * @since
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt Stop();
+
+        /**
+        * Removes connection from server tables.
+        * @since
+        * @return void.
+        */
+        void RemoveFromServer();
+
+        /**
+        * Sets connection ID.
+        * @since
+        * @param aConnectionId The connection ID of the PSD connection.
+        * @return void.
+        */
+        void SetConnectionId( const TUint& aConnectionId );
+
+        /**
+        * Gets connection ID.
+        * @since
+        * @return connection ID.
+        */
+        TUint ConnectionId() const;
+
+        /**
+        * Resets connection start time.
+        * @since
+        * @return void.
+        */
+        void ResetStartTime();
+
+        /**
+        * Gets connection start time.
+        * @since
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt GetStartTime( TTime& aTime ) const;
+
+        /**
+        * Gets the access point name of the fax connection.
+        * @since
+        * @param aName On return, contains the access point name.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt GetApn( TDes& aName );
+
+        /**
+        * Converts the access point name to correct format (UNICODE).
+        * @since
+        * @param aResult On return, contains the access point name in correct format.
+        * @param aName Access point name in the original format (UNICODE).
+        * @return void.
+        */
+        void ConvertAPN( TDes& aResult, const TDesC& aName ) const ;
+
+        /**
+        * Converts the access point name to correct format (UNICODE).
+        * @since
+        * @param aResult On return, contains the access point name in correct format.
+        * @param aName Access point name in the original format (UTF8).
+        * @return void.
+        */
+        void ConvertAPN( TDes& aResult, const TDesC8& aName ) const;
+
+        /**
+        * Gets the protocl type of the fax connection.
+        * @since
+        * @param aProtocolType On return, contains the protocol type.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt GetProtocolType( TInt& aProtocolType );
+
+        /**
+        * Gets the status of the fax connection.
+        * @since
+        * @param aStatus On return, contains the connection status.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt GetStatus( TInt& aStatus ) const;
+
+        /**
+        * Maps the PDP context status to nifvar values
+        * @since
+        * @param aStatus On return, contains the mapped connection status.
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt MapStatus( TInt& aStatus ) const;
+
+        /**
+        * Checks if the context is closed.
+        * @since
+        * @return ETrue if context is closed, EFalse otherwise.
+        */
+        TBool IsEnded();
+
+
+    private:
+        // Connection ID
+        TUint iConnectionId;
+
+        // ETrue if context is open
+        TBool iOpen;
+
+        // ETrue if start time is valid
+        TBool iTimeValid;
+
+        // ETrue if connection has been up and then ended (killed)
+        TBool iEnded;
+
+        // Start time
+        TTime iStartTime;
+
+        // Open fax context
+        RPacketContext iContext;
+
+        // pointer to PsdFax module
+        CPsdFax* iFaxModule;
+
+        // pointer to ConnMon server
+        CConnMonServer* iServer;
+
+        // pointer to packet service
+        RPacketService* iPacketService;
+
+        // Connection status event watcher
+        CPsdFaxStatusNotifier* iStatusNotifier;
+    };
+
+
+/**
+ * CPsdFaxStatusNotifier
+ * @lib CONNMON.LIB
+ */
+NONSHARABLE_CLASS( CPsdFaxStatusNotifier ) : public CActive
+    {
+    public: // Constructors and destructor
+        CPsdFaxStatusNotifier(
+                CPsdFax* aFaxModule,
+                CConnMonServer* aServer,
+                RPacketService* aPacketService,
+                CPsdFaxConnectionData* aConnDataModule );
+
+        void Construct();
+        ~CPsdFaxStatusNotifier();
+
+    public:  // New methods
+        /**
+        * Starts listening to status change events from ETEL.
+        * @since
+        * @param aContext The open context to listen to.
+        * @return void
+        */
+        void Start( const RPacketContext& aContext );
+
+        /**
+        * Requests a new event (status changed) from ETEL.
+        * @since
+        * @param
+        * @return void
+        */
+        void Receive();
+
+    private: // Methods from base classes
+         /**
+        * From CActive Cancels the asyncronous request
+        * @since
+        * @param
+        * @return void
+        */
+        void DoCancel();
+
+         /**
+        * From CActive Handles the the event that has arrived from ETEL.
+        * @since
+        * @param
+        * @return void
+        */
+        void RunL();
+
+    private:  // New methods
+        /**
+        * Sends connection create event to client.
+        * @since
+        * @return KErrNone if successfull, otherwise a system wide error code.
+        */
+        TInt SendConnectionCreateEvent();
+
+    private: // Data
+        CPsdFax*                       iFaxModule;
+        CConnMonServer*                iServer;
+        RPacketService*                iPacketService;
+        CPsdFaxConnectionData*         iConnDataModule;
+        TEventInfo                     iEventInfo;
+        RPacketContext                 iContext;
+        RPacketContext::TContextStatus iContextStatus;
+
+    };
+
+#endif // __CPSDFAX_H
+
+// End-of-file