mirror of
https://github.com/neondatabase/neon.git
synced 2026-05-31 20:10:38 +00:00
Parse cancel message in pq_proto (#1060)
This commit is contained in:
@@ -3,9 +3,7 @@
|
||||
//! implementation determining how to process the queries. Currently its API
|
||||
//! is rather narrow, but we can extend it once required.
|
||||
|
||||
use crate::pq_proto::{
|
||||
BeMessage, BeParameterStatusMessage, FeMessage, FeStartupMessage, StartupRequestCode,
|
||||
};
|
||||
use crate::pq_proto::{BeMessage, BeParameterStatusMessage, FeMessage, FeStartupPacket};
|
||||
use crate::sock_split::{BidiStream, ReadStream, WriteStream};
|
||||
use anyhow::{anyhow, bail, ensure, Result};
|
||||
use bytes::{Bytes, BytesMut};
|
||||
@@ -34,7 +32,7 @@ pub trait Handler {
|
||||
/// If Ok(false) is returned postgres_backend will skip auth -- that is needed for new users
|
||||
/// creation is the proxy code. That is quite hacky and ad-hoc solution, may be we could allow
|
||||
/// to override whole init logic in implementations.
|
||||
fn startup(&mut self, _pgb: &mut PostgresBackend, _sm: &FeStartupMessage) -> Result<()> {
|
||||
fn startup(&mut self, _pgb: &mut PostgresBackend, _sm: &FeStartupPacket) -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -237,7 +235,7 @@ impl PostgresBackend {
|
||||
|
||||
use ProtoState::*;
|
||||
match state {
|
||||
Initialization | Encrypted => FeStartupMessage::read(stream),
|
||||
Initialization | Encrypted => FeStartupPacket::read(stream),
|
||||
Authentication | Established => FeMessage::read(stream),
|
||||
}
|
||||
}
|
||||
@@ -329,7 +327,7 @@ impl PostgresBackend {
|
||||
ensure!(
|
||||
matches!(
|
||||
msg,
|
||||
FeMessage::PasswordMessage(_) | FeMessage::StartupMessage(_)
|
||||
FeMessage::PasswordMessage(_) | FeMessage::StartupPacket(_)
|
||||
),
|
||||
"protocol violation"
|
||||
);
|
||||
@@ -337,11 +335,11 @@ impl PostgresBackend {
|
||||
|
||||
let have_tls = self.tls_config.is_some();
|
||||
match msg {
|
||||
FeMessage::StartupMessage(m) => {
|
||||
FeMessage::StartupPacket(m) => {
|
||||
trace!("got startup message {:?}", m);
|
||||
|
||||
match m.kind {
|
||||
StartupRequestCode::NegotiateSsl => {
|
||||
match m {
|
||||
FeStartupPacket::SslRequest => {
|
||||
info!("SSL requested");
|
||||
|
||||
self.write_message(&BeMessage::EncryptionResponse(have_tls))?;
|
||||
@@ -350,11 +348,11 @@ impl PostgresBackend {
|
||||
self.state = ProtoState::Encrypted;
|
||||
}
|
||||
}
|
||||
StartupRequestCode::NegotiateGss => {
|
||||
FeStartupPacket::GssEncRequest => {
|
||||
info!("GSS requested");
|
||||
self.write_message(&BeMessage::EncryptionResponse(false))?;
|
||||
}
|
||||
StartupRequestCode::Normal => {
|
||||
FeStartupPacket::StartupMessage { .. } => {
|
||||
if have_tls && !matches!(self.state, ProtoState::Encrypted) {
|
||||
self.write_message(&BeMessage::ErrorResponse(
|
||||
"must connect with TLS".to_string(),
|
||||
@@ -387,7 +385,7 @@ impl PostgresBackend {
|
||||
}
|
||||
}
|
||||
}
|
||||
StartupRequestCode::Cancel => {
|
||||
FeStartupPacket::CancelRequest { .. } => {
|
||||
return Ok(ProcessMsgResult::Break);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user