--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/bluetooth/bluetoothcommons/src.s60/bluetoothnamelookup.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2008 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 "bluetoothnamelookup.h"
+#include "fs_methodcall.h"
+#include "javajniutils.h"
+#include "logger.h"
+
+namespace java
+{
+namespace bluetooth
+{
+
+_LIT(KBTLinkManagerTxt, "BTLinkManager");
+
+OS_EXPORT BluetoothNameLookup* BluetoothNameLookup::NewL()
+{
+ JELOG2(EJavaBluetooth);
+ BluetoothNameLookup* btNameLookup = new BluetoothNameLookup();
+ CleanupStack::PushL(btNameLookup);
+ btNameLookup->constructL();
+ CleanupStack::Pop(btNameLookup);
+ return btNameLookup;
+}
+
+void BluetoothNameLookup::constructL()
+{
+ JELOG2(EJavaBluetooth);
+ User::LeaveIfError(mSocketServ.Connect());
+}
+
+OS_EXPORT BluetoothNameLookup::~BluetoothNameLookup()
+{
+ JELOG2(EJavaBluetooth);
+ mHostResolver.Close();
+ mSocketServ.Close();
+ delete mLookupMonitor;
+}
+
+OS_EXPORT std::wstring * BluetoothNameLookup::doDeviceNameLookupL(
+ TInt64 aDevAddr)
+{
+ JELOG2(EJavaBluetooth);
+ mLookupName = NULL;
+
+ if (0 == mLookupMonitor)
+ {
+ mLookupMonitor = new CActiveSchedulerWait();
+ }
+ LOG1(EJavaBluetooth, EInfo,
+ "+ BluetoothNameLookup::doDeviceNameLookupL DeviceAddress:%x",
+ aDevAddr);
+
+ TProtocolDesc pdesc;
+ User::LeaveIfError(mSocketServ.FindProtocol(KBTLinkManagerTxt(), pdesc));
+
+ // Initialize host resolver
+ mHostResolver.Close();
+ User::LeaveIfError(mHostResolver.Open(mSocketServ, pdesc.iAddrFamily,
+ pdesc.iProtocol));
+
+ TBTDevAddr deviceAddr(aDevAddr);
+
+ mSockAddr.SetBTAddr(deviceAddr);
+ mSockAddr.SetAction(KHostResName | KHostResIgnoreCache);
+ mHostResolver.GetByAddress(mSockAddr, mNameEntry, iStatus);
+
+ SetActive();
+ mLookupMonitor->Start();
+ if (KErrNone != mLookupStatus && KErrCancel != mLookupStatus
+ && KErrCompletion != mLookupStatus)
+ {
+ //if there is any error, then we send null. need to throw IOException
+ //at the java side if null is returned
+ ELOG1(EJavaBluetooth,
+ "- BluetoothNameLookup::doDeviceNameLookupL Error %d",
+ mLookupStatus);
+ User::Leave(mLookupStatus);
+ }
+
+ return mLookupName;
+}
+
+void BluetoothNameLookup::RunL()
+{
+ JELOG2(EJavaBluetooth);
+ std::wstring *deviceName = NULL;
+ if (KErrNone == iStatus.Int() && NULL != mNameEntry().iName.Ptr())
+ {
+ deviceName = new std::wstring((wchar_t*) mNameEntry().iName.Ptr());
+ deviceName->resize(mNameEntry().iName.Length());
+ }
+
+ nameLookupCompleted(iStatus.Int(), deviceName);
+ //We do not set this to active again as we just need to lookup once
+}
+
+/**
+ * Notify the monitor, which waits for the name lookup to complete
+ */
+void BluetoothNameLookup::nameLookupCompleted(int aStatus,
+ std::wstring* deviceName)
+{
+ JELOG2(EJavaBluetooth);
+ mLookupStatus = aStatus;
+ mLookupName = deviceName;
+ mLookupMonitor->AsyncStop();
+}
+
+void BluetoothNameLookup::DoCancel()
+{
+}
+
+} //end namespace java
+} //end namespace bluetooth