--- /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." );
+ }