diff --git a/server/src/client/command_handler/bulk_parsers.h b/server/src/client/command_handler/bulk_parsers.h index 4b7f76b..b25c8ec 100644 --- a/server/src/client/command_handler/bulk_parsers.h +++ b/server/src/client/command_handler/bulk_parsers.h @@ -78,13 +78,15 @@ namespace ts::command::bulk_parser { inline void apply_to(const std::shared_ptr& manager, permission::v2::PermissionUpdateType mode) const { if(this->is_grant_permission()) { - manager->set_permission(this->permission_type(), { this->value(), true }, permission::v2::PermissionUpdateType::do_nothing, mode); + manager->set_permission(this->permission_type(), { 0, this->value() }, permission::v2::PermissionUpdateType::do_nothing, mode); } else { manager->set_permission( this->permission_type(), - { this->value(), true }, + { this->value(), 0 }, mode, - permission::v2::PermissionUpdateType::do_nothing + permission::v2::PermissionUpdateType::do_nothing, + this->flag_skip(), + this->flag_negated() ); } } diff --git a/server/src/client/query/QueryClientCommands.cpp b/server/src/client/query/QueryClientCommands.cpp index 97c945b..e684a10 100644 --- a/server/src/client/query/QueryClientCommands.cpp +++ b/server/src/client/query/QueryClientCommands.cpp @@ -409,10 +409,10 @@ command_result QueryClient::handleCommandServerInfo(Command &) { auto total_stats = this->server->getServerStatistics()->total_stats(); auto report_second = this->server->serverStatistics->second_stats(); auto report_minute = this->server->serverStatistics->minute_stats(); - cmd["connection_bandwidth_sent_last_second_total"] = std::accumulate(report_second.connection_bytes_sent.begin(), report_second.connection_bytes_sent.end(), 0U); - cmd["connection_bandwidth_sent_last_minute_total"] = std::accumulate(report_minute.connection_bytes_sent.begin(), report_minute.connection_bytes_sent.end(), 0U); - cmd["connection_bandwidth_received_last_second_total"] = std::accumulate(report_second.connection_bytes_received.begin(), report_second.connection_bytes_received.end(), 0U); - cmd["connection_bandwidth_received_last_minute_total"] = std::accumulate(report_minute.connection_bytes_received.begin(), report_minute.connection_bytes_received.end(), 0U); + cmd["connection_bandwidth_sent_last_second_total"] = std::accumulate(report_second.connection_bytes_sent.begin(), report_second.connection_bytes_sent.end(), (size_t) 0U); + cmd["connection_bandwidth_sent_last_minute_total"] = std::accumulate(report_minute.connection_bytes_sent.begin(), report_minute.connection_bytes_sent.end(), (size_t) 0U); + cmd["connection_bandwidth_received_last_second_total"] = std::accumulate(report_second.connection_bytes_received.begin(), report_second.connection_bytes_received.end(), (size_t) 0U); + cmd["connection_bandwidth_received_last_minute_total"] = std::accumulate(report_minute.connection_bytes_received.begin(), report_minute.connection_bytes_received.end(), (size_t) 0U); cmd["connection_filetransfer_bandwidth_sent"] = report_minute.file_bytes_sent; cmd["connection_filetransfer_bandwidth_received"] = report_minute.file_bytes_received; @@ -434,10 +434,10 @@ command_result QueryClient::handleCommandServerInfo(Command &) { cmd["connection_packets_received_control"] = total_stats.connection_packets_received[stats::ConnectionStatistics::category::COMMAND]; cmd["connection_bytes_received_control"] = total_stats.connection_bytes_received[stats::ConnectionStatistics::category::COMMAND]; - cmd["connection_packets_sent_total"] = std::accumulate(total_stats.connection_packets_sent.begin(), total_stats.connection_packets_sent.end(), 0U); - cmd["connection_bytes_sent_total"] = std::accumulate(total_stats.connection_bytes_sent.begin(), total_stats.connection_bytes_sent.end(), 0U); - cmd["connection_packets_received_total"] = std::accumulate(total_stats.connection_packets_received.begin(), total_stats.connection_packets_received.end(), 0U); - cmd["connection_bytes_received_total"] = std::accumulate(total_stats.connection_bytes_received.begin(), total_stats.connection_bytes_received.end(), 0U); + cmd["connection_packets_sent_total"] = std::accumulate(total_stats.connection_packets_sent.begin(), total_stats.connection_packets_sent.end(), (size_t) 0U); + cmd["connection_bytes_sent_total"] = std::accumulate(total_stats.connection_bytes_sent.begin(), total_stats.connection_bytes_sent.end(), (size_t) 0U); + cmd["connection_packets_received_total"] = std::accumulate(total_stats.connection_packets_received.begin(), total_stats.connection_packets_received.end(), (size_t) 0U); + cmd["connection_bytes_received_total"] = std::accumulate(total_stats.connection_bytes_received.begin(), total_stats.connection_bytes_received.end(), (size_t) 0U); } else { cmd["connection_bandwidth_sent_last_second_total"] = "0"; cmd["connection_bandwidth_sent_last_minute_total"] = "0"; @@ -486,11 +486,13 @@ command_result QueryClient::handleCommandChannelList(Command& cmd) { command_builder result{"", 1024, entries.size()}; for(const auto& channel : entries){ if(!channel) continue; + + const auto channel_clients = this->server ? this->server->getClientsByChannel(channel).size() : 0; result.put_unchecked(index, "cid", channel->channelId()); result.put_unchecked(index, "pid", channel->properties()[property::CHANNEL_PID].as()); result.put_unchecked(index, "channel_name", channel->name()); result.put_unchecked(index, "channel_order", channel->channelOrder()); - result.put_unchecked(index, "total_clients", this->server ? this->server->getClientsByChannel(channel).size() : 0); + result.put_unchecked(index, "total_clients", channel_clients); /* result.put_unchecked(index, "channel_needed_subscribe_power", channel->permissions()->getPermissionValue(permission::i_channel_needed_subscribe_power, channel, 0)); */ if(cmd.hasParm("flags")){ @@ -522,8 +524,8 @@ command_result QueryClient::handleCommandChannelList(Command& cmd) { if(cmd.hasParm("topic")) { result.put_unchecked(index, "channel_topic", channel->properties()[property::CHANNEL_TOPIC].as()); } - if(cmd.hasParm("times")){ - result.put_unchecked(index, "seconds_empty", channel->emptySince()); + if(cmd.hasParm("times") || cmd.hasParm("secondsempty")){ + result.put_unchecked(index, "seconds_empty", channel_clients == 0 ? channel->emptySince() : 0); } index++; } @@ -776,10 +778,10 @@ command_result QueryClient::handleCommandHostInfo(Command &) { auto report_second = serverInstance->getStatistics()->second_stats(); auto report_minute = serverInstance->getStatistics()->minute_stats(); - res["connection_bandwidth_sent_last_second_total"] = std::accumulate(report_second.connection_bytes_sent.begin(), report_second.connection_bytes_sent.end(), 0U); - res["connection_bandwidth_sent_last_minute_total"] = std::accumulate(report_minute.connection_bytes_sent.begin(), report_minute.connection_bytes_sent.end(), 0U); - res["connection_bandwidth_received_last_second_total"] = std::accumulate(report_second.connection_bytes_received.begin(), report_second.connection_bytes_received.end(), 0U); - res["connection_bandwidth_received_last_minute_total"] = std::accumulate(report_minute.connection_bytes_received.begin(), report_minute.connection_bytes_received.end(), 0U); + res["connection_bandwidth_sent_last_second_total"] = std::accumulate(report_second.connection_bytes_sent.begin(), report_second.connection_bytes_sent.end(), (size_t) 0U); + res["connection_bandwidth_sent_last_minute_total"] = std::accumulate(report_minute.connection_bytes_sent.begin(), report_minute.connection_bytes_sent.end(), (size_t) 0U); + res["connection_bandwidth_received_last_second_total"] = std::accumulate(report_second.connection_bytes_received.begin(), report_second.connection_bytes_received.end(), (size_t) 0U); + res["connection_bandwidth_received_last_minute_total"] = std::accumulate(report_minute.connection_bytes_received.begin(), report_minute.connection_bytes_received.end(), (size_t) 0U); res["connection_filetransfer_bandwidth_sent"] = report_second.file_bytes_sent; diff --git a/server/src/manager/SqlDataManager.h b/server/src/manager/SqlDataManager.h index 6ff625e..80544e6 100644 --- a/server/src/manager/SqlDataManager.h +++ b/server/src/manager/SqlDataManager.h @@ -10,7 +10,7 @@ namespace ts { virtual ~SqlDataManager(); [[nodiscard]] inline int get_database_version() const { return this->_database_version; } - [[nodiscard]] inline int get_permissions_version() const { return this->_database_version; } + [[nodiscard]] inline int get_permissions_version() const { return this->_permissions_version; } bool initialize(std::string&); void finalize();