QString dbmanager::del(QString pageid) { qDebug() <<"DELETION CODE GOES HERE"; del_file(pageid); QDir dir(data_path); dir.cd("WTL_appdata"); QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");//not dbConnection db.setDatabaseName(dir.absoluteFilePath("WTL.db")); if(!db.open()) { qDebug() <<"error in opening DB"; } else { qDebug() <<"connected to DB" ; } int revid ; QSqlQuery query; // every page and it's dependencies has a revid associated with it . // revid is unique , used it to delete the pages query.prepare("Select page_revision from Pages where page_ID = :id"); query.bindValue(":id", pageid); query.exec(); if (query.next()) { revid = query.value(0).toInt(); } db.close(); del_from_db(pageid,revid); static auto i = 0; return QString("%1: %2").arg(++i).arg(pageid); }
bool check_revision(QString id , int revision_number) { int pageid; QEventLoop eventLoop; // "quit()" the event-loop, when the network request "finished()" QNetworkAccessManager mg; QObject::connect(&mg, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); // the HTTP request QString url = "http://en.wikitolearn.org/api.php?action=parse&pageid="+id+"&format=json"; QNetworkRequest re( ( url ) ); QNetworkReply *reply = mg.get(re); eventLoop.exec(); if (reply->error() == QNetworkReply::NoError) { //success //qDebug() << "Success" <<reply->readAll(); QString html = (QString)reply->readAll(); QJsonDocument jsonResponse = QJsonDocument::fromJson(html.toUtf8()); QJsonObject jsonObj = jsonResponse.object(); int revid = jsonObj["parse"].toObject()["revid"].toInt(); pageid = jsonObj["parse"].toObject()["pageid"].toInt(); QString page_title = jsonObj["parse"].toObject()["title"].toString(); qDebug() << jsonObj["parse"].toObject()["title"].toString(); if(revision_number == revid) { delete reply; return true ; } else { qDebug() << "update page"; QString text = jsonObj["parse"].toObject()["text"].toObject()["*"].toString(); text = clean_text(text); bool del = del_from_db(id,revid); //check if deletion was successfull if(del == true) { qDebug() << "deletion from DB done"; } else { qDebug() << "error in deletion from DB"; } QString pid = QString::number(pageid); del_file(pid); save_file( text , pageid , revision_number , page_title); } } return true; }
int packet_process_udp(const char* udp_packet, struct traffic_stats* stats, const char* saddr, const char* daddr) { char* cp = (char*)udp_packet; udphdr* udp_hdr = (udphdr*)udp_packet; u_int16_t udp_dl = ntohs(udp_hdr->uh_length); u_int16_t dport; struct radius_hdr* radhdr; u_int16_t rad_dl; int radius_has_ip = 0; int radius_has_name = 0; int radius_has_location = 0; int radius_bytes_left; struct radius_info info; /* verify UDP payload exist */ if (udp_dl == 0) { stats->udp_no_payload_start++; stats->udp_no_payload_period++; LOG(LOG_DBG, "No payload in UDP at packet %d %s->%s\n", stats->pkt_count_start, saddr, daddr); return PACKET_PROCESS_FAIL; } dport = ntohs(udp_hdr->uh_dport); /* verify UDP port is RADIUS */ if(dport != 1813) { stats->udp_not_send_port1813_start++; stats->udp_not_send_port1813_period++; /* TODO: make list of RADIUS ports configurable */ LOG(LOG_DBG, "Non RADIUS port for UDP packet %d %s->%s\n", stats->pkt_count_start, saddr, daddr); return PACKET_PROCESS_FAIL; } cp += sizeof(udphdr); radhdr = (struct radius_hdr*)cp; /* verify accounting request message */ if (radhdr->code != RADIUS_ACCT_REQUEST) { stats->udp_port1813_not_radius_start++; stats->udp_port1813_not_radius_period++; LOG(LOG_WARN, "Not a RADIUS accounting request packet to RADIUS accounting port %d %s->%s\n", stats->pkt_count_start, saddr, daddr); return PACKET_PROCESS_FAIL; } rad_dl = ntohs(radhdr->len); /* verify valid length */ if (udp_dl != rad_dl + sizeof(udphdr)) { stats->radius_invalid_length_start++; stats->radius_invalid_length_period++; LOG(LOG_ERR, "RADIUS length does not match UDP length in packet %d %s->%s\n", stats->pkt_count_start, saddr, daddr); return PACKET_PROCESS_FAIL; } cp += sizeof(struct radius_hdr); radius_bytes_left = rad_dl - sizeof(struct radius_hdr); memset(&info, 0, sizeof(struct radius_info)); while(radius_bytes_left > 0) { /* parse RADIUS attributes*/ struct radius_attr* ra = (struct radius_attr*)cp; if (ra->len == 0) { stats->radius_invalid_attr_length_start++; stats->radius_invalid_attr_length_period++; LOG(LOG_ERR, "RADIUS AVP of length zero in packet %d %s->%s\n", stats->pkt_count_start, saddr, daddr); return PACKET_PROCESS_FAIL; } stats->radius_attribute_start++; stats->radius_attribute_period++; LOG(LOG_DBG, "RADIUS AVP of type %d in packet %d %s->%s\n", ra->type, stats->pkt_count_start, saddr, daddr); append_radius_info(ra, &info); /* if all info is extracted or type is terminate, no need to continue*/ if (info._has_ip && info._has_name && info._location_update && (info._logout || info._login_or_update)) { break; } cp += ra->len; radius_bytes_left -= ra->len; } /* if info has name and IP and then store info*/ if (info._has_ip && info._has_name) { if (info._location_update) { stats->radius_location_start++; stats->radius_location_period++; /* location updates*/ set_location_to_db(info._ip, info._name, info._cell_id); if (info._logout) { stats->radius_logout_start++; stats->radius_logout_period++; /* may get location update on logout*/ del_from_db(info._ip); } else { /* update or login with location*/ stats->radius_login_start++; stats->radius_login_period++; set_to_db(info._ip, info._name); } } else if (info._login_or_update) { stats->radius_login_start++; stats->radius_login_period++; /* update or login without location*/ set_to_db(info._ip, info._name); } else if (info._logout) { stats->radius_logout_start++; stats->radius_logout_period++; /* logout */ del_from_db(info._ip); } else { assert(0); } } else { stats->radius_irellevant_start++; stats->radius_irellevant_period++; LOG(LOG_WARN, "No relevant info found in RADIUS packet %d %s->%s\n", stats->pkt_count_start, saddr, daddr); } return PACKET_PROCESS_OK; }