From 1fbc13099ee4dbabc26be7814258db6b54bd14d4 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 9 Nov 2023 14:23:34 +0000 Subject: [Feature] Support ping command in fuzzy storage --- src/fuzzy_storage.c | 11 +++++++++++ src/libserver/fuzzy_wire.h | 19 ++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/fuzzy_storage.c b/src/fuzzy_storage.c index 23a4f45cd..5adf54e46 100644 --- a/src/fuzzy_storage.c +++ b/src/fuzzy_storage.c @@ -1337,6 +1337,17 @@ rspamd_fuzzy_process_command(struct fuzzy_session *session) result.v1.flag = session->ctx->stat.fuzzy_hashes; rspamd_fuzzy_make_reply(cmd, &result, session, send_flags); } + else if (cmd->cmd == FUZZY_PING) { + /* Obtain milliseconds since midnight */ + double now = rspamd_get_calendar_ticks(); + double millis = now - (int64_t) now; + now = ((int64_t) now % 86400) + millis; + + result.v1.prob = 1.0f; + result.v1.flag = now * 1000; + result.v1.value = result.v1.flag - cmd->value; /* This is transmitted time from our PoV */ + rspamd_fuzzy_make_reply(cmd, &result, session, send_flags); + } else { if (rspamd_fuzzy_check_write(session)) { /* Check whitelist */ diff --git a/src/libserver/fuzzy_wire.h b/src/libserver/fuzzy_wire.h index 51bd12244..989a31eb4 100644 --- a/src/libserver/fuzzy_wire.h +++ b/src/libserver/fuzzy_wire.h @@ -1,3 +1,19 @@ +/* + * Copyright 2023 Vsevolod Stakhov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + #ifndef RSPAMD_FUZZY_STORAGE_H #define RSPAMD_FUZZY_STORAGE_H @@ -21,7 +37,8 @@ extern "C" { #define FUZZY_WRITE 1 #define FUZZY_DEL 2 #define FUZZY_STAT 3 -#define FUZZY_CLIENT_MAX 3 +#define FUZZY_PING 4 +#define FUZZY_CLIENT_MAX 4 /* Internal commands */ #define FUZZY_REFRESH 100 /* Update expire */ #define FUZZY_DUP 101 /* Skip duplicate in update queue */ -- cgit v1.2.3