Incremental caching
This commit is contained in:
@@ -25,6 +25,7 @@ parking_lot = "0.12"
|
||||
ahash = { version = "0.8" }
|
||||
md5 = "0.7.0"
|
||||
bincode = "1.3.3"
|
||||
compact_str = "0.9.0"
|
||||
|
||||
|
||||
[features]
|
||||
|
||||
@@ -14,6 +14,7 @@ use common::{
|
||||
auth::AccessToken,
|
||||
listener::{ServerInstance, limiter::InFlight},
|
||||
};
|
||||
use compact_str::CompactString;
|
||||
use imap_proto::receiver::{CommandParser, Receiver};
|
||||
use tokio::io::{AsyncRead, AsyncWrite};
|
||||
|
||||
@@ -131,7 +132,7 @@ pub enum ResponseCode {
|
||||
Active,
|
||||
NonExistent,
|
||||
AlreadyExists,
|
||||
Tag(String),
|
||||
Tag(CompactString),
|
||||
Warnings,
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ mod tests {
|
||||
(
|
||||
vec!["Authenticate \"DIGEST-MD5\"\r\n"],
|
||||
vec![Request {
|
||||
tag: "".to_string(),
|
||||
tag: "".into(),
|
||||
command: Command::Authenticate,
|
||||
tokens: vec![Token::Argument(b"DIGEST-MD5".to_vec())],
|
||||
}],
|
||||
@@ -34,7 +34,7 @@ mod tests {
|
||||
"cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZA==\r\n",
|
||||
],
|
||||
vec![Request {
|
||||
tag: "".to_string(),
|
||||
tag: "".into(),
|
||||
command: Command::Authenticate,
|
||||
tokens: vec![
|
||||
Token::Argument(b"GSSAPI".to_vec()),
|
||||
@@ -47,7 +47,7 @@ mod tests {
|
||||
(
|
||||
vec!["Authenticate \"PLAIN\" \"QJIrweAPyo6Q1T9xu\"\r\n"],
|
||||
vec![Request {
|
||||
tag: "".to_string(),
|
||||
tag: "".into(),
|
||||
command: Command::Authenticate,
|
||||
tokens: vec![
|
||||
Token::Argument(b"PLAIN".to_vec()),
|
||||
@@ -58,7 +58,7 @@ mod tests {
|
||||
(
|
||||
vec!["StartTls\r\n"],
|
||||
vec![Request {
|
||||
tag: "".to_string(),
|
||||
tag: "".into(),
|
||||
command: Command::StartTls,
|
||||
tokens: vec![],
|
||||
}],
|
||||
@@ -66,7 +66,7 @@ mod tests {
|
||||
(
|
||||
vec!["HAVESPACE \"myscript\" 999999\r\n"],
|
||||
vec![Request {
|
||||
tag: "".to_string(),
|
||||
tag: "".into(),
|
||||
command: Command::HaveSpace,
|
||||
tokens: vec![
|
||||
Token::Argument(b"myscript".to_vec()),
|
||||
@@ -81,7 +81,7 @@ mod tests {
|
||||
"InvalidSieveCommand\r\n\r\n",
|
||||
],
|
||||
vec![Request {
|
||||
tag: "".to_string(),
|
||||
tag: "".into(),
|
||||
command: Command::PutScript,
|
||||
tokens: vec![
|
||||
Token::Argument(b"foo".to_vec()),
|
||||
@@ -92,7 +92,7 @@ mod tests {
|
||||
(
|
||||
vec!["Listscripts\r\n"],
|
||||
vec![Request {
|
||||
tag: "".to_string(),
|
||||
tag: "".into(),
|
||||
command: Command::ListScripts,
|
||||
tokens: vec![],
|
||||
}],
|
||||
@@ -100,7 +100,7 @@ mod tests {
|
||||
(
|
||||
vec!["Setactive \"baz\"\r\n"],
|
||||
vec![Request {
|
||||
tag: "".to_string(),
|
||||
tag: "".into(),
|
||||
command: Command::SetActive,
|
||||
tokens: vec![Token::Argument(b"baz".to_vec())],
|
||||
}],
|
||||
@@ -108,7 +108,7 @@ mod tests {
|
||||
(
|
||||
vec!["Renamescript \"foo\" \"bar\"\r\n"],
|
||||
vec![Request {
|
||||
tag: "".to_string(),
|
||||
tag: "".into(),
|
||||
command: Command::RenameScript,
|
||||
tokens: vec![
|
||||
Token::Argument(b"foo".to_vec()),
|
||||
@@ -119,7 +119,7 @@ mod tests {
|
||||
(
|
||||
vec!["NOOP \"STARTTLS-SYNC-42\"\r\n"],
|
||||
vec![Request {
|
||||
tag: "".to_string(),
|
||||
tag: "".into(),
|
||||
command: Command::Noop,
|
||||
tokens: vec![Token::Argument(b"STARTTLS-SYNC-42".to_vec())],
|
||||
}],
|
||||
|
||||
@@ -11,6 +11,7 @@ use common::{
|
||||
},
|
||||
listener::{SessionStream, limiter::LimiterResult},
|
||||
};
|
||||
use compact_str::CompactString;
|
||||
use directory::Permission;
|
||||
use imap_proto::{
|
||||
protocol::authenticate::Mechanism,
|
||||
@@ -31,7 +32,7 @@ impl<T: SessionStream> Session<T> {
|
||||
let mut tokens = request.tokens.into_iter();
|
||||
let mechanism = Mechanism::parse(&tokens.next().unwrap().unwrap_bytes())
|
||||
.map_err(|err| trc::AuthEvent::Error.into_err().details(err))?;
|
||||
let mut params: Vec<String> = tokens
|
||||
let mut params: Vec<CompactString> = tokens
|
||||
.filter_map(|token| token.unwrap_string().ok())
|
||||
.collect();
|
||||
|
||||
@@ -53,7 +54,7 @@ impl<T: SessionStream> Session<T> {
|
||||
})?
|
||||
} else {
|
||||
self.receiver.request = receiver::Request {
|
||||
tag: String::new(),
|
||||
tag: "".into(),
|
||||
command: Command::Authenticate,
|
||||
tokens: vec![receiver::Token::Argument(mechanism.into_bytes())],
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user