void QBluetoothSocketPrivate::connectToService(const QBluetoothAddress &address, quint16 port, QIODevice::OpenMode openMode) { Q_Q(QBluetoothSocket); Q_UNUSED(openMode); TBTSockAddr a; if(address.isNull()) { socketError = QBluetoothSocket::UnknownSocketError; emit q->error(socketError); return; } TInt err = KErrNone; a.SetPort(port); // Trap TBTDevAddr constructor which may panic TRAP(err, a.SetBTAddr(TBTDevAddr(address.toUInt64()))); if(err == KErrNone) err = iSocket->Connect(a); if (err == KErrNone) { q->setSocketState(QBluetoothSocket::ConnectingState); } else { socketError = QBluetoothSocket::UnknownSocketError; emit q->error(socketError); } }
/** Fetches the device address property synchronously if it exists. Conditionally queue a request to be notified of future BDADDR changes. By default, a request is not queued automatically. @param aRestart specify whether to queue request and schedule the active object. Default is EFalse. @return KErrUnderflow The property has zero length (i.e. is uninitialised) @internalComponent */ TInt CBTAddrSubscriber::SyncFetch (TBool aRestart) { LOG_FUNC TInt retval = KErrNone; TBuf8<KBTDevAddrSize> addr; iDevAddrProperty.Get(addr); if (addr.Length()) { iAddr = TBTDevAddr(addr); LOG_BT(_L8("Setting address to %S"), iAddr); } else { // The property hasn't been initialised yet. retval = KErrUnderflow; } if(aRestart) { if(retval == KErrNone) { // The BT stack was already up when BNEP started. Call the // BDADDRChanged method to inform the NIF that the link layer // is up. iOwner.BDADDRChanged(); } else { // Watch out for any future updates on the property. iDevAddrProperty.Subscribe(iStatus); SetActive(); } } return retval; }
//------------------------------------------------------------ // CNsmlObexClient::ConnectL( TNSmlObexTransport aTransport, TBool /*aServerAlerted*/, TDesC8& aMimeType, TRequestStatus &aStatus ) //------------------------------------------------------------ void CNsmlObexClient::ConnectL( TNSmlObexTransport aTransport, TBool /*aServerAlerted*/, TDesC8& aMimeType, TRequestStatus &aStatus ) { iAgentStatus = &aStatus; // agent *iAgentStatus = KRequestPending; delete iMimeType; iMimeType = NULL; iMimeType = HBufC8::NewL( aMimeType.Length() ); TPtr8 iMIMEptr( iMimeType->Des() ); iMIMEptr.Copy( aMimeType ); if ( iState == EDisconnected && !IsActive() ) { //Delete old and create new device/service searcher delete iObexSearcher; iObexSearcher = NULL; //Handle bluetooth as a special case: if ( aTransport == EObexBt ) { iObexSearcher = CObexSearcherFactory::CreateBTSearcherL( iBTConnInfo ); iObexSearcher->SetObserver( this ); iObexSearcher->SetExtObserver( iExtObserver ); //Search device first if the device address is undefined if ( iBTConnInfo.iDevAddr == TBTDevAddr() ) { iObexSearcher->SearchDeviceL(); } else { //else skip device search and jump straight to the service search iObexSearcher->SearchServiceL(); } } else { //Other cases, only IrDA so far iObexSearcher = CObexSearcherFactory::CreateObexSearcherL( aTransport ); iObexSearcher->SetObserver( this ); iObexSearcher->SetExtObserver( iExtObserver ); iObexSearcher->SearchDeviceL(); } } else { //debug here User::Leave( KErrInUse ); } }
TBTDevAddr QBtAddress::convertToSymbianBtDevAddr() { const TUint8* memPtr = (const TUint8*)toByteArray().constData(); TPtrC8 devAddrPtr8; devAddrPtr8.Set(memPtr, 6); const TBTDevAddr devAddress = TBTDevAddr(devAddrPtr8); return devAddress; }
void CGavdp::Connect(const TBTDevAddr& aRemoteAddr) { __ASSERT_ALWAYS((iState == EIdle || iState == EListening), Panic(EGavdpBadState)); __ASSERT_ALWAYS(iNumSEPsRegistered, Panic(EGavdpSEPMustBeRegisteredBeforeConnect)); __ASSERT_ALWAYS(aRemoteAddr!=TBTDevAddr(0), Panic(EGavdpBadRemoteAddress)); __ASSERT_ALWAYS(!iRequesterHelper, Panic(EGavdpBadState)); AvdtpRequester().SetOpt(EStopAwaitPassiveSignallingChannel, KSolBtAVDTPSignalling, NULL); TRAPD(err, iRequesterHelper = CGavdpConnector::NewL(*this, iServiceUser, aRemoteAddr)); if (err) { iServiceUser.GAVDP_Error(err, KNullDesC8); } else { iState = EConnecting; iRequesterHelper->Begin(); } }
/** Generates a BT device address for use as an unavailable device @return BT Device Address */ TBTDevAddr CT_BTGPSDeviceListHandler::GenerateUniqueBTDevAddr() { return TBTDevAddr(MAKE_TINT64(++iUniqueAddr, 0x01234567)); }
bool QRfcommServer::listen(const QBluetoothAddress &address, quint16 port) { Q_D(QRfcommServer); // listen has already been called before if(d->socket) return true; d->socket = new QBluetoothSocket(QBluetoothSocket::RfcommSocket,this); if(!d->socket) { return false; } d->ds = d->socket->d_ptr; if(!d->ds) { delete d->socket; d->socket = 0; return false; } d->ds->ensureNativeSocket(QBluetoothSocket::RfcommSocket); TRfcommSockAddr addr; if(!address.isNull()) { // TBTDevAddr constructor may panic TRAPD(err,addr.SetBTAddr(TBTDevAddr(address.toUInt64()))); if(err != KErrNone) { delete d->socket; d->socket = 0; return false; } } if (port == 0) addr.SetPort(KRfcommPassiveAutoBind); else addr.SetPort(port); TBTServiceSecurity security; switch (d->securityFlags) { case QBluetooth::Authentication: security.SetAuthentication(EMitmDesired); break; case QBluetooth::Authorization: security.SetAuthorisation(ETrue); break; case QBluetooth::Encryption: // "Secure" is BlueZ specific we just make sure the code remain compatible case QBluetooth::Secure: // authentication required security.SetAuthentication(EMitmDesired); security.SetEncryption(ETrue); break; case QBluetooth::NoSecurity: default: break; } if(d->ds->iSocket->Bind(addr) == KErrNone) { d->socket->setSocketState(QBluetoothSocket::BoundState); } else { delete d->socket; d->socket = 0; return false; } if(d->ds->iSocket->Listen(d->maxPendingConnections) != KErrNone) { delete d->socket; d->socket = 0; return false; } QBluetoothSocket *pendingSocket = new QBluetoothSocket(QBluetoothSocket::UnknownSocketType, this); if(!pendingSocket) { delete d->socket; d->socket = 0; return false; } QBluetoothSocketPrivate *pd = pendingSocket->d_ptr; pd->ensureBlankNativeSocket(QBluetoothSocket::RfcommSocket); connect(d->socket, SIGNAL(disconnected()), this, SLOT(_q_disconnected())); connect(d->socket, SIGNAL(connected()), this, SLOT(_q_connected())); connect(d->socket, SIGNAL(error(QBluetoothSocket::SocketError)), this, SLOT(_q_socketError(QBluetoothSocket::SocketError))); if (d->ds->iSocket->Accept(*pd->iSocket) == KErrNone) { d->socket->setSocketState(QBluetoothSocket::ListeningState); d->activeSockets.append(pendingSocket); return true; } else { delete d->socket, pendingSocket; d->socket = 0; return false; } }