void ChatServer::startServer() { if (rfcommServer) return; //! [Create the server] rfcommServer = new QRfcommServer(this); connect(rfcommServer, SIGNAL(newConnection()), this, SLOT(clientConnected())); rfcommServer->listen(); //! [Create the server] serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceRecordHandle, (uint)0x00010010); //! [Class Uuuid must contain at least 1 entry] QBluetoothServiceInfo::Sequence classId; classId << QVariant::fromValue(QBluetoothUuid(serviceUuid)); serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceClassIds, classId); //! [Class Uuuid must contain at least 1 entry] //! [Service name, description and provider] serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceName, tr("Bt Chat Server")); serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceDescription, tr("Example bluetooth chat server")); serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceProvider, tr("Nokia, QtDF")); //! [Service name, description and provider] //! [Service UUID set] serviceInfo.setServiceUuid(QBluetoothUuid(serviceUuid)); //! [Service UUID set] //! [Service Discoverability] serviceInfo.setAttribute(QBluetoothServiceInfo::BrowseGroupList, QBluetoothUuid(QBluetoothUuid::PublicBrowseGroup)); //! [Service Discoverability] //! [Protocol descriptor list] QBluetoothServiceInfo::Sequence protocolDescriptorList; QBluetoothServiceInfo::Sequence protocol; protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::L2cap)); protocolDescriptorList.append(QVariant::fromValue(protocol)); protocol.clear(); protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::Rfcomm)) << QVariant::fromValue(quint8(rfcommServer->serverPort())); protocolDescriptorList.append(QVariant::fromValue(protocol)); serviceInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, protocolDescriptorList); //! [Protocol descriptor list] //! [Register service] serviceInfo.registerService(); //! [Register service] }
void ChatServer::startServer(const QBluetoothAddress& localAdapter) { if (rfcommServer) return; rfcommServer = new QBluetoothServer(QBluetoothServiceInfo::RfcommProtocol, this); connect(rfcommServer, SIGNAL(newConnection()), this, SLOT(clientConnected())); bool result = rfcommServer->listen(localAdapter); if (!result) { qWarning() << "Cannot bind chat server to" << localAdapter.toString(); return; } //serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceRecordHandle, (uint)0x00010010); QBluetoothServiceInfo::Sequence classId; classId << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::SerialPort)); serviceInfo.setAttribute(QBluetoothServiceInfo::BluetoothProfileDescriptorList, classId); classId.prepend(QVariant::fromValue(QBluetoothUuid(serviceUuid))); serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceClassIds, classId); serviceInfo.setAttribute(QBluetoothServiceInfo::BluetoothProfileDescriptorList,classId); serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceName, tr("Bt Chat Server")); serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceDescription, tr("Example bluetooth chat server")); serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceProvider, tr("qt-project.org")); serviceInfo.setServiceUuid(QBluetoothUuid(serviceUuid)); QBluetoothServiceInfo::Sequence publicBrowse; publicBrowse << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::PublicBrowseGroup)); serviceInfo.setAttribute(QBluetoothServiceInfo::BrowseGroupList, publicBrowse); QBluetoothServiceInfo::Sequence protocolDescriptorList; QBluetoothServiceInfo::Sequence protocol; protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::L2cap)); protocolDescriptorList.append(QVariant::fromValue(protocol)); protocol.clear(); protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::Rfcomm)) << QVariant::fromValue(quint8(rfcommServer->serverPort())); protocolDescriptorList.append(QVariant::fromValue(protocol)); serviceInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, protocolDescriptorList); serviceInfo.registerService(localAdapter); }
/** * @brief startServer * @param _localAdapter */ void server_unit::startServer( const QBluetoothAddress &_localAdapter ) { if( mRfcommServer ) { return; } // Create the server mRfcommServer = new QBluetoothServer( QBluetoothServiceInfo::RfcommProtocol, this ); this->connect( mRfcommServer, SIGNAL(newConnection()), this, SLOT(clientConnected_slot()) ); bool result = mRfcommServer->listen( _localAdapter ); if( !result ) { emit dbgMsg_signal("[SU] Cannot bind RFCOMM server to local adapter \n"); } // Set service info mServiceInfo.setAttribute(QBluetoothServiceInfo::ServiceName, tr("Crichton Server")); mServiceInfo.setAttribute(QBluetoothServiceInfo::ServiceDescription, tr("Control machine service")); mServiceInfo.setAttribute(QBluetoothServiceInfo::ServiceProvider, tr("golems.org")); QBluetoothServiceInfo::Sequence publicBrowse; publicBrowse << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::PublicBrowseGroup)); mServiceInfo.setAttribute(QBluetoothServiceInfo::BrowseGroupList, publicBrowse); QBluetoothServiceInfo::Sequence classId; classId << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::SerialPort)); mServiceInfo.setAttribute(QBluetoothServiceInfo::BluetoothProfileDescriptorList, classId); classId.prepend(QVariant::fromValue(QBluetoothUuid(serviceUuid))); mServiceInfo.setAttribute(QBluetoothServiceInfo::ServiceClassIds, classId); mServiceInfo.setAttribute(QBluetoothServiceInfo::BluetoothProfileDescriptorList,classId); mServiceInfo.setServiceUuid(QBluetoothUuid(serviceUuid)); QBluetoothServiceInfo::Sequence protocolDescriptorList; QBluetoothServiceInfo::Sequence protocol; protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::L2cap)); protocolDescriptorList.append(QVariant::fromValue(protocol)); protocol.clear(); protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::Rfcomm)) << QVariant::fromValue(quint8(mRfcommServer->serverPort())); protocolDescriptorList.append(QVariant::fromValue(protocol)); mServiceInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, protocolDescriptorList); mServiceInfo.registerService( _localAdapter ); }
/*! Creates the RFCOMM server and starts to listen for the incoming connections. Returns true if the server was started successfully, false otherwise. */ bool BluetoothServer::startServer() { qDebug() << "Bluetoothserver::startServer(): =>"; if (mServiceUuid == 0) { qDebug() << "BluetoothServer::startServer(): No service information set!"; return false; } if (mRfcommServer) { qDebug() << "BluetoothServer::startServer(): Already started!"; return false; } mSockets.clear(); mLastErrorString = ""; Common::resetBuffer(); qDebug() << "Bluetoothserver::startServer(): Creating a server"; // Create the server mRfcommServer = new QRfcommServer(this); connect(mRfcommServer, SIGNAL(newConnection()), this, SLOT(onNewConnection())); qDebug() << "Bluetoothserver::startServer(): Server created"; #ifdef Q_WS_HARMATTAN if (!mRfcommServer->listen(QBluetoothAddress(), 11)) #else if (!mRfcommServer->listen()) #endif { qDebug() << "BluetoothServer::startServer():" << "Error: mRfcommServer is not listening!"; delete mRfcommServer; mRfcommServer = 0; return false; } qDebug() << "BluetoothServer::startServer(): Server is using port" << mRfcommServer->serverPort(); mServiceInfo.setAttribute(QBluetoothServiceInfo::ServiceRecordHandle, (uint)0x00010010); #if !defined(Q_WS_SIMULATOR) && !defined(DISABLE_BLUETOOTH) // Class Uuuid must contain at least one entry QBluetoothServiceInfo::Sequence classId; classId << QVariant::fromValue(QBluetoothUuid(mServiceUuid)); mServiceInfo.setAttribute(QBluetoothServiceInfo::ServiceClassIds, classId); #endif mServiceInfo.setServiceAvailability(1); qDebug() << "BluetoothServer::startServer(): Using service info:" << mServiceInfo.attribute(QBluetoothServiceInfo::ServiceName).toString() << mServiceInfo.attribute(QBluetoothServiceInfo::ServiceProvider).toString(); // Set the Service UUID set mServiceInfo.setServiceUuid(QBluetoothUuid(mServiceUuid)); // Set service discoverability mServiceInfo.setAttribute(QBluetoothServiceInfo::BrowseGroupList, QBluetoothUuid(QBluetoothUuid::PublicBrowseGroup)); #if !defined(Q_WS_SIMULATOR) && !defined(DISABLE_BLUETOOTH) // Protocol descriptor list QBluetoothServiceInfo::Sequence protocolDescriptorList; QBluetoothServiceInfo::Sequence protocol; protocol.clear(); protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::Rfcomm)) << QVariant::fromValue(quint8(mRfcommServer->serverPort())); protocolDescriptorList.append(QVariant::fromValue(protocol)); mServiceInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, protocolDescriptorList); #endif // Register the service if (mServiceInfo.registerService()) { qDebug() << "BluetoothServer::startServer():" << "Service registered. Waiting for clients to connect."; } else { qDebug() << "BluetoothServer::startServer():" << "Failed to register the service!"; delete mRfcommServer; mRfcommServer = 0; return false; } qDebug() << "Bluetoothserver::startServer(): <="; return true; }
void tst_QBluetoothServiceInfo::tst_assignment() { QFETCH(QUuid, uuid); QFETCH(QBluetoothUuid::ProtocolUuid, protocolUuid); QFETCH(QBluetoothServiceInfo::Protocol, serviceInfoProtocol); const QString serviceName("My Service"); const QBluetoothDeviceInfo deviceInfo(QBluetoothAddress("001122334455"), "Test Device", 0); QBluetoothServiceInfo serviceInfo; serviceInfo.setServiceName(serviceName); serviceInfo.setDevice(deviceInfo); QVERIFY(serviceInfo.isValid()); { QBluetoothServiceInfo copyInfo = serviceInfo; QVERIFY(copyInfo.isValid()); QCOMPARE(copyInfo.serviceName(), serviceName); QCOMPARE(copyInfo.device().address(), deviceInfo.address()); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); copyInfo = serviceInfo; QVERIFY(copyInfo.isValid()); QCOMPARE(copyInfo.serviceName(), serviceName); QCOMPARE(copyInfo.device().address(), deviceInfo.address()); } { QBluetoothServiceInfo copyInfo1; QBluetoothServiceInfo copyInfo2; QVERIFY(!copyInfo1.isValid()); QVERIFY(!copyInfo2.isValid()); copyInfo1 = copyInfo2 = serviceInfo; QVERIFY(copyInfo1.isValid()); QVERIFY(copyInfo2.isValid()); QCOMPARE(copyInfo1.serviceName(), serviceName); QCOMPARE(copyInfo2.serviceName(), serviceName); QCOMPARE(copyInfo1.device().address(), deviceInfo.address()); QCOMPARE(copyInfo2.device().address(), deviceInfo.address()); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); copyInfo = serviceInfo; copyInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, uuid); QVERIFY(copyInfo.contains(QBluetoothServiceInfo::ProtocolDescriptorList)); QVERIFY(copyInfo.isComplete()); QVERIFY(copyInfo.attributes().count() > 0); copyInfo.removeAttribute(QBluetoothServiceInfo::ProtocolDescriptorList); QVERIFY(!copyInfo.contains(QBluetoothServiceInfo::ProtocolDescriptorList)); QVERIFY(!copyInfo.isComplete()); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); copyInfo = serviceInfo; QVERIFY(copyInfo.serverChannel() == -1); QVERIFY(copyInfo.protocolServiceMultiplexer() == -1); QBluetoothServiceInfo::Sequence protocolDescriptorList; QBluetoothServiceInfo::Sequence protocol; protocol << QVariant::fromValue(QBluetoothUuid(protocolUuid)); protocolDescriptorList.append(QVariant::fromValue(protocol)); protocol.clear(); protocolDescriptorList.append(QVariant::fromValue(protocol)); copyInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, protocolDescriptorList); QVERIFY(copyInfo.serverChannel() == -1); QVERIFY(copyInfo.protocolServiceMultiplexer() != -1); QVERIFY(copyInfo.socketProtocol() == serviceInfoProtocol); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); copyInfo = serviceInfo; QVERIFY(!copyInfo.isRegistered()); QVERIFY(copyInfo.registerService()); QVERIFY(copyInfo.isRegistered()); QVERIFY(copyInfo.unregisterService()); QVERIFY(!copyInfo.isRegistered()); } }
int Main::buttonClicked() { QList<QBluetoothHostInfo> localAdapters = QBluetoothLocalDevice::allDevices(); printf("%s - localAdapters.count=%d\n", __func__, localAdapters.count()); for(int i = 0; i < localAdapters.size(); i++) { qDebug() << __func__ << " - adapter: " << i << " " << localAdapters[i].name().toUtf8().constData() << " " << localAdapters[i].address().toString(); } if (localAdapters.size() < 1) { qDebug() << __func__ << " no bluetooth found"; return -1; } QBluetoothLocalDevice adapter(localAdapters.at(0).address()); adapter.setHostMode(QBluetoothLocalDevice::HostDiscoverable); QBluetoothServer *rfcommServer = new QBluetoothServer(QBluetoothServiceInfo::RfcommProtocol, NULL); connect(rfcommServer, SIGNAL(newConnection()), this, SLOT(clientConnected())); QBluetoothAddress actualAddress = localAdapters[0].address(); printf("%s - QBluetoothServer - starting to listen at %s\n", __func__, actualAddress.toString().toUtf8().constData()); bool result = rfcommServer->listen(actualAddress); if (!result) { qDebug() << __func__ << "-" << result; return -1; } //! [Get local device name] QString localName = QBluetoothLocalDevice().name(); qDebug() << "local device name" << localName; //result = serviceInfo.registerService(/*actualAddress*/); #pragma region Attributes serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceRecordHandle, (uint)0x00010010); //! [Class Uuuid must contain at least 1 entry] QBluetoothServiceInfo::Sequence classId; classId << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::SerialPort)); serviceInfo.setAttribute(QBluetoothServiceInfo::BluetoothProfileDescriptorList, classId); printf("%s - done %d\n", __func__, 1); classId.prepend(QVariant::fromValue(QBluetoothUuid(serviceUuid))); serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceClassIds, classId); serviceInfo.setAttribute(QBluetoothServiceInfo::BluetoothProfileDescriptorList,classId); //! [Class Uuuid must contain at least 1 entry] printf("%s - done %d\n", __func__, 2); //! [Service name, description and provider] serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceName, tr("Bt Chat Server")); serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceDescription, tr("Example bluetooth chat server")); serviceInfo.setAttribute(QBluetoothServiceInfo::ServiceProvider, tr("qt-project.org")); //! [Service name, description and provider] //! [Service UUID set] serviceInfo.setServiceUuid(QBluetoothUuid(serviceUuid)); //! [Service UUID set] printf("%s - done %d\n", __func__, 3); //! [Service Discoverability] QBluetoothServiceInfo::Sequence publicBrowse; publicBrowse << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::PublicBrowseGroup)); serviceInfo.setAttribute(QBluetoothServiceInfo::BrowseGroupList, publicBrowse); //! [Service Discoverability] printf("%s - done %d\n", __func__, 4); //! [Protocol descriptor list] QBluetoothServiceInfo::Sequence protocolDescriptorList; QBluetoothServiceInfo::Sequence protocol; protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::L2cap)); protocolDescriptorList.append(QVariant::fromValue(protocol)); protocol.clear(); protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::Rfcomm)) << QVariant::fromValue(quint8(rfcommServer->serverPort())); protocolDescriptorList.append(QVariant::fromValue(protocol)); serviceInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, protocolDescriptorList); //! [Protocol descriptor list] printf("%s - done %d\n", __func__, 5); //! [Register service] result = serviceInfo.registerService(actualAddress); if (!result) { printf("%s - registering with SDP failed\n", __func__); return -1; } //! [Register service] #pragma endregion printf("%s - done\n", __func__); return 0; }
void tst_QBluetoothServiceInfo::tst_assignment() { QFETCH(QUuid, uuid); QFETCH(QBluetoothUuid::ProtocolUuid, protocolUuid); QFETCH(QBluetoothServiceInfo::Protocol, serviceInfoProtocol); QFETCH(bool, protocolSupported); const QString serviceName("My Service"); const QBluetoothDeviceInfo deviceInfo(QBluetoothAddress("001122334455"), "Test Device", 0); QBluetoothServiceInfo serviceInfo; serviceInfo.setServiceName(serviceName); serviceInfo.setDevice(deviceInfo); QVERIFY(serviceInfo.isValid()); QVERIFY(!serviceInfo.isRegistered()); QVERIFY(!serviceInfo.isComplete()); { QBluetoothServiceInfo copyInfo = serviceInfo; QVERIFY(copyInfo.isValid()); QVERIFY(!copyInfo.isRegistered()); QVERIFY(!copyInfo.isComplete()); QCOMPARE(copyInfo.serviceName(), serviceName); QCOMPARE(copyInfo.device().address(), deviceInfo.address()); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); QVERIFY(!copyInfo.isRegistered()); QVERIFY(!copyInfo.isComplete()); copyInfo = serviceInfo; QVERIFY(copyInfo.isValid()); QVERIFY(!copyInfo.isRegistered()); QVERIFY(!copyInfo.isComplete()); QCOMPARE(copyInfo.serviceName(), serviceName); QCOMPARE(copyInfo.device().address(), deviceInfo.address()); } { QBluetoothServiceInfo copyInfo1; QBluetoothServiceInfo copyInfo2; QVERIFY(!copyInfo1.isValid()); QVERIFY(!copyInfo1.isRegistered()); QVERIFY(!copyInfo1.isComplete()); QVERIFY(!copyInfo2.isValid()); QVERIFY(!copyInfo2.isRegistered()); QVERIFY(!copyInfo2.isComplete()); copyInfo1 = copyInfo2 = serviceInfo; QVERIFY(copyInfo1.isValid()); QVERIFY(!copyInfo1.isRegistered()); QVERIFY(!copyInfo1.isComplete()); QVERIFY(copyInfo2.isValid()); QVERIFY(!copyInfo2.isRegistered()); QVERIFY(!copyInfo2.isComplete()); QCOMPARE(copyInfo1.serviceName(), serviceName); QCOMPARE(copyInfo2.serviceName(), serviceName); QCOMPARE(copyInfo1.device().address(), deviceInfo.address()); QCOMPARE(copyInfo2.device().address(), deviceInfo.address()); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); QVERIFY(!copyInfo.isRegistered()); QVERIFY(!copyInfo.isComplete()); copyInfo = serviceInfo; QVERIFY(copyInfo.contains(QBluetoothServiceInfo::ServiceName)); copyInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, QBluetoothUuid(uuid)); QVERIFY(copyInfo.contains(QBluetoothServiceInfo::ProtocolDescriptorList)); QVERIFY(copyInfo.isComplete()); QVERIFY(copyInfo.attributes().count() > 0); copyInfo.removeAttribute(QBluetoothServiceInfo::ProtocolDescriptorList); QVERIFY(!copyInfo.contains(QBluetoothServiceInfo::ProtocolDescriptorList)); QVERIFY(!copyInfo.isComplete()); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); copyInfo = serviceInfo; QVERIFY(copyInfo.serverChannel() == -1); QVERIFY(copyInfo.protocolServiceMultiplexer() == -1); QBluetoothServiceInfo::Sequence protocolDescriptorList; QBluetoothServiceInfo::Sequence protocol; protocol << QVariant::fromValue(QBluetoothUuid(protocolUuid)); protocolDescriptorList.append(QVariant::fromValue(protocol)); protocol.clear(); protocolDescriptorList.append(QVariant::fromValue(protocol)); copyInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, protocolDescriptorList); if (serviceInfoProtocol == QBluetoothServiceInfo::L2capProtocol) { QVERIFY(copyInfo.serverChannel() == -1); QVERIFY(copyInfo.protocolServiceMultiplexer() != -1); } else if (serviceInfoProtocol == QBluetoothServiceInfo::RfcommProtocol) { QVERIFY(copyInfo.serverChannel() != -1); QVERIFY(copyInfo.protocolServiceMultiplexer() == -1); } QVERIFY(copyInfo.socketProtocol() == serviceInfoProtocol); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); copyInfo = serviceInfo; copyInfo.setServiceUuid(QBluetoothUuid::SerialPort); QVERIFY(!copyInfo.isRegistered()); if (!QBluetoothLocalDevice::allDevices().count()) { QSKIP("Skipping test due to missing Bluetooth device"); } else if (protocolSupported) { QBluetoothServer server(serviceInfoProtocol); QVERIFY(server.listen()); QTRY_VERIFY_WITH_TIMEOUT(server.isListening(), 5000); QVERIFY(server.serverPort() > 0); QBluetoothServiceInfo::Sequence protocolDescriptorList; QBluetoothServiceInfo::Sequence protocol; protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::L2cap)); if (serviceInfoProtocol == QBluetoothServiceInfo::L2capProtocol) { protocol << QVariant::fromValue(server.serverPort()); protocolDescriptorList.append(QVariant::fromValue(protocol)); } else if (serviceInfoProtocol == QBluetoothServiceInfo::RfcommProtocol) { protocolDescriptorList.append(QVariant::fromValue(protocol)); protocol.clear(); protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::Rfcomm)) << QVariant::fromValue(quint8(server.serverPort())); protocolDescriptorList.append(QVariant::fromValue(protocol)); } serviceInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, protocolDescriptorList); QVERIFY(copyInfo.registerService()); QVERIFY(copyInfo.isRegistered()); QVERIFY(serviceInfo.isRegistered()); QBluetoothServiceInfo secondCopy; secondCopy = copyInfo; QVERIFY(secondCopy.isRegistered()); QVERIFY(secondCopy.unregisterService()); QVERIFY(!copyInfo.isRegistered()); QVERIFY(!secondCopy.isRegistered()); QVERIFY(!serviceInfo.isRegistered()); QVERIFY(server.isListening()); server.close(); QVERIFY(!server.isListening()); } } }