diff -r 798ee5f1972c -r 826cea16efd9 dvrengine/CommonRecordingEngine/inc/CCRSock.h --- 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 -#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 -