This repository has been archived on 2023-09-20. You can view files and clone it, but cannot push or open issues or pull requests.
rust-opensmtpd/examples/counter.rs
Rodolphe Bréard dafea54dbb Log exclusively on stderr
OpenSMTPD reads filter responses on stdout, hence there must not be any
log written to this file descriptor.
2020-11-25 18:53:50 +01:00

45 lines
1.1 KiB
Rust

use log;
use opensmtpd::{register, run_filter, Address, Filter, ReportEntry};
use simplelog::{Config, LevelFilter, TermLogger, TerminalMode};
#[derive(Default)]
struct MyCounter {
nb_connected: u64,
nb_total: u64,
}
impl Filter for MyCounter {
register!(has_report_link_connect);
fn on_report_link_connect(
&mut self,
_entry: &ReportEntry,
_rdns: &str,
_fcrdns: &str,
_src: &Address,
_dest: &Address,
) {
self.nb_connected += 1;
self.nb_total += 1;
log::info!(
"New client (connected: {}, total: {})",
self.nb_connected,
self.nb_total
);
}
register!(has_report_link_disconnect);
fn on_report_link_disconnect(&mut self, _entry: &ReportEntry) {
self.nb_connected -= 1;
log::info!(
"Client left (connected: {}, total: {})",
self.nb_connected,
self.nb_total
);
}
}
fn main() {
TermLogger::init(LevelFilter::Debug, Config::default(), TerminalMode::Stderr).unwrap();
let mut my_counter: MyCounter = Default::default();
run_filter(&mut my_counter);
}