void GatewayTask::processIcqSignOff() { if ( !d->online ) { return; } ICQ::Session *conn = qobject_cast<ICQ::Session*>( sender() ); if ( !d->icqJidTable.contains(conn) ) { return; } QString user_bare = d->icqJidTable[conn]; XMPP::Jid user = d->jidResources[user_bare]; emit offlineNotifyFor(user); d->icqJidTable.remove(conn); d->jidIcqTable.remove(user_bare); d->jidResources.remove(user_bare); conn->deleteLater(); bool reconnect = UserManager::instance()->getOption(user_bare, "auto-reconnect").toBool(); if ( reconnect ) { int rCount = d->reconnects.value(user_bare); if ( rCount >= 3 ) { // limit number of reconnects to 3. emit gatewayMessage(user, "Tried to reconnect 3 times, but no result. Stopping reconnects."); return; } d->reconnects.insert(user_bare, ++rCount); // qDebug() << "[GT]" << "Processing auto-reconnect for user" << user; emit probeRequest(user); } }
/** * Sends presence notification to all registered users. */ void GatewayTask::processGatewayOnline() { d->online = true; QStringListIterator ri(UserManager::instance()->getUserList()); while ( ri.hasNext() ) { emit offlineNotifyFor( XMPP::Jid(ri.next()) ); } QStringListIterator auto_invite(UserManager::instance()->getUserListByOptVal("auto-invite", QVariant(true))); while ( auto_invite.hasNext() ) { emit probeRequest( XMPP::Jid(auto_invite.next()) ); } }
void ProbeRequestFilter::received(PacketP_t packet) { assert(packet->size() >= sizeof(struct ieee80211_radiotap_hdr)); const struct ieee80211_radiotap_hdr *rh = (const struct ieee80211_radiotap_hdr*)packet->getData().data(); assert(rh->version == 0); packet->pull(rh->len); // At this point we can no longer dereference the rh pointer! rh = NULL; assert(packet->size() >= sizeof(struct ieee80211_hdr)); const struct ieee80211_hdr *hdr = (const struct ieee80211_hdr*)packet->getData().data(); /* We're only interested in administrative frames, not data frames */ if (IEEE80211_TYPE(hdr->frame_control) != WLAN_FC_TYPE_MGMT) return; /* We're only interested in probe requests */ if (IEEE80211_STYPE(hdr->frame_control) != WLAN_FC_STYPE_PROBE_REQ) return; /* Copy out mac address */ ProbeRequestP_t req(new ProbeRequest(hdr->addr2)); packet->pull(sizeof(struct ieee80211_hdr)); hdr = NULL; TagParser tp(packet->getData()); assert(tp.hasTag(WLAN_EID_SSID)); req->SSID = tp.getTagData(WLAN_EID_SSID); if (req->SSID.size() == 0) req->SSID = "Broadcast"; emit probeRequest(req); }