aboutsummaryrefslogtreecommitdiff
path: root/src/Database/Common/updateserver.cpp
blob: 24fa26f5ffa6320b0c38e555fed6a1a7c6e4cc83 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "commonactions.h"

bool updateServer(const QString         &serverAddress,
                  const unsigned short  &serverPort,
                  const QString         &gamename,
                  const bool            &directBeacon,
                  const bool            &authenticated
                  )
{
    // update existing entry, but do not insert.
    QSqlQuery q;
    QString updateString;

    // update with available values
    updateString = "UPDATE serverlist SET ";

    /*
     * Note that direct/auth set to 'false' will NOT override a previous value in the database
     */

    // is this a direct beacon?
    if (directBeacon)
    {
        updateString += "f_direct = 1, ";
        updateString += "dt_beacon  = :timestamp, ";
    }

    // did the server authenticate?
    if (authenticated) updateString += "f_auth   = 1, ";

    updateString +=  "gamename = :gamename, "
                     "dt_updated = :timestamp "
                     "WHERE ip = :ip AND queryport = :queryport";

    // bind values and execute
    q.prepare(updateString);
    q.bindValue(":ip", serverAddress);
    q.bindValue(":queryport", serverPort);
    q.bindValue(":gamename", gamename);
    q.bindValue(":timestamp", QDateTime::currentSecsSinceEpoch() );

    if ( ! q.exec() )
        return reportQuery(q);

    // was a row updated?
    return (q.numRowsAffected() > 0);
}