Exemple #1
0
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);

}
Exemple #2
0
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;

}
Exemple #3
0
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;
}