18e745fdaSopenharmony_ci/*
28e745fdaSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
38e745fdaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
48e745fdaSopenharmony_ci * you may not use this file except in compliance with the License.
58e745fdaSopenharmony_ci * You may obtain a copy of the License at
68e745fdaSopenharmony_ci *
78e745fdaSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
88e745fdaSopenharmony_ci *
98e745fdaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
108e745fdaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
118e745fdaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
128e745fdaSopenharmony_ci * See the License for the specific language governing permissions and
138e745fdaSopenharmony_ci * limitations under the License.
148e745fdaSopenharmony_ci */
158e745fdaSopenharmony_ci
168e745fdaSopenharmony_ci#ifndef FIREWALL_DATABASE_H
178e745fdaSopenharmony_ci#define FIREWALL_DATABASE_H
188e745fdaSopenharmony_ci
198e745fdaSopenharmony_ci#include <string>
208e745fdaSopenharmony_ci
218e745fdaSopenharmony_ci#include "rdb_common.h"
228e745fdaSopenharmony_ci#include "rdb_errno.h"
238e745fdaSopenharmony_ci#include "rdb_helper.h"
248e745fdaSopenharmony_ci#include "rdb_open_callback.h"
258e745fdaSopenharmony_ci#include "rdb_predicates.h"
268e745fdaSopenharmony_ci#include "rdb_store.h"
278e745fdaSopenharmony_ci#include "result_set.h"
288e745fdaSopenharmony_ci#include "system_ability.h"
298e745fdaSopenharmony_ci#include "value_object.h"
308e745fdaSopenharmony_ci
318e745fdaSopenharmony_cinamespace OHOS {
328e745fdaSopenharmony_cinamespace NetManagerStandard {
338e745fdaSopenharmony_cistatic std::string FIREWALL_DB_PATH = "/data/service/el1/public/netmanager/";
348e745fdaSopenharmony_ci
358e745fdaSopenharmony_ciconstexpr const char *FIREWALL_DB_NAME = "netfirewall.db";
368e745fdaSopenharmony_ciconstexpr const char *FIREWALL_BACKUP_DB_NAME = "netfirewall_back.db";
378e745fdaSopenharmony_ciconstexpr const char *FIREWALL_TABLE_NAME = "firewallRule";
388e745fdaSopenharmony_ciconstexpr const char *INTERCEPT_RECORD_TABLE = "interceptRecord";
398e745fdaSopenharmony_ciconstexpr int32_t DATABASE_OPEN_VERSION = 1;
408e745fdaSopenharmony_ciconstexpr int32_t DATABASE_NEW_VERSION = 2;
418e745fdaSopenharmony_ci
428e745fdaSopenharmony_ciconstexpr const char *CREATE_FIREWALL_TABLE = "CREATE TABLE IF NOT EXISTS [firewallRule]("
438e745fdaSopenharmony_ci    "[ruleId] INTEGER PRIMARY KEY, "
448e745fdaSopenharmony_ci    "[name] TEXT NOT NULL, "
458e745fdaSopenharmony_ci    "[description] TEXT, "
468e745fdaSopenharmony_ci    "[userId] INTEGER NOT NULL, "
478e745fdaSopenharmony_ci    "[direction] INTEGER NOT NULL, "
488e745fdaSopenharmony_ci    "[action] INTEGER NOT NULL, "
498e745fdaSopenharmony_ci    "[type] INTEGER NOT NULL, "
508e745fdaSopenharmony_ci    "[isEnabled] INTEGER NOT NULL, "
518e745fdaSopenharmony_ci    "[appUid] INTEGER, "
528e745fdaSopenharmony_ci    "[protocol] INTEGER, "
538e745fdaSopenharmony_ci    "[primaryDns] TEXT, "
548e745fdaSopenharmony_ci    "[standbyDns] TEXT, "
558e745fdaSopenharmony_ci    "[localIps] BLOB, "
568e745fdaSopenharmony_ci    "[remoteIps] BLOB, "
578e745fdaSopenharmony_ci    "[localPorts] BLOB, "
588e745fdaSopenharmony_ci    "[remotePorts] BLOB, "
598e745fdaSopenharmony_ci    "[domainNum] INTEGER, "
608e745fdaSopenharmony_ci    "[fuzzyDomainNum] INTEGER, "
618e745fdaSopenharmony_ci    "[domains] BLOB );";
628e745fdaSopenharmony_ci
638e745fdaSopenharmony_ciconstexpr const char *CREATE_RECORD_TABLE = "CREATE TABLE IF NOT EXISTS [interceptRecord]("
648e745fdaSopenharmony_ci    "[id] INTEGER PRIMARY KEY, "
658e745fdaSopenharmony_ci    "[userId] INTEGER NOT NULL, "
668e745fdaSopenharmony_ci    "[time] INTEGER NOT NULL, "
678e745fdaSopenharmony_ci    "[localIp] TEXT, "
688e745fdaSopenharmony_ci    "[remoteIp] TEXT, "
698e745fdaSopenharmony_ci    "[localPort] INTEGER, "
708e745fdaSopenharmony_ci    "[remotePort] INTEGER, "
718e745fdaSopenharmony_ci    "[protocol] INTEGER, "
728e745fdaSopenharmony_ci    "[appUid] INTEGER NOT NULL, "
738e745fdaSopenharmony_ci    "[domain] TEXT);";
748e745fdaSopenharmony_ci
758e745fdaSopenharmony_ciclass NetFirewallDataBase : public NoCopyable {
768e745fdaSopenharmony_cipublic:
778e745fdaSopenharmony_ci    static std::shared_ptr<NetFirewallDataBase> GetInstance();
788e745fdaSopenharmony_ci
798e745fdaSopenharmony_ci    /**
808e745fdaSopenharmony_ci     * Insert value into the table
818e745fdaSopenharmony_ci     *
828e745fdaSopenharmony_ci     * @param insertValues Value inserted
838e745fdaSopenharmony_ci     * @param tableName Table name
848e745fdaSopenharmony_ci     * @return Error or row id. when rdb store is not exsit, or store inserted return value is not OK,
858e745fdaSopenharmony_ci     *     it will return to error
868e745fdaSopenharmony_ci     */
878e745fdaSopenharmony_ci    int64_t Insert(const OHOS::NativeRdb::ValuesBucket &insertValues, const std::string tableName);
888e745fdaSopenharmony_ci
898e745fdaSopenharmony_ci    /**
908e745fdaSopenharmony_ci     * Update value in table
918e745fdaSopenharmony_ci     *
928e745fdaSopenharmony_ci     * @param tableName Table name
938e745fdaSopenharmony_ci     * @param changedRows Changed rows
948e745fdaSopenharmony_ci     * @param values Update value
958e745fdaSopenharmony_ci     * @param whereClause Where clause
968e745fdaSopenharmony_ci     * @param whereArgs Condition arguments
978e745fdaSopenharmony_ci     * @return Returns 0 success. Otherwise fail
988e745fdaSopenharmony_ci     */
998e745fdaSopenharmony_ci    int32_t Update(const std::string &tableName, int32_t &changedRows, const OHOS::NativeRdb::ValuesBucket &values,
1008e745fdaSopenharmony_ci        const std::string &whereClause, const std::vector<std::string> &whereArgs);
1018e745fdaSopenharmony_ci
1028e745fdaSopenharmony_ci    /**
1038e745fdaSopenharmony_ci     * Delete rows in table
1048e745fdaSopenharmony_ci     *
1058e745fdaSopenharmony_ci     * @param tableName Table name
1068e745fdaSopenharmony_ci     * @param changedRows Changed rows
1078e745fdaSopenharmony_ci     * @param whereClause Where clause
1088e745fdaSopenharmony_ci     * @param whereArgs Condition arguments
1098e745fdaSopenharmony_ci     * @return Returns 0 success. Otherwise fail
1108e745fdaSopenharmony_ci     */
1118e745fdaSopenharmony_ci    int32_t Delete(const std::string &tableName, int32_t &changedRows, const std::string &whereClause,
1128e745fdaSopenharmony_ci        const std::vector<std::string> &whereArgs);
1138e745fdaSopenharmony_ci
1148e745fdaSopenharmony_ci    /**
1158e745fdaSopenharmony_ci     * Query columns in table
1168e745fdaSopenharmony_ci     *
1178e745fdaSopenharmony_ci     * @param predicates Matching criteria
1188e745fdaSopenharmony_ci     * @param columns Column
1198e745fdaSopenharmony_ci     * @return Shared pointer of ResultSet
1208e745fdaSopenharmony_ci     */
1218e745fdaSopenharmony_ci    std::shared_ptr<OHOS::NativeRdb::ResultSet> Query(const OHOS::NativeRdb::AbsRdbPredicates &predicates,
1228e745fdaSopenharmony_ci        const std::vector<std::string> &columns);
1238e745fdaSopenharmony_ci
1248e745fdaSopenharmony_ci    std::shared_ptr<OHOS::NativeRdb::ResultSet> QuerySql(const std::string &sql,
1258e745fdaSopenharmony_ci        const std::vector<std::string> &selectionArgs);
1268e745fdaSopenharmony_ci
1278e745fdaSopenharmony_ci    int32_t BeginTransaction();
1288e745fdaSopenharmony_ci
1298e745fdaSopenharmony_ci    int32_t Commit();
1308e745fdaSopenharmony_ci
1318e745fdaSopenharmony_ci    int32_t RollBack();
1328e745fdaSopenharmony_ci
1338e745fdaSopenharmony_ci    /**
1348e745fdaSopenharmony_ci     * Count
1358e745fdaSopenharmony_ci     *
1368e745fdaSopenharmony_ci     * @param outValue Number of queries found
1378e745fdaSopenharmony_ci     * @param predicates Matching criteria
1388e745fdaSopenharmony_ci     * @return Returns 0 success. Otherwise fail
1398e745fdaSopenharmony_ci     */
1408e745fdaSopenharmony_ci    int32_t Count(int64_t &outValue, const OHOS::NativeRdb::AbsRdbPredicates &predicates);
1418e745fdaSopenharmony_ci
1428e745fdaSopenharmony_ciprivate:
1438e745fdaSopenharmony_ci    NetFirewallDataBase();
1448e745fdaSopenharmony_ci    void BackupDatebase();
1458e745fdaSopenharmony_ci    bool RestoreDatabaseWhenInit();
1468e745fdaSopenharmony_ci    bool RestoreDatabase();
1478e745fdaSopenharmony_ci
1488e745fdaSopenharmony_ci    static std::shared_ptr<NetFirewallDataBase> instance_;
1498e745fdaSopenharmony_ci    std::shared_ptr<OHOS::NativeRdb::RdbStore> store_;
1508e745fdaSopenharmony_ci    std::atomic<bool> backing_ = false;
1518e745fdaSopenharmony_ci};
1528e745fdaSopenharmony_ci
1538e745fdaSopenharmony_ciclass NetFirewallDataBaseCallBack : public OHOS::NativeRdb::RdbOpenCallback {
1548e745fdaSopenharmony_cipublic:
1558e745fdaSopenharmony_ci    int32_t OnCreate(OHOS::NativeRdb::RdbStore &rdbStore) override;
1568e745fdaSopenharmony_ci
1578e745fdaSopenharmony_ci    int32_t OnUpgrade(OHOS::NativeRdb::RdbStore &rdbStore, int32_t oldVersion, int32_t newVersion) override;
1588e745fdaSopenharmony_ci
1598e745fdaSopenharmony_ci    int32_t OnDowngrade(OHOS::NativeRdb::RdbStore &rdbStore, int32_t currentVersion, int32_t targetVersion) override;
1608e745fdaSopenharmony_ci};
1618e745fdaSopenharmony_ci
1628e745fdaSopenharmony_cienum FirewallDBErrCode {
1638e745fdaSopenharmony_ci    FIREWALL_OK = 0,
1648e745fdaSopenharmony_ci    FIREWALL_FAILURE = -1,
1658e745fdaSopenharmony_ci    FIREWALL_RDB_EXECUTE_FAILTURE = -2,
1668e745fdaSopenharmony_ci    FIREWALL_RDB_NO_INIT = -3,
1678e745fdaSopenharmony_ci    FIREWALL_RDB_EMPTY = -4,
1688e745fdaSopenharmony_ci    FIREWALL_PERMISSION_DENIED = -5,
1698e745fdaSopenharmony_ci    FIREWALL_NOP = -6,
1708e745fdaSopenharmony_ci    FIREWALL_OVERFLOW = -7,
1718e745fdaSopenharmony_ci};
1728e745fdaSopenharmony_ci} // namespace NetManagerStandard
1738e745fdaSopenharmony_ci} // namespace OHOS
1748e745fdaSopenharmony_ci
1758e745fdaSopenharmony_ci#endif // FIREWALL_DATABASE_H