dvrengine/CommonRecordingEngine/inc/CCRSock.h
branchRCL_3
changeset 22 826cea16efd9
parent 21 798ee5f1972c
child 23 13a33d82ad98
--- a/dvrengine/CommonRecordingEngine/inc/CCRSock.h	Thu Aug 19 10:54:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,521 +0,0 @@
-/*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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:    Class for wrapping RSocket and CActive*
-*/
-
-
-
-
-#ifndef CCRSOCK_H
-#define CCRSOCK_H
-
-// INCLUDES
-#include <in_sock.h>
-#include "videoserviceutilsLogger.h"
-
-// CONSTANTS
-const TInt KMaxDataSize( 8192 );
-
-// MACROS
-// None
-
-// DATA TYPES
-// None
-
-// FORWARD DECLARATIONS
-class CCRSock;
-class MCRSockObserver; 
-
-// CLASS DECLARATION
-
-/**
-*  Class for receiving data via socket.
-*
-*  This is solely owned by CCRSock and considered a helper class.
-*  Because there may be send and receive operations outstanding
-*  at the same time, one RSocket needs 2  CActive instances.
-*  @lib CommonRecordingEngine.lib
-*  @since Series 60 3.0
-*/
-class CCRSockReader : public CActive
-    {
-
-public: // Constructors and destructor
-
-    /**
-    * Two-phased constructor.
-    * @param aSock is reference to socket object 
-    *        that this class instance serves.
-    * @since Series 60 3.0
-    * @param aConnection a connection.
-    * @param aSockServer a socket server.
-    * @return CCRSockReader pointer to CCRSockReader class.
-    */
-    static CCRSockReader* NewL( CCRSock& aSock, 
-                                RConnection& aConnection,
-                                RSocketServ& aSockServer );
-    /**
-    * Destructor.
-    */
-    virtual ~CCRSockReader();
-    
-public: // New Methods
-
-    /**
-    * Method for starting reading.
-    * @since Series 60 3.0
-    * @param none
-    * @return always succeeds
-    */
-    void IssueRead( void );
-    
-private: // Constructors and destructors
-    
-    /**
-    * Default constructor
-    */
-    CCRSockReader( CCRSock& aSock,
-                   RConnection& aConnection,
-                   RSocketServ& aSockServer );
-    /** 
-    * 2nd phase constructor 
-    */
-    void ConstructL();
-
-private: // Methods from base classes
-
-    /** 
-    * From CActive.
-    * This is the work-horse of this class.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void RunL();
-    
-    /** 
-    * From CActive.
-    * This cancels work in progress.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */     
-    void DoCancel();
-    
-    /** 
-    * From CActive.
-    * This handles errors.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none an status of method.
-    */     
-    TInt RunError( TInt aError );
-    
-private: // Data
-    
-    /**
-    * Socket.
-    */
-    CCRSock& iSock;
-
-    /** 
-    * connection to use.
-    */
-    RConnection& iConnection;
-    
-    /**
-    * Socket server.
-    */
-    RSocketServ& iSockServer;
-
-#if defined ( LIVE_TV_FILE_TRACE ) || defined ( LIVE_TV_RDEBUG_TRACE ) 
-    TUint recvCount; 
-    TUint recvBytes; 
-#endif // LIVE_TV_FILE_TRACE || LIVE_TV_RDEBUG_TRACE
-    };
-
-/**
-* Encapsulates a socket in easy-to-use way
-*/
-class CCRSock : public CActive
-    {
-
-public: // Data types
-
-    /**
-     * Enum for communicating what is going on with this socket 
-     */
-    enum TCRSockStatus
-        {
-        EInitNeeded = 1000,
-        EIdle,       /**< Nothing in progress */
-        EResolving,   /**< Finding out addr to connect to */
-        EConnecting,  /**< Addr found but no connection yet */
-        ESending,     /**< Request to send has been issued but not yet completed */
-        EListening,   /**< Request to wait for incoming connection is not yet compl. */     
-        EFailed       /**< Something went wrong */
-        };
-
-public: // Constructors and destructor
-
-    /**
-    * Two-phased constructor.
-    * @param aObserver is reference to object that 
-    *        gets notified when something happens
-    * @param aSockId is a number that this class instance
-    *        will keep, do nothing with, and us the same 
-    *        number when reporting statuses back to observer.
-    *        motivation here is that same observer may have
-    *        several instances of this class all reporting
-    *        via same method. 
-    * @param aProtoTCP ETrue for TCP socket, EFalse for UDP
-    * @param aIssueRead ETrue to automatically receive data from
-    *        socket and return to observer through DataReceived.
-    *        EFalse to let user handle receiving data.
-    * @return CCRSock pointer to CCRSock class
-    */
-    static CCRSock* NewL( MCRSockObserver& aObserver,
-                          TInt aSockId,
-                          RConnection& aConnection,
-                          RSocketServ& aSockServer,
-                          TBool aProtoTCP,
-                          TBool aIssueRead );
-
-    /**
-    * Destructor.
-    */
-    virtual ~CCRSock();
-
-public: // New methods
-
-    /**
-    * method for causing the socket to connect to remote addr.
-    * @since Series 60 3.0
-    * @param aAddr is the addr to connect to 
-    * @param aPort is ip port number to connect to
-    * @param aLocalPort specifies the local port to bind to. If 0 random
-    *        port is selected
-    * @return KErrNone is returned if connection is all right
-    */
-    TInt ConnectSock( const TDesC& aAddr,
-                      TUint aPort,
-                      TInt aLocalPort = 0 );
-
-    /**
-    * method for causing the socket to connect to remote addr without
-    * doing DNS lookup. 
-    * @since Series 60 3.0
-    * @param aAddr is the addr to connect to 
-    * @param aLocalPort specifies the local port to bind to. If 0 random
-    *        port is selected       
-    * @return KErrNone is returned if connection is all right
-    */
-    TInt ConnectSock( const TSockAddr& aAddr, 
-                      TInt aLocalPort = 0);
-                      
-    /**
-    * method for causing the socket to start listening at part.
-    * @since Series 60 3.0
-    * @param aPort is the port to listen to 
-    * @return KErrNone is returned if connection is all right
-    */
-    TInt ListenPort( TUint aPort );
-    
-    /**
-    * method for joining a multicast group
-    * @since Series 60 3.0
-    * @param aGruopAddr IPv6 address of the group to join
-    * @return KErrNone on success
-    */
-    TInt JoinGroup( const TInetAddr& aGroupAddr );
-    
-    /**
-    * method for sending data over the sock
-    * @since Series 60 3.0
-    * @param aData is the data that is sent over sock
-    * @return none, succeeds always, if something goes wrong, it does it in async way
-    */      
-    void SendData( const TDesC8& aDataThatIsSentOverSocket );
-        
-    /**
-    * Method for asking the status: what is going on 
-    * @since Series 60 3.0
-    * @param none.
-    * @return socket status.
-    */
-    CCRSock::TCRSockStatus SockStatus( void ) const;
-
-    /** 
-    * Helper class may frobnicate our private parts:
-    */
-    friend class CCRSockReader;
-    
-    /** 
-    * Method for getting the addr this socket is connected to in the other end
-    * @since Series 60 3.0
-    * @param none.
-    * @return the addr
-    */
-    TInetAddr ConnectedAddr( void );
-
-    /** 
-    * Method for getting the addr this socket is connected to in the local end
-    * @since Series 60 3.0
-    * @param none.
-    * @return the addr
-    */
-    TInetAddr LocalAddr( void );
-    
-    /** 
-    * Method for setting the "where to send addr" and this is applicable for UDP socks
-    * @param aAddr is the new addr.
-    * @return none
-    */
-    void SetToAddr( const TInetAddr &aAddr );
-
-    /**
-    * Gets reference underlying Symbian socket implementation. To be used with caution.
-    * @since Series 60 3.0
-    * @param none.
-    * @return reference to underlying ES_SOCK socket
-    */
-    RSocket& Socket();
-
-private: // Constructors and destructors
-
-    /**
-    * default constructor
-    */
-    CCRSock( MCRSockObserver& aObserver,
-             TInt aSockId,
-             RConnection& aConnection,
-             RSocketServ& aSockServer,
-             TBool aProtoTCP,
-             TBool aIssueRead );
-
-    /** 
-    * 2nd phase constructor 
-    */
-    void ConstructL();
-       
-private: // Methods from base classes
-
-    /** 
-    * From CActive.
-    * This is the work-horse of this class.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */
-    void RunL();
-    
-    /** 
-    * From CActive.
-    * This cancels work in progress.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none.
-    */     
-    void DoCancel();
-    
-    /** 
-    * From CActive.
-    * This handles errors.
-    * @since Series 60 3.0
-    * @param none.
-    * @return none an status of method.
-    */     
-    TInt RunError( TInt aError );
-
-private: // New methods
-
-    /**
-    * Handles send buffer.
-    */
-    void CopySendData( const TDesC8& aData );
-
-    /**
-    * Performs cleanup.
-    */
-    void CleanUp();
-    
-private: // Data types
-    
-    /**
-    * This is used to read/write.
-    */
-    RSocket iSocket;
-    
-    /**
-    * status for above socket.
-    */
-    TBool iIsiSocketOpen;
-    
-    /**
-    * This is used to listen.
-    * Not used when we use this class for outgoing connection.
-    */
-    RSocket iListenSocket;  
-    
-    /**
-    * Status for above socket.
-    */
-    TBool iIsiListenSocketOpen;
-    
-    /**
-    * This is used to find out addr by name.
-    */
-    RHostResolver iResolver;       
-    /**
-    * This is needed to get hold of RSocket.
-    */
-    RSocketServ& iSockServer;
-    
-    /**
-    * This is where we connect to.
-    */
-    TNameEntry iHostAddress;
-    
-    /**
-    * this is our internal status.
-    */
-    TCRSockStatus iSockStatus;
-    
-    /**
-    * Our observer.
-    */
-    MCRSockObserver& iObserver;
-    
-    /**
-    * Our own internal id.
-    */
-    const TInt iSockId;
-    
-    /**
-    * This tells whether we're about to connect via udp or tcp.
-    */
-    TBool iProtoTCP;
-    
-    /**
-    * This tells whether receiving data from socket is handled by CCRSockReader or used.
-    */
-    TBool iIssueRead;
-    
-    /**
-    * This tells the port we're about to connect.
-    */
-    TUint iPort;
-    
-    /**
-    * This tells the port we're binding locally.
-    */
-    TUint iLocalPort;
-    
-    /**
-    * This is where we keep the data received.
-    */
-    HBufC8* iReceivedDataBuf;
-    
-    /**
-    * Pointer to received data buffer.
-    */
-    TPtr8 iReceivedData;
-    
-    /**
-    * This is where we keep the data being sent.
-    */
-    HBufC8* iSentDataBuf;
-
-    /**
-    * Pointer to send data buffer.
-    */
-    TPtr8 iSentData;  
-    
-    /**
-    * This tells how much data we got.
-    */
-    TSockXfrLength iReceivedDataLen;
-    
-    /**
-    * This tells how much data we sent.
-    */
-    TSockXfrLength iSentDataLen;        
-    
-    /** 
-    * This tells where the packet was received from.
-    */
-    TInetAddr iFromAddr;
-    
-    /**
-    * This tells if we've been listening or receiving in the past
-    */
-    TBool iWasListening;
-    
-    /**
-    * This is instance of a helper class doing the reading part.
-    */
-    CCRSockReader *iReader;
-    
-    /**
-    * This tells where to send UDP packets.
-    */
-    TInetAddr iToAddr;
-    
-    /**
-    * Connection to use.
-    */
-    RConnection& iConnection;
-        
-#if defined ( LIVE_TV_FILE_TRACE ) || defined ( LIVE_TV_RDEBUG_TRACE ) 
-    TUint sendCount; 
-    TUint sendBytes; 
-#endif // LIVE_TV_FILE_TRACE || LIVE_TV_RDEBUG_TRACE
-
-    };
-
-/**
-* Class for live tv socket "client" e.g. the user of class CCRSock.
-*/
-class MCRSockObserver
-    {
-
-public:
-
-    /**
-    * This method is called after some data has been received from socket.
-    * @since Series 60 3.0
-    * @param aData is descriptor containing the data received. 
-    *        ownership of data is not passed via this call. 
-    * @return none.
-    */
-    virtual void DataReceived( TInt aSockId,
-                               const TDesC8& aData ) = 0;
-
-    /**
-    * This method is called after status of socket changes.
-    * @since Series 60 3.0
-    * @param aSockId a socket id.
-    * @param aStatus is sock status.
-    * @param aError a error code.
-    * @return none
-    */
-    virtual void SockStatusChange( TInt aSockId,
-                                   CCRSock::TCRSockStatus aStatus,
-                                   TInt aError ) = 0;
-    };
-
-#endif // CCRSOCK_H
-
-// End of file
-