satengine/SatServer/Engine/inc/CSatBIPGPRSDataChannel.h
changeset 0 ff3b6d0fd310
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/satengine/SatServer/Engine/inc/CSatBIPGPRSDataChannel.h	Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,428 @@
+/*
+* 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:  GPRS Data channel
+*
+*/
+
+
+
+#ifndef CSATBIPGPRSDATACHANNEL_H
+#define CSATBIPGPRSDATACHANNEL_H
+
+#include  <e32base.h>
+#include  <es_enum.h>           // TConnectionInfo
+#include  <in_sock.h>
+#include  <etelqos.h>
+
+#include  "MSatBIPDataChannel.h"
+#include  "MSatBIPUtils.h"
+#include  "TSatQoSParser.h"
+
+class CSatBIPUtils;
+class MSatSendDataObserver;
+class CSatBIPDataSender;
+class CSatBIPDataReceiver;
+class MSatConnectionObserver;
+class TSatChannelIdInfo;
+class TNotificationEventBuf;
+class CSubConQosR5ParamSet;
+class CSubConExtensionParameterSet;
+class CSatSActiveWrapper;
+class CSatBIPSubConnEventObserver;
+
+/**  Maximum Address Length */
+const TInt KMaxAddressLength = 50;
+
+/**  Enum for connection stage */
+enum TSatBIPConnectionStage
+    {
+    ESatBIPClosed,
+    ESatBIPConnect,
+    ESatBIPConnected,
+    ESatBIPCancelled
+    };
+
+/**
+ *  GPRS Data channel for Bearer Independent Protocol.
+ *  
+ *  @lib SatServer
+ *  @since Series 60 3.0
+ */
+class CSatBIPGPRSDataChannel : public CActive,
+                               public MSatBIPDataChannel
+    {
+public:  
+
+// Constructors and destructor
+
+    /**
+     * Two-phased constructor.
+     * @param aUtils Interface for EventDownload commands
+     * @param aSocketServer Reference to Socket server.
+     * @param aChannelId ID for this data channel
+     * @param aConnection Reference to Connection
+     * @param aSubConnection ID Reference to SubConnection
+     */
+    static CSatBIPGPRSDataChannel* NewL( CSatBIPUtils& aUtils,
+        RSocketServ& aSocketServer,
+        TSatChannelIdInfo& aChannelId,
+        RConnection& aConnection,
+        RSubConnection& aSubConnection
+         );
+
+    /**
+     * Two-phased constructor.
+     * @param aUtils Interface for EventDownload commands
+     * @param aSocketServer Reference to Socket server.
+     * @param aChannelId ID for this data channel needs to add to comments
+     * @param aConnection Reference to Connection
+     * @param aSubConnection ID Reference to SubConnection
+     */
+    static CSatBIPGPRSDataChannel* NewLC( CSatBIPUtils& aUtils,
+        RSocketServ& aSocketServer,
+        TSatChannelIdInfo& aChannelId,
+        RConnection& aConnection,
+        RSubConnection& aSubConnection );
+    
+    /**
+     * Destructor.
+     */
+    virtual ~CSatBIPGPRSDataChannel();
+
+// New functions
+
+    /**
+     * Notification that data has been received.
+     * @param aData Holds received data.
+     */
+    void DataReceivedNotificationL( const TDesC8& aData );
+
+    /**
+     * Error notification while receiving
+     * @param aError The error code
+     */
+    void DataReceiveError( const TInt aError );
+        
+    /**
+     * Granted parameters event is received correctly.
+     * @param aEventBuffer Holds the negotiated QoS parameters.
+     */
+    void GrantedEventReceivedL( const TNotificationEventBuf& aEventBuffer );
+        
+    /**
+     * Return the subconnection.
+     * @return Reference to SubConnection
+     */
+    RSubConnection& SubConnection() const;
+        
+// From base class MSatBIPDataChannel
+
+    /**
+     * From MSatBIPDataChannel Sets up connection. Does not activate it yet.
+     * @param aConnParams includes all needed information to open the connection.
+     */
+    void SetupConnectionL( const TSatBipConnectionInfo& aConnParams );
+
+    /**
+     * Notification that data has been received.
+     * @param aData Holds received data.
+     */
+    void ActivateConnectionL( MSatConnectionObserver* aObserver );
+
+    /**
+     * From MSatBIPDataChannel Returns Negotiated bearer parameters
+     * @param aResult Output Negotiated bearer parameters
+     */
+    void GetNegotiatedQoSParams( RSat::TBearerParams& aResult ) const;
+
+    /**
+     * From MSatBIPDataChannel Sends the data or stores it into a
+     * buffer for later send.
+     * @param aData Data to be send.
+     * @param aSendImmedeately Indicates whether to send immediately or
+     *        store data to buffer for later send.
+     * @param aFreeBufferSize The number of bytes of empty size in the buffer
+     * @param aObserver Observer of the SendData procedure. When data is sent,
+     *        observer gets notification. If data is stored for later send,
+     *        observer is not notified.
+     * @return Error code indicating the status of the command execution.
+     */
+    TInt SendDataL( const TDes8& aData, 
+        const TBool aSendImmediately,
+        TInt& aFreeBufferSize,
+        MSatSendDataObserver* aObserver );
+
+    /**
+     * From MSatBIPDataChannel Receives the data from the buffer.
+     * @param aData Data to receive.
+     * @param aBytesToRead The number of requested bytes to return
+     * @param aAvailableBytes Number of unread bytes left in the buffer.
+     * @return Error code indicating the status of the command execution.
+     */
+    TInt ReceiveDataL( TDes8& aData, const TInt aBytesToRead,
+        TInt& aAvailableBytes );
+
+    /**
+     * From MSatBIPDataChannel Returns the ID of this data channel.
+     * @return ID of this channel.
+     */
+    TInt ChannelId() const;
+    
+    /**
+     * From MSatBIPDataChannel Returns the ID of this data channel to
+     * ChannelStatus.
+     * @return ID that can be placed to ChannelStatus
+     */
+    TUint8 ChannelStatusChannelId() const;
+
+    /**
+     * From MSatBIPDataChannel Returns the status of this channel.
+     * @return Status of this data channel
+     */
+    TInt Status() const;
+
+    /**
+     * From MSatBIPDataChannel Closes the connection and empties the buffers.
+     */
+    void CloseChannel();
+    
+    /**
+     * From MSatBIPDataChannel Cancels all activities.
+     */
+    void CancelAll();
+
+    /**
+     * From MSatBIPDataChannel Indicates whether PDP contex is active or not.
+     * @return TBool indicating context activation.
+     */
+    TBool IsContextActive() const;
+
+    /**
+     * From MSatBIPDataChannel Returns connection information
+     * @return Connection information
+     */
+    const MSatBIPDataChannel::TSatBipConnectionInfo& ConnInfo() const;
+
+    /**
+     * From MSatBIPDataChannel Close socket if type is udp.
+     */
+     void StopUdpSocket();
+   
+
+ // From base class CActive
+ 
+    /**
+     * From CActive
+     */
+    void RunL();
+
+    /**
+     * From CActive
+     */
+    void DoCancel();
+
+    /**
+     * From CActive
+     */
+    TInt RunError( TInt aError );
+        
+
+
+private:
+
+    /**
+     * C++ default constructor.
+     * @param aUtils Interface for EventDownload commands
+     * @param aSocketServer Reference to Socket server.
+     * @param aChannelId ID for this data channel
+     * @param aConnection  Reference to RConnection
+     * @param aSubConnection Reference to RSubConnection
+     */
+    CSatBIPGPRSDataChannel( CSatBIPUtils& aUtils,
+        RSocketServ& aSocketServer,
+        TSatChannelIdInfo& aChannelId,
+        RConnection& aConnection,
+        RSubConnection& aSubConnection );
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     */
+    void ConstructL();
+
+    /**
+     * Opens and connects / binds socket
+     * @param aAddrFamily Address family to use.
+     */
+    void OpenSocketL();
+
+    /**
+     * Opens sub-connection and attaches socket into it
+     */
+    void OpenSubConnection();
+
+    /**
+     * Sets QoS parameters to connection
+     */
+    void SetSubConQoSParamsL();
+    
+    /**
+     * Starts to receive data from socket
+     */
+    void StartReceiveL();
+    
+    /**
+     * Defines the IP address.
+     * @param aAddr An 8-bit descriptor containing the IP address
+     * @return IP address in TBuf descriptor, which may be 8- or 16-bit.
+     */
+    TInetAddr DestAddress( const TPtrC8& aAddr );
+        
+    /**
+     * Write QoS Values used for requesting Primary PDP context to RCmManager
+     */
+    void WritePrimaryPDPContextQoSParamsL();
+    
+    /**
+     * Write Default QoS values to RCmManager
+     */
+    void WriteDefaultQoSParamsL(); 
+    
+    /**
+     * Sets up QoS parameters for connection or subconnection
+     */
+    void SetConnQoSParamsL();
+    
+    /**
+     * Get the negotiated QoS parameters from granted event
+     * @param aEvent SubConNotificationEvent
+     * @param aNegQoSRel5 hold the negotiated QoS in Rel5 got from event
+     * @return errCode if it fails to get the parameters from event.
+     */
+    TInt GetSubConQoSR5ParamsFromEvent(
+        CSubConNotificationEvent& aEvent, 
+        TSatQoSParser::TQoSRel5& aNegQoSRel5 );
+        
+private:    // Data
+        
+    /**
+     * Receive Buffer
+     */
+    TBuf8<KSatBIPMinReceiveBufferSize> iRcvBuffer;
+        
+    /**
+     * Status of this channel
+     */
+    TInt iChannelStatus;
+        
+    /**
+     * Socket to send / receive data
+     */
+    RSocket iSocket;
+       
+    /**
+     * Connection information
+     */
+    MSatBIPDataChannel::TSatBipConnectionInfo iConnInfo;
+
+    /**
+     * Destination address
+     */
+    TInetAddr iDestAddr;
+
+    /**
+     * Sourceaddress
+     */
+    TInetAddr iSourceAddr;
+
+    /**
+     * Reference to BIP Utils.
+     * Not own.
+     */
+    CSatBIPUtils& iUtils;
+        
+    /**
+     * Connection stage
+     */
+    TSatBIPConnectionStage iConnStage;
+    
+    /**
+     * Indicates the protocol
+     */
+    TBool iUseTcpProtocol;
+        
+    /**
+     * Reference to a socket server
+     * Not own.
+     */
+    RSocketServ& iSocketServ;
+        
+    /**
+     * Identifier for this channel
+     * Not own.
+     */
+    TSatChannelIdInfo& iChannelId;
+        
+    /**
+     * Connection information
+     *  Not own
+     */
+    RConnection& iConnection;
+    
+    /**
+     * Subconnection, represents a data channel
+     *  Not own
+     */
+    RSubConnection& iSubConnection;
+        
+    /**
+     * SendBuffer
+     * Own.
+     */
+    HBufC8* iSendStore;
+        
+    /**
+     * SendData observer
+     * Own.
+     */
+    MSatSendDataObserver* iSendDataObserver;
+
+    /**
+     * Sender object
+     * Own.
+     */
+    CSatBIPDataSender* iSender;
+
+    /**
+     * Receiver object
+     * Own.
+     */
+    CSatBIPDataReceiver* iReceiver;
+
+    /**
+     * Connection observer
+     * Own.
+     */
+    MSatConnectionObserver* iConnectionObserver;
+        
+    /**
+     * Observer for SubConnection parameters event;
+     * Own.
+     */
+    CSatBIPSubConnEventObserver* iSubConnEventObserver;
+    
+    };
+
+#endif      // CSATBIPGPRSDATACHANNEL_H
+
+