From: Vsevolod Stakhov Date: Thu, 9 Nov 2023 14:23:34 +0000 (+0000) Subject: [Feature] Support ping command in fuzzy storage X-Git-Tag: 3.8.0~80^2~12 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1fbc13099ee4dbabc26be7814258db6b54bd14d4;p=thirdparty%2Frspamd.git [Feature] Support ping command in fuzzy storage --- diff --git a/src/fuzzy_storage.c b/src/fuzzy_storage.c index 23a4f45cdb..5adf54e467 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 51bd12244c..989a31eb4d 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 */