- Q_UNUSED(connection);
- Q_UNUSED(user_data);
-
- ConIcConnectionStatus status = con_ic_connection_event_get_status(event);
-
- switch(status)
- {
-
- case CON_IC_STATUS_CONNECTED:
- qDebug() << "Connected";
- instance_->emit connected();
- instance_->connected_ = true;
- break;
-
- case CON_IC_STATUS_DISCONNECTING:
- case CON_IC_STATUS_NETWORK_UP:
- break;
-
- case CON_IC_STATUS_DISCONNECTED:
- ConIcConnectionError err = con_ic_connection_event_get_error(event);
- switch(err)
- {
- case CON_IC_CONNECTION_ERROR_NONE:
- case CON_IC_CONNECTION_ERROR_USER_CANCELED:
- qDebug() << "Disconnected";
- instance_->emit disconnected();
- instance_->connected_ = false;
- break;
-
- case CON_IC_CONNECTION_ERROR_INVALID_IAP:
- qDebug() << "Invalid IAP";
- instance_->emit error("Invalid IAP");
- break;
-
- case CON_IC_CONNECTION_ERROR_CONNECTION_FAILED:
- qDebug() << "Connection failed";
- instance_->emit error("Connection failed");
- break;
-
- default:
- break;
- }
- break;
- }
+ unsigned int status = rep.arguments().value(6).value<unsigned int>();
+
+ switch(status)
+ {
+ case ICD_CONNECTION_SUCCESSFUL:
+ connected_ = true;
+ connectionReady_ = true;
+ break;
+ case ICD_CONNECTION_NOT_CONNECTED:
+ connected_ = false;
+ connectionReady_ = true;
+ break;
+ case ICD_CONNECTION_DISCONNECTED:
+ connected_ = false;
+ connectionReady_ = true;
+ break;
+ default:
+ qDebug() << "Unknown connection status";
+ break;
+ }
+
+ if(connectionReady_)
+ {
+ emit connectReply(connected_);
+ }
+}
+
+void ConnectionManager::scanResult(const QDBusMessage& rep)
+{
+ if(!connections_)
+ {
+ return;
+ }
+
+ QList<QVariant> args = rep.arguments();
+
+ unsigned int status = args.value(0).value<unsigned int>();
+
+ if(status == ICD_SCAN_COMPLETE)
+ {
+ scannedConnections_++;
+ }
+
+ if(scannedConnections_ >= numberOfConnections_)
+ {
+ scanReady_ = true;
+ emit scanReady();
+ return;
+ }
+
+ if(status != ICD_SCAN_NEW)
+ {
+ return;
+ }
+
+ Connection connection;
+ connection.serviceType = args.value(2).toString();
+ connection.serviceAttributes = args.value(4).value<unsigned int>();
+ connection.serviceID = args.value(5).toString();
+ connection.networkName = args.value(8).toString();
+ connection.networkType = args.value(7).toString();
+ connection.networkAttributes = args.value(9).value<unsigned int>();
+ connection.networkID = args.value(10).toByteArray();
+
+ emit newConnection(connection);
+
+ connections_->push_back(connection);
+}
+
+bool ConnectionManager::waitSignal(bool* ready)
+{
+ timeout_ = false;
+ timer_ = startTimer(TIMEOUT);
+
+ while(!*ready && !timeout_)
+ {
+ QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents);
+ }
+
+ killTimer(timer_);
+
+ return *ready || !timeout_;
+}
+
+void ConnectionManager::timerEvent(QTimerEvent* event)
+{
+ Q_UNUSED(event);
+ killTimer(timer_);
+ timeout_ = true;
+ timer_ = 0;
+
+ qDebug() << "Connection request timed out";