--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/headsetsimulator/core/src/Server/hsaudioserver.cpp Wed Sep 15 15:59:44 2010 +0200
@@ -0,0 +1,227 @@
+/*
+ * Component Name: Headset Simulator
+ * Author: Comarch S.A.
+ * Version: 1.0
+ * Copyright (c) 2010 Comarch S.A.
+ *
+ * This Software is submitted by Comarch S.A. to Symbian Foundation Limited on
+ * the basis of the Member Contribution Agreement entered between Comarch S.A.
+ * and Symbian Foundation Limited on 5th June 2009 (“Agreement”) and may be
+ * used only in accordance with the terms and conditions of the Agreement.
+ * Any other usage, duplication or redistribution of this Software is not
+ * allowed without written permission of Comarch S.A.
+ *
+ */
+
+#include "hsaudioserver.h"
+#include "debug.h"
+
+CHsAudioServer* CHsAudioServer::NewL( RSocketServ& aSocketServ,
+ TBool aPullAudio )
+ {
+ CHsAudioServer* self = CHsAudioServer::NewLC( aSocketServ, aPullAudio );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+CHsAudioServer* CHsAudioServer::NewLC( RSocketServ& aSocketServ,
+ TBool aPullAudio )
+ {
+ CHsAudioServer* self = new ( ELeave ) CHsAudioServer( aSocketServ,
+ aPullAudio );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+CHsAudioServer::~CHsAudioServer()
+ {
+
+ if ( iSCOSocket )
+ {
+ delete iSCOSocket;
+ }
+ }
+
+void CHsAudioServer::ListenL()
+ {
+ TRACE_FUNC_ENTRY
+
+ if ( iListening )
+ {
+ User::Leave( KErrInUse );
+ }
+ if ( iSCOSocket )
+ {
+ delete iSCOSocket;
+ iSCOSocket = NULL;
+ }
+ iSCOSocket = CBluetoothSynchronousLink::NewL( *this, iSServ );
+
+ User::LeaveIfNull( iSCOSocket );
+
+ User::LeaveIfError( iSCOSocket->AcceptConnection( iAcceptedPackets ) );
+
+ TRACE_FUNC_EXIT
+ }
+
+void CHsAudioServer::ConnectL( const TBTDevAddr &aAddr )
+ {
+ TRACE_FUNC_ENTRY
+
+ if ( iConnected )
+ {
+ User::Leave( KErrInUse );
+ }
+ if ( iSCOSocket )
+ {
+ delete iSCOSocket;
+ iSCOSocket = NULL;
+ }
+ iSCOSocket = CBluetoothSynchronousLink::NewL( *this, iSServ );
+
+ User::LeaveIfNull( iSCOSocket );
+
+ iAddr = aAddr;
+ iSCOSocket->SetupConnection( aAddr, iAcceptedPackets );
+
+ TRACE_FUNC_EXIT
+ }
+
+void CHsAudioServer::Disconnect()
+ {
+ TRACE_FUNC_ENTRY
+
+ if ( iSCOSocket && iConnected )
+ {
+ iSCOSocket->CancelReceive();
+ iSCOSocket->CancelSend();
+ iSCOSocket->Disconnect();
+ delete iSCOSocket;
+ iSCOSocket = NULL;
+ iConnected = EFalse;
+ iListening = EFalse;
+
+ ListenL();
+ }
+
+ TRACE_FUNC_EXIT
+ }
+
+void CHsAudioServer::Shutdown()
+ {
+ TRACE_FUNC_ENTRY
+
+ if ( iSCOSocket )
+ {
+ if ( iListening )
+ {
+ iSCOSocket->CancelAccept();
+ }
+ delete iSCOSocket;
+ iSCOSocket = NULL;
+ iListening = EFalse;
+ iConnected = EFalse;
+ }
+
+ TRACE_FUNC_EXIT
+ }
+
+void CHsAudioServer::SetPullAudio( TBool aPullAudio )
+ {
+ iPullAudio = aPullAudio;
+ }
+
+TBool CHsAudioServer::IsConnected()
+ {
+ return iConnected;
+ }
+
+TBool CHsAudioServer::IsListen()
+ {
+ return iListening;
+ }
+
+CHsAudioServer::CHsAudioServer( RSocketServ& aSocketServ, TBool aPullAudio ) :
+ iSServ( aSocketServ ), iAcceptedPackets( EAnySCOPacket ), iListening(
+ EFalse ), iPullAudio( aPullAudio )
+ {
+
+ }
+
+void CHsAudioServer::ConstructL()
+ {
+
+ }
+
+void CHsAudioServer::HandleSetupConnectionCompleteL( TInt aErr )
+ {
+ TRACE_FUNC_ENTRY
+ TRACE_INFO( ( _L("aErr = %d"), aErr) );
+ iConnected = ETrue;
+ iListening = EFalse;
+ iSCOSocket->AcceptConnection( TBTSyncPackets( iAcceptedPackets ) );
+
+ if ( aErr == KErrNone && iPullAudio )
+ {
+ User::LeaveIfError( iSCOSocket->Receive( iReceiveBuffer ) );
+ }
+
+ TRACE_FUNC_EXIT
+
+ }
+
+void CHsAudioServer::HandleDisconnectionCompleteL( TInt aErr )
+ {
+ TRACE_FUNC_ENTRY
+ TRACE_INFO( ( _L("aErr = %d"), aErr) );
+ iConnected = EFalse;
+ iListening = ETrue;
+ iSCOSocket->AcceptConnection( TBTSyncPackets( iAcceptedPackets ) );
+
+ TRACE_FUNC_EXIT
+ }
+void CHsAudioServer::HandleAcceptConnectionCompleteL( TInt aErr )
+ {
+ TRACE_FUNC_ENTRY
+ TRACE_INFO( ( _L("aErr = %d"), aErr) );
+ iConnected = ETrue;
+ iListening = EFalse;
+
+ if ( aErr == KErrNone && iPullAudio && iSCOSocket )
+ {
+ User::LeaveIfError( iSCOSocket->Receive( iReceiveBuffer ) );
+ }
+
+ TRACE_FUNC_EXIT
+ }
+
+void CHsAudioServer::HandleSendCompleteL( TInt aErr )
+ {
+ TRACE_FUNC_ENTRY
+ TRACE_INFO( ( _L("aErr = %d"), aErr) );
+
+ if ( iPullAudio )
+ {
+ User::LeaveIfError( iSCOSocket->Receive( iReceiveBuffer ) );
+ }
+
+ TRACE_FUNC_EXIT
+ }
+void CHsAudioServer::HandleReceiveCompleteL( TInt aErr )
+ {
+ TRACE_FUNC_ENTRY
+ TRACE_INFO( ( _L("aErr = %d"), aErr) );
+
+ if ( iPullAudio && aErr != KErrNone )
+ {
+ User::LeaveIfError( iSCOSocket->Receive( iReceiveBuffer ) );
+
+ }
+ if ( aErr == KErrDisconnected )
+ {
+ Disconnect();
+ }
+
+ TRACE_FUNC_EXIT
+ }