void ConnectionManager::Inquire(const Request &request) { QSharedPointer<Edge> edge = request.GetFrom().dynamicCast<Edge>(); if(!edge) { qWarning() << "Received an inquired from a non-Edge: " << request.GetFrom()->ToString(); request.Failed(Response::InvalidMessage, "Received on a non-Edge"); return; } else if(edge->Outbound()) { qWarning() << "We should never receive an inquire call on an" << "outbound edge: " << request.GetFrom()->ToString(); request.Failed(Response::InvalidMessage, "Received on outbound edge"); return; } QVariantHash data = request.GetData().toHash(); if(data.value("version").toInt() != VERSION) { qDebug() << "Received an inquired from a different version." << "Expected:" << VERSION << "Found:" << data.value("version"); request.Failed(Response::InvalidInput, "Invalid version"); return; } QByteArray brem_id = data.value("peer_id").toByteArray(); if(brem_id.isEmpty()) { qWarning() << "Invalid Inquire, no id"; request.Failed(Response::InvalidInput, "No remote id"); return; } Id rem_id(brem_id); request.Respond(_local_id.GetByteArray()); QString saddr = data.value("persistent").toString(); Address addr = AddressFactory::GetInstance().CreateAddress(saddr); edge->SetRemotePersistentAddress(addr); if(_local_id < rem_id) { BindEdge(edge, rem_id); } else if(_local_id == rem_id) { edge->Stop("Attempting to connect to ourself"); } }