diff -r 613943a21004 -r 9386f31cc85b btobexprofiles/obexserviceman/plugins/src/bt/obexsmbtconnection.cpp --- a/btobexprofiles/obexserviceman/plugins/src/bt/obexsmbtconnection.cpp Tue Aug 31 15:25:10 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,295 +0,0 @@ -/* -* Copyright (c) 2002-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: This class handles service connections. -* -*/ - - -// INCLUDE FILES -#include -#include "obexsmbtconnection.h" -#include "debug.h" - -_LIT( KBTProtocol, "RFCOMM" ); - - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------- -// C++ default constructor can NOT contain any code, that -// might leave. -// --------------------------------------------------------- -// -CObexSMBtConnection::CObexSMBtConnection() - { - } -// --------------------------------------------------------- -// Constructor -// --------------------------------------------------------- -// -CObexSMBtConnection::CObexSMBtConnection(TAny* aInitParams) - :iImplementationInfo((CImplementationInformation *)aInitParams), - iBtDiscovery(NULL) - { - } -// --------------------------------------------------------- -// Destructor -// --------------------------------------------------------- -// -CObexSMBtConnection::~CObexSMBtConnection() - { - // Cleanup - FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection::~CSrcsBtConnection begin")); - - if(iPasskey) - { - iPasskey->Cancel(); - FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection::~CSrcsBtConnection passkey query cancelled.")); - } - - if ( iBtDiscovery ) - { - iBtDiscovery->DeleteSdpRecord( iSDPHandle ); - delete iBtDiscovery; - } - - FTRACE( FPrint( _L( "[SRCS] CSrcsBtConnection::~CSrcsBtConnection: UnregisterSDPSettingsL" ) ) ); - - - if(iServer) - { - iServer->Stop(); - FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection::~CSrcsBtConnection obex server stopped.")); - } - // Delete OBEX Server - if (iServer) - { - delete iServer; - FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection::~CSrcsBtConnection obex server deleted.")); - iServer = NULL; - } - - // Delete passkey - delete iPasskey; - FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection::~CSrcsBtConnection iPasskey deleted.")); - iPasskey = NULL; - - // Delete Service Controller callback - delete iController; - FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection::~CSrcsBtConnection service controller deleted.")); - iController = NULL; - } - -// --------------------------------------------------------- -// NewL -// --------------------------------------------------------- -// -CObexSMBtConnection* CObexSMBtConnection::NewL(TAny* aInitParams) - { - FLOG(_L("[SRCS]\tserver\tCSrcsBtConnection: NewL")); - CObexSMBtConnection* self = new (ELeave) CObexSMBtConnection(aInitParams); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - - -// --------------------------------------------------------- -// ConstructL -// Method to create BT connections. -// --------------------------------------------------------- -// -void CObexSMBtConnection::ConstructL() - { - TLex8 lex; - // Create service controller implementation object - iController = CSrcsInterface::NewL(iImplementationInfo->ImplementationUid()); - - FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: CSrcsInterface::NewL\t")); - iController->SetMediaType( ESrcsMediaBT ); - // parsing opaque_data in iImplementationInfo - TPtrC8 res_string = iImplementationInfo->OpaqueData(); - - CObexUtilsOpaqueData res_data(res_string); - - TBuf8 op_LocalWho; - TUint op_Protocol, op_Authenticate, op_Authorise, op_Encrypt; - TUint op_ReceiveMtu(KSRCSDefaultReceiveMtu), op_TransmitMtu(KSRCSDefaultTransmitMtu); - - // skip 1st entry: USB interface string descriptor - User::LeaveIfError ( res_data.GetString(op_LocalWho) ); - - // get 2nd entry: OBEX local who - User::LeaveIfError ( res_data.GetString(op_LocalWho) ); - - // get 3rd to 7th entry - - // All service ID should be strings ! - TBuf8 serviceUUID; - User::LeaveIfError ( res_data.GetString(serviceUUID) ); - - FTRACE(FPrint(_L("[SRCS] CObexSMBtConnection::ConstructL() serviceUUID Length %d"), serviceUUID.Length())); - - if (serviceUUID.Length() < 6) - { - User::Leave( KErrArgument ); - } - - lex.Assign(serviceUUID); - - User::LeaveIfError ( res_data.GetNumber(op_Protocol) ); - User::LeaveIfError ( res_data.GetNumber(op_Authenticate) ); - User::LeaveIfError ( res_data.GetNumber(op_Authorise) ); - User::LeaveIfError ( res_data.GetNumber(op_Encrypt) ); - - // Get OBEX packet size: - if( res_data.GetNumber(op_ReceiveMtu) != KErrNone ) - { - op_ReceiveMtu = KSRCSDefaultReceiveMtu; // restore default value in case it is modified; - FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: op_ReceiveMtu not specified.\t")); - } - - if( res_data.GetNumber(op_TransmitMtu) != KErrNone ) - { - op_TransmitMtu = KSRCSDefaultTransmitMtu; // restore default value in case it is modified; - FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: op_TransmitMtu not specified.\t")); - } - - FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: Successfully get all data from opaque_data.\t")); - - // Create CBTEngDiscovery - - FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: CBTConnection::NewL\t")); - - // For handling Obex Passkey note - iPasskey = CObexSMPasskey::NewL(); - FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: CSrcsPasskey::NewL\t")); - - // For showing Error Notes - // iErrorUi = CErrorUI::NewL(); - - // set up the protocol stack... - TObexBluetoothProtocolInfo aObexBluetoothProtocolInfo; - aObexBluetoothProtocolInfo.iTransport = KBTProtocol ; - - // Configure security setting - FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: Setting Security\t")); - TBTServiceSecurity sec; - sec.SetAuthentication(op_Authenticate); - sec.SetAuthorisation(op_Authorise); - sec.SetEncryption(op_Encrypt); - - TUint32 serviceUID; - lex.Inc(2); - lex.Val(serviceUID,EHex); - sec.SetUid(TUid::Uid(serviceUID)); - aObexBluetoothProtocolInfo.iAddr.SetSecurity(sec); - if (serviceUUID.Length() == 34) - { - TUint32 HH; TUint32 HL; TUint32 LH; TUint32 LL; - lex = serviceUUID.Mid(2, 8); - lex.Val(HH, EHex); - lex = serviceUUID.Mid(10, 8); - lex.Val(HL, EHex); - lex = serviceUUID.Mid(18, 8); - lex.Val(LH, EHex); - lex = serviceUUID.Mid(26, 8); - lex.Val(LL, EHex); - iServiceUUID = TUUID(HH, HL, LH, LL); - } - else - { - iServiceUUID = TUUID(serviceUID); - } - - // Configure Obex packet size - TObexProtocolPolicy aObexProtocolPolicy; - aObexProtocolPolicy.SetReceiveMtu( static_cast(op_ReceiveMtu) ); - aObexProtocolPolicy.SetTransmitMtu( static_cast(op_TransmitMtu) ); - FTRACE(FPrint(_L("[SRCS] CSrcsBtConnection: ConstructL: op_ReceiveMtu[%x] op_TransmitMtu[%x]"), - aObexProtocolPolicy.ReceiveMtu(), aObexProtocolPolicy.TransmitMtu() )); - - // try to find a available channel to start OBEX server. - TUint channel=KRfcommPassiveAutoBind; - - aObexBluetoothProtocolInfo.iAddr.SetPort( channel ); - TRAPD(err,iServer = CObexServer::NewL(aObexBluetoothProtocolInfo, aObexProtocolPolicy);) - // Try to start server on this channel - if ( err == KErrNone ) - { - err=iController->SetObexServer( iServer ); - if ( err == KErrNone ) - { - // Set authentication handler - iServer->SetCallBack( *this ); - //If there is "local who" field, set it to OBEX server. - if(op_LocalWho.Size()) - { - User::LeaveIfError ( iServer->SetLocalWho( op_LocalWho ) ); - FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: SetLocalWho\t")); - } - FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: SetObexServer\t")); - - // Register SDP settings - - TObexBtTransportInfo *info=(TObexBtTransportInfo*)iServer->TransportInfo(); - channel=info->iAddr.Port(); - FTRACE(FPrint(_L("[SRCS] CSrcsBtConnection: ConstructL: CObexServer started on channel %d"), channel)); - iBtDiscovery = CBTEngDiscovery::NewL(); - User::LeaveIfError ( iBtDiscovery->RegisterSdpRecord(iServiceUUID, channel, iSDPHandle )); - } - else - { - // Failed to start Obex server. Delete server and try again - FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: Failed to start Obex server. Delete server and try again.\t")); - delete iServer; - iServer = NULL; - } - } - if ( !iServer ) - { - // Server did not start. - FLOG(_L("[SRCS] CSrcsBtConnection: ConstructL: Failed to start Obex server. Leave now! \t")); - User::Leave( KErrGeneral ); - } - - } - -// --------------------------------------------------------- -// GetUserPasswordL(const TDesC& ) -// Purpose: Get the Obex password from user with ObexPasskeyNotifier -// Parameters: -// Return value: -// --------------------------------------------------------- -// -void CObexSMBtConnection::GetUserPasswordL( const TDesC& ) - { - FLOG( _L( "[SRCS] CSrcsBtConnection: GetUserPassword\t" ) ); - iPasskey->StartPassKeyRequestL( iServer ); - } - -// --------------------------------------------------------- -// Check if OBEX service is still active. -// @return ETrue: OBEX service is still active. -// EFalse: OBEX service is inactive. -// --------------------------------------------------------- -// -TBool CObexSMBtConnection::IsOBEXActive() - { - FLOG( _L( "[SRCS] CSrcsBtConnection: IsOBEXActive\t" ) ); - return ETrue; - } - -// End of file