diff -r 000000000000 -r 09774dfdd46b internetradio2.0/streamsourcesrc/irstationconnection.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/internetradio2.0/streamsourcesrc/irstationconnection.cpp Mon Apr 19 14:01:53 2010 +0300 @@ -0,0 +1,242 @@ +/* +* Copyright (c) 2006-2007 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: Station connection implementation +* +*/ + + +#include "irstationconnection.h" +#include "irdebug.h" +#include "iricyflowinitiator.h" +#include "iricyflowreader.h" +#include "irsocketopener.h" +#include "irstationdataobserver.h" + +// --------------------------------------------------------------------------- +// CIRStationConnection::NewL +// --------------------------------------------------------------------------- +// +CIRStationConnection* CIRStationConnection::NewL( + MIRStationConnectionObserver& aConnectionObserver, + MIRStationDataObserver& aDataObserver ) + { + CIRStationConnection* self = new ( ELeave ) CIRStationConnection( aConnectionObserver, + aDataObserver ); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// CIRStationConnection::~CIRStationConnection +// --------------------------------------------------------------------------- +// +CIRStationConnection::~CIRStationConnection() + { + delete iSocketOpener; + + delete iIcyFlowInitiator; + + delete iIcyFlowReader; + + iSocket.Close(); + iUri.Close(); + } + +// --------------------------------------------------------------------------- +// CIRStationConnection::CIRStationConnection +// --------------------------------------------------------------------------- +// +CIRStationConnection::CIRStationConnection( MIRStationConnectionObserver& aConnectionObserver, + MIRStationDataObserver& aDataObserver ) : + iConnectionObserver( aConnectionObserver ), iDataObserver( aDataObserver ) + { + } + +// --------------------------------------------------------------------------- +// CIRStationConnection::ConstructL +// --------------------------------------------------------------------------- +// +void CIRStationConnection::ConstructL() + { + IRLOG_DEBUG( "CIRStationConnection::ConstructL" ); + iConnectionType = EIRUndefined; + } + +// --------------------------------------------------------------------------- +// CIRStationConnection::ConnectL +// --------------------------------------------------------------------------- +// +void CIRStationConnection::ConnectL( const TDesC& aUri ) + { + IRLOG_DEBUG( "CIRStationConnection::ConnectL" ); + iUri.Close(); + iUri.CreateL( aUri ); + + iConnectionType = EIRCandidate; + + delete iSocketOpener; + iSocketOpener = NULL; + + iSocketOpener = CIRSocketOpener::NewL( iSocket, *this ); + iSocketOpener->ConnectL( iUri ); + IRLOG_DEBUG( "CIRStationConnection::ConnectL - Exiting" ); + } + +// --------------------------------------------------------------------------- +// CIRStationConnection::Close +// --------------------------------------------------------------------------- +// +void CIRStationConnection::Close() + { + IRLOG_DEBUG( "CIRStationConnection::Close" ); + if ( iSocketOpener ) + { + iSocketOpener->Cancel(); + } + + if ( iIcyFlowInitiator ) + { + iIcyFlowInitiator->Cancel(); + } + + iChannelInfo.iStationName.Zero(); + iChannelInfo.iGenre.Zero(); + iChannelInfo.iBitRate.Zero(); + iChannelInfo.iContentType.Zero(); + iChannelInfo.iSongTitle.Zero(); + iChannelInfo.iArtistName.Zero(); + iChannelInfo.iMetaInterval = 0; + iChannelInfo.iMetaDataTracker = 0; + iChannelInfo.iReadSize = 0; + iChannelInfo.iAudioDataOffset = 0; + + if ( iIcyFlowReader ) + { + iIcyFlowReader->Cancel(); + } + + iSocket.Close(); + IRLOG_DEBUG( "CIRStationConnection::Close - Exiting." ); + } + +// --------------------------------------------------------------------------- +// CIRStationConnection::SetConnectionType +// --------------------------------------------------------------------------- +// +void CIRStationConnection::SetConnectionType( TIRStationConnectionType aType ) + { + iConnectionType = aType; + } + +// --------------------------------------------------------------------------- +// CIRStationConnection::ConnectionType +// --------------------------------------------------------------------------- +// +CIRStationConnection::TIRStationConnectionType CIRStationConnection::ConnectionType() const + { + return iConnectionType; + } + +// --------------------------------------------------------------------------- +// CIRStationConnection::Uri +// --------------------------------------------------------------------------- +// +const TDesC& CIRStationConnection::Uri() const + { + return iUri; + } + +// --------------------------------------------------------------------------- +// CIRStationConnection::ContentType +// --------------------------------------------------------------------------- +// +const TDesC8& CIRStationConnection::ContentType() const + { + return iChannelInfo.iContentType; + } + +// --------------------------------------------------------------------------- +// CIRStationConnection::FillBuffer +// --------------------------------------------------------------------------- +// +void CIRStationConnection::FillBuffer( TDes8& aInputBuffer ) + { + __ASSERT_DEBUG( iIcyFlowReader, User::Invariant() ); + +/*lint -save -e774 (Info -- Boolean within 'if' always evaluates to True )*/ + if ( iIcyFlowReader ) + { + iIcyFlowReader->FillBuffer( aInputBuffer ); + } +/*lint -restore*/ + } + +// --------------------------------------------------------------------------- +// CIRStationConnection::ConnectionReady +// --------------------------------------------------------------------------- +// +void CIRStationConnection::ConnectionReady() + { + IRLOG_INFO2( "CIRStationConnection::ConnectionReady (%d).", this ); + delete iIcyFlowInitiator; + iIcyFlowInitiator = NULL; + TRAPD( err, iIcyFlowInitiator = CIRIcyFlowInitiator::NewL( iSocket, iUri, *this, + iChannelInfo ) ) + if ( err == KErrNone ) + { + iIcyFlowInitiator->RequestFlow(); + } + else + { + ConnectionError( err ); + } + IRLOG_DEBUG( "CIRStationConnection::ConnectionReady - Exiting." ); + } + +// --------------------------------------------------------------------------- +// CIRStationConnection::FlowReady +// --------------------------------------------------------------------------- +// +void CIRStationConnection::FlowReady() + { + IRLOG_INFO2( "CIRStationConnection::FlowReady (conn=%d).", this ); + delete iIcyFlowReader; + iIcyFlowReader = NULL; + TRAPD( err, iIcyFlowReader = CIRIcyFlowReader::NewL( iSocket, *this, iDataObserver, + iChannelInfo ) ) + if ( err == KErrNone ) + { + iIcyFlowReader->Start(); + iConnectionObserver.ConnectionSuccessful( this ); + } + else + { + ConnectionError( err ); + } + IRLOG_DEBUG( "CIRStationConnection::FlowReady - Exiting." ); + } + +// --------------------------------------------------------------------------- +// CIRStationConnection::ConnectionError +// --------------------------------------------------------------------------- +// +void CIRStationConnection::ConnectionError( TInt aErrorCode ) + { + IRLOG_ERROR3( "CIRStationConnection::ConnectionError - err=%d, conn=%d.", aErrorCode, this ); + Close(); + iConnectionObserver.ConnectionError( this, aErrorCode ); + IRLOG_DEBUG( "CIRStationConnection::ConnectionError - Exiting." ); + }