void QBluetoothServer::close() { Q_D(QBluetoothServer); if (!d->activeSockets.isEmpty()) { for (int i = 0; i < d->activeSockets.size(); i++) d->activeSockets.at(i)->close(); qDeleteAll(d->activeSockets); d->activeSockets.clear(); } if (d->socket) { d->socket->close(); if (__fakeServerPorts.contains(d)) { #ifdef QT_QNX_BT_BLUETOOTH QByteArray b_uuid = d->m_uuid.toByteArray(); b_uuid = b_uuid.mid(1, b_uuid.length()-2); bt_spp_close_server(b_uuid.data()); #else ppsSendControlMessage("deregister_server", 0x1101, d->m_uuid, QString(), QString(), 0); #endif __fakeServerPorts.remove(d); } delete d->socket; d->socket = 0; } }
bool QBluetoothServiceInfoPrivate::unregisterService() { if (!registered) return false; if (serverChannel() == -1) return false; if ( __fakeServerPorts.key(serverChannel()) != 0) { #ifdef QT_QNX_BT_BLUETOOTH QByteArray b_uuid = attributes.value(QBluetoothServiceInfo::ServiceId). value<QBluetoothUuid>().toByteArray(); b_uuid = b_uuid.mid(1, b_uuid.length() - 2); if (bt_spp_close_server(b_uuid.data()) == -1) return false; #else if (!ppsSendControlMessage("deregister_server", 0x1101, attributes.value(QBluetoothServiceInfo::ServiceId).value<QBluetoothUuid>(), QString(), attributes.value(QBluetoothServiceInfo::ServiceName).toString(), __fakeServerPorts.key(serverChannel()), BT_SPP_SERVER_SUBTYPE)) { return false; } #endif else { __fakeServerPorts.remove(__fakeServerPorts.key(serverChannel())); registered = false; return true; } } else { return false; } }
bool QBluetoothServiceInfoPrivate::registerService(const QBluetoothAddress& localAdapter) { Q_UNUSED(localAdapter); //QNX always uses default local adapter if (protocolDescriptor(QBluetoothUuid::Rfcomm).isEmpty()) { qCWarning(QT_BT_QNX) << Q_FUNC_INFO << "Only SPP services can be registered on QNX"; return false; } if (serverChannel() == -1) return false; if (__fakeServerPorts.key(serverChannel()) != 0) { #ifdef QT_QNX_BT_BLUETOOTH QByteArray b_uuid = attributes.value(QBluetoothServiceInfo::ServiceId) .value<QBluetoothUuid>().toByteArray(); b_uuid = b_uuid.mid(1, b_uuid.length() - 2); qCDebug(QT_BT_QNX) << "Registering server. " << b_uuid.data() << attributes.value(QBluetoothServiceInfo::ServiceName) .toString(); if (bt_spp_open_server(attributes.value(QBluetoothServiceInfo::ServiceName) .toString().toUtf8().data(), b_uuid.data(), true, &QBluetoothServerPrivate::btCallback, reinterpret_cast<long>(__fakeServerPorts.key(serverChannel()))) == -1) { qCDebug(QT_BT_QNX) << "Could not open the server. " << qt_error_string(errno) << errno; bt_spp_close_server(b_uuid.data()); return false; } #else if (!ppsSendControlMessage("register_server", 0x1101, attributes.value(QBluetoothServiceInfo::ServiceId).value<QBluetoothUuid>(), QString(), attributes.value(QBluetoothServiceInfo::ServiceName).toString(), __fakeServerPorts.key(serverChannel()), BT_SPP_SERVER_SUBTYPE)) return false; #endif //The server needs to know the service name for the socket mount point path __fakeServerPorts.key(serverChannel())->m_serviceName = attributes.value(QBluetoothServiceInfo::ServiceName).toString(); } else { return false; } registered = true; return true; }
void QBluetoothSocketPrivate::abort() { Q_Q(QBluetoothSocket); qCDebug(QT_BT_QNX) << "Disconnecting service"; #ifdef QT_QNX_BT_BLUETOOTH if (isServerSocket) bt_spp_close_server(m_uuid.toString().toUtf8().data()); else bt_spp_close(socket); #else if (q->state() != QBluetoothSocket::ClosingState) ppsSendControlMessage("disconnect_service", 0x1101, m_uuid, m_peerAddress.toString(), QString(), 0, isServerSocket ? BT_SPP_SERVER_SUBTYPE : BT_SPP_CLIENT_SUBTYPE); #endif delete readNotifier; readNotifier = 0; delete connectWriteNotifier; connectWriteNotifier = 0; ::close(socket); isServerSocket = false; }