--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothapitest/bluetoothsvs/T_BTSockAPI/src/T_CBluetoothSocketData.cpp Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,2743 @@
+/*
+* 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 "T_CBluetoothSocketData.h"
+#include "T_BTUtil.h"
+#include "T_TBTSockAddrChild.h"
+#include "T_BTDevAddrData.h"
+#include "T_BTSockAddrData.h"
+
+// EPOC includes
+#include <e32math.h>
+
+
+/*@{*/
+/// Constant Literals used.
+
+/// Parameters
+_LIT(KExpectedReply, "expectedreply");
+_LIT(KCBluetoothSocket, "cbluetoothsocket");
+_LIT(KConnectData, "connectdata");
+_LIT(KData, "data");
+_LIT(KDesOption, "desoption");
+_LIT(KDisconnectData, "disconnectData");
+_LIT(KEquals, "equals");
+_LIT(KExpectNull, "expectnull");
+_LIT(KFlags, "flags");
+_LIT(KGetDes, "getdes");
+_LIT(KIntOption, "intoption");
+_LIT(KNamedIntOption, "namedintoption");
+_LIT(KNamedProtocol, "named_protocol");
+_LIT(KOptionLevel, "optionlevel");
+_LIT(KOptionName, "optionname");
+_LIT(KPort, "port");
+_LIT(KProtocol, "protocol");
+_LIT(KQueueSize, "queuesize");
+_LIT(KRSocket, "rsocket");
+_LIT(KServiceBits, "servicebits");
+_LIT(KSockType, "socktype");
+_LIT(KTBTSockAddr, "tbtsockaddr");
+_LIT(KTSockAddr, "tsockaddr");
+_LIT(KUid, "uid");
+_LIT(KUseAccept2, "useaccept2");
+_LIT(KUseAlternateNotifier, "usealternatenotifier");
+_LIT(KUseDeprecated, "usedeprecated");
+_LIT(KUseRecv2, "userecv2");
+_LIT(KUseSend2, "usesend2");
+_LIT(KHexBTAddrL, "hex_btaddr_l");
+_LIT(KHexBTAddrR, "hex_btaddr_r");
+_LIT(KTBTDevAddr, "tbtdevaddr");
+_LIT(KCallTwice, "calltwice");
+_LIT(KMTUSize, "mtusize");
+_LIT(KState, "state");
+_LIT(KConstructorType, "constructortype");
+_LIT(KSniffMode, "sniffmode");
+_LIT(KSniffDelay, "sniffdelay");
+
+/// CBluetoothSocket
+_LIT(KCmdAccept, "Accept");
+_LIT(KCmdActivateBasebandEventNotifier, "ActivateBasebandEventNotifier");
+_LIT(KCmdActivateParkRequester, "ActivateParkRequester");
+_LIT(KCmdActivateSniffRequester, "ActivateSniffRequester");
+_LIT(KCmdAllowLowPowerModes, "AllowLowPowerModes");
+_LIT(KCmdAllowRoleSwitch, "AllowRoleSwitch");
+_LIT(KCmdBind, "Bind");
+_LIT(KCmdCancelAccept, "CancelAccept");
+_LIT(KCmdCancelAll, "CancelAll");
+_LIT(KCmdCancelBasebandEventNotifier, "CancelBasebandEventNotifier");
+_LIT(KCmdCancelConnect, "CancelConnect");
+_LIT(KCmdCancelIoctl, "CancelIoctl");
+_LIT(KCmdCancelLowPowerModeRequester, "CancelLowPowerModeRequester");
+_LIT(KCmdCancelRead, "CancelRead");
+_LIT(KCmdCancelRecv, "CancelRecv");
+_LIT(KCmdCancelSend, "CancelSend");
+_LIT(KCmdCancelWrite, "CancelWrite");
+_LIT(KCmdConnect, "Connect");
+_LIT(KCmdDestructor, "~");
+_LIT(KCmdGetDisconnectData, "GetDisconnectData");
+_LIT(KCmdGetOpt, "GetOpt");
+_LIT(KCmdInfo, "Info");
+_LIT(KCmdIoctl, "Ioctl");
+_LIT(KCmdListen, "Listen");
+_LIT(KCmdLocalName, "LocalName");
+_LIT(KCmdLocalPort, "LocalPort");
+_LIT(KCmdName, "Name");
+_LIT(KCmdNewL, "NewL");
+_LIT(KCmdNewLC, "NewLC");
+_LIT(KCmdPhysicalLinkState, "PhysicalLinkState");
+_LIT(KCmdPreventLowPowerModes, "PreventLowPowerModes");
+_LIT(KCmdPreventRoleSwitch, "PreventRoleSwitch");
+_LIT(KCmdRConnectionClose, "RConnectionClose");
+_LIT(KCmdRConnectionStart, "RConnectionStart");
+_LIT(KCmdRead, "Read");
+_LIT(KCmdRecv, "Recv");
+_LIT(KCmdRecvFrom, "RecvFrom");
+_LIT(KCmdRecvOneOrMore, "RecvOneOrMore");
+_LIT(KCmdRemoteName, "RemoteName");
+_LIT(KCmdRequestChangeSupportedPacketTypes, "RequestChangeSupportedPacketTypes");
+_LIT(KCmdRequestMasterRole, "RequestMasterRole");
+_LIT(KCmdRequestSlaveRole, "RequestSlaveRole");
+_LIT(KCmdRSocketServerClose, "RSocketServerClose");
+_LIT(KCmdRSocketServerConnect, "RSocketServerConnect");
+_LIT(KCmdSend, "Send");
+_LIT(KCmdSendTo, "SendTo");
+_LIT(KCmdSetAutomaticSniffMode, "SetAutomaticSniffMode");
+_LIT(KCmdSetLocalPort, "SetLocalPort");
+_LIT(KCmdSetOpt, "SetOpt");
+_LIT(KCmdSetOption, "SetOption");
+_LIT(KCmdSetRsocketServerFromCBTSocket, "SetRsocketServerFromCBTSocket");
+_LIT(KCmdSetTransferAble, "SetTransferAble");
+_LIT(KCmdShutdown, "Shutdown");
+_LIT(KCmdSetNotifier, "SetNotifier");
+_LIT(KCmdTestMBSN_ExtensionInterfaceL, "TestMBSN_ExtensionInterfaceL");
+_LIT(KCmdTransfer, "Transfer");
+_LIT(KCmdWrite, "Write");
+
+/// Other
+_LIT_SECURITY_POLICY_C2(KProcPolicy, ECapabilityNetworkServices, ECapabilityNetworkControl);
+/*@}*/
+
+CT_CBluetoothSocketData* CT_CBluetoothSocketData::NewL()
+ {
+ CT_CBluetoothSocketData* ret=new (ELeave) CT_CBluetoothSocketData();
+ CleanupStack::PushL(ret);
+ ret->ConstructL();
+ CleanupStack::Pop(ret);
+ return ret;
+ }
+
+/**
+* First phase construction
+*/
+CT_CBluetoothSocketData::CT_CBluetoothSocketData()
+: iData(NULL)
+, iHasConnectDataToExpect(EFalse)
+, iHasAcceptDataToExpect(EFalse)
+, iHasReceiveDataToExpect(EFalse)
+, iConnectIndex(0)
+, iAcceptIndex(0)
+, iShutdownIndex(0)
+, iIoctlIndex(0)
+, iNotifierIndex(0)
+, iReceiveIndex(0)
+, iSendIndex(0)
+ {
+ }
+
+/**
+* Second phase construction
+*/
+void CT_CBluetoothSocketData::ConstructL()
+ {
+ iData=new (ELeave) CT_BluetoothSocketNotifier();
+ iData->SetServer(this);
+ }
+
+CT_CBluetoothSocketData::~CT_CBluetoothSocketData()
+ {
+ }
+
+// Service methods
+TAny* CT_CBluetoothSocketData::GetObject()
+ {
+ return iData;
+ }
+
+void CT_CBluetoothSocketData::SetObjectL(TAny* aObject)
+ {
+ //called when loading up persistent data
+ delete iData;
+ iData = static_cast<CT_BluetoothSocketNotifier*>(aObject);
+ iData->SetServer(this);
+ }
+
+void CT_CBluetoothSocketData::DisownObjectL()
+ {
+ if ( iData )
+ {
+ iData->SetServer(NULL);
+ iData=NULL;
+ }
+ }
+
+inline TCleanupOperation CT_CBluetoothSocketData::CleanupOperation()
+ {
+ return CleanupOperation;
+ }
+
+void CT_CBluetoothSocketData::CleanupOperation(TAny* aAny)
+ {
+ //may be unnecessary
+ CT_BluetoothSocketNotifier* arg=static_cast<CT_BluetoothSocketNotifier*>(aAny);
+ delete arg;
+ }
+
+TBool CT_CBluetoothSocketData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+ {
+ TBool retVal=ETrue;
+
+ //-------------------------------------------------------------------------
+ // CBluetoothSocket
+ //-------------------------------------------------------------------------
+ if (aCommand==KCmdRSocketServerConnect)
+ {
+ DoCmdCloseSocketServer();
+ User::LeaveIfError(iData->iSocketServer.Connect());
+ iData->iSocketServerConnected=ETrue;
+ }
+ else if (aCommand==KCmdRSocketServerClose)
+ {
+ DoCmdCloseSocketServer();
+ }
+ else if (aCommand==KCmdRConnectionStart)
+ {
+ TInt err = iData->iConnection.Open(iData->iSocketServer, KBTAddrFamily);
+
+ if( err!=KErrNone )
+ {
+ INFO_PRINTF2(_L("RConnection::Open() err=%d" ),err);
+ SetError(err);
+ }
+
+ err = iData->iConnection.Start();
+
+ if( err!=KErrNone )
+ {
+ INFO_PRINTF2(_L("RConnection::Start() err=%d" ),err);
+ SetError(219);
+ }
+ }
+ else if (aCommand==KCmdRConnectionClose)
+ {
+ iData->iConnection.Close();
+ }
+ else if (aCommand==KCmdDestructor)
+ {
+ delete iData->iBluetoothSocket;
+ iData->iBluetoothSocket=NULL;
+ }
+ else if ( aCommand==KCmdNewL )
+ {
+ DoCmdNewL(aSection,EFalse);
+ }
+ else if ( aCommand==KCmdNewLC )
+ {
+ DoCmdNewL(aSection,ETrue);
+ }
+ else if ( aCommand==KCmdBind)
+ {
+ DoCmdBind(aSection);
+ }
+ else if ( aCommand==KCmdListen)
+ {
+ DoCmdListen(aSection);
+ }
+ else if ( aCommand==KCmdLocalName)
+ {
+ DoCmdLocalName(aSection);
+ }
+ else if ( aCommand==KCmdLocalPort)
+ {
+ DoCmdLocalPort(aSection);
+ }
+ else if ( aCommand==KCmdSetLocalPort)
+ {
+ DoCmdSetLocalPort(aSection);
+ }
+ else if ( aCommand==KCmdSetOpt)
+ {
+ DoCmdSetOpt(aSection);
+ }
+ else if ( aCommand==KCmdSetOption)
+ {
+ DoCmdSetOption(aSection);
+ }
+ else if ( aCommand==KCmdGetOpt)
+ {
+ DoCmdGetOpt(aSection);
+ }
+ else if ( aCommand==KCmdName)
+ {
+ DoCmdName();
+ }
+ else if ( aCommand==KCmdSetTransferAble)
+ {
+ DoCmdSetTransferAble();
+ }
+ else if ( aCommand==KCmdTransfer)
+ {
+ DoCmdTransfer(aSection);
+ }
+ else if ( aCommand==KCmdInfo)
+ {
+ DoCmdInfo(aSection);
+ }
+ else if ( aCommand==KCmdAccept)
+ {
+ DoCmdAccept(aSection,aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdCancelAccept)
+ {
+ DoCmdCancelAccept();
+ }
+ else if ( aCommand==KCmdConnect)
+ {
+ DoCmdConnect(aSection,aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdSend)
+ {
+ DoCmdSend(aSection,aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdRecv)
+ {
+ DoCmdRecv(aSection,aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdRecvOneOrMore)
+ {
+ DoCmdRecvOneOrMore(aSection,aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdShutdown)
+ {
+ DoCmdShutdown(aSection,aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdSetNotifier)
+ {
+ DoCmdSetNotifierL(aSection);
+ }
+ else if ( aCommand==KCmdCancelConnect)
+ {
+ DoCmdCancelConnect();
+ }
+ else if ( aCommand==KCmdSetRsocketServerFromCBTSocket)
+ {
+ DoCmdSetRsocketServerFromCBTSocket(aSection);
+ }
+ else if ( aCommand==KCmdIoctl)
+ {
+ DoCmdIoctl(aSection,aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdCancelIoctl)
+ {
+ DoCmdCancelIoctl();
+ }
+ else if ( aCommand==KCmdAllowLowPowerModes)
+ {
+ DoCmdAllowLowPowerModes(aSection);
+ }
+ else if ( aCommand==KCmdCancelLowPowerModeRequester)
+ {
+ DoCmdCancelLowPowerModeRequester(aSection);
+ }
+ else if ( aCommand==KCmdPreventLowPowerModes)
+ {
+ DoCmdPreventLowPowerModes(aSection);
+ }
+ else if ( aCommand==KCmdActivateBasebandEventNotifier)
+ {
+ DoCmdActivateBasebandEventNotifier(aSection, aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdCancelBasebandEventNotifier)
+ {
+ DoCmdCancelBasebandEventNotifier();
+ }
+ else if ( aCommand==KCmdPhysicalLinkState)
+ {
+ DoCmdPhysicalLinkState(aSection);
+ }
+ else if ( aCommand==KCmdPreventRoleSwitch)
+ {
+ DoCmdPreventRoleSwitch();
+ }
+ else if ( aCommand==KCmdAllowRoleSwitch)
+ {
+ DoCmdAllowRoleSwitch();
+ }
+ else if ( aCommand==KCmdRequestMasterRole)
+ {
+ DoCmdRequestMasterRole();
+ }
+ else if ( aCommand==KCmdRequestSlaveRole)
+ {
+ DoCmdRequestSlaveRole();
+ }
+ else if ( aCommand==KCmdActivateSniffRequester)
+ {
+ DoCmdActivateSniffRequester();
+ }
+ else if ( aCommand==KCmdActivateParkRequester)
+ {
+ DoCmdActivateParkRequester();
+ }
+ else if ( aCommand==KCmdCancelSend)
+ {
+ DoCmdCancelSend();
+ }
+ else if ( aCommand==KCmdCancelAll)
+ {
+ DoCmdCancelAll();
+ }
+ else if ( aCommand==KCmdWrite)
+ {
+ DoCmdWrite(aSection,aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdCancelWrite)
+ {
+ DoCmdCancelWrite();
+ }
+ else if ( aCommand==KCmdSendTo)
+ {
+ DoCmdSendTo(aSection, aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdRecvFrom)
+ {
+ DoCmdRecvFrom(aSection,aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdGetDisconnectData)
+ {
+ DoCmdGetDisconnectData();
+ }
+ else if ( aCommand==KCmdRequestChangeSupportedPacketTypes)
+ {
+ DoCmdRequestChangeSupportedPacketTypes(aSection);
+ }
+ else if ( aCommand==KCmdCancelRecv)
+ {
+ DoCmdCancelRecv();
+ }
+ else if ( aCommand==KCmdRead)
+ {
+ DoCmdRead(aSection, aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdCancelRead)
+ {
+ DoCmdCancelRead();
+ }
+ else if ( aCommand==KCmdRemoteName)
+ {
+ DoCmdRemoteName(aSection);
+ }
+ else if ( aCommand==KCmdTestMBSN_ExtensionInterfaceL)
+ {
+ DoCmdTestMBSN_ExtensionInterfaceL(aSection);
+ }
+ else if ( aCommand==KCmdSetAutomaticSniffMode)
+ {
+ DoCmdSetAutomaticSniffMode(aSection);
+ }
+ else
+ {
+ retVal=EFalse;
+ }
+ return retVal;
+ }
+
+
+inline void CT_CBluetoothSocketData::DoCmdAccept(const TDesC& aSection, const TInt aAsyncErrorIndex)
+ {
+
+ TPtrC expectedReply;
+ iAcceptFlag = EFalse;
+ iHasAcceptDataToExpect=GetStringFromConfig(aSection, KExpectedReply(), expectedReply);
+ if ( iHasAcceptDataToExpect )
+ {
+ iAcceptDataToExpect.Copy(expectedReply);
+ }
+
+ TBool useAccept2 =EFalse;
+ GetBoolFromConfig(aSection, KUseAccept2(), useAccept2);
+
+ // Get the blank session socket
+ TPtrC bluetoothSocketName;
+ CBluetoothSocket* bluetoothSocket=NULL;
+ if( GetStringFromConfig(aSection, KCBluetoothSocket(), bluetoothSocketName))
+ {
+ bluetoothSocket=(static_cast<CT_BluetoothSocketNotifier*>(GetDataObjectL(bluetoothSocketName))->iBluetoothSocket);
+ if ( bluetoothSocket!=NULL )
+ {
+ TInt status;
+ if ( useAccept2 )
+ {
+ INFO_PRINTF1(_L("Using Accept 2"));
+ status = iData->iBluetoothSocket->Accept(*bluetoothSocket, iDataToRead8);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Using Accept 1"));
+ status = iData->iBluetoothSocket->Accept(*bluetoothSocket);
+ }
+
+ if(status==KErrNone)
+ {
+ IncOutstanding();
+ iAcceptFlag = ETrue;
+ iAcceptIndex = aAsyncErrorIndex;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Accept failed: %d"),status);
+ SetError(status);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("Bind TSockAddr is NULL"));
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdActivateBasebandEventNotifier(const TDesC& aSection,const TInt aAsyncErrorIndex)
+ {
+ // loop through all values in the ini file and add them up
+ TUint32 flags=0;
+ CT_BTUtil::GetLinkStateNotifierBits(*this, aSection, flags);
+
+ TInt errCode = iData->iBluetoothSocket->ActivateBasebandEventNotifier(flags);
+ if ( errCode==KErrNone )
+ {
+ IncOutstanding();
+ iNotifierIndex = aAsyncErrorIndex;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("ActivateBasebandEventNotifier failed with error code: %d"), errCode);
+ SetError(errCode);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdActivateParkRequester()
+ {
+ TInt errCode = iData->iBluetoothSocket->ActivateParkRequester();
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("ActivateParkRequester failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdActivateSniffRequester()
+ {
+ TInt errCode = iData->iBluetoothSocket->ActivateSniffRequester();
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("ActivateSniffRequester failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdAllowLowPowerModes(const TDesC& aSection)
+ {
+ TUint32 mode=0;
+ CT_BTUtil::GetLowPowerMode(*this, aSection, mode);
+
+ TInt errCode=iData->iBluetoothSocket->AllowLowPowerModes(mode);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("Send AllowLowPowerModes failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdAllowRoleSwitch()
+ {
+ TInt errCode = iData->iBluetoothSocket->AllowRoleSwitch();
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("AllowRoleSwitch failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdBind(const TDesC& aSection)
+ {
+ TPtrC sockAddrName;
+ if( GetStringFromConfig(aSection, KTSockAddr(), sockAddrName))
+ {
+ INFO_PRINTF2(_L("Binding with: %S TSockAddr"), &sockAddrName);
+ TBTSockAddr* sockAddr=static_cast<TBTSockAddr*>(GetDataObjectL(sockAddrName));
+ if ( sockAddr!=NULL )
+ {
+ TInt errCode = iData->iBluetoothSocket->Bind(*sockAddr);
+ if(errCode!=KErrNone)
+ {
+ ERR_PRINTF2(_L("Bind failed: %d"), errCode);
+ SetError(errCode);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("Bind TSockAddr is NULL"));
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdCancelAccept()
+ {
+ iData->iBluetoothSocket->CancelAccept();
+ if(Outstanding() && iAcceptFlag)
+ {
+ DecOutstanding();
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdCancelAll()
+ {
+ iData->iBluetoothSocket->CancelAll();
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdCancelBasebandEventNotifier()
+ {
+ iData->iBluetoothSocket->CancelBasebandEventNotifier();
+ if(Outstanding() && iNotifierFlag)
+ {
+ DecOutstanding();
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdCancelConnect()
+ {
+ iData->iBluetoothSocket->CancelConnect();
+ if(Outstanding() && iConnectFlag)
+ {
+ DecOutstanding();
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdCancelIoctl()
+ {
+ iData->iBluetoothSocket->CancelIoctl();
+ if(Outstanding() && iIoctlFlag)
+ {
+ DecOutstanding();
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdCancelLowPowerModeRequester(const TDesC& /*aSection*/)
+ {
+ TInt errCode=iData->iBluetoothSocket->CancelLowPowerModeRequester();
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("Send CancelLowPowerModeRequester failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdCancelRead()
+ {
+ iData->iBluetoothSocket->CancelRead();
+ if (Outstanding() && iReadFlag)
+ {
+ DecOutstanding();
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdCancelRecv()
+ {
+ iData->iBluetoothSocket->CancelRecv();
+ if (Outstanding() && iRecvFlag)
+ {
+ DecOutstanding();
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdCancelSend()
+ {
+ iData->iBluetoothSocket->CancelSend();
+ if (Outstanding() && iSendFlag)
+ {
+ DecOutstanding();
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdCancelWrite()
+ {
+ iData->iBluetoothSocket->CancelWrite();
+ if (Outstanding() && iWriteFlag)
+ {
+ DecOutstanding();
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdCloseSocketServer()
+ {
+ if(iData->iSocketServerConnected)
+ {
+ iData->iSocketServer.Close();
+ }
+ iData->iSocketServerConnected=EFalse;
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdConnect(const TDesC& aSection, const TInt aAsyncErrorIndex)
+ {
+
+ TPtrC expectedReply;
+ iConnectFlag = EFalse;
+ iHasConnectDataToExpect=GetStringFromConfig(aSection, KExpectedReply(), expectedReply);
+ if ( iHasConnectDataToExpect )
+ {
+ iConnectDataToExpect.Copy(expectedReply);
+ }
+
+ TPtrC sockAddrName;
+ if( GetStringFromConfig(aSection, KTBTSockAddr(), sockAddrName))
+ {
+ INFO_PRINTF2(_L("Connecting with: %S TBTSockAddr"), &sockAddrName);
+ TBTSockAddr* myTBTSockAddr=static_cast<TBTSockAddr*>(GetDataObjectL(sockAddrName));
+ if ( myTBTSockAddr!=NULL )
+ {
+ TInt errCode=KErrNone;
+
+ TInt serviceBits;
+ if ( GetIntFromConfig(aSection, KServiceBits(), serviceBits) )
+ {
+ INFO_PRINTF1(_L("Using Connect 3"));
+
+ TBTDevAddr tempAddress = myTBTSockAddr->BTAddr();
+ TBuf<KMaxSockAddrSize> tmpBuf;
+ tempAddress.GetReadable(tmpBuf);
+ INFO_PRINTF2(_L("Connecting to address (%S)"), &tmpBuf);
+
+ errCode=iData->iBluetoothSocket->Connect(*myTBTSockAddr, serviceBits);
+ }
+ else
+ {
+ TPtrC connectData;
+ if ( GetStringFromConfig(aSection, KConnectData(), connectData) )
+ {
+ INFO_PRINTF1(_L("Using Connect 2"));
+ TBuf8<DATASIZE> connectData8(_L8(""));
+ connectData8.Copy(connectData);
+
+ TBTDevAddr tempAddress = myTBTSockAddr->BTAddr();
+ TBuf<KMaxSockAddrSize> tmpBuf;
+ tempAddress.GetReadable(tmpBuf);
+ INFO_PRINTF2(_L("Connecting to address (%S)"), &tmpBuf);
+
+ errCode =iData->iBluetoothSocket->Connect(*myTBTSockAddr, iDataToRead8, connectData8);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Using Connect 1"));
+
+ TBTDevAddr tempAddress = myTBTSockAddr->BTAddr();
+ TBuf<KMaxSockAddrSize> tmpBuf;
+ tempAddress.GetReadable(tmpBuf);
+ INFO_PRINTF2(_L("Connecting to address (%S)"), &tmpBuf);
+
+ errCode =iData->iBluetoothSocket->Connect(*myTBTSockAddr);
+ }
+ }
+ if ( errCode == KErrNone)
+ {
+ IncOutstanding();
+ iConnectFlag = ETrue;
+ iConnectIndex = aAsyncErrorIndex;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Connect failed: %d"), errCode);
+ SetError(errCode);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("Connect TBTSockAddr is NULL"));
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdGetDisconnectData()
+ {
+ TInt errCode = iData->iBluetoothSocket->GetDisconnectData(iDisconnectDes8);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("GetDisconnectData failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdGetOpt(const TDesC& aSection)
+ {
+ TBool found;
+
+ TBool equals = ETrue;
+ GetBoolFromConfig(aSection, KEquals(), equals);
+ if (equals)
+ {
+ INFO_PRINTF1(_L("The comparison is expected to be equal."));
+ }
+ else
+ {
+ INFO_PRINTF1(_L("The comparison is not expected to be equal."));
+ }
+
+ TBool dataOk=ETrue;
+ TPtrC optionName;
+ TInt optionNameValue=0;
+ if ( GetStringFromConfig(aSection, KOptionName(), optionName) )
+ {
+ dataOk=CT_BTUtil::GetIntValue(optionName, optionNameValue);
+
+ //Report error but continue as it may still make sense
+ if (dataOk)
+ {
+ INFO_PRINTF3(_L("The name of the option to set: %S , its value: %d" ), &optionName, optionNameValue);
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Option Level not found in lookup: %S"),&optionName);
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ dataOk=EFalse;
+ ERR_PRINTF2(_L("Data %S missing"), &KOptionName());
+ SetBlockResult(EFail);
+ }
+
+ TPtrC optionLevel;
+ TInt optionLevelValue;
+ if( GetStringFromConfig(aSection, KOptionLevel(), optionLevel))
+ {
+ found=CT_BTUtil::GetIntValue(optionLevel, optionLevelValue);
+ //Report error but continue as it may still make sense
+ if (found)
+ {
+ INFO_PRINTF3(_L("The name of the option level to set: %S , its value: %d" ),&optionLevel, optionLevelValue);
+ }
+ else
+ {
+ dataOk=EFalse;
+ ERR_PRINTF2(_L("Option Level not found in lookup: %S"),&optionLevel);
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ dataOk=EFalse;
+ ERR_PRINTF2(_L("Data %S missing"), &KOptionLevel());
+ SetBlockResult(EFail);
+ }
+
+ if ( dataOk )
+ {
+ TBool getDes=EFalse;
+ GetBoolFromConfig(aSection, KGetDes(), getDes);
+
+ if ( getDes )
+ {
+ TBuf8<DATASIZE> tempData8(_L8(""));
+ TInt err = iData->iBluetoothSocket->GetOpt(optionNameValue, optionLevelValue, tempData8);
+ if( err != KErrNone )
+ {
+ INFO_PRINTF2(_L("GetOpt() return error %d" ), err);
+ SetError(err);
+ }
+
+ TBuf<DATASIZE> tempData;
+ tempData.Copy(tempData8);
+ INFO_PRINTF3(_L("The value of the option retrived as des: %S, descriptor length: %d" ), &tempData, tempData.Length());
+
+ TPtrC desOption; // descriptor to compare with if getdes is TRUE
+ if( GetStringFromConfig(aSection, KDesOption(), desOption))
+ {
+ INFO_PRINTF2(_L("The expected descriptor value: %S" ), &desOption);
+ if ( (desOption==tempData) == equals )
+ {
+ INFO_PRINTF1(_L("Option is as expected"));
+ }
+ else
+ {
+ ERR_PRINTF1(_L("Option is not as expected"));
+ SetBlockResult(EFail);
+ }
+ }
+ }
+ else
+ {
+ TInt val;
+ TInt err = iData->iBluetoothSocket->GetOpt(optionNameValue, optionLevelValue, val);
+ if( err != KErrNone )
+ {
+ INFO_PRINTF2(_L("GetOpt() return error %d" ), err);
+ SetError(err);
+ }
+
+ INFO_PRINTF2(_L("The value of the option retrived: %d" ),val);
+
+ TInt intOption; // int value to compare with if getdes is FALSE or not defined
+ if( GetIntFromConfig(aSection, KIntOption(), intOption))
+ {
+ INFO_PRINTF1(_L("Comparing results"));
+ if ( (intOption==val) == equals )
+ {
+ INFO_PRINTF1(_L("Option is as expected"));
+ }
+ else
+ {
+ ERR_PRINTF1(_L("Option is not as expected"));
+ SetBlockResult(EFail);
+ }
+ }
+ }
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdInfo(const TDesC& aSection)
+ {
+ TProtocolDesc protocolDesc;
+ TInt err = iData->iBluetoothSocket->Info(protocolDesc);
+
+ if ( err!=KErrNone )
+ {
+ ERR_PRINTF2(_L("iBluetoothSocket->Info error: %d"), err);
+ SetError(err);
+ }
+
+ INFO_PRINTF2(_L("iBluetoothSocket->Info() = %S"), &protocolDesc.iName);
+
+ TPtrC expectedValue;
+ if( GetStringFromConfig(aSection, KExpectedReply(), expectedValue) )
+ {
+ if( expectedValue != protocolDesc.iName )
+ {
+ ERR_PRINTF3(_L("Expected Info (%S) != Actual Info (%S)"), &expectedValue, &protocolDesc.iName);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdIoctl(const TDesC& aSection,const TInt aAsyncErrorIndex)
+ {
+ TBool dataOk = ETrue;
+ iIoctlFlag = EFalse;
+ TBool boolCallTwice = EFalse;
+ GetBoolFromConfig(aSection, KCallTwice(), boolCallTwice);
+
+ TBool useDeprecated=EFalse;
+ GetBoolFromConfig(aSection, KUseDeprecated(), useDeprecated);
+
+ TBool found = EFalse;
+
+ TPtrC optionName;
+ TInt optionNameValue=0;
+ if( GetStringFromConfig(aSection, KOptionName(), optionName))
+ {
+ found=CT_BTUtil::GetIntValue(optionName, optionNameValue);
+ //Report error but continue as it may still make sense
+ if (found)
+ {
+ INFO_PRINTF3(_L("The name of the option to set: %S , its value: %d" ), &optionName, optionNameValue);
+ }
+ else
+ {
+ dataOk=EFalse;
+ ERR_PRINTF2(_L("Option not found in lookup: %S"), &optionName);
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ dataOk=EFalse;
+ ERR_PRINTF2(_L("Missing: %S"), &KOptionName());
+ SetBlockResult(EFail);
+ }
+
+ TPtrC optionLevel;
+ TInt optionLevelValue;
+ if( GetStringFromConfig(aSection, KOptionLevel(), optionLevel))
+ {
+ found=CT_BTUtil::GetIntValue(optionLevel, optionLevelValue);
+ //Report error but continue as it may still make sense
+ if (found)
+ {
+ INFO_PRINTF3(_L("The name of the option level to set: %S , its value: %d" ), &optionLevel, optionLevelValue);
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Option Level not found in lookup: %S"), &optionLevel);
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ dataOk=EFalse;
+ ERR_PRINTF2(_L("Missing: %S"), &KOptionLevel());
+ SetBlockResult(EFail);
+ }
+
+ if ( dataOk )
+ {
+ TInt mtuOptionBufferSize = 0;
+ GetIntFromConfig(aSection, KMTUSize(), mtuOptionBufferSize);
+
+ if( mtuOptionBufferSize > DATASIZE )
+ {
+ mtuOptionBufferSize = DATASIZE;
+ WARN_PRINTF3(_L("mtuOptionBufferSize %d is large, using %d"), mtuOptionBufferSize, DATASIZE);
+ }
+
+ iMTUOptionBuffer = TPckgBuf<TUint16>(mtuOptionBufferSize);
+
+ TInt errCode=KErrNone;
+ if (useDeprecated)
+ {
+ errCode=iData->iBluetoothSocket->Ioctl(optionNameValue, &iMTUOptionBuffer, optionLevelValue);
+ }
+ else
+ {
+ errCode=iData->iBluetoothSocket->Ioctl(optionLevelValue, optionNameValue, &iMTUOptionBuffer);
+ }
+
+ if (errCode == KErrNone)
+ {
+ IncOutstanding();
+ iIoctlFlag = ETrue;
+ iIoctlIndex = aAsyncErrorIndex;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Send Ioctl failed with error code: %d"), errCode);
+ SetError(errCode);
+ }
+
+ if( boolCallTwice )
+ {
+ if (useDeprecated)
+ {
+ errCode=iData->iBluetoothSocket->Ioctl(optionNameValue, &iMTUOptionBuffer, optionLevelValue);
+ }
+ else
+ {
+ errCode=iData->iBluetoothSocket->Ioctl(optionLevelValue, optionNameValue, &iMTUOptionBuffer);
+ }
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("Send Ioctl failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iIoctlFlag = ETrue;
+ //NB! May be not necessary, because the second call must call panics
+ iIoctlIndex = aAsyncErrorIndex;
+ }
+ }
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdListen(const TDesC& aSection)
+ {
+
+ TInt queueSize;
+ if ( GetIntFromConfig(aSection, KQueueSize(), queueSize) )
+ {
+ TInt errCode=KErrNone;
+
+ TPtrC connectData;
+ if ( GetStringFromConfig(aSection, KConnectData(), connectData) )
+ {
+ iConnectData8 = _L8("");
+ iConnectData8.Copy(connectData);
+ errCode=iData->iBluetoothSocket->Listen(queueSize, iConnectData8);
+ }
+ else
+ {
+ TInt serviceBits;
+ if ( GetIntFromConfig(aSection, KServiceBits(), serviceBits) )
+ {
+ INFO_PRINTF2(_L("Using Listen 3 Service bits is: %d"),serviceBits);
+ errCode=iData->iBluetoothSocket->Listen(queueSize, serviceBits);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Using Listen 1"));
+ errCode=iData->iBluetoothSocket->Listen(queueSize);
+ }
+ }
+ if ( errCode!=KErrNone )
+ {
+ ERR_PRINTF2(_L("Listen failed: %d"),errCode);
+ SetError(errCode);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Missing: %Sfailed"), &KServiceBits());
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdLocalName(const TDesC& aSection)
+ {
+
+ T_TBTSockAddrChild addr;
+ iData->iBluetoothSocket->LocalName(addr);
+
+ TBTDevAddr currentAddr = addr.BTAddr();
+ TBuf<KMaxSockAddrSize> tmpBuf;
+ currentAddr.GetReadable(tmpBuf);
+ INFO_PRINTF2(_L("LocalName() = 0x%S"), &tmpBuf);
+ TPtrC myTBTDevAddrName;
+ if ( GetStringFromConfig(aSection, KTBTDevAddr(), myTBTDevAddrName) )
+ {
+ CT_BTDevAddrData* myTBTDevAddrData=static_cast<CT_BTDevAddrData*>(GetDataWrapperL(myTBTDevAddrName));
+ TBTDevAddr btDevAddr = *myTBTDevAddrData->GetAddress();
+ TBuf<KMaxSockAddrSize> tmpBuf2;
+ btDevAddr.GetReadable(tmpBuf2);
+ if (tmpBuf2 != tmpBuf)
+ {
+ ERR_PRINTF3(_L("Expected address (%S) != actual address (%S)"),&tmpBuf2,&tmpBuf);
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ TInt lhs;
+ TInt rhs;
+ TBool lhsGiven = EFalse;
+ TBool rhsGiven = EFalse;
+ lhsGiven = GetHexFromConfig(aSection, KHexBTAddrL(), lhs );
+ rhsGiven = GetHexFromConfig(aSection, KHexBTAddrR(), rhs );
+
+ if (lhsGiven && rhsGiven)
+ {
+ TBTDevAddr btDevAddr (MAKE_TINT64(lhs, rhs));
+ TBuf<KMaxSockAddrSize> tmpBuf2;
+ btDevAddr.GetReadable(tmpBuf2);
+ if (tmpBuf2 != tmpBuf)
+ {
+ ERR_PRINTF3(_L("Expected address (%S) != actual address (%S)"),&tmpBuf2,&tmpBuf);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+ // Set in TBTSockAddr Data object so that it can be verified
+ TPtrC myTSockAddrName;
+ CT_BTSockAddrData* myTSockAddrData=NULL;
+ if( GetStringFromConfig(aSection, KTSockAddr(), myTSockAddrName))
+ {
+ myTSockAddrData=static_cast<CT_BTSockAddrData*>(GetDataWrapperL(myTSockAddrName));
+ if ( myTSockAddrData!=NULL )
+ {
+ myTSockAddrData->SetObject(&addr,EFalse);
+ }
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdLocalPort(const TDesC& aSection)
+ {
+
+ TInt actualPort = iData->iBluetoothSocket->LocalPort();
+ INFO_PRINTF2(_L("Actual port is: %d"), actualPort);
+
+ TInt port;
+ if ( GetIntFromConfig(aSection, KPort(), port) )
+ {
+ INFO_PRINTF2(_L("Expected port is: %d"), port);
+ if ( actualPort!=port )
+ {
+ ERR_PRINTF1(_L("LocalPort is not as expected"));
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdName()
+ {
+ TName theName;
+ TInt err=iData->iBluetoothSocket->Name(theName);
+ if ( err==KErrNone )
+ {
+ // good print the name
+ INFO_PRINTF2(_L("The socket name is: (%S)" ), &theName);
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Failed to get the Name of the Bluetoothsocket, error code %d returned"),err);
+ SetError(err);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdNewL(const TDesC& aSection, TBool aUseLC)
+ {
+
+ TInt constructorType = 0;
+ GetIntFromConfig(aSection, KConstructorType(), constructorType);
+
+ if ((constructorType >0 )&&(constructorType < 6))
+ {
+ TBool dataOk=ETrue;
+ TBool found = EFalse;
+
+ delete iData->iBluetoothSocket;
+ iData->iBluetoothSocket = NULL;
+
+ if( constructorType == 1 )
+ {
+ INFO_PRINTF1(_L("CBluetoothSocket Standard Constructor Call"));
+
+ TInt intSockType=0;
+ TPtrC sockType;
+ if( GetStringFromConfig(aSection, KSockType(), sockType) )
+ {
+ found=CT_BTUtil::GetIntValue(sockType, intSockType);
+ if ( !found )
+ {
+ dataOk=EFalse;
+ ERR_PRINTF2(_L("Socket type not found in lookup: %S"),&sockType);
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ dataOk=EFalse;
+ ERR_PRINTF2(_L("Missing :%S"), &KSockType());
+ SetBlockResult(EFail);
+ }
+
+ TInt intProtocol;
+ TPtrC protocol;
+ if ( GetStringFromConfig(aSection, KProtocol(), protocol) )
+ {
+ found=CT_BTUtil::GetIntValue(protocol, intProtocol);
+ if ( !found )
+ {
+ dataOk=EFalse;
+ ERR_PRINTF2(_L("Socket type not found in lookup: %S"),&sockType);
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ dataOk=EFalse;
+ ERR_PRINTF2(_L("Missing :%S"), &KProtocol());
+ SetBlockResult(EFail);
+ }
+
+ if ( dataOk )
+ {
+ if(aUseLC)
+ {
+ INFO_PRINTF1(_L("CBluetoothSocket Standard Constructor NewLC" ));
+ TRAPD(err, iData->iBluetoothSocket = CBluetoothSocket::NewLC(*iData, iData->iSocketServer, intSockType, intProtocol); CleanupStack::Pop(););
+
+ if( err!=KErrNone )
+ {
+ INFO_PRINTF2(_L("CBluetoothSocket Standard Constructor NewLC err=%d" ),err);
+ SetError(err);
+ }
+ }
+ else
+ {
+ INFO_PRINTF1(_L("CBluetoothSocket Standard Constructor NewL" ));
+ TRAPD(err, iData->iBluetoothSocket = CBluetoothSocket::NewL(*iData, iData->iSocketServer, intSockType, intProtocol));
+
+ if( err!=KErrNone )
+ {
+ INFO_PRINTF2(_L("CBluetoothSocket Standard Constructor NewL err=%d" ),err);
+ SetError(err);
+ }
+ }
+ }
+ }
+ else if( constructorType == 2 )
+ {
+ INFO_PRINTF1(_L("CBluetoothSocket RConnection Constructor Call"));
+
+ TInt theSockType=0;
+ TPtrC sockType;
+ if ( GetStringFromConfig(aSection, KSockType(), sockType) )
+ {
+ found=CT_BTUtil::GetIntValue(sockType, theSockType);
+ if ( !found )
+ {
+ dataOk=EFalse;
+ ERR_PRINTF2(_L("Socket type not found in lookup: %S"), &sockType);
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ dataOk=EFalse;
+ ERR_PRINTF2(_L("Missing :%S"), &KSockType());
+ SetBlockResult(EFail);
+ }
+
+ TInt theProtocol;
+ TPtrC protocol;
+ if ( GetStringFromConfig(aSection, KProtocol(), protocol) )
+ {
+ found=CT_BTUtil::GetIntValue(protocol, theProtocol);
+ if (!found)
+ {
+ dataOk=EFalse;
+ ERR_PRINTF2(_L("Protocol not found in lookup: %S"), &protocol);
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ dataOk=EFalse;
+ ERR_PRINTF2(_L("Missing :%S"), &KProtocol());
+ SetBlockResult(EFail);
+ }
+
+ if ( dataOk )
+ {
+ if ( aUseLC )
+ {
+ INFO_PRINTF1(_L("CBluetoothSocket RConnection Constructor NewLC" ));
+ TRAPD(err, iData->iBluetoothSocket = CBluetoothSocket::NewLC(*iData, iData->iSocketServer, theSockType, theProtocol, iData->iConnection); CleanupStack::Pop(););
+ if( err!=KErrNone )
+ {
+ INFO_PRINTF2(_L("CBluetoothSocket RConnection Constructor NewLC err=%d" ),err);
+ SetError(err);
+ }
+ }
+ else
+ {
+ INFO_PRINTF1(_L("CBluetoothSocket RConnection Constructor NewL" ));
+ TRAPD(err, iData->iBluetoothSocket = CBluetoothSocket::NewL(*iData, iData->iSocketServer, theSockType, theProtocol,iData->iConnection));
+
+ if( err!=KErrNone )
+ {
+ INFO_PRINTF2(_L("CBluetoothSocket RConnection Constructor NewL err=%d" ),err);
+ SetError(err);
+ }
+ }
+ }
+ }
+ else if( constructorType == 3 )
+ {
+ INFO_PRINTF1(_L("CBluetoothSocket Named Protocol Constructor Call"));
+
+ TPtrC namedProtocol;
+ if( GetStringFromConfig(aSection, KNamedProtocol(), namedProtocol))
+ {
+ if (aUseLC)
+ {
+ INFO_PRINTF1(_L("CBluetoothSocket Named Protocol Constructor NewLC" ));
+ TRAPD(err, iData->iBluetoothSocket = CBluetoothSocket::NewLC(*iData, iData->iSocketServer, namedProtocol); CleanupStack::Pop(););
+
+ if( err!=KErrNone )
+ {
+ INFO_PRINTF2(_L("CBluetoothSocket Named Protocol Constructor NewLC err=%d" ),err);
+ SetError(err);
+ }
+ }
+
+ else
+ {
+ INFO_PRINTF1(_L("CBluetoothSocket Named Protocol Constructor NewL" ));
+ TRAPD(err, iData->iBluetoothSocket = CBluetoothSocket::NewL(*iData, iData->iSocketServer, namedProtocol));
+
+ if( err!=KErrNone )
+ {
+ INFO_PRINTF2(_L("CBluetoothSocket Named Protocol Constructor NewL err=%d" ),err);
+ SetError(err);
+ }
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Missing :%s"), &KNamedProtocol());
+ SetBlockResult(EFail);
+ }
+ }
+ else if( constructorType == 4 )
+ {
+ if (aUseLC)
+ {
+ INFO_PRINTF1(_L("CBluetoothSocket Blank Constructor NewLC"));
+ TRAPD(err, iData->iBluetoothSocket = CBluetoothSocket::NewLC(*iData, iData->iSocketServer); CleanupStack::Pop(););
+
+ if( err!=KErrNone )
+ {
+ INFO_PRINTF2(_L("CBluetoothSocket Blank Constructor NewLC err=%d" ),err);
+ SetError(err);
+ }
+ }
+ else
+ {
+ INFO_PRINTF1(_L("CBluetoothSocket Blank Constructor NewL"));
+ TRAPD(err, iData->iBluetoothSocket = CBluetoothSocket::NewL(*iData, iData->iSocketServer));
+
+ if( err!=KErrNone )
+ {
+ INFO_PRINTF2(_L("CBluetoothSocket Blank Constructor NewL err=%d" ),err);
+ SetError(err);
+ }
+ }
+ }
+ else if( constructorType == 5 )
+ {
+ INFO_PRINTF1(_L("CBluetoothSocket RSocket Constructor Call"));
+
+ TPtrC myRSocketName;
+ if( GetStringFromConfig(aSection, KRSocket(), myRSocketName))
+ {
+ RSocket* myRSocket=static_cast<RSocket*>(GetDataObjectL(myRSocketName));
+ if ( myRSocket!=NULL )
+ {
+ if (aUseLC)
+ {
+ INFO_PRINTF1(_L("CBluetoothSocket RSocket Constructor NewLC" ));
+ TRAPD(err, iData->iBluetoothSocket = CBluetoothSocket::NewLC(*iData, iData->iSocketServer, *myRSocket); CleanupStack::Pop(););
+
+ if( err!=KErrNone )
+ {
+ INFO_PRINTF2(_L("CBluetoothSocket RSocket Constructor NewLC err=%d" ),err);
+ SetError(err);
+ }
+ }
+ else
+ {
+ INFO_PRINTF1(_L("CBluetoothSocket RSocket Constructor NewL" ));
+ TRAPD(err, iData->iBluetoothSocket = CBluetoothSocket::NewL(*iData, iData->iSocketServer, *myRSocket));
+
+ if( err!=KErrNone )
+ {
+ INFO_PRINTF2(_L("CBluetoothSocket RSocket Constructor NewL err=%d" ),err);
+ SetError(err);
+ }
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Failed to fetch RSocket named %S"),&myRSocketName);
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Missing :%S"), &KRSocket());
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ INFO_PRINTF2(_L("Incorrect constructorType = %d" ),constructorType);
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Ilegal value for constructor type value in range 1-5 expected found: %d"),constructorType);
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdPhysicalLinkState(const TDesC& aSection)
+ {
+
+ TUint32 tmpstate;
+ TInt errCode = iData->iBluetoothSocket->PhysicalLinkState(tmpstate);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("PhysicalLinkState failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+
+ TInt state = static_cast<TInt>(tmpstate);
+ //Process the state we can do a nice report here as we know what the bits are
+ // See CT_BTUtil as a starting point
+ INFO_PRINTF2(_L("PhysicalLinkState: %d" ), state );
+
+ TInt expectedState;
+ if( GetIntFromConfig(aSection, KState(), expectedState) )
+ {
+ if( expectedState != state )
+ {
+ ERR_PRINTF3(_L("Expected PhysicalLinkState (%d) != Actual PhysicalLinkState (%d)"), state, expectedState);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdPreventLowPowerModes(const TDesC& aSection)
+ {
+ TUint32 mode =0;
+ CT_BTUtil::GetLowPowerMode(*this, aSection, mode);
+
+ TInt errCode=iData->iBluetoothSocket->PreventLowPowerModes(mode);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("Send PreventLowPowerModes failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdPreventRoleSwitch()
+ {
+ TInt errCode = iData->iBluetoothSocket->PreventRoleSwitch();
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("PreventRoleSwitch failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdRead(const TDesC& aSection, const TInt aAsyncErrorIndex)
+ {
+
+ TPtrC expectedReply;
+ iReadFlag = EFalse;
+ iHasReceiveDataToExpect=GetStringFromConfig(aSection, KExpectedReply(), expectedReply);
+ if ( iHasReceiveDataToExpect )
+ {
+ iReceiveDataToExpect.Copy(expectedReply);
+ }
+
+ TBool boolCallTwice = EFalse;
+ GetBoolFromConfig(aSection, KCallTwice(), boolCallTwice);
+
+ TInt errCode = iData->iBluetoothSocket->Read(iDataToRead8);
+ if (errCode == KErrNone)
+ {
+ IncOutstanding();
+ iReadFlag = ETrue;
+ iReceiveIndex = aAsyncErrorIndex;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Read failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+
+ if( boolCallTwice )
+ {
+ errCode = iData->iBluetoothSocket->Read(iDataToRead8);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("Read failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iReadFlag = ETrue;
+ iReceiveIndex = aAsyncErrorIndex;
+ }
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdRecv(const TDesC& aSection, const TInt aAsyncErrorIndex)
+ {
+
+ TPtrC expectedReply;
+ iRecvFlag = EFalse;
+ iHasReceiveDataToExpect=GetStringFromConfig(aSection, KExpectedReply(), expectedReply);
+ if ( iHasReceiveDataToExpect )
+ {
+ iReceiveDataToExpect.Copy(expectedReply);
+ }
+
+ TInt flags=0;
+ GetIntFromConfig(aSection, KFlags(), flags);
+ TBool useRecv2 = EFalse;
+ GetBoolFromConfig(aSection, KUseRecv2(), useRecv2);
+
+ TBool boolCallTwice = EFalse;
+ GetBoolFromConfig(aSection, KCallTwice(), boolCallTwice);
+
+ if (useRecv2)
+ {
+ INFO_PRINTF1(_L("Using Recv 2"));
+ INFO_PRINTF2(_L("Flags: %d"),flags);
+ TSockXfrLength actuallengthSent;
+ TInt errCode = iData->iBluetoothSocket->Recv(iDataToRead8, flags, actuallengthSent);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("Recv failed: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iRecvFlag = ETrue;
+ iReceiveIndex = aAsyncErrorIndex;
+ }
+
+ if( boolCallTwice )
+ {
+ errCode = iData->iBluetoothSocket->Recv(iDataToRead8, flags, actuallengthSent);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("Recv failed: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iRecvFlag = ETrue;
+ iReceiveIndex = aAsyncErrorIndex;
+ }
+ }
+ TInt& lenSentInt=actuallengthSent();
+
+ INFO_PRINTF2(_L("Returned actual length received: %d"), lenSentInt);
+ if ( lenSentInt!=iDataToRead8.Length() )
+ {
+ ERR_PRINTF3(_L("Returned length received: %d != Actual length received: %d"), lenSentInt, iDataToRead8.Length());
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Using Recv 1"));
+ INFO_PRINTF2(_L("Flags: %d"),flags);
+ TInt errCode = iData->iBluetoothSocket->Recv(iDataToRead8, flags);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("Recv failed: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iRecvFlag = ETrue;
+ iReceiveIndex = aAsyncErrorIndex;
+ }
+ if( boolCallTwice )
+ {
+ errCode = iData->iBluetoothSocket->Recv(iDataToRead8, flags);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("Recv failed: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iRecvFlag = ETrue;
+ iReceiveIndex = aAsyncErrorIndex;
+ }
+ }
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdRecvFrom(const TDesC& aSection,const TInt aAsyncErrorIndex)
+ {
+
+ TPtrC expectedReply;
+ iHasReceiveDataToExpect=GetStringFromConfig(aSection, KExpectedReply(), expectedReply);
+ if ( iHasReceiveDataToExpect )
+ {
+ iReceiveDataToExpect.Copy(expectedReply);
+ }
+
+ TBool useRecv2 = EFalse;
+ GetBoolFromConfig(aSection, KUseRecv2(), useRecv2);
+
+ TInt flags = 0; // read in, if not found send 0
+ GetIntFromConfig(aSection, KFlags(), flags);
+ TPtrC myTSockAddrName;
+ TBTSockAddr* myTSockAddr=NULL;
+ if( GetStringFromConfig(aSection, KTSockAddr(), myTSockAddrName))
+ {
+ INFO_PRINTF2(_L("Binding with: %S TSockAddr"), &myTSockAddrName);
+ myTSockAddr=static_cast<TBTSockAddr*>(GetDataObjectL(myTSockAddrName));
+ if ( myTSockAddr!=NULL )
+ {
+ if (!useRecv2)
+ {
+ TInt errCode = iData->iBluetoothSocket->RecvFrom(iDataToRead8, *myTSockAddr, flags);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("RecvFrom failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iReceiveIndex = aAsyncErrorIndex;
+ }
+ }
+ else
+ {
+ TSockXfrLength lenSent;
+ TInt errCode = iData->iBluetoothSocket->RecvFrom(iDataToRead8, *myTSockAddr, flags, lenSent);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("RecvFrom failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iReceiveIndex = aAsyncErrorIndex;
+ }
+ TInt& lenSentInt=lenSent();
+
+ INFO_PRINTF2(_L("Returned actual length received: %d"), lenSentInt);
+ if ( lenSentInt!=iDataToRead8.Length() )
+ {
+ ERR_PRINTF3(_L("Returned length received: %d != Actual length received: %d"), lenSentInt, iDataToRead8.Length());
+ SetBlockResult(EFail);
+ }
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("RecvFrom TBTSockAddr is NULL"));
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdRecvOneOrMore(const TDesC& aSection, const TInt aAsyncErrorIndex)
+ {
+
+ TPtrC expectedReply;
+ iHasReceiveDataToExpect=GetStringFromConfig(aSection, KExpectedReply(), expectedReply);
+ if ( iHasReceiveDataToExpect )
+ {
+ iReceiveDataToExpect.Copy(expectedReply);
+ }
+
+ TInt flags=0;
+ GetIntFromConfig(aSection, KFlags(), flags);
+
+ TBool boolCallTwice = EFalse;
+ GetBoolFromConfig(aSection, KCallTwice(), boolCallTwice);
+
+ TSockXfrLength actuallengthSent;
+ TInt errCode = iData->iBluetoothSocket->RecvOneOrMore(iDataToRead8, flags, actuallengthSent);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("RecvOneOrMore failed: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iReceiveIndex = aAsyncErrorIndex;
+ }
+
+ if( boolCallTwice )
+ {
+ errCode = iData->iBluetoothSocket->RecvOneOrMore(iDataToRead8, flags, actuallengthSent);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("RecvOneOrMore failed: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iReceiveIndex = aAsyncErrorIndex;
+ }
+ }
+ TInt& lenSentInt=actuallengthSent();
+ INFO_PRINTF2(_L("Returned actual length received: %d"), lenSentInt);
+ if ( lenSentInt!=iDataToRead8.Length() )
+ {
+ ERR_PRINTF3(_L("Returned length received: %d != Actual length received: %d"), lenSentInt, iDataToRead8.Length());
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdRemoteName(const TDesC& aSection)
+ {
+ T_TBTSockAddrChild addr;
+ iData->iBluetoothSocket->RemoteName(addr);
+
+ TBTDevAddr currentAddr = addr.BTAddr();
+ TBuf<KMaxSockAddrSize> tmpBuf;
+ currentAddr.GetReadable(tmpBuf);
+ INFO_PRINTF2(_L("RemoteName() = 0x%S"),&tmpBuf);
+
+
+ TPtrC myTBTDevAddrName;
+ if( GetStringFromConfig(aSection, KTBTDevAddr(), myTBTDevAddrName))
+ {
+ CT_BTDevAddrData* myTBTDevAddrData=static_cast<CT_BTDevAddrData*>(GetDataWrapperL(myTBTDevAddrName));
+ TBTDevAddr btDevAddr = *myTBTDevAddrData->GetAddress();
+ TBuf<KMaxSockAddrSize> tmpBuf2;
+ btDevAddr.GetReadable(tmpBuf2);
+ if (tmpBuf2 != tmpBuf)
+ {
+ ERR_PRINTF3(_L("Expected address (%S) != actual address (%S)"),&tmpBuf2,&tmpBuf);
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ TInt lhs;
+ TInt rhs;
+ TBool lhsGiven = EFalse;
+ TBool rhsGiven = EFalse;
+ lhsGiven = GetHexFromConfig(aSection, KHexBTAddrL(), lhs );
+ rhsGiven = GetHexFromConfig(aSection, KHexBTAddrR(), rhs );
+
+ if (lhsGiven && rhsGiven)
+ {
+ TBTDevAddr btDevAddr (MAKE_TINT64(lhs, rhs));
+ TBuf<KMaxSockAddrSize> tmpBuf2;
+ btDevAddr.GetReadable(tmpBuf2);
+ if (tmpBuf2 != tmpBuf)
+ {
+ ERR_PRINTF3(_L("Expected address (%S) != actual address (%S)"),&tmpBuf2,&tmpBuf);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+ // Set in TBTSockAddr Data object so that it can be verified
+ TPtrC myTSockAddrName;
+ CT_BTSockAddrData* myTSockAddrData=NULL;
+ if( GetStringFromConfig(aSection, KTSockAddr(), myTSockAddrName))
+ {
+ myTSockAddrData=static_cast<CT_BTSockAddrData*>(GetDataWrapperL(myTSockAddrName));
+ if ( myTSockAddrData!=NULL )
+ {
+ myTSockAddrData->SetObject(&addr,EFalse);
+ }
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdRequestChangeSupportedPacketTypes(const TDesC& aSection)
+ {
+ TInt mask = 0;
+ CT_BTUtil::GetTBTPacketType(*this, aSection, mask);
+ TInt errCode = iData->iBluetoothSocket->RequestChangeSupportedPacketTypes(mask);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("RequestChangeSupportedPacketTypes failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdRequestMasterRole()
+ {
+ TInt errCode = iData->iBluetoothSocket->RequestMasterRole();
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("RequestMasterRole failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdRequestSlaveRole()
+ {
+ TInt errCode = iData->iBluetoothSocket->RequestSlaveRole();
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("RequestSlaveRole failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdSend(const TDesC& aSection, const TInt aAsyncErrorIndex)
+ {
+ TPtrC dataToSend;
+ iSendFlag = EFalse;
+ if( GetStringFromConfig(aSection, KData(), dataToSend))
+ {
+ INFO_PRINTF2(_L("About to send: [%S]"), &dataToSend);
+
+ TBuf8<DATASIZE> dataToSend8(_L8(""));
+ dataToSend8.Copy(dataToSend);
+
+ for ( ;dataToSend8.Length()<DATASIZE;)
+ {
+ dataToSend8.Append(_L8("#"));
+ }
+
+ TBool boolCallTwice = EFalse;
+ GetBoolFromConfig(aSection, KCallTwice(), boolCallTwice);
+
+ TInt flags=0;
+ GetIntFromConfig(aSection, KFlags(), flags);
+ TBool useSend2 =EFalse;
+ GetBoolFromConfig(aSection, KUseSend2(), useSend2);
+ if (useSend2!=EFalse)
+ {
+ INFO_PRINTF1(_L("Using Send 2"));
+ INFO_PRINTF2(_L("Flags: %d"),flags);
+ TSockXfrLength actuallengthSent;
+
+ TInt errCode = iData->iBluetoothSocket->Send(dataToSend8,flags,actuallengthSent);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("Send failed: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iSendIndex = aAsyncErrorIndex;
+ }
+ if( boolCallTwice )
+ {
+ errCode = iData->iBluetoothSocket->Send(dataToSend8,flags,actuallengthSent);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("Send failed: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iSendFlag = ETrue;
+ iSendIndex = aAsyncErrorIndex;
+ }
+ }
+ if (errCode == KErrNone)
+ {
+ TInt& lenSentInt=actuallengthSent();
+ INFO_PRINTF2(_L("Returned length actual sent: %d"), lenSentInt);
+ if (lenSentInt != dataToSend8.Length())
+ {
+ INFO_PRINTF3(_L("Returned length sent: %d != Actual length sent: %d"),lenSentInt,dataToSend8.Length());
+ SetBlockResult(EFail);
+ }
+ }
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Using Send 1"));
+ INFO_PRINTF2(_L("Flags: %d"),flags);
+ TInt errCode = iData->iBluetoothSocket->Send(dataToSend8,flags);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("Send failed: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iSendFlag = ETrue;
+ iSendIndex = aAsyncErrorIndex;
+ }
+ if( boolCallTwice )
+ {
+ errCode = iData->iBluetoothSocket->Send(dataToSend8,flags);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("Send failed: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iSendFlag = ETrue;
+ iSendIndex = aAsyncErrorIndex;
+ }
+ }
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdSendTo(const TDesC& aSection,const TInt aAsyncErrorIndex)
+ {
+ TBool useSend2 =EFalse;
+ GetBoolFromConfig(aSection, KUseSend2(), useSend2);
+
+ TInt flags = 0; // read in, if not found send 0
+ GetIntFromConfig(aSection, KFlags(), flags);
+ TPtrC dataToSend;
+ if( GetStringFromConfig(aSection, KData(), dataToSend))
+ {
+ INFO_PRINTF2(_L("About to send: [%S]"), &dataToSend);
+ TBool boolCallTwice = EFalse;
+ GetBoolFromConfig(aSection, KCallTwice(), boolCallTwice);
+
+ TBuf8<DATASIZE> dataToSend8(_L8(""));
+ dataToSend8.Copy(dataToSend);
+ TPtrC myTSockAddrName;
+ TBTSockAddr* myTSockAddr=NULL;
+ if( GetStringFromConfig(aSection, KTSockAddr(), myTSockAddrName))
+ {
+ INFO_PRINTF2(_L("Binding with: %S TSockAddr"), &myTSockAddrName);
+ myTSockAddr=static_cast<TBTSockAddr*>(GetDataObjectL(myTSockAddrName));
+ if ( myTSockAddr!=NULL )
+ {
+ if (!useSend2)
+ {
+ TInt errCode = iData->iBluetoothSocket->SendTo(dataToSend8,*myTSockAddr,flags);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("SendTo failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iSendIndex = aAsyncErrorIndex;
+ }
+ if( boolCallTwice )
+ {
+ errCode = iData->iBluetoothSocket->SendTo(dataToSend8,*myTSockAddr,flags);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("SendTo failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iSendIndex = aAsyncErrorIndex;
+ }
+ }
+ }
+ else
+ {
+ TSockXfrLength lenSent;
+ TInt errCode = iData->iBluetoothSocket->SendTo(dataToSend8,*myTSockAddr,flags,lenSent);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("SendTo failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iSendIndex = aAsyncErrorIndex;
+ }
+ if( boolCallTwice )
+ {
+ errCode = iData->iBluetoothSocket->SendTo(dataToSend8,*myTSockAddr,flags,lenSent);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("SendTo failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iSendIndex = aAsyncErrorIndex;
+ }
+ }
+ if (errCode == KErrNone)
+ {
+ TInt& lenSentInt=lenSent();
+ INFO_PRINTF2(_L("Returned actual length sent: %d"), lenSentInt);
+ if (lenSentInt != dataToSend8.Length())
+ {
+ INFO_PRINTF3(_L("Returned length sent: %d != Actual length sent: %d"),lenSentInt,dataToSend8.Length());
+ }
+ }
+
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("SendTo TBTSockAddr is NULL"));
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdSetAutomaticSniffMode(const TDesC& aSection)
+ {
+
+ TBool sniffMode = EFalse;
+ GetBoolFromConfig(aSection, KSniffMode(), sniffMode);
+
+ TInt errCode = KErrNone;
+
+ TInt sniffDelay = 0;
+ if( GetIntFromConfig(aSection, KSniffDelay(), sniffDelay) )
+ {
+ INFO_PRINTF3(_L("SetAutomaticSniffMode(%d, %d)"), sniffMode, sniffDelay);
+ errCode = iData->iBluetoothSocket->SetAutomaticSniffMode(sniffMode, sniffDelay);
+ }
+ else
+ {
+ INFO_PRINTF2(_L("SetAutomaticSniffMode(%d)"), sniffMode);
+ errCode = iData->iBluetoothSocket->SetAutomaticSniffMode(sniffMode);
+ }
+
+ if (errCode!=KErrNone)
+ {
+ ERR_PRINTF2(_L("SetAutomaticSniffMode failed: %d"),errCode);
+ SetError(errCode);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdSetLocalPort(const TDesC& aSection)
+ {
+ TInt port;
+
+ if( GetIntFromConfig(aSection, KPort(), port))
+ {
+ INFO_PRINTF2(_L("Port to set is: %d"), port);
+ TInt errCode = iData->iBluetoothSocket->SetLocalPort(port);
+ if (errCode!=KErrNone)
+ {
+ ERR_PRINTF2(_L("SetLocalPort failed: %d"),errCode);
+ SetError(errCode);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Missing :%S"), &KPort());
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdSetNotifierL(const TDesC& aSection)
+ {
+ MBluetoothSocketNotifier* theNotifier = iData;
+
+ TBool useAlternate =EFalse;
+ GetBoolFromConfig(aSection, KUseAlternateNotifier(), useAlternate);
+ if (useAlternate)
+ {
+ theNotifier=this;
+ }
+
+ iData->iBluetoothSocket->SetNotifier(*theNotifier);
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdSetOpt(const TDesC& aSection)
+ {
+ TPtrC optionName;
+ TPtrC optionLevel;
+ TInt optionNameValue;
+ TInt optionLevelValue;
+ TBool found = EFalse;
+ if( GetStringFromConfig(aSection, KOptionName(), optionName))
+ {
+ found=CT_BTUtil::GetIntValue(optionName, optionNameValue);
+ //Report error but continue as it may still make sense
+ if (!found)
+ {
+ ERR_PRINTF2(_L("Option not found in lookup: %S"),&optionName);
+ SetBlockResult(EFail);
+ }
+ INFO_PRINTF3(_L("The name of the option to set: %S , its value: %d" ),&optionName, optionNameValue);
+ if( GetStringFromConfig(aSection, KOptionLevel(), optionLevel))
+ {
+ found=CT_BTUtil::GetIntValue(optionLevel, optionLevelValue);
+ //Report error but continue as it may still make sense
+ if (!found)
+ {
+ ERR_PRINTF2(_L("Option Level not found in lookup: %S"),&optionLevel);
+ SetBlockResult(EFail);
+ }
+ INFO_PRINTF3(_L("The name of the option level to set: %S , its value: %d" ),&optionLevel, optionLevelValue);
+ TPtrC intOptionName;
+ if( GetStringFromConfig(aSection, KNamedIntOption(), intOptionName))
+ {
+ INFO_PRINTF1(_L("Using SetOpt1 with named constant value"));
+ TInt intOption;
+ found=CT_BTUtil::GetIntValue(intOptionName, intOption);
+ //Report error but continue as it may still make sense
+ if (!found)
+ {
+ ERR_PRINTF2(_L("Option not found in lookup: %S"),&optionLevel);
+ SetBlockResult(EFail);
+ }
+ INFO_PRINTF3(_L("The name of the option level to set: %S its value: %d" ),&intOptionName, intOption);
+ iData->iBluetoothSocket->SetOpt(optionNameValue,optionLevelValue,intOption);
+ }
+ else
+ {
+ TInt intOption;
+ if( GetIntFromConfig(aSection, KIntOption(), intOption))
+ {
+ INFO_PRINTF1(_L("Using SetOpt1 with int value"));
+ INFO_PRINTF2(_L("The value of the option level to set: %d" ),intOption);
+ iData->iBluetoothSocket->SetOpt(optionNameValue,optionLevelValue,intOption);
+ }
+ else
+ {
+ TPtrC desOption;
+ if( GetStringFromConfig(aSection, KDesOption(), desOption))
+ {
+ INFO_PRINTF2(_L("The option level to set: %S" ),&desOption);
+ TBuf8<DATASIZE> desOption8(_L8(""));
+ desOption8.Copy(desOption);
+ INFO_PRINTF3(_L("desOption len %d, desOption8 len %d" ),desOption.Length(), desOption8.Length());
+ INFO_PRINTF1(_L("Using Deprecated SetOpt2"));
+ iData->iBluetoothSocket->SetOpt(optionNameValue,optionLevelValue,desOption8);
+ }
+ else
+ {
+ // Use default parameter for SetOpt i.e. call with two parameters only
+ INFO_PRINTF1(_L("Using Deprecated SetOpt2 with default value"));
+ iData->iBluetoothSocket->SetOpt(optionNameValue,optionLevelValue);
+ }
+ }
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+
+
+inline void CT_CBluetoothSocketData::DoCmdSetOption(const TDesC& aSection)
+ {
+ TPtrC optionName;
+ TPtrC optionLevel;
+ TInt optionNameValue;
+ TInt optionLevelValue;
+ TBool found = EFalse;
+ if( GetStringFromConfig(aSection, KOptionName(), optionName))
+ {
+ found=CT_BTUtil::GetIntValue(optionName, optionNameValue);
+ //Report error but continue as it may still make sense
+ if (!found)
+ {
+ ERR_PRINTF2(_L("Option not found in lookup: %S"),&optionName);
+ SetBlockResult(EFail);
+ }
+ INFO_PRINTF3(_L("The name of the option to set: %S , its value: %d" ),&optionName, optionNameValue);
+ if( GetStringFromConfig(aSection, KOptionLevel(), optionLevel))
+ {
+ found=CT_BTUtil::GetIntValue(optionLevel, optionLevelValue);
+ //Report error but continue as it may still make sense
+ if (!found)
+ {
+ ERR_PRINTF2(_L("Option Level not found in lookup: %S"),&optionLevel);
+ SetBlockResult(EFail);
+ }
+
+ TPtrC desOption;
+ if( GetStringFromConfig(aSection, KDesOption(), desOption))
+ {
+ INFO_PRINTF2(_L("The option level to set: %S" ),&desOption);
+ TBuf8<DATASIZE> desOption8(_L8(""));
+ desOption8.Copy(desOption);
+
+ INFO_PRINTF3(_L("desOption len %d, desOption8 len %d" ),desOption.Length(), desOption8.Length());
+ INFO_PRINTF1(_L("Using SetOption"));
+ iData->iBluetoothSocket->SetOption(optionNameValue,optionLevelValue,desOption8);
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdShutdown(const TDesC& aSection, const TInt aAsyncErrorIndex)
+ {
+
+ TBool boolCallTwice = EFalse;
+ GetBoolFromConfig(aSection, KCallTwice(), boolCallTwice);
+
+ RSocket::TShutdown shutdown=RSocket::ENormal;
+ TBool dataOk=CT_BTUtil::GetShutdown(*this, aSection, shutdown);
+
+ if ( dataOk )
+ {
+ TInt err=KErrNone;
+ TBuf8<DATASIZE> dataToSend8(_L8(""));
+ TPtrC disconnectData;
+ TBool hasDisconnectData=GetStringFromConfig(aSection, KDisconnectData(), disconnectData);
+ if( hasDisconnectData )
+ {
+ INFO_PRINTF1(_L("Using second shutdown"));
+ dataToSend8.Copy(disconnectData);
+ err = iData->iBluetoothSocket->Shutdown(shutdown, dataToSend8, iDataAtDisconnect8);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Using standard shutdown"));
+ err = iData->iBluetoothSocket->Shutdown(shutdown);
+ }
+ if ( err==KErrNone )
+ {
+ IncOutstanding();
+ iShutdownIndex = aAsyncErrorIndex;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Shutdown of iBluetoothSocket failed with error code %d"), err);
+ SetError(err);
+ }
+
+ if( boolCallTwice )
+ {
+ if ( hasDisconnectData )
+ {
+ err = iData->iBluetoothSocket->Shutdown(shutdown, dataToSend8, iDataAtDisconnect8);
+ }
+ else
+ {
+ err = iData->iBluetoothSocket->Shutdown(shutdown);
+ }
+ if (err != KErrNone )
+ {
+ ERR_PRINTF2(_L("Shutdown of iBluetoothSocket failed with error code %d"),err);
+ SetError(err);
+ }
+ }
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdTransfer(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Transfer the Bluetooth socket to this testddata object" ));
+
+ TPtrC myRSocketName;
+ RSocket* myRSocket=NULL;
+ if( GetStringFromConfig(aSection, KRSocket(), myRSocketName))
+ {
+ INFO_PRINTF2(_L("Transfering: %S to this RSocketServer"), &myRSocketName);
+ myRSocket=static_cast<RSocket*>(GetDataObjectL(myRSocketName));
+ if ( myRSocket!=NULL )
+ {
+ TName myRSockName;
+ myRSocket->Name(myRSockName);
+
+ if (myRSockName.Length()>0)
+ {
+ TInt err = iData->iBluetoothSocket->Transfer(iData->iSocketServer, myRSockName);
+ if (err == KErrNone )
+ {
+ INFO_PRINTF1(_L("Transfer successful" ));
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Transfer failed with error code %d"),err);
+ SetError(err);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("Failed to fetch RSocket name"));
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Failed to fetch RSocket from %S"),&myRSocketName);
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdWrite(const TDesC& aSection,const TInt aAsyncErrorIndex)
+ {
+
+ TPtrC dataToSend;
+ iWriteFlag = EFalse;
+ if( GetStringFromConfig(aSection, KData(), dataToSend))
+ {
+ INFO_PRINTF2(_L("About to write: [%S]"), &dataToSend);
+
+ TBool boolCallTwice = EFalse;
+ GetBoolFromConfig(aSection, KCallTwice(), boolCallTwice);
+
+ TBuf8<DATASIZE> dataToSend8(_L8(""));
+ dataToSend8.Copy(dataToSend);
+
+ for ( ;dataToSend8.Length()<DATASIZE;)
+ {
+ dataToSend8.Append(_L8("#"));
+ }
+ TInt errCode = iData->iBluetoothSocket->Write(dataToSend8);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("ActivateBasebandEventNotifier failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iWriteFlag = ETrue;
+ iSendIndex = aAsyncErrorIndex;
+ }
+ if( boolCallTwice )
+ {
+ errCode = iData->iBluetoothSocket->Write(dataToSend8);
+ if (errCode != KErrNone)
+ {
+ ERR_PRINTF2(_L("ActivateBasebandEventNotifier failed with error code: %d"),errCode);
+ SetError(errCode);
+ }
+ else
+ {
+ IncOutstanding();
+ iWriteFlag = ETrue;
+ iSendIndex = aAsyncErrorIndex;
+ }
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdTestMBSN_ExtensionInterfaceL(const TDesC& aSection)
+ {
+ TInt tmp;
+ void* theExtensionObjectPtr;
+
+ TBool expectNull = EFalse;
+ GetBoolFromConfig(aSection, KExpectNull(), expectNull);
+
+ if( GetIntFromConfig(aSection, KUid(), tmp))
+ {
+ TUid uid=TUid::Uid(tmp);
+ TRAPD(err, iData->MBSN_ExtensionInterfaceL(uid,theExtensionObjectPtr));
+ if( err!=KErrNone )
+ {
+ ERR_PRINTF2(_L("MBSN_ExtensionInterfaceL err=%d"),err);
+ SetError(EFail);
+ }
+
+ if (expectNull)
+ {
+ //Fail if not NULL
+ if (theExtensionObjectPtr!=NULL)
+ {
+ ERR_PRINTF1(_L("Expected Null pointer but object found"));
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ //Fail if NULL
+ if (theExtensionObjectPtr!=NULL)
+ {
+ }
+ else
+ {
+ ERR_PRINTF1(_L("Expected object but found NULL"));
+ SetBlockResult(EFail);
+ }
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetIntFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdSetRsocketServerFromCBTSocket(const TDesC& aSection)
+ {
+
+ // Get the blank session socket
+ TPtrC myCT_CBluetoothSocketDataName;
+ CT_CBluetoothSocketData* myCT_CBluetoothSocketData=NULL;
+ if( GetStringFromConfig(aSection, KCBluetoothSocket(), myCT_CBluetoothSocketDataName))
+ {
+ myCT_CBluetoothSocketData=static_cast<CT_CBluetoothSocketData*>(GetDataWrapperL(myCT_CBluetoothSocketDataName));
+ if ( myCT_CBluetoothSocketData!=NULL )
+ {
+ iData->iSocketServer=myCT_CBluetoothSocketData->GetRServer();
+ }
+ else
+ {
+ ERR_PRINTF1(_L("CBluetoothSocket is NULL"));
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("GetStringFromConfig failed"));
+ SetBlockResult(EFail);
+ }
+ }
+
+inline void CT_CBluetoothSocketData::DoCmdSetTransferAble()
+ {
+ iData->iBluetoothSocket->SetOpt(KSOEnableTransfer, KSOLSocket, KProcPolicy().Package());
+ }
+
+RSocketServ& CT_CBluetoothSocketData::GetRServer()
+ {
+ return iData->iSocketServer;
+ }
+
+// MBluetoothSocketNotifier implementation
+void CT_CBluetoothSocketData::HandleConnectCompleteL(TInt aErr)
+ {
+ INFO_PRINTF2(_L("HandleConnectCompleteL : Status (%d)" ), aErr);
+
+ if (aErr != KErrNone)
+ {
+ ERR_PRINTF2(_L("HandleConnectCompleteL called with error code: %d"),aErr);
+ SetAsyncError(iConnectIndex, aErr);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("HandleConnectCompleteL successful" ));
+ }
+
+ TBuf<DATASIZE> dataToRead(_L(""));
+ dataToRead.Copy(iDataToRead8);
+ INFO_PRINTF2(_L("Retrived: [%S]"), &dataToRead);
+
+ if ( iHasConnectDataToExpect )
+ {
+ TBuf<DATASIZE> dataExpected;
+ dataExpected.Copy(iConnectDataToExpect);
+
+ // If dataExpected is shorter add filler chars as we did in send
+ // We just need to use a TBuf so that we can change it
+ if ( dataExpected.Length()<dataToRead.Length() )
+ {
+ for ( ;dataExpected.Length()<DATASIZE;)
+ {
+ dataExpected.Append(_L("#"));
+ }
+ }
+
+ //Verify the data
+ INFO_PRINTF2(_L("Expected: [%S]"), &dataExpected);
+ if ( dataExpected != dataToRead )
+ {
+ ERR_PRINTF1(_L("Data is not as expected"));
+ SetBlockResult(EFail);
+ }
+ }
+ DecOutstanding();
+ }
+
+void CT_CBluetoothSocketData::HandleAcceptCompleteL(TInt aErr)
+ {
+ if (aErr != KErrNone)
+ {
+ ERR_PRINTF2(_L("HandleAcceptCompleteL called with error code: %d"),aErr);
+ SetAsyncError(iAcceptIndex, aErr);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("HandleAcceptCompleteL successful" ));
+ }
+
+ TBuf<DATASIZE> dataToRead(_L(""));
+ dataToRead.Copy(iDataToRead8);
+ INFO_PRINTF2(_L("Retrived: [%S]"),&dataToRead);
+
+ if ( iHasAcceptDataToExpect )
+ {
+ TBuf<DATASIZE> dataExpected;
+ dataExpected.Copy(iAcceptDataToExpect);
+
+ // If dataExpected is shorter add filler chars as we did in send
+ // We just need to use a TBuf so that we can change it
+ if ( dataExpected.Length()<dataToRead.Length() )
+ {
+ for ( ;dataExpected.Length()<DATASIZE;)
+ {
+ dataExpected.Append(_L("#"));
+ }
+ }
+
+ //Verify the data
+ INFO_PRINTF2(_L("Expected: [%S]"),&dataExpected);
+ if (dataExpected != dataToRead)
+ {
+ ERR_PRINTF1(_L("Data is not as expected"));
+ SetBlockResult(EFail);
+ }
+ }
+ DecOutstanding();
+ }
+
+void CT_CBluetoothSocketData::HandleShutdownCompleteL(TInt aErr)
+ {
+ if (aErr != KErrNone)
+ {
+ ERR_PRINTF2(_L("HandleShutdownCompleteL called with error code: %d"),aErr);
+ SetAsyncError(iShutdownIndex, aErr);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("HandleShutdownCompleteL successful" ));
+ }
+ DecOutstanding();
+ }
+
+void CT_CBluetoothSocketData::HandleSendCompleteL(TInt aErr)
+ {
+ if (aErr != KErrNone)
+ {
+ ERR_PRINTF2(_L("HandleSendCompleteL called with error code: %d"),aErr);
+ SetAsyncError(iSendIndex, aErr);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("HandleSendCompleteL successful" ));
+ }
+ DecOutstanding();
+ }
+
+void CT_CBluetoothSocketData::HandleReceiveCompleteL(TInt aErr)
+ {
+ if (aErr != KErrNone)
+ {
+ ERR_PRINTF2(_L("HandleReceiveCompleteL called with error code: %d"),aErr);
+ SetAsyncError(iReceiveIndex, aErr);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("HandleReceiveCompleteL successful" ));
+ }
+
+ TBuf<DATASIZE> dataToRead(_L(""));
+ dataToRead.Copy(iDataToRead8);
+ INFO_PRINTF2(_L("Retrived: [%S]"), &dataToRead);
+
+ if ( iHasReceiveDataToExpect )
+ {
+ TBuf<DATASIZE> dataExpected;
+ dataExpected.Copy(iReceiveDataToExpect);
+
+ // If dataExpected is shorter add filler chars as we did in send
+ // We just need to use a TBuf so that we can change it
+ if ( dataExpected.Length()<dataToRead.Length() )
+ {
+ for ( ;dataExpected.Length()<DATASIZE;)
+ {
+ dataExpected.Append(_L("#"));
+ }
+ }
+
+ // Verify the data
+ if (dataExpected != dataToRead)
+ {
+ ERR_PRINTF1(_L("Data is not as expected"));
+ SetBlockResult(EFail);
+ }
+ INFO_PRINTF2(_L("Expected: [%S]"), &dataExpected);
+ }
+ DecOutstanding();
+ }
+
+void CT_CBluetoothSocketData::HandleIoctlCompleteL(TInt aErr)
+ {
+ if (aErr != KErrNone)
+ {
+ ERR_PRINTF2(_L("HandleIoctlCompleteL called with error code: %d"),aErr);
+ SetAsyncError(iIoctlIndex, aErr);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("HandleIoctlCompleteL successful" ));
+
+ TBuf8<DATASIZE> tempBuffer(_L8(""));
+ tempBuffer.Copy(iMTUOptionBuffer);
+ INFO_PRINTF2(_L("HandleIoctlCompleteL = %S" ), &tempBuffer);
+ }
+ DecOutstanding();
+ }
+
+void CT_CBluetoothSocketData::HandleActivateBasebandEventNotifierCompleteL(TInt aErr, TBTBasebandEventNotification & aEventNotification)
+ {
+ if (aErr != KErrNone)
+ {
+ ERR_PRINTF2(_L("HandleActivateBasebandEventNotifierCompleteL called with error code: %d"),aErr);
+ SetAsyncError(iNotifierIndex, aErr);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("HandleActivateBasebandEventNotifierCompleteL successful" ));
+ INFO_PRINTF4(_L("Even type: %d Error code: %d Symbian Error Code: %d"), aEventNotification.EventType(), aEventNotification.ErrorCode(), aEventNotification.SymbianErrorCode());
+
+
+ }
+ DecOutstanding();
+ }