SMTP サーバーは、クライアントがコマンドの送信を開始するための合図である接続 (220 サービス準備完了) の確立時にウェルカム メッセージを表示する必要があります。これは、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))),
}
}