--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/headsetsimulator/core/src/Server/hsserver.cpp Wed Sep 15 15:59:44 2010 +0200
@@ -0,0 +1,278 @@
+/*
+ * 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 "hsserver.h"
+#include "hsclientobservers.h"
+#include "debug.h"
+
+CHsServer* CHsServer::NewL( RSocketServ &aSocketServ )
+ {
+ CHsServer* self = CHsServer::NewLC( aSocketServ );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+CHsServer* CHsServer::NewLC( RSocketServ &aSocketServ )
+ {
+ CHsServer* self = new ( ELeave ) CHsServer( aSocketServ );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+CHsServer::~CHsServer()
+ {
+ TRACE_FUNC_ENTRY
+
+ if ( iSocketServer )
+ {
+ delete iSocketServer;
+ }
+
+ if ( iBlankSocket )
+ {
+ delete iBlankSocket;
+ }
+
+ TRACE_FUNC_EXIT
+ }
+
+TInt CHsServer::Listen()
+ {
+ TRACE_FUNC_ENTRY
+
+ TInt error = KErrNone;
+ TProtocolDesc protDesc;
+ TBTSockAddr addr;
+ TProtocolName protName( KRFCOMMDesC );
+
+ if ( iListen )
+ {
+ TRACE_FUNC_EXIT
+ return KErrAlreadyExists;
+ }
+
+ error = iSServ.FindProtocol( protName, protDesc );
+ if ( error != KErrNone )
+ {
+ TRACE_FUNC_EXIT
+ return error;
+ }
+
+ TRAP(error, iSocketServer = CBluetoothSocket::NewL(*this, iSServ,
+ protDesc.iSockType, protDesc.iProtocol));
+
+ if ( error != KErrNone )
+ {
+ TRACE_FUNC_EXIT
+ return error;
+ }
+
+ error = iSocketServer->GetOpt( KRFCOMMGetAvailableServerChannel,
+ KSolBtRFCOMM, iPort );
+ if ( error != KErrNone )
+ {
+ TRACE_FUNC_EXIT
+ return error;
+ }
+
+ addr.SetPort( iPort );
+ addr.SetSecurity( iServerSecurity );
+
+ error = iSocketServer->Bind( addr );
+ if ( error != KErrNone )
+ {
+ TRACE_FUNC_EXIT
+ return error;
+ }
+
+ error = iSocketServer->Listen( KListenQueueSize );
+ if ( error != KErrNone )
+ {
+ TRACE_FUNC_EXIT
+ return error;
+ }
+
+ if ( !iBlankSocket )
+ {
+ TRAP(error, iBlankSocket=CBluetoothSocket::NewL(*this, iSServ));
+ }
+
+ if ( error != KErrNone )
+ {
+ TRACE_FUNC_EXIT
+ return error;
+ }
+
+ error = iSocketServer->Accept( *iBlankSocket );
+
+ iListen = ETrue;
+
+ TRACE_INFO( ( _L("Returned value = %d"), error) );
+ TRACE_FUNC_EXIT
+
+ return error;
+ }
+
+TBool CHsServer::IsReady()
+ {
+ return iListen;
+ }
+
+void CHsServer::Shutdown()
+ {
+ TRACE_FUNC_ENTRY
+
+ if ( iSocketServer )
+ {
+ if ( iListen )
+ {
+ iSocketServer->CancelAccept();
+ iListen = EFalse;
+ }
+
+ // Return value may be ignored
+ iSocketServer->Shutdown( RSocket::EImmediate );
+ delete iSocketServer;
+ iSocketServer = NULL;
+ }
+ else
+ {
+ TRAP_IGNORE( HandleShutdownCompleteL(KErrNone) );
+ }
+
+ TRACE_FUNC_EXIT
+ }
+
+void CHsServer::SetNewClientObserver(
+ MHsAcceptNewClientObserver &aNewClientObserv )
+ {
+ iNewClientObserver = &aNewClientObserv;
+ }
+
+TInt CHsServer::GetPort()
+ {
+ return iPort;
+ }
+
+void CHsServer::GetSocketAndTryToConnectL( const TBTSockAddr &aAddr )
+ {
+ TRACE_FUNC_ENTRY
+ TBTSockAddr sockaddr( aAddr );
+ TProtocolName protocolName( KRFCOMMDesC );
+ TProtocolDesc protocolDesc;
+
+ if ( iBlankSocket2 != NULL )
+ {
+ delete iBlankSocket2;
+ iBlankSocket2 = NULL;
+ }
+
+ User::LeaveIfError( iSServ.FindProtocol( protocolName, protocolDesc ) );
+ iBlankSocket2 = CBluetoothSocket::NewL( *this, iSServ,
+ protocolDesc.iSockType, protocolDesc.iProtocol );
+ User::LeaveIfError( iBlankSocket2->Connect( sockaddr ) );
+ TRACE_FUNC_EXIT
+ }
+
+CHsServer::CHsServer( RSocketServ &aSocketServ ) :
+ iSServ( aSocketServ )
+ {
+ iServerSecurity.SetUid( TUid::Uid( 0x10ff ) );
+ iServerSecurity.SetAuthentication( EFalse );
+ iServerSecurity.SetAuthorisation( EFalse );
+ iServerSecurity.SetEncryption( EFalse );
+ }
+
+void CHsServer::ConstructL()
+ {
+
+ }
+
+void CHsServer::HandleConnectCompleteL( TInt aErr )
+ {
+ TRACE_FUNC_ENTRY
+ TRACE_INFO( ( _L("aErr = %d"), aErr) );
+
+ iNewClientObserver->HandleNewClientL( aErr == KErrNone ? iBlankSocket2
+ : NULL, aErr );
+ if ( aErr != KErrNone )
+ {
+ delete iBlankSocket2;
+ }
+ iBlankSocket2 = NULL;
+
+ TRACE_FUNC_EXIT
+ }
+
+void CHsServer::HandleAcceptCompleteL( TInt aErr )
+ {
+ TRACE_FUNC_ENTRY
+ TRACE_INFO( ( _L("aErr = %d"), aErr) );
+
+ if ( iNewClientObserver )
+ {
+ iNewClientObserver->HandleNewClientL( iBlankSocket, aErr );
+ }
+ else
+ {
+ iNewClientObserver->HandleNewClientL( NULL, KErrBadHandle );
+ delete iBlankSocket;
+ }
+ iBlankSocket = NULL;
+ iBlankSocket = CBluetoothSocket::NewL( *this, iSServ );
+ User::LeaveIfError( iSocketServer->Accept( *iBlankSocket ) );
+
+ TRACE_FUNC_EXIT
+ }
+
+void CHsServer::HandleShutdownCompleteL( TInt /** aErr */)
+ {
+ TRACE_FUNC_ENTRY
+
+ if ( iBlankSocket )
+ {
+ delete iBlankSocket;
+ iBlankSocket = NULL;
+ }
+ if ( iSocketServer )
+ {
+ delete iSocketServer;
+ iSocketServer = NULL;
+ }
+ iListen = EFalse;
+
+ TRACE_FUNC_EXIT
+ }
+
+void CHsServer::HandleSendCompleteL( TInt /** aErr */)
+ {
+
+ }
+
+void CHsServer::HandleReceiveCompleteL( TInt /** aErr */)
+ {
+
+ }
+
+void CHsServer::HandleIoctlCompleteL( TInt /** aErr */)
+ {
+ }
+
+void CHsServer::HandleActivateBasebandEventNotifierCompleteL( TInt /** aErr */,
+ TBTBasebandEventNotification& /** aEventNotification */)
+ {
+
+ }