JMAP Registry API implementation - part 9

This commit is contained in:
mdecimus
2026-03-05 19:07:35 +01:00
parent 92c60fff7a
commit 9f9ddee965
47 changed files with 3354 additions and 2280 deletions

View File

@@ -68,6 +68,8 @@ impl Queue {
}
pub async fn start(&mut self) {
trc::event!(Queue(trc::QueueEvent::Started));
loop {
let mut refresh_queue;

View File

@@ -261,16 +261,7 @@ impl SmtpSpool for Server {
Some(a) => a.deserialize::<Message>().map(Some),
None => Ok(None),
}) {
Ok(Some(message)) => Some(MessageWrapper {
is_multi_queue: message.recipients.iter().any(|rcpt| {
matches!(rcpt.status, Status::Scheduled | Status::TemporaryFailure(_))
&& rcpt.queue != queue_name
}),
queue_id,
queue_name,
span_id: 0,
message,
}),
Ok(Some(message)) => Some(MessageWrapper::new(message, queue_id, queue_name)),
Ok(None) => None,
Err(err) => {
trc::error!(
@@ -295,6 +286,21 @@ impl SmtpSpool for Server {
}
}
impl MessageWrapper {
pub fn new(message: Message, queue_id: QueueId, queue_name: QueueName) -> Self {
MessageWrapper {
is_multi_queue: message.recipients.iter().any(|rcpt| {
matches!(rcpt.status, Status::Scheduled | Status::TemporaryFailure(_))
&& rcpt.queue != queue_name
}),
queue_id,
queue_name,
span_id: 0,
message,
}
}
}
fn lock_id(queue_id: QueueId, queue_name: QueueName) -> [u8; 16] {
let mut id = [0; 16];
id[..8].copy_from_slice(&queue_id.to_be_bytes());
@@ -315,7 +321,7 @@ impl MessageWrapper {
let (flags, event, train_spam) = match source {
MessageSource::Authenticated => (
FROM_AUTHENTICATED,
trc::QueueEvent::QueueMessageAuthenticated,
trc::QueueEvent::AuthenticatedMessageQueued,
None,
),
MessageSource::Unauthenticated {
@@ -323,7 +329,7 @@ impl MessageWrapper {
train_spam,
} => (
FROM_UNAUTHENTICATED_DMARC,
trc::QueueEvent::QueueMessage,
trc::QueueEvent::MessageQueued,
train_spam,
),
MessageSource::Unauthenticated {
@@ -331,14 +337,14 @@ impl MessageWrapper {
train_spam,
} => (
FROM_UNAUTHENTICATED,
trc::QueueEvent::QueueMessage,
trc::QueueEvent::MessageQueued,
train_spam,
),
MessageSource::Dsn => (FROM_DSN, trc::QueueEvent::QueueDsn, None),
MessageSource::Report => (FROM_REPORT, trc::QueueEvent::QueueReport, None),
MessageSource::Dsn => (FROM_DSN, trc::QueueEvent::DsnQueued, None),
MessageSource::Report => (FROM_REPORT, trc::QueueEvent::ReportQueued, None),
MessageSource::Autogenerated => (
FROM_AUTOGENERATED,
trc::QueueEvent::QueueAutogenerated,
trc::QueueEvent::AutogeneratedQueued,
None,
),
};