123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- /*
- * Copyright 2024 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.
- */
-
- /**
- * @file protocol.h
- * Rspamd protocol definition
- */
-
- #ifndef RSPAMD_PROTOCOL_H
- #define RSPAMD_PROTOCOL_H
-
- #include "config.h"
- #include "scan_result.h"
- #include "libserver/http/http_connection.h"
- #include "task.h"
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #define RSPAMD_BASE_ERROR 500
- #define RSPAMD_FILTER_ERROR RSPAMD_BASE_ERROR + 1
- #define RSPAMD_NETWORK_ERROR RSPAMD_BASE_ERROR + 2
- #define RSPAMD_PROTOCOL_ERROR RSPAMD_BASE_ERROR + 3
- #define RSPAMD_LENGTH_ERROR RSPAMD_BASE_ERROR + 4
- #define RSPAMD_STATFILE_ERROR RSPAMD_BASE_ERROR + 5
-
- struct rspamd_protocol_log_symbol_result {
- uint32_t id;
- float score;
- };
- struct rspamd_protocol_log_message_sum {
- uint32_t nresults;
- uint32_t nextra;
- uint32_t settings_id;
- double score;
- double required_score;
- struct rspamd_protocol_log_symbol_result results[];
- };
-
- struct rspamd_metric;
-
- /**
- * Process headers into HTTP message and set appropriate task fields
- * @param task
- * @param msg
- * @return
- */
- gboolean rspamd_protocol_handle_headers(struct rspamd_task *task,
- struct rspamd_http_message *msg);
-
- /**
- * Process control chunk and update task structure accordingly
- * @param task
- * @param control
- * @return
- */
- gboolean rspamd_protocol_handle_control(struct rspamd_task *task,
- const ucl_object_t *control);
-
- /**
- * Process HTTP request to the task structure
- * @param task
- * @param msg
- * @return
- */
- gboolean rspamd_protocol_handle_request(struct rspamd_task *task,
- struct rspamd_http_message *msg);
-
- /**
- * Write task results to http message
- * @param msg
- * @param task
- */
- void rspamd_protocol_http_reply(struct rspamd_http_message *msg,
- struct rspamd_task *task, ucl_object_t **pobj,
- int how);
-
- /**
- * Write data to log pipes
- * @param task
- */
- void rspamd_protocol_write_log_pipe(struct rspamd_task *task);
-
- enum rspamd_protocol_flags {
- RSPAMD_PROTOCOL_BASIC = 1 << 0,
- RSPAMD_PROTOCOL_METRICS = 1 << 1,
- RSPAMD_PROTOCOL_MESSAGES = 1 << 2,
- RSPAMD_PROTOCOL_RMILTER = 1 << 3,
- RSPAMD_PROTOCOL_DKIM = 1 << 4,
- RSPAMD_PROTOCOL_URLS = 1 << 5,
- RSPAMD_PROTOCOL_EXTRA = 1 << 6,
- };
-
- #define RSPAMD_PROTOCOL_DEFAULT (RSPAMD_PROTOCOL_BASIC | \
- RSPAMD_PROTOCOL_METRICS | \
- RSPAMD_PROTOCOL_MESSAGES | \
- RSPAMD_PROTOCOL_RMILTER | \
- RSPAMD_PROTOCOL_DKIM | \
- RSPAMD_PROTOCOL_EXTRA)
-
- /**
- * Write reply to ucl object filling log buffer
- * @param task
- * @param logbuf
- * @return
- */
- ucl_object_t *rspamd_protocol_write_ucl(struct rspamd_task *task,
- enum rspamd_protocol_flags flags);
-
- /**
- * Write reply for specified task command
- * @param task task object
- * @return 0 if we wrote reply and -1 if there was some error
- */
- void rspamd_protocol_write_reply(struct rspamd_task *task, ev_tstamp timeout);
-
- /**
- * Convert rspamd output to legacy protocol reply
- * @param task
- * @param top
- * @param out
- */
- void rspamd_ucl_torspamc_output(const ucl_object_t *top,
- rspamd_fstring_t **out);
-
- void rspamd_ucl_tospamc_output(const ucl_object_t *top,
- rspamd_fstring_t **out);
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif
|