// Looks up the name of the device with the given address. // Arguments: // - wantedAddr - address of the device to look up. Note that the address // is expected without colons!! e.g. "000D9319C868" // - aDeviceName - the object to hold the name once it is found // - ignoreCache - if True, performs a remote name request even if the device // name is known in the cache from a previous request. // // Returns an error code. static TInt LookupName(TBTDevAddr& wantedAddr, THostName* aDeviceName, bool ignoreCache) { TInt err = KErrNone; RSocketServ socketServer; RHostResolver hostResolver; TRequestStatus status; TNameEntry nameEntry; // make a TInquirySockAddr with the address of the device we want to look up TBTSockAddr sockAddr; sockAddr.SetBTAddr(wantedAddr); TInquirySockAddr addr = addr.Cast(sockAddr); // connect err = socketServer.Connect(); if (err) return err; // load protocol for discovery TProtocolDesc protocolDesc; err = socketServer.FindProtocol(_L("BTLinkManager"), protocolDesc); if (!err) { // initialize host resolver err = hostResolver.Open(socketServer, protocolDesc.iAddrFamily, protocolDesc.iProtocol); if (!err) { // Request name lookup. // We don't need to call SetIAC() if we're just doing name lookup. // Don't put KHostResInquiry flag in SetAction(), because that // will start a device inquiry, when we just want to find the one // name. if (ignoreCache) { addr.SetAction(KHostResName|KHostResIgnoreCache); } else { addr.SetAction(KHostResName); } hostResolver.GetByAddress(addr, nameEntry, status); User::WaitForRequest(status); if (status == KErrNone) { *aDeviceName = nameEntry().iName; err = KErrNone; } else { err = KErrGeneral; } hostResolver.Close(); } } socketServer.Close(); return err; }
enum TVerdict CTestIdna04::doTestStepL() { INFO_PRINTF1(_L(" Testing GetByAddress(for an IDN) with IDN Enabled ")); INFO_PRINTF1(_L("*********************************************************")); SetTestStepResult(EFail); // By default start the test case with failure. RSocketServ pSocketServ; User::LeaveIfError(pSocketServ.Connect()); RConnection myConnection; myConnection.Open(pSocketServ, KAfInet); TRequestStatus myStatus=KErrNone; myConnection.Start(myStatus); User::WaitForRequest(myStatus); RHostResolver hr; hr.Open(pSocketServ,KAfInet,KProtocolInetUdp); TBool enableIdn = ETrue;//enabling the option of IDN support TPckgC<TBool> pckgEnable(enableIdn); TInt setOptErr = hr.SetOpt(KSoDnsEnableIdn , KSolInetDns , pckgEnable); User::LeaveIfError(setOptErr); TInetAddr inetAddr; //inetAddr.Input(_L("83.241.177.38")); // this is the IPAddress of the domain räksmörgås.josefsson.org // as of 06 Feb 2009. If this IP changes, this test case might fail // but no harm on this. //TNameEntry resultEntry; inetAddr.Input(_L("64.233.169.103")); TNameRecord asdf; TPckgBuf<TNameRecord> resultEntry(asdf); hr.GetByAddress(inetAddr,resultEntry,myStatus); User::WaitForRequest(myStatus); TInt err = myStatus.Int(); if(err == KErrNone) { INFO_PRINTF2(_L(" GetByAddress with IDN disabled returned %d"),err); SetTestStepResult(EPass); } hr.Close(); myConnection.Close(); pSocketServ.Close(); return TestStepResult(); }
/* * Class: java_net_Inet6AddressImpl * Method: getHostByAddr * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_java_net_Inet6AddressImpl_getHostByAddr(JNIEnv *env, jobject thisObj, jbyteArray addrArray) { /* * IPv4 ... */ if ((*env)->GetArrayLength(env, addrArray) == 4) { return Java_java_net_Inet4AddressImpl_getHostByAddr(env, thisObj, addrArray); } TIp6Addr ip6; /* * For IPv6 address construct a IPv6 TInetAddr. */ (*env)->GetByteArrayRegion(env, addrArray, 0, 16, (jbyte *)ip6.u.iAddr8); TInetAddr ia(ip6, 0); jstring ret = NULL; jint addr; RHostResolver r; TNameEntry res; TInt err = openResolver(r); if (err == KErrNone) { TRequestStatus rs; r.GetByAddress(ia, res, rs); User::WaitForRequest(rs); r.Close(); err = rs.Int(); } if (err != KErrNone) { JNU_ThrowByName(env, JNU_JAVANETPKG "UnknownHostException", NULL); } else { TNameRecord &r = res(); #ifdef _UNICODE ret = (*env)->NewString(env, r.iName.Ptr(), r.iName.Length()); #else TBuf8<r.iName.MaxLength() + 1> name = r.iName(); ret = (*env)->NewStringUTF(env, name.PtrZ()); #endif } return ret; }
enum TVerdict CTestIdna03::doTestStepL() { INFO_PRINTF1(_L(" Testing GetByAddress(for an IDN) without IDN Enabled ")); INFO_PRINTF1(_L("*********************************************************")); SetTestStepResult(EFail); // By default start the test case with failure. RSocketServ pSocketServ; User::LeaveIfError(pSocketServ.Connect()); RConnection myConnection; myConnection.Open(pSocketServ, KAfInet); TRequestStatus myStatus=KErrNone; myConnection.Start(myStatus); User::WaitForRequest(myStatus); RHostResolver hr; hr.Open(pSocketServ,KAfInet,KProtocolInetUdp); TInetAddr inetAddr; inetAddr.Input(_L("83.241.177.38")); // this is the IPAddress of the domain räksmörgås.josefsson.org // as of 06 Feb 2009. If this IP changes, this test case might fail // but no harm on this. TNameEntry resultEntry; hr.GetByAddress(inetAddr,resultEntry,myStatus); User::WaitForRequest(myStatus); TInt err = myStatus.Int(); if(err == KErrNone) { INFO_PRINTF2(_L(" GetByAddress with IDN disabled returned %d"),err); SetTestStepResult(EPass); } hr.Close(); myConnection.Close(); pSocketServ.Close(); return TestStepResult(); }
QString QBluetoothSocketPrivate::peerName() const { RHostResolver resolver; if(getSocketServer()->socketServer.Handle()== 0 || !iSocket || state != QBluetoothSocket::ConnectedState ) { // need to return something anyway return QString(); } TInt err = resolver.Open(getSocketServer()->socketServer, KBTAddrFamily, KBTLinkManager); if (err==KErrNone) { TNameEntry nameEntry; TBTSockAddr sockAddr; iSocket->RemoteName(sockAddr); TInquirySockAddr address(sockAddr); address.SetBTAddr(sockAddr.BTAddr()); address.SetAction(KHostResName|KHostResIgnoreCache); // ignore name stored in cache err = resolver.GetByAddress(address, nameEntry); if(err == KErrNone) { TNameRecord name = nameEntry(); QString qString((QChar*)name.iName.Ptr(),name.iName.Length()); m_peerName = qString; } } resolver.Close(); if(err != KErrNone) { // What is best? return an empty string or return the MAC address? // In Symbian if we can't get the remote name we usually replace it with the MAC address // but since Bluez implementation return an empty string we do the same here. return QString(); } return m_peerName; }
QHostInfo QHostInfoAgent::fromName(const QString &hostName, QSharedPointer<QNetworkSession> networkSession) { QHostInfo results; // Connect to ESOCK RSocketServ socketServ(qt_symbianGetSocketServer()); RHostResolver hostResolver; int err; if (networkSession) err = QNetworkSessionPrivate::nativeOpenHostResolver(*networkSession, hostResolver, KAfInet, KProtocolInetUdp); else err = hostResolver.Open(socketServ, KAfInet, KProtocolInetUdp); if (err) { setError_helper(results, err); return results; } TNameEntry nameResult; #if defined(QHOSTINFO_DEBUG) qDebug("QHostInfoAgent::fromName(%s) looking up...", hostName.toLatin1().constData()); #endif QHostAddress address; if (address.setAddress(hostName)) { // Reverse lookup #if defined(QHOSTINFO_DEBUG) qDebug("(reverse lookup)"); #endif TInetAddr IpAdd; IpAdd.Input(qt_QString2TPtrC(hostName)); // Synchronous request. nameResult returns Host Name. err = hostResolver.GetByAddress(IpAdd, nameResult); if (err) { //for behavioural compatibility with Qt 4.7 and unix/windows //backends: don't report error, return ip address as host name results.setHostName(address.toString()); } else { results.setHostName(qt_TDesC2QString(nameResult().iName)); } results.setAddresses(QList<QHostAddress>() << address); return results; } // IDN support QByteArray aceHostname = QUrl::toAce(hostName); results.setHostName(hostName); if (aceHostname.isEmpty()) { results.setError(QHostInfo::HostNotFound); results.setErrorString(hostName.isEmpty() ? QCoreApplication::translate("QHostInfoAgent", "No host name given") : QCoreApplication::translate("QHostInfoAgent", "Invalid hostname")); return results; } // Call RHostResolver::GetByAddress, and place all IPv4 addresses at the start and // the IPv6 addresses at the end of the address list in results. // Synchronous request. err = hostResolver.GetByName(qt_QString2TPtrC(QString::fromLatin1(aceHostname)), nameResult); if (err) { setError_helper(results, err); return results; } QList<QHostAddress> hostAddresses; TInetAddr hostAdd = nameResult().iAddr; if (!(nameResult().iFlags & TNameRecord::EAlias) && !(hostAdd.IsUnspecified())) hostAddresses.append(qt_QHostAddressFromTInetAddr(hostAdd)); // Check if there's more than one IP address linkd to this name while (hostResolver.Next(nameResult) == KErrNone) { hostAdd = nameResult().iAddr; // Ensure that record is valid (not an alias and with length greater than 0) if (!(nameResult().iFlags & TNameRecord::EAlias) && !(hostAdd.IsUnspecified())) hostAddresses.append(qt_QHostAddressFromTInetAddr(hostAdd)); } hostResolver.Close(); results.setAddresses(hostAddresses); return results; }
enum TVerdict CTS_ResolveAddress::doTestStepL(void) /** * Resolve a hostname to address (reverse dns lookup) * @return The test step verdict */ { TPtrC connPtr(KNameDefault); TBuf<10> keyName; keyName = KDestAddr; // Get destination address from config file TBool returnValue = GetStringFromConfig(KResolveAddress, keyName, connPtr); if (!returnValue) { LogExtra((TText8*)__FILE__, __LINE__, ESevrErr, KEConfigFile);; return EFail; } // Create address TInetAddr ipAddr; TInt err = ipAddr.Input(connPtr); // Resolve address TNameEntry result; RSocketServ sockServ; User::LeaveIfError(sockServ.Connect()); RHostResolver resolver; // Does not have functionality to use an exisiting explicit connection // (like ResolveName) but this test step is not used in any of the test cases. err = resolver.Open(sockServ, KAfInet, KProtocolInetTcp); TESTE(err==KErrNone,err); err = resolver.GetByAddress(ipAddr, result); TESTE(err==KErrNone,err); // Clean up resolver.Close(); sockServ.Close(); // Return result depending on what is expected TBool expectTimeout = EFalse; TBool expectSuccess = ETrue; GetBoolFromConfig(KResolveName, KExpectTimeout, expectTimeout); GetBoolFromConfig(KResolveName, KExpectSuccess, expectSuccess); if (err != KErrNone) { if ((err==KErrNotFound) && !expectSuccess) return EPass; if ((err==KErrTimedOut) && expectTimeout) return EPass; else return EFail; } // No error so... if (expectSuccess) return EPass; else return EFail; }
// Performs a device discovery. Blocks until all devices are found. // Arguments: // - aDevDataList - details of each found device will be put in a TDeviceData // and added to this list // - lookupNames - whether to perform name lookups // // Returns an error code. static TInt DiscoverDevices(TDeviceDataList* aDevDataList, bool lookupNames) { TInt err = KErrNone; RSocketServ socketServer; RHostResolver hostResolver; TInquirySockAddr addr; TRequestStatus status; TNameEntry nameEntry; // connect err = socketServer.Connect(); if (err) return err; // load protocol for discovery TProtocolDesc protocolDesc; err = socketServer.FindProtocol(_L("BTLinkManager"), protocolDesc); if (!err) { // initialize host resolver err = hostResolver.Open(socketServer, protocolDesc.iAddrFamily, protocolDesc.iProtocol); if (!err) { // start device discovery by invoking remote address lookup addr.SetIAC(KGIAC); if (lookupNames) { addr.SetAction(KHostResInquiry|KHostResName|KHostResIgnoreCache); } else { addr.SetAction(KHostResInquiry|KHostResIgnoreCache); } hostResolver.GetByAddress(addr, nameEntry, status); while( User::WaitForRequest( status ), (status == KErrNone || status == KRequestPending) ) { // store new device data entry TDeviceData *devData = new (ELeave) TDeviceData(); if (lookupNames) devData->iDeviceName = nameEntry().iName; devData->iDeviceAddr = static_cast<TBTSockAddr>(nameEntry().iAddr).BTAddr(); TInquirySockAddr &isa = TInquirySockAddr::Cast(nameEntry().iAddr); devData->iServiceClass = (TInt16)isa.MajorServiceClass(); devData->iMajorClass = (TInt8)isa.MajorClassOfDevice(); devData->iMinorClass = (TInt8)isa.MinorClassOfDevice(); // add device data entry to list aDevDataList->Append(devData); // get next discovered device hostResolver.Next( nameEntry, status ); } hostResolver.Close(); } } socketServer.Close(); return err; }