diff -r 000000000000 -r 29b1cd4cb562 bluetooth/btexample/example/btsocket/tsrc/tclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetooth/btexample/example/btsocket/tsrc/tclient.cpp Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,201 @@ +// Copyright (c) 2005-2009 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: +// + +#include + +#ifdef __EPOC32__ +#include +#endif + +#include "cbtclient.h" + +class CMyClient: public CBase, MConnectionObserver, MBluetoothSocketNotifier + { + public: + void ConstructL(); + ~CMyClient(); + virtual void HandleNewConnection(CBluetoothSocket* aConnection); + virtual void HandleConnectFailed(TInt aError); + //Virtual functions from MBluetoothSocketNotifier + virtual void HandleConnectCompleteL(TInt aErr); + virtual void HandleAcceptCompleteL(TInt aErr); + virtual void HandleShutdownCompleteL(TInt aErr); + virtual void HandleSendCompleteL(TInt aErr); + virtual void HandleReceiveCompleteL(TInt aErr); + virtual void HandleIoctlCompleteL(TInt aErr); + virtual void HandleActivateBasebandEventNotifierCompleteL(TInt aErr, TBTBasebandEventNotification& aEventNotification); + CBtClient* iBtClient; + RSdp iSdpSession; + RSocketServ iSocketServ; + CBluetoothSocket* iConnection; + }; + +RTest test(_L("tClient")); +CMyClient *TheClient; + +void CMyClient::ConstructL() + { + User::LeaveIfError(iSocketServ.Connect()); + User::LeaveIfError(iSdpSession.Connect()); + TBTServiceSecurity sec; + sec.SetAuthentication(EMitmNotRequired); + sec.SetAuthorisation(EFalse); + sec.SetEncryption(EFalse); + sec.SetDenied(EFalse); + iBtClient = CBtClient::NewL(TUUID(KSerialPortUUID), //register as a serial port so we can be easily seen + iSocketServ, + *this, + &sec); + iBtClient->ConnectToRemoteDeviceL(*this); + } + +CMyClient::~CMyClient() + { + delete iBtClient; + delete iConnection; + iSdpSession.Close(); + iSocketServ.Close(); + } + +void CMyClient::HandleNewConnection(CBluetoothSocket* aConnection) + { + test(iConnection==NULL); + iConnection = aConnection; + } + +void CMyClient::HandleConnectFailed(TInt /*aErr*/) + { + test(0); + } + +_LIT8(KTestData, "tclient 12345678"); +void CMyClient::HandleConnectCompleteL(TInt aErr) + { + test(aErr == KErrNone); + iConnection->Send(KTestData, 0); + } + +void CMyClient::HandleAcceptCompleteL(TInt /*aErr*/) + { + test(0); + } + +void CMyClient::HandleShutdownCompleteL(TInt /*aErr*/) + { + delete iConnection; + iConnection = NULL; + User::After(10000000); + CActiveScheduler::Stop(); + } + +void CMyClient::HandleSendCompleteL(TInt aErr) + { + test(aErr == KErrNone); + iConnection->Shutdown(RSocket::EImmediate); + } + +void CMyClient::HandleReceiveCompleteL(TInt /*aErr*/) + { + test(0); + } + +void CMyClient::HandleIoctlCompleteL(TInt /*aErr*/) + { + test(0); + } + +void CMyClient::HandleActivateBasebandEventNotifierCompleteL(TInt /*aErr*/, TBTBasebandEventNotification& /*aEventNotification*/) + { + test(0); + } + +void RunTestL() + { + CActiveScheduler *sched = new(ELeave)CActiveScheduler; + CleanupStack::PushL(sched); + CActiveScheduler::Install(sched); + TheClient = new(ELeave) CMyClient; + CleanupStack::PushL(TheClient); + TheClient->ConstructL(); + CActiveScheduler::Start(); + CleanupStack::PopAndDestroy(TheClient); + CleanupStack::PopAndDestroy(sched); + } + +#if defined (__WINS__) +#define PDD_NAME _L("ECDRV") +#define LDD_NAME _L("ECOMM") +#else // __GCC32__ +#define PDD_NAME _L("EUART1") +#define LDD_NAME _L("ECOMM") +#endif + +//this is not needed with a UI, only text shell +void LoadLDD_PDD() + { + TInt r; +#ifdef __EPOC32__ + r=StartC32(); + if (r!=KErrNone && r!=KErrAlreadyExists) + { + test.Printf(_L("Failed %d!\n\r"),r); + test(r==KErrNone); + } + else + test.Printf(_L("Started C32\n")); +#endif + test.Printf(_L("Loading PDD\n")); + r=User::LoadPhysicalDevice(PDD_NAME); + if (r!=KErrNone && r!=KErrAlreadyExists) + { + test.Printf(_L("Failed %d!\n\r"),r); + test(r==KErrNone); + } + else + test.Printf(_L("Loaded LDD\n")); + test.Printf(_L("Loading LDD\n")); + r=User::LoadLogicalDevice(LDD_NAME); + if (r!=KErrNone && r!=KErrAlreadyExists) + { + test.Printf(_L("Failed %d!\n\r"),r); + test(r==KErrNone); + } + else + test.Printf(_L("Loaded PDD\n")); + } + + +TInt E32Main() + { + User::SetJustInTime(ETrue); + __UHEAP_MARK; + CTrapCleanup* cleanupStack=CTrapCleanup::New(); + + LoadLDD_PDD(); + TRAPD(err,RunTestL()); // Ignore err + + if (err != KErrNone) + { + test.Printf(_L("Error %d"), err); + test.Getch(); + } + + test.Close(); + delete cleanupStack; + __UHEAP_MARKEND; + + return err; + } +