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 a6d4dd21c1 Rewrite the project
The previous project architecture was far too complicated and hard to
maintain. The new one is much more simple. Although procedural macros
are cools, they are a no-go on Rust-OpenSMTPD.

Reports and filter are implemented (except data-line) but untested.
2020-11-25 18:04:16 +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::Mixed).unwrap();
let mut my_counter: MyCounter = Default::default();
run_filter(&mut my_counter);
}