use super::pop3::POP3Transaction;
use crate::jsonbuilder::{JsonBuilder, JsonError};
use std;
fn log_pop3(tx: &POP3Transaction, js: &mut JsonBuilder) -> Result<(), JsonError> {
js.open_object("pop3")?;
if let Some(ref request) = tx.request {
let js_request = js.open_object("request")?;
js_request.set_string("command", &request.keyword.to_string())?;
let js_args = js_request.open_array("args")?;
for arg in &request.args {
js_args.append_string_from_bytes(arg)?;
}
js_args.close()?;
js_request.close()?;
}
if let Some(ref response) = tx.response {
let js_response = js.open_object("response")?;
js_response.set_bool("success", response.status == sawp_pop3::Status::OK)?;
js_response.set_string("status", response.status.to_str())?;
js_response.set_string_from_bytes("header", &response.header)?;
let js_data = js_response.open_array("data")?;
for data in &response.data {
js_data.append_string_from_bytes(data)?;
}
js_data.close()?;
js_response.close()?;
}
js.close()?;
Ok(())
}
#[no_mangle]
pub unsafe extern "C" fn SCPop3LoggerLog(
tx: *mut std::os::raw::c_void, js: &mut JsonBuilder,
) -> bool {
let tx = cast_pointer!(tx, POP3Transaction);
log_pop3(tx, js).is_ok()
}