SMTPサーバーは、クライアントがコマンドの送信を開始するための信号である接続確立時にウェルカムメッセージを表示する必要があります(220サービス準備完了)。これはtokio-protoの要求 - 応答のパラダイムと矛盾しているようです。クライアントがtokio-protoサーバーに接続したときにウェルカムメッセージ/バナーを表示するにはどうすればよいですか?
私は、サーバーが要求とクライアントの応答(非推奨のTURN)を送信するなど、完全に逆転している可能性がありますが、現時点では接続時のウェルカムメッセージ、つまりバナーにしか関心がありません。その後、クライアント要求=>サーバー応答が維持されます。
私はこれをフックする場所を把握しようとしていますが、bind_server
、bind_transport
はわたしには極秘です。私は輸送を実装する必要がありますか?
これはコーデックのdecode
メソッドにあります。問題は、decode
メソッドが呼び出されていないということです。どの種類のデコードに利用できるデータがない限り、呼び出されません。私はフックするいくつかの接続の初期化メソッドがあることを期待するだろうが、私は何も見つかりませんでした。
fn decode(&mut self, buf: &mut BytesMut) -> Result {
if !self.initialized {
println!(
"new connection from {:?} to {:?}",
self.peer_addr,
self.local_addr
);
self.requests.push(SmtpCommand::Connect {
local_addr: self.local_addr,
peer_addr: self.peer_addr,
});
self.initialized = true;
}
//... snip
match self.requests.is_empty() {
true => Ok(None),
false => Ok(Some(self.requests.remove(0))),
}
}
私のと私もopened an issue with tokio-protoです。