diff options
author | Vsevolod Stakhov <vsevolod@rspamd.com> | 2023-11-09 14:23:34 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rspamd.com> | 2023-11-09 14:23:34 +0000 |
commit | 1fbc13099ee4dbabc26be7814258db6b54bd14d4 (patch) | |
tree | e688d1890fb3cac41a86670de3305b688bde156a /src | |
parent | 1e62c2b68bf06496e32fd947e3a9297facfa5708 (diff) | |
download | rspamd-1fbc13099ee4dbabc26be7814258db6b54bd14d4.tar.gz rspamd-1fbc13099ee4dbabc26be7814258db6b54bd14d4.zip |
[Feature] Support ping command in fuzzy storage
Diffstat (limited to 'src')
-rw-r--r-- | src/fuzzy_storage.c | 11 | ||||
-rw-r--r-- | src/libserver/fuzzy_wire.h | 19 |
2 files changed, 29 insertions, 1 deletions
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 */ |